2023-02-14 16:33:57 +00:00
|
|
|
definitions = '''
|
|
|
|
struct Foo10 {
|
|
|
|
int arr[10];
|
|
|
|
};
|
2023-03-16 13:36:30 +00:00
|
|
|
|
|
|
|
#pragma clang diagnostic push
|
|
|
|
#pragma clang diagnostic ignored "-Wzero-length-array"
|
2023-02-14 16:33:57 +00:00
|
|
|
struct Foo0 {
|
|
|
|
int arr[0];
|
|
|
|
};
|
2023-03-16 13:36:30 +00:00
|
|
|
|
|
|
|
using ZeroLengthIntArray = int[0];
|
|
|
|
#pragma clang diagnostic pop
|
|
|
|
|
2023-02-14 16:33:57 +00:00
|
|
|
struct MultiDim {
|
|
|
|
int arr[2][3];
|
|
|
|
};
|
|
|
|
'''
|
|
|
|
[cases]
|
|
|
|
[cases.member_int10]
|
|
|
|
param_types = ["const Foo10&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"staticSize":40,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":40,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"length":10,
|
|
|
|
"capacity":10,
|
|
|
|
"elementStaticSize":4
|
|
|
|
}]}]'''
|
|
|
|
[cases.member_int0]
|
|
|
|
# WARNING: zero-length arrays are handled differently to non-empty arrays.
|
|
|
|
# They end up not being treated as containers. This should probably change
|
|
|
|
# in the future.
|
|
|
|
param_types = ["const Foo0&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"staticSize":0,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":0,
|
|
|
|
"dynamicSize":0
|
|
|
|
}]}]'''
|
2023-05-31 16:40:21 +01:00
|
|
|
[cases.multidim_legacy] # Test for legacy behaviour. Remove with OICodeGen
|
2023-06-26 11:07:44 +01:00
|
|
|
cli_options = ["-Ftype-graph", "-Ftyped-data-segment", "-Ftree-builder-type-checking"]
|
2023-02-14 16:33:57 +00:00
|
|
|
param_types = ["const MultiDim&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"staticSize":24,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":24,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"length":6,
|
|
|
|
"capacity":6,
|
|
|
|
"elementStaticSize":4
|
|
|
|
}]}]'''
|
2023-05-31 16:40:21 +01:00
|
|
|
[cases.multidim]
|
|
|
|
cli_options = ["-ftype-graph"]
|
|
|
|
param_types = ["const MultiDim&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[
|
|
|
|
{"staticSize":24, "dynamicSize":0, "exclusiveSize":0, "members":[
|
|
|
|
{"staticSize":24, "dynamicSize":0, "exclusiveSize":0, "length":2, "capacity":2, "elementStaticSize":12, "members":[
|
|
|
|
{"staticSize":12, "dynamicSize":0, "exclusiveSize":12, "length":3, "capacity":3, "elementStaticSize":4},
|
|
|
|
{"staticSize":12, "dynamicSize":0, "exclusiveSize":12, "length":3, "capacity":3, "elementStaticSize":4}]
|
|
|
|
}]}]'''
|
2023-02-14 16:33:57 +00:00
|
|
|
[cases.direct_int10]
|
|
|
|
skip = "Direct array arguments don't work"
|
|
|
|
param_types = ["int[10]"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":40, "dynamicSize":0, "length":10, "capacity":10, "elementStaticSize":4}]'
|
|
|
|
[cases.direct_int0]
|
|
|
|
skip = "Direct array arguments don't work"
|
|
|
|
# WARNING: zero-length arrays are handled differently to non-empty arrays.
|
|
|
|
# They end up not being treated as containers. This should probably change
|
|
|
|
# in the future.
|
2023-03-16 13:36:30 +00:00
|
|
|
param_types = ["ZeroLengthIntArray"]
|
2023-02-14 16:33:57 +00:00
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":0, "dynamicSize":0}]'
|
|
|
|
[cases.ref_int10]
|
|
|
|
skip = "CodeGen bug with array reference arguments"
|
|
|
|
param_types = ["const int(&)[10]"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":40, "dynamicSize":0, "length":10, "capacity":10, "elementStaticSize":4}]'
|
|
|
|
[cases.ref_int0]
|
|
|
|
skip = "CodeGen bug with array reference arguments"
|
|
|
|
# WARNING: zero-length arrays are handled differently to non-empty arrays.
|
|
|
|
# They end up not being treated as containers. This should probably change
|
|
|
|
# in the future.
|
2023-03-16 13:36:30 +00:00
|
|
|
param_types = ["const ZeroLengthIntArray&"]
|
2023-02-14 16:33:57 +00:00
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":0, "dynamicSize":0}]'
|