diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected index d55ebb1ef21..8a77a94f011 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected @@ -121,6 +121,45 @@ ssa.c: # 17| v17_6(void) = AliasedUse : m17_3 # 17| v17_7(void) = ExitFunction : +# 28| void test_foo_array_and_int() +# 28| Block 0 +# 28| v28_1(void) = EnterFunction : +# 28| m28_2(unknown) = AliasedDefinition : +# 28| m28_3(unknown) = InitializeNonLocal : +# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 +# 29| r29_1(glval) = VariableAddress[f] : +# 29| m29_2(Foo_array_and_int) = Uninitialized[f] : &:r29_1 +# 29| r29_3(glval) = FieldAddress[x] : r29_1 +# 29| r29_4(int) = Constant[0] : +# 29| r29_5(glval) = PointerAdd[4] : r29_3, r29_4 +# 29| r29_6(int) = Constant[0] : +# 29| m29_7(int) = Store[?] : &:r29_5, r29_6 +# 29| m29_8(Foo_array_and_int) = Chi : total:m29_2, partial:m29_7 +# 29| r29_9(int) = Constant[1] : +# 29| r29_10(glval) = PointerAdd[4] : r29_3, r29_9 +# 29| r29_11(int) = Constant[1] : +# 29| m29_12(int) = Store[?] : &:r29_10, r29_11 +# 29| m29_13(Foo_array_and_int) = Chi : total:m29_8, partial:m29_12 +# 29| r29_14(glval) = FieldAddress[x] : r29_1 +# 29| r29_15(int) = Constant[0] : +# 29| r29_16(glval) = PointerAdd[4] : r29_14, r29_15 +# 29| r29_17(int) = Constant[42] : +# 29| m29_18(int) = Store[?] : &:r29_16, r29_17 +# 29| m29_19(Foo_array_and_int) = Chi : total:m29_13, partial:m29_18 +# 29| r29_20(int) = Constant[1] : +# 29| r29_21(glval) = PointerAdd[4] : r29_14, r29_20 +# 29| r29_22(int) = Constant[0] : +# 29| m29_23(int) = Store[?] : &:r29_21, r29_22 +# 29| m29_24(Foo_array_and_int) = Chi : total:m29_19, partial:m29_23 +# 29| r29_25(glval) = FieldAddress[y] : r29_1 +# 29| r29_26(int) = Constant[42] : +# 29| m29_27(int) = Store[?] : &:r29_25, r29_26 +# 29| m29_28(Foo_array_and_int) = Chi : total:m29_24, partial:m29_27 +# 30| v30_1(void) = NoOp : +# 28| v28_5(void) = ReturnVoid : +# 28| v28_6(void) = AliasedUse : m28_3 +# 28| v28_7(void) = ExitFunction : + ssa.cpp: # 13| int ChiPhiNode(Point*, bool, bool) # 13| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected index 6022cdcf1e6..fb9cb8737b9 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected @@ -121,6 +121,45 @@ ssa.c: # 17| v17_6(void) = AliasedUse : m17_3 # 17| v17_7(void) = ExitFunction : +# 28| void test_foo_array_and_int() +# 28| Block 0 +# 28| v28_1(void) = EnterFunction : +# 28| m28_2(unknown) = AliasedDefinition : +# 28| m28_3(unknown) = InitializeNonLocal : +# 28| m28_4(unknown) = Chi : total:m28_2, partial:m28_3 +# 29| r29_1(glval) = VariableAddress[f] : +# 29| m29_2(Foo_array_and_int) = Uninitialized[f] : &:r29_1 +# 29| r29_3(glval) = FieldAddress[x] : r29_1 +# 29| r29_4(int) = Constant[0] : +# 29| r29_5(glval) = PointerAdd[4] : r29_3, r29_4 +# 29| r29_6(int) = Constant[0] : +# 29| m29_7(int) = Store[?] : &:r29_5, r29_6 +# 29| m29_8(Foo_array_and_int) = Chi : total:m29_2, partial:m29_7 +# 29| r29_9(int) = Constant[1] : +# 29| r29_10(glval) = PointerAdd[4] : r29_3, r29_9 +# 29| r29_11(int) = Constant[1] : +# 29| m29_12(int) = Store[?] : &:r29_10, r29_11 +# 29| m29_13(Foo_array_and_int) = Chi : total:m29_8, partial:m29_12 +# 29| r29_14(glval) = FieldAddress[x] : r29_1 +# 29| r29_15(int) = Constant[0] : +# 29| r29_16(glval) = PointerAdd[4] : r29_14, r29_15 +# 29| r29_17(int) = Constant[42] : +# 29| m29_18(int) = Store[?] : &:r29_16, r29_17 +# 29| m29_19(Foo_array_and_int) = Chi : total:m29_13, partial:m29_18 +# 29| r29_20(int) = Constant[1] : +# 29| r29_21(glval) = PointerAdd[4] : r29_14, r29_20 +# 29| r29_22(int) = Constant[0] : +# 29| m29_23(int) = Store[?] : &:r29_21, r29_22 +# 29| m29_24(Foo_array_and_int) = Chi : total:m29_19, partial:m29_23 +# 29| r29_25(glval) = FieldAddress[y] : r29_1 +# 29| r29_26(int) = Constant[42] : +# 29| m29_27(int) = Store[?] : &:r29_25, r29_26 +# 29| m29_28(Foo_array_and_int) = Chi : total:m29_24, partial:m29_27 +# 30| v30_1(void) = NoOp : +# 28| v28_5(void) = ReturnVoid : +# 28| v28_6(void) = AliasedUse : m28_3 +# 28| v28_7(void) = ExitFunction : + ssa.cpp: # 13| int ChiPhiNode(Point*, bool, bool) # 13| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ssa/ssa.c b/cpp/ql/test/library-tests/ir/ssa/ssa.c index 3478a009ca0..991c6f38625 100644 --- a/cpp/ql/test/library-tests/ir/ssa/ssa.c +++ b/cpp/ql/test/library-tests/ir/ssa/ssa.c @@ -18,4 +18,13 @@ void non_repeated_designators() { int x[2] = {[0] = 1234, [1] = 5678}; int y[2] = {[1] = 1234, [0] = 5678}; +} + +struct Foo_array_and_int { + int x[2]; + int y; +}; + +void test_foo_array_and_int() { + struct Foo_array_and_int f = { .x = {0, 1}, .x[0] = 42, .y = 42 }; } \ No newline at end of file diff --git a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected index 4416f23e1d2..7efa7691d4d 100644 --- a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected @@ -105,6 +105,39 @@ ssa.c: # 17| v17_5(void) = AliasedUse : ~m? # 17| v17_6(void) = ExitFunction : +# 28| void test_foo_array_and_int() +# 28| Block 0 +# 28| v28_1(void) = EnterFunction : +# 28| mu28_2(unknown) = AliasedDefinition : +# 28| mu28_3(unknown) = InitializeNonLocal : +# 29| r29_1(glval) = VariableAddress[f] : +# 29| mu29_2(Foo_array_and_int) = Uninitialized[f] : &:r29_1 +# 29| r29_3(glval) = FieldAddress[x] : r29_1 +# 29| r29_4(int) = Constant[0] : +# 29| r29_5(glval) = PointerAdd[4] : r29_3, r29_4 +# 29| r29_6(int) = Constant[0] : +# 29| mu29_7(int) = Store[?] : &:r29_5, r29_6 +# 29| r29_8(int) = Constant[1] : +# 29| r29_9(glval) = PointerAdd[4] : r29_3, r29_8 +# 29| r29_10(int) = Constant[1] : +# 29| mu29_11(int) = Store[?] : &:r29_9, r29_10 +# 29| r29_12(glval) = FieldAddress[x] : r29_1 +# 29| r29_13(int) = Constant[0] : +# 29| r29_14(glval) = PointerAdd[4] : r29_12, r29_13 +# 29| r29_15(int) = Constant[42] : +# 29| mu29_16(int) = Store[?] : &:r29_14, r29_15 +# 29| r29_17(int) = Constant[1] : +# 29| r29_18(glval) = PointerAdd[4] : r29_12, r29_17 +# 29| r29_19(int) = Constant[0] : +# 29| mu29_20(int) = Store[?] : &:r29_18, r29_19 +# 29| r29_21(glval) = FieldAddress[y] : r29_1 +# 29| r29_22(int) = Constant[42] : +# 29| mu29_23(int) = Store[?] : &:r29_21, r29_22 +# 30| v30_1(void) = NoOp : +# 28| v28_4(void) = ReturnVoid : +# 28| v28_5(void) = AliasedUse : ~m? +# 28| v28_6(void) = ExitFunction : + ssa.cpp: # 13| int ChiPhiNode(Point*, bool, bool) # 13| Block 0 diff --git a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected index 4416f23e1d2..7efa7691d4d 100644 --- a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected @@ -105,6 +105,39 @@ ssa.c: # 17| v17_5(void) = AliasedUse : ~m? # 17| v17_6(void) = ExitFunction : +# 28| void test_foo_array_and_int() +# 28| Block 0 +# 28| v28_1(void) = EnterFunction : +# 28| mu28_2(unknown) = AliasedDefinition : +# 28| mu28_3(unknown) = InitializeNonLocal : +# 29| r29_1(glval) = VariableAddress[f] : +# 29| mu29_2(Foo_array_and_int) = Uninitialized[f] : &:r29_1 +# 29| r29_3(glval) = FieldAddress[x] : r29_1 +# 29| r29_4(int) = Constant[0] : +# 29| r29_5(glval) = PointerAdd[4] : r29_3, r29_4 +# 29| r29_6(int) = Constant[0] : +# 29| mu29_7(int) = Store[?] : &:r29_5, r29_6 +# 29| r29_8(int) = Constant[1] : +# 29| r29_9(glval) = PointerAdd[4] : r29_3, r29_8 +# 29| r29_10(int) = Constant[1] : +# 29| mu29_11(int) = Store[?] : &:r29_9, r29_10 +# 29| r29_12(glval) = FieldAddress[x] : r29_1 +# 29| r29_13(int) = Constant[0] : +# 29| r29_14(glval) = PointerAdd[4] : r29_12, r29_13 +# 29| r29_15(int) = Constant[42] : +# 29| mu29_16(int) = Store[?] : &:r29_14, r29_15 +# 29| r29_17(int) = Constant[1] : +# 29| r29_18(glval) = PointerAdd[4] : r29_12, r29_17 +# 29| r29_19(int) = Constant[0] : +# 29| mu29_20(int) = Store[?] : &:r29_18, r29_19 +# 29| r29_21(glval) = FieldAddress[y] : r29_1 +# 29| r29_22(int) = Constant[42] : +# 29| mu29_23(int) = Store[?] : &:r29_21, r29_22 +# 30| v30_1(void) = NoOp : +# 28| v28_4(void) = ReturnVoid : +# 28| v28_5(void) = AliasedUse : ~m? +# 28| v28_6(void) = ExitFunction : + ssa.cpp: # 13| int ChiPhiNode(Point*, bool, bool) # 13| Block 0