Skip to content

Commit 51c4ef4

Browse files
author
Robert Marsh
committed
C++: add SSA IR test for array initializers
1 parent e9336fe commit 51c4ef4

File tree

3 files changed

+146
-0
lines changed

3 files changed

+146
-0
lines changed

cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -869,3 +869,74 @@ ssa.cpp:
869869
# 207| v0_25(void) = UnmodeledUse : mu*
870870
# 207| v0_26(void) = AliasedUse : ~m0_1
871871
# 207| v0_27(void) = ExitFunction :
872+
873+
# 213| void InitArray()
874+
# 213| Block 0
875+
# 213| v0_0(void) = EnterFunction :
876+
# 213| m0_1(unknown) = AliasedDefinition :
877+
# 213| mu0_2(unknown) = UnmodeledDefinition :
878+
# 214| r0_3(glval<char[32]>) = VariableAddress[a_pad] :
879+
# 214| r0_4(glval<char[1]>) = StringConstant[""] :
880+
# 214| r0_5(char[1]) = Load : &:r0_4, ~m0_1
881+
# 214| m0_6(char[1]) = Store : &:r0_3, r0_5
882+
# 214| r0_7(unknown[31]) = Constant[0] :
883+
# 214| r0_8(int) = Constant[1] :
884+
# 214| r0_9(glval<char>) = PointerAdd[1] : r0_3, r0_8
885+
# 214| m0_10(unknown[31]) = Store : &:r0_9, r0_7
886+
# 215| r0_11(glval<char[4]>) = VariableAddress[a_nopad] :
887+
# 215| r0_12(glval<char[4]>) = StringConstant["foo"] :
888+
# 215| r0_13(char[4]) = Load : &:r0_12, ~m0_1
889+
# 215| m0_14(char[4]) = Store : &:r0_11, r0_13
890+
# 216| r0_15(glval<char[5]>) = VariableAddress[a_infer] :
891+
# 216| r0_16(glval<char[5]>) = StringConstant["blah"] :
892+
# 216| r0_17(char[5]) = Load : &:r0_16, ~m0_1
893+
# 216| m0_18(char[5]) = Store : &:r0_15, r0_17
894+
# 217| r0_19(glval<char[2]>) = VariableAddress[b] :
895+
# 217| m0_20(char[2]) = Uninitialized[b] : &:r0_19
896+
# 218| r0_21(glval<char[2]>) = VariableAddress[c] :
897+
# 218| m0_22(char[2]) = Uninitialized[c] : &:r0_21
898+
# 218| r0_23(int) = Constant[0] :
899+
# 218| r0_24(glval<char>) = PointerAdd[1] : r0_21, r0_23
900+
# 218| r0_25(unknown[2]) = Constant[0] :
901+
# 218| m0_26(unknown[2]) = Store : &:r0_24, r0_25
902+
# 219| r0_27(glval<char[2]>) = VariableAddress[d] :
903+
# 219| m0_28(char[2]) = Uninitialized[d] : &:r0_27
904+
# 219| r0_29(int) = Constant[0] :
905+
# 219| r0_30(glval<char>) = PointerAdd[1] : r0_27, r0_29
906+
# 219| r0_31(char) = Constant[0] :
907+
# 219| m0_32(char) = Store : &:r0_30, r0_31
908+
# 219| m0_33(char[2]) = Chi : total:m0_28, partial:m0_32
909+
# 219| r0_34(int) = Constant[1] :
910+
# 219| r0_35(glval<char>) = PointerAdd[1] : r0_27, r0_34
911+
# 219| r0_36(char) = Constant[0] :
912+
# 219| m0_37(char) = Store : &:r0_35, r0_36
913+
# 219| m0_38(char[2]) = Chi : total:m0_33, partial:m0_37
914+
# 220| r0_39(glval<char[2]>) = VariableAddress[e] :
915+
# 220| m0_40(char[2]) = Uninitialized[e] : &:r0_39
916+
# 220| r0_41(int) = Constant[0] :
917+
# 220| r0_42(glval<char>) = PointerAdd[1] : r0_39, r0_41
918+
# 220| r0_43(char) = Constant[0] :
919+
# 220| m0_44(char) = Store : &:r0_42, r0_43
920+
# 220| m0_45(char[2]) = Chi : total:m0_40, partial:m0_44
921+
# 220| r0_46(int) = Constant[1] :
922+
# 220| r0_47(glval<char>) = PointerAdd[1] : r0_39, r0_46
923+
# 220| r0_48(char) = Constant[1] :
924+
# 220| m0_49(char) = Store : &:r0_47, r0_48
925+
# 220| m0_50(char[2]) = Chi : total:m0_45, partial:m0_49
926+
# 221| r0_51(glval<char[3]>) = VariableAddress[f] :
927+
# 221| m0_52(char[3]) = Uninitialized[f] : &:r0_51
928+
# 221| r0_53(int) = Constant[0] :
929+
# 221| r0_54(glval<char>) = PointerAdd[1] : r0_51, r0_53
930+
# 221| r0_55(char) = Constant[0] :
931+
# 221| m0_56(char) = Store : &:r0_54, r0_55
932+
# 221| m0_57(char[3]) = Chi : total:m0_52, partial:m0_56
933+
# 221| r0_58(int) = Constant[1] :
934+
# 221| r0_59(glval<char>) = PointerAdd[1] : r0_51, r0_58
935+
# 221| r0_60(unknown[2]) = Constant[0] :
936+
# 221| m0_61(unknown[2]) = Store : &:r0_59, r0_60
937+
# 221| m0_62(char[3]) = Chi : total:m0_57, partial:m0_61
938+
# 222| v0_63(void) = NoOp :
939+
# 213| v0_64(void) = ReturnVoid :
940+
# 213| v0_65(void) = UnmodeledUse : mu*
941+
# 213| v0_66(void) = AliasedUse : ~m0_1
942+
# 213| v0_67(void) = ExitFunction :

cpp/ql/test/library-tests/ir/ssa/ssa.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,13 @@ int ModeledCallTarget(int x) {
210210
return y;
211211
}
212212

213+
void InitArray() {
214+
char a_pad[32] = "";
215+
char a_nopad[4] = "foo";
216+
char a_infer[] = "blah";
217+
char b[2];
218+
char c[2] = {};
219+
char d[2] = { 0 };
220+
char e[2] = { 0, 1 };
221+
char f[3] = { 0 };
222+
}

cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,3 +833,68 @@ ssa.cpp:
833833
# 207| v0_22(void) = UnmodeledUse : mu*
834834
# 207| v0_23(void) = AliasedUse : ~mu0_2
835835
# 207| v0_24(void) = ExitFunction :
836+
837+
# 213| void InitArray()
838+
# 213| Block 0
839+
# 213| v0_0(void) = EnterFunction :
840+
# 213| mu0_1(unknown) = AliasedDefinition :
841+
# 213| mu0_2(unknown) = UnmodeledDefinition :
842+
# 214| r0_3(glval<char[32]>) = VariableAddress[a_pad] :
843+
# 214| r0_4(glval<char[1]>) = StringConstant[""] :
844+
# 214| r0_5(char[1]) = Load : &:r0_4, ~mu0_2
845+
# 214| mu0_6(char[1]) = Store : &:r0_3, r0_5
846+
# 214| r0_7(unknown[31]) = Constant[0] :
847+
# 214| r0_8(int) = Constant[1] :
848+
# 214| r0_9(glval<char>) = PointerAdd[1] : r0_3, r0_8
849+
# 214| mu0_10(unknown[31]) = Store : &:r0_9, r0_7
850+
# 215| r0_11(glval<char[4]>) = VariableAddress[a_nopad] :
851+
# 215| r0_12(glval<char[4]>) = StringConstant["foo"] :
852+
# 215| r0_13(char[4]) = Load : &:r0_12, ~mu0_2
853+
# 215| m0_14(char[4]) = Store : &:r0_11, r0_13
854+
# 216| r0_15(glval<char[5]>) = VariableAddress[a_infer] :
855+
# 216| r0_16(glval<char[5]>) = StringConstant["blah"] :
856+
# 216| r0_17(char[5]) = Load : &:r0_16, ~mu0_2
857+
# 216| m0_18(char[5]) = Store : &:r0_15, r0_17
858+
# 217| r0_19(glval<char[2]>) = VariableAddress[b] :
859+
# 217| m0_20(char[2]) = Uninitialized[b] : &:r0_19
860+
# 218| r0_21(glval<char[2]>) = VariableAddress[c] :
861+
# 218| mu0_22(char[2]) = Uninitialized[c] : &:r0_21
862+
# 218| r0_23(int) = Constant[0] :
863+
# 218| r0_24(glval<char>) = PointerAdd[1] : r0_21, r0_23
864+
# 218| r0_25(unknown[2]) = Constant[0] :
865+
# 218| mu0_26(unknown[2]) = Store : &:r0_24, r0_25
866+
# 219| r0_27(glval<char[2]>) = VariableAddress[d] :
867+
# 219| mu0_28(char[2]) = Uninitialized[d] : &:r0_27
868+
# 219| r0_29(int) = Constant[0] :
869+
# 219| r0_30(glval<char>) = PointerAdd[1] : r0_27, r0_29
870+
# 219| r0_31(char) = Constant[0] :
871+
# 219| mu0_32(char) = Store : &:r0_30, r0_31
872+
# 219| r0_33(int) = Constant[1] :
873+
# 219| r0_34(glval<char>) = PointerAdd[1] : r0_27, r0_33
874+
# 219| r0_35(char) = Constant[0] :
875+
# 219| mu0_36(char) = Store : &:r0_34, r0_35
876+
# 220| r0_37(glval<char[2]>) = VariableAddress[e] :
877+
# 220| mu0_38(char[2]) = Uninitialized[e] : &:r0_37
878+
# 220| r0_39(int) = Constant[0] :
879+
# 220| r0_40(glval<char>) = PointerAdd[1] : r0_37, r0_39
880+
# 220| r0_41(char) = Constant[0] :
881+
# 220| mu0_42(char) = Store : &:r0_40, r0_41
882+
# 220| r0_43(int) = Constant[1] :
883+
# 220| r0_44(glval<char>) = PointerAdd[1] : r0_37, r0_43
884+
# 220| r0_45(char) = Constant[1] :
885+
# 220| mu0_46(char) = Store : &:r0_44, r0_45
886+
# 221| r0_47(glval<char[3]>) = VariableAddress[f] :
887+
# 221| mu0_48(char[3]) = Uninitialized[f] : &:r0_47
888+
# 221| r0_49(int) = Constant[0] :
889+
# 221| r0_50(glval<char>) = PointerAdd[1] : r0_47, r0_49
890+
# 221| r0_51(char) = Constant[0] :
891+
# 221| mu0_52(char) = Store : &:r0_50, r0_51
892+
# 221| r0_53(int) = Constant[1] :
893+
# 221| r0_54(glval<char>) = PointerAdd[1] : r0_47, r0_53
894+
# 221| r0_55(unknown[2]) = Constant[0] :
895+
# 221| mu0_56(unknown[2]) = Store : &:r0_54, r0_55
896+
# 222| v0_57(void) = NoOp :
897+
# 213| v0_58(void) = ReturnVoid :
898+
# 213| v0_59(void) = UnmodeledUse : mu*
899+
# 213| v0_60(void) = AliasedUse : ~mu0_2
900+
# 213| v0_61(void) = ExitFunction :

0 commit comments

Comments
 (0)