object-introspection/test/integration/pointers.toml

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

276 lines
9.0 KiB
TOML
Raw Normal View History

2022-12-19 14:37:51 +00:00
includes = ["vector"]
definitions = '''
struct PrimitivePtrs {
int a;
int *b;
void *c; // No dynamic size, we can't know what it points to!
};
struct VectorPtr {
std::vector<int> *vec;
};
'''
[cases]
[cases.int]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["int*"]
setup = "return new int(1);"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"typeName": "int *",
"staticSize": 8,
"dynamicSize": 4,
"NOT": {"pointer": 0},
"members": [
{
"typeName": "int",
"staticSize": 4,
"dynamicSize": 0
}
]
}]'''
[cases.int_no_follow]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["int*"]
setup = "return new int(1);"
expect_json = '''[{
"typeName": "int *",
"staticSize": 8,
"dynamicSize": 0,
"NOT": {"pointer": 0},
"NOT": "members"
}]'''
[cases.int_null]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["int*"]
setup = "return nullptr;"
expect_json = '''[{
"typeName": "int *",
"staticSize": 8,
"dynamicSize": 0,
"pointer": 0,
"NOT": "members"
}]'''
[cases.void]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["void*"]
setup = "return new int(1);"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"typeName": "void *",
"staticSize": 8,
"dynamicSize": 0,
"NOT": {"pointer": 0},
"NOT": "members"
}]'''
[cases.void_no_follow]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["void*"]
setup = "return new int(1);"
expect_json = '''[{
"typeName": "void *",
"staticSize": 8,
"dynamicSize": 0,
"NOT": {"pointer": 0},
"NOT": "members"
}]'''
[cases.void_null]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["void*"]
setup = "return nullptr;"
expect_json = '''[{
"typeName": "void *",
"staticSize": 8,
"dynamicSize": 0,
"pointer": 0,
"NOT": "members"
}]'''
[cases.vector]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["std::vector<int>*"]
setup = "return new std::vector<int>{1,2,3};"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"typeName": "std::vector<int> *",
"staticSize": 8,
"dynamicSize": 36,
"NOT": {"pointer": 0},
"members": [
{
"typeName": "std::vector<int>",
"staticSize": 24,
"dynamicSize": 12
}
]
}]'''
[cases.vector_no_follow]
2023-08-16 20:40:36 +01:00
skip = "top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["std::vector<int>*"]
setup = "return new std::vector<int>{1,2,3};"
expect_json = '''[{
"typeName": "std::vector<int> *",
"staticSize": 8,
"dynamicSize": 0,
"NOT": {"pointer": 0},
"NOT": "members"
}]'''
[cases.vector_null]
2023-08-16 20:40:36 +01:00
skip = "BAD DATA SEGMENT!!! top-level pointers are skipped over" # https://github.com/facebookexperimental/object-introspection/issues/19
2022-12-19 14:37:51 +00:00
param_types = ["std::vector<int>*"]
setup = "return nullptr;"
expect_json = '''[{
"typeName": "std::vector<int> *",
"staticSize": 8,
"dynamicSize": 0,
"pointer": 0,
"NOT": "members"
}]'''
[cases.struct_primitive_ptrs]
oil_disable = "oil can't chase raw pointers safely"
2022-12-19 14:37:51 +00:00
param_types = ["const PrimitivePtrs&"]
setup = "return PrimitivePtrs{0, new int(0), new int(0)};"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"staticSize":24,
"dynamicSize":4,
2023-03-03 20:09:51 +00:00
"exclusiveSize":4,
2022-12-19 14:37:51 +00:00
"members":[
2023-03-03 20:09:51 +00:00
{"name":"a", "staticSize":4, "exclusiveSize":4, "dynamicSize":0},
{"name":"b", "staticSize":8, "exclusiveSize":8, "dynamicSize":4},
{"name":"c", "staticSize":8, "exclusiveSize":8, "dynamicSize":0}
2022-12-19 14:37:51 +00:00
]}]'''
[cases.struct_primitive_ptrs_no_follow]
param_types = ["const PrimitivePtrs&"]
setup = "return PrimitivePtrs{0, new int(0), new int(0)};"
expect_json = '''[{
"staticSize":24,
"dynamicSize":0,
"exclusiveSize":4,
"size":24,
2022-12-19 14:37:51 +00:00
"members":[
{"name":"a", "staticSize":4, "dynamicSize":0, "exclusiveSize":4, "size":4},
{"name":"b", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8},
{"name":"c", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8}
2022-12-19 14:37:51 +00:00
]}]'''
[cases.struct_primitive_ptrs_null]
param_types = ["const PrimitivePtrs&"]
setup = "return PrimitivePtrs{0, nullptr, nullptr};"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"staticSize":24,
"dynamicSize":0,
"exclusiveSize":4,
"size":24,
2022-12-19 14:37:51 +00:00
"members":[
{"name":"a", "staticSize":4, "dynamicSize":0, "exclusiveSize":4, "size":4},
{"name":"b", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8},
{"name":"c", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8}
2022-12-19 14:37:51 +00:00
]}]'''
[cases.struct_vector_ptr]
oil_disable = "oil can't chase raw pointers safely"
2022-12-19 14:37:51 +00:00
param_types = ["const VectorPtr&"]
setup = "return VectorPtr{new std::vector<int>{1,2,3}};"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"staticSize":8,
"dynamicSize":36,
"members":[
{"name":"vec", "staticSize":8, "dynamicSize":36}
]}]'''
[cases.struct_vector_ptr_no_follow]
param_types = ["const VectorPtr&"]
setup = "return VectorPtr{new std::vector<int>{1,2,3}};"
expect_json = '''[{
"staticSize":8,
"dynamicSize":0,
"exclusiveSize":0,
"size":8,
2022-12-19 14:37:51 +00:00
"members":[
{"name":"vec", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8}
2022-12-19 14:37:51 +00:00
]}]'''
[cases.struct_vector_ptr_null]
param_types = ["const VectorPtr&"]
setup = "return VectorPtr{nullptr};"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"staticSize":8,
"dynamicSize":0,
"exclusiveSize":0,
"size":8,
2022-12-19 14:37:51 +00:00
"members":[
{"name":"vec", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8}
2022-12-19 14:37:51 +00:00
]}]'''
[cases.vector_of_pointers]
oil_disable = "oil can't chase raw pointers safely"
2022-12-19 14:37:51 +00:00
param_types = ["const std::vector<int*>&"]
setup = "return {{new int(1), nullptr, new int(3)}};"
2023-06-22 13:24:39 +01:00
cli_options = ["-fchase-raw-pointers"]
2022-12-19 14:37:51 +00:00
expect_json = '''[{
"staticSize":24,
"dynamicSize":32,
"length":3,
"capacity":3,
"elementStaticSize":8,
"members":[
{"staticSize":8, "dynamicSize":4, "NOT": {"pointer":0}},
{"staticSize":8, "dynamicSize":0, "pointer":0},
{"staticSize":8, "dynamicSize":4, "NOT": {"pointer":0}}
]}]'''
[cases.vector_of_pointers_no_follow]
2023-08-16 20:40:36 +01:00
skip = "pointer field is missing from results" # https://github.com/facebookexperimental/object-introspection/issues/21
2022-12-19 14:37:51 +00:00
param_types = ["const std::vector<int*>&"]
setup = "return {{new int(1), nullptr, new int(3)}};"
expect_json = '''[{
"staticSize":24,
"dynamicSize":24,
"length":3,
"capacity":3,
"elementStaticSize":8,
"members":[
{"staticSize":8, "dynamicSize":0, "NOT": {"pointer":0}},
{"staticSize":8, "dynamicSize":0, "pointer":0},
{"staticSize":8, "dynamicSize":0, "NOT": {"pointer":0}}
]}]'''
[cases.feature_flag_disabled]
param_types = ["const PrimitivePtrs&"]
setup = "return PrimitivePtrs{0, new int(0), new int(0)};"
cli_options = ["-fchase-raw-pointers", "-Fchase-raw-pointers"]
expect_json = '''[{
"staticSize":24,
"dynamicSize":0,
"exclusiveSize":4,
"size":24,
"members":[
{"name":"a", "staticSize":4, "dynamicSize":0, "exclusiveSize":4, "size":4},
{"name":"b", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8},
{"name":"c", "staticSize":8, "dynamicSize":0, "exclusiveSize":8, "size":8}
]}]'''
[cases.feature_config]
oil_disable = "oil can't chase raw pointers safely"
param_types = ["const std::vector<int*>&"]
setup = "return {{new int(1), nullptr, new int(3)}};"
config_prefix = 'features = ["chase-raw-pointers"]'
expect_json = '''[{
"staticSize":24,
"dynamicSize":32,
"length":3,
"capacity":3,
"elementStaticSize":8,
"members":[
{"staticSize":8, "dynamicSize":4, "NOT": {"pointer":0}},
{"staticSize":8, "dynamicSize":0, "pointer":0},
{"staticSize":8, "dynamicSize":4, "NOT": {"pointer":0}}
]}]'''