Skip to content

Commit a0823a2

Browse files
author
Robert Marsh
committed
C++: add argv chi chain example to ssa test
1 parent ba8ebe9 commit a0823a2

5 files changed

Lines changed: 194 additions & 0 deletions

File tree

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,3 +1282,52 @@ ssa.cpp:
12821282
# 268| v268_15(void) = UnmodeledUse : mu*
12831283
# 268| v268_16(void) = AliasedUse : ~m270_11
12841284
# 268| v268_17(void) = ExitFunction :
1285+
1286+
# 276| int main(int, char**)
1287+
# 276| Block 0
1288+
# 276| v276_1(void) = EnterFunction :
1289+
# 276| m276_2(unknown) = AliasedDefinition :
1290+
# 276| m276_3(unknown) = InitializeNonLocal :
1291+
# 276| m276_4(unknown) = Chi : total:m276_2, partial:m276_3
1292+
# 276| mu276_5(unknown) = UnmodeledDefinition :
1293+
# 276| r276_6(glval<int>) = VariableAddress[argc] :
1294+
# 276| m276_7(int) = InitializeParameter[argc] : &:r276_6
1295+
# 276| r276_8(glval<char **>) = VariableAddress[argv] :
1296+
# 276| m276_9(char **) = InitializeParameter[argv] : &:r276_8
1297+
# 276| r276_10(char **) = Load : &:r276_8, m276_9
1298+
# 276| m276_11(unknown) = InitializeIndirection[argv] : &:r276_10
1299+
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1300+
# 277| r277_2(glval<int>) = VariableAddress[argc] :
1301+
# 277| r277_3(int) = Load : &:r277_2, m276_7
1302+
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
1303+
# 277| r277_5(char **) = Load : &:r277_4, m276_9
1304+
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
1305+
# 277| m277_7(unknown) = ^CallSideEffect : ~m276_11
1306+
# 277| m277_8(unknown) = Chi : total:m276_11, partial:m277_7
1307+
# 277| v277_9(void) = ^BufferReadSideEffect[1] : &:r277_5, ~m277_8
1308+
# 277| m277_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
1309+
# 277| m277_11(unknown) = Chi : total:m277_8, partial:m277_10
1310+
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1311+
# 278| r278_2(glval<int>) = VariableAddress[argc] :
1312+
# 278| r278_3(int) = Load : &:r278_2, m276_7
1313+
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
1314+
# 278| r278_5(char **) = Load : &:r278_4, m276_9
1315+
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
1316+
# 278| m278_7(unknown) = ^CallSideEffect : ~m277_11
1317+
# 278| m278_8(unknown) = Chi : total:m277_11, partial:m278_7
1318+
# 278| v278_9(void) = ^BufferReadSideEffect[1] : &:r278_5, ~m278_8
1319+
# 278| m278_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
1320+
# 278| m278_11(unknown) = Chi : total:m278_8, partial:m278_10
1321+
# 279| r279_1(glval<int>) = VariableAddress[#return] :
1322+
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
1323+
# 279| r279_3(char **) = Load : &:r279_2, m276_9
1324+
# 279| r279_4(char *) = Load : &:r279_3, ~m278_11
1325+
# 279| r279_5(char) = Load : &:r279_4, ~m278_11
1326+
# 279| r279_6(int) = Convert : r279_5
1327+
# 279| m279_7(int) = Store : &:r279_1, r279_6
1328+
# 276| v276_12(void) = ReturnIndirection[argv] : &:r276_10, ~m278_11
1329+
# 276| r276_13(glval<int>) = VariableAddress[#return] :
1330+
# 276| v276_14(void) = ReturnValue : &:r276_13, m279_7
1331+
# 276| v276_15(void) = UnmodeledUse : mu*
1332+
# 276| v276_16(void) = AliasedUse : ~m278_11
1333+
# 276| v276_17(void) = ExitFunction :

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,3 +1277,52 @@ ssa.cpp:
12771277
# 268| v268_15(void) = UnmodeledUse : mu*
12781278
# 268| v268_16(void) = AliasedUse : ~m269_7
12791279
# 268| v268_17(void) = ExitFunction :
1280+
1281+
# 276| int main(int, char**)
1282+
# 276| Block 0
1283+
# 276| v276_1(void) = EnterFunction :
1284+
# 276| m276_2(unknown) = AliasedDefinition :
1285+
# 276| m276_3(unknown) = InitializeNonLocal :
1286+
# 276| m276_4(unknown) = Chi : total:m276_2, partial:m276_3
1287+
# 276| mu276_5(unknown) = UnmodeledDefinition :
1288+
# 276| r276_6(glval<int>) = VariableAddress[argc] :
1289+
# 276| m276_7(int) = InitializeParameter[argc] : &:r276_6
1290+
# 276| r276_8(glval<char **>) = VariableAddress[argv] :
1291+
# 276| m276_9(char **) = InitializeParameter[argv] : &:r276_8
1292+
# 276| r276_10(char **) = Load : &:r276_8, m276_9
1293+
# 276| m276_11(unknown) = InitializeIndirection[argv] : &:r276_10
1294+
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1295+
# 277| r277_2(glval<int>) = VariableAddress[argc] :
1296+
# 277| r277_3(int) = Load : &:r277_2, m276_7
1297+
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
1298+
# 277| r277_5(char **) = Load : &:r277_4, m276_9
1299+
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
1300+
# 277| m277_7(unknown) = ^CallSideEffect : ~m276_4
1301+
# 277| m277_8(unknown) = Chi : total:m276_4, partial:m277_7
1302+
# 277| v277_9(void) = ^BufferReadSideEffect[1] : &:r277_5, ~m276_11
1303+
# 277| m277_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
1304+
# 277| m277_11(char *) = Chi : total:m276_11, partial:m277_10
1305+
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1306+
# 278| r278_2(glval<int>) = VariableAddress[argc] :
1307+
# 278| r278_3(int) = Load : &:r278_2, m276_7
1308+
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
1309+
# 278| r278_5(char **) = Load : &:r278_4, m276_9
1310+
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
1311+
# 278| m278_7(unknown) = ^CallSideEffect : ~m277_8
1312+
# 278| m278_8(unknown) = Chi : total:m277_8, partial:m278_7
1313+
# 278| v278_9(void) = ^BufferReadSideEffect[1] : &:r278_5, ~m277_11
1314+
# 278| m278_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
1315+
# 278| m278_11(char *) = Chi : total:m277_11, partial:m278_10
1316+
# 279| r279_1(glval<int>) = VariableAddress[#return] :
1317+
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
1318+
# 279| r279_3(char **) = Load : &:r279_2, m276_9
1319+
# 279| r279_4(char *) = Load : &:r279_3, ~m278_11
1320+
# 279| r279_5(char) = Load : &:r279_4, ~m278_8
1321+
# 279| r279_6(int) = Convert : r279_5
1322+
# 279| m279_7(int) = Store : &:r279_1, r279_6
1323+
# 276| v276_12(void) = ReturnIndirection[argv] : &:r276_10, ~m278_11
1324+
# 276| r276_13(glval<int>) = VariableAddress[#return] :
1325+
# 276| v276_14(void) = ReturnValue : &:r276_13, m279_7
1326+
# 276| v276_15(void) = UnmodeledUse : mu*
1327+
# 276| v276_16(void) = AliasedUse : ~m278_8
1328+
# 276| v276_17(void) = ExitFunction :

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,4 +269,12 @@ void *MallocAliasing(void *s, int size) {
269269
void *buf = malloc(size);
270270
memcpy(buf, s, size);
271271
return buf;
272+
}
273+
274+
void unknownFunction(int argc, char **argv);
275+
276+
int main(int argc, char **argv) {
277+
unknownFunction(argc, argv);
278+
unknownFunction(argc, argv);
279+
return **argv; // Chi chain goes through side effects from unknownFunction
272280
}

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,3 +1188,47 @@ ssa.cpp:
11881188
# 268| v268_14(void) = UnmodeledUse : mu*
11891189
# 268| v268_15(void) = AliasedUse : ~mu268_4
11901190
# 268| v268_16(void) = ExitFunction :
1191+
1192+
# 276| int main(int, char**)
1193+
# 276| Block 0
1194+
# 276| v276_1(void) = EnterFunction :
1195+
# 276| mu276_2(unknown) = AliasedDefinition :
1196+
# 276| mu276_3(unknown) = InitializeNonLocal :
1197+
# 276| mu276_4(unknown) = UnmodeledDefinition :
1198+
# 276| r276_5(glval<int>) = VariableAddress[argc] :
1199+
# 276| m276_6(int) = InitializeParameter[argc] : &:r276_5
1200+
# 276| r276_7(glval<char **>) = VariableAddress[argv] :
1201+
# 276| m276_8(char **) = InitializeParameter[argv] : &:r276_7
1202+
# 276| r276_9(char **) = Load : &:r276_7, m276_8
1203+
# 276| mu276_10(unknown) = InitializeIndirection[argv] : &:r276_9
1204+
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1205+
# 277| r277_2(glval<int>) = VariableAddress[argc] :
1206+
# 277| r277_3(int) = Load : &:r277_2, m276_6
1207+
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
1208+
# 277| r277_5(char **) = Load : &:r277_4, m276_8
1209+
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
1210+
# 277| mu277_7(unknown) = ^CallSideEffect : ~mu276_4
1211+
# 277| v277_8(void) = ^BufferReadSideEffect[1] : &:r277_5, ~mu276_4
1212+
# 277| mu277_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
1213+
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1214+
# 278| r278_2(glval<int>) = VariableAddress[argc] :
1215+
# 278| r278_3(int) = Load : &:r278_2, m276_6
1216+
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
1217+
# 278| r278_5(char **) = Load : &:r278_4, m276_8
1218+
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
1219+
# 278| mu278_7(unknown) = ^CallSideEffect : ~mu276_4
1220+
# 278| v278_8(void) = ^BufferReadSideEffect[1] : &:r278_5, ~mu276_4
1221+
# 278| mu278_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
1222+
# 279| r279_1(glval<int>) = VariableAddress[#return] :
1223+
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
1224+
# 279| r279_3(char **) = Load : &:r279_2, m276_8
1225+
# 279| r279_4(char *) = Load : &:r279_3, ~mu276_4
1226+
# 279| r279_5(char) = Load : &:r279_4, ~mu276_4
1227+
# 279| r279_6(int) = Convert : r279_5
1228+
# 279| m279_7(int) = Store : &:r279_1, r279_6
1229+
# 276| v276_11(void) = ReturnIndirection[argv] : &:r276_9, ~mu276_4
1230+
# 276| r276_12(glval<int>) = VariableAddress[#return] :
1231+
# 276| v276_13(void) = ReturnValue : &:r276_12, m279_7
1232+
# 276| v276_14(void) = UnmodeledUse : mu*
1233+
# 276| v276_15(void) = AliasedUse : ~mu276_4
1234+
# 276| v276_16(void) = ExitFunction :

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,3 +1188,47 @@ ssa.cpp:
11881188
# 268| v268_14(void) = UnmodeledUse : mu*
11891189
# 268| v268_15(void) = AliasedUse : ~mu268_4
11901190
# 268| v268_16(void) = ExitFunction :
1191+
1192+
# 276| int main(int, char**)
1193+
# 276| Block 0
1194+
# 276| v276_1(void) = EnterFunction :
1195+
# 276| mu276_2(unknown) = AliasedDefinition :
1196+
# 276| mu276_3(unknown) = InitializeNonLocal :
1197+
# 276| mu276_4(unknown) = UnmodeledDefinition :
1198+
# 276| r276_5(glval<int>) = VariableAddress[argc] :
1199+
# 276| m276_6(int) = InitializeParameter[argc] : &:r276_5
1200+
# 276| r276_7(glval<char **>) = VariableAddress[argv] :
1201+
# 276| m276_8(char **) = InitializeParameter[argv] : &:r276_7
1202+
# 276| r276_9(char **) = Load : &:r276_7, m276_8
1203+
# 276| mu276_10(unknown) = InitializeIndirection[argv] : &:r276_9
1204+
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1205+
# 277| r277_2(glval<int>) = VariableAddress[argc] :
1206+
# 277| r277_3(int) = Load : &:r277_2, m276_6
1207+
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
1208+
# 277| r277_5(char **) = Load : &:r277_4, m276_8
1209+
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
1210+
# 277| mu277_7(unknown) = ^CallSideEffect : ~mu276_4
1211+
# 277| v277_8(void) = ^BufferReadSideEffect[1] : &:r277_5, ~mu276_4
1212+
# 277| mu277_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
1213+
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
1214+
# 278| r278_2(glval<int>) = VariableAddress[argc] :
1215+
# 278| r278_3(int) = Load : &:r278_2, m276_6
1216+
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
1217+
# 278| r278_5(char **) = Load : &:r278_4, m276_8
1218+
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
1219+
# 278| mu278_7(unknown) = ^CallSideEffect : ~mu276_4
1220+
# 278| v278_8(void) = ^BufferReadSideEffect[1] : &:r278_5, ~mu276_4
1221+
# 278| mu278_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
1222+
# 279| r279_1(glval<int>) = VariableAddress[#return] :
1223+
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
1224+
# 279| r279_3(char **) = Load : &:r279_2, m276_8
1225+
# 279| r279_4(char *) = Load : &:r279_3, ~mu276_4
1226+
# 279| r279_5(char) = Load : &:r279_4, ~mu276_4
1227+
# 279| r279_6(int) = Convert : r279_5
1228+
# 279| m279_7(int) = Store : &:r279_1, r279_6
1229+
# 276| v276_11(void) = ReturnIndirection[argv] : &:r276_9, ~mu276_4
1230+
# 276| r276_12(glval<int>) = VariableAddress[#return] :
1231+
# 276| v276_13(void) = ReturnValue : &:r276_12, m279_7
1232+
# 276| v276_14(void) = UnmodeledUse : mu*
1233+
# 276| v276_15(void) = AliasedUse : ~mu276_4
1234+
# 276| v276_16(void) = ExitFunction :

0 commit comments

Comments
 (0)