C++: add argv chi chain example to ssa test

This commit is contained in:
Robert Marsh
2020-03-12 15:06:17 -07:00
parent ba8ebe9f3a
commit a0823a2582
5 changed files with 194 additions and 0 deletions

View File

@@ -1282,3 +1282,52 @@ ssa.cpp:
# 268| v268_15(void) = UnmodeledUse : mu*
# 268| v268_16(void) = AliasedUse : ~m270_11
# 268| v268_17(void) = ExitFunction :
# 276| int main(int, char**)
# 276| Block 0
# 276| v276_1(void) = EnterFunction :
# 276| m276_2(unknown) = AliasedDefinition :
# 276| m276_3(unknown) = InitializeNonLocal :
# 276| m276_4(unknown) = Chi : total:m276_2, partial:m276_3
# 276| mu276_5(unknown) = UnmodeledDefinition :
# 276| r276_6(glval<int>) = VariableAddress[argc] :
# 276| m276_7(int) = InitializeParameter[argc] : &:r276_6
# 276| r276_8(glval<char **>) = VariableAddress[argv] :
# 276| m276_9(char **) = InitializeParameter[argv] : &:r276_8
# 276| r276_10(char **) = Load : &:r276_8, m276_9
# 276| m276_11(unknown) = InitializeIndirection[argv] : &:r276_10
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 277| r277_2(glval<int>) = VariableAddress[argc] :
# 277| r277_3(int) = Load : &:r277_2, m276_7
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
# 277| r277_5(char **) = Load : &:r277_4, m276_9
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
# 277| m277_7(unknown) = ^CallSideEffect : ~m276_11
# 277| m277_8(unknown) = Chi : total:m276_11, partial:m277_7
# 277| v277_9(void) = ^BufferReadSideEffect[1] : &:r277_5, ~m277_8
# 277| m277_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
# 277| m277_11(unknown) = Chi : total:m277_8, partial:m277_10
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 278| r278_2(glval<int>) = VariableAddress[argc] :
# 278| r278_3(int) = Load : &:r278_2, m276_7
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
# 278| r278_5(char **) = Load : &:r278_4, m276_9
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
# 278| m278_7(unknown) = ^CallSideEffect : ~m277_11
# 278| m278_8(unknown) = Chi : total:m277_11, partial:m278_7
# 278| v278_9(void) = ^BufferReadSideEffect[1] : &:r278_5, ~m278_8
# 278| m278_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
# 278| m278_11(unknown) = Chi : total:m278_8, partial:m278_10
# 279| r279_1(glval<int>) = VariableAddress[#return] :
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
# 279| r279_3(char **) = Load : &:r279_2, m276_9
# 279| r279_4(char *) = Load : &:r279_3, ~m278_11
# 279| r279_5(char) = Load : &:r279_4, ~m278_11
# 279| r279_6(int) = Convert : r279_5
# 279| m279_7(int) = Store : &:r279_1, r279_6
# 276| v276_12(void) = ReturnIndirection[argv] : &:r276_10, ~m278_11
# 276| r276_13(glval<int>) = VariableAddress[#return] :
# 276| v276_14(void) = ReturnValue : &:r276_13, m279_7
# 276| v276_15(void) = UnmodeledUse : mu*
# 276| v276_16(void) = AliasedUse : ~m278_11
# 276| v276_17(void) = ExitFunction :

View File

@@ -1277,3 +1277,52 @@ ssa.cpp:
# 268| v268_15(void) = UnmodeledUse : mu*
# 268| v268_16(void) = AliasedUse : ~m269_7
# 268| v268_17(void) = ExitFunction :
# 276| int main(int, char**)
# 276| Block 0
# 276| v276_1(void) = EnterFunction :
# 276| m276_2(unknown) = AliasedDefinition :
# 276| m276_3(unknown) = InitializeNonLocal :
# 276| m276_4(unknown) = Chi : total:m276_2, partial:m276_3
# 276| mu276_5(unknown) = UnmodeledDefinition :
# 276| r276_6(glval<int>) = VariableAddress[argc] :
# 276| m276_7(int) = InitializeParameter[argc] : &:r276_6
# 276| r276_8(glval<char **>) = VariableAddress[argv] :
# 276| m276_9(char **) = InitializeParameter[argv] : &:r276_8
# 276| r276_10(char **) = Load : &:r276_8, m276_9
# 276| m276_11(unknown) = InitializeIndirection[argv] : &:r276_10
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 277| r277_2(glval<int>) = VariableAddress[argc] :
# 277| r277_3(int) = Load : &:r277_2, m276_7
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
# 277| r277_5(char **) = Load : &:r277_4, m276_9
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
# 277| m277_7(unknown) = ^CallSideEffect : ~m276_4
# 277| m277_8(unknown) = Chi : total:m276_4, partial:m277_7
# 277| v277_9(void) = ^BufferReadSideEffect[1] : &:r277_5, ~m276_11
# 277| m277_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
# 277| m277_11(char *) = Chi : total:m276_11, partial:m277_10
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 278| r278_2(glval<int>) = VariableAddress[argc] :
# 278| r278_3(int) = Load : &:r278_2, m276_7
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
# 278| r278_5(char **) = Load : &:r278_4, m276_9
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
# 278| m278_7(unknown) = ^CallSideEffect : ~m277_8
# 278| m278_8(unknown) = Chi : total:m277_8, partial:m278_7
# 278| v278_9(void) = ^BufferReadSideEffect[1] : &:r278_5, ~m277_11
# 278| m278_10(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
# 278| m278_11(char *) = Chi : total:m277_11, partial:m278_10
# 279| r279_1(glval<int>) = VariableAddress[#return] :
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
# 279| r279_3(char **) = Load : &:r279_2, m276_9
# 279| r279_4(char *) = Load : &:r279_3, ~m278_11
# 279| r279_5(char) = Load : &:r279_4, ~m278_8
# 279| r279_6(int) = Convert : r279_5
# 279| m279_7(int) = Store : &:r279_1, r279_6
# 276| v276_12(void) = ReturnIndirection[argv] : &:r276_10, ~m278_11
# 276| r276_13(glval<int>) = VariableAddress[#return] :
# 276| v276_14(void) = ReturnValue : &:r276_13, m279_7
# 276| v276_15(void) = UnmodeledUse : mu*
# 276| v276_16(void) = AliasedUse : ~m278_8
# 276| v276_17(void) = ExitFunction :

View File

@@ -269,4 +269,12 @@ void *MallocAliasing(void *s, int size) {
void *buf = malloc(size);
memcpy(buf, s, size);
return buf;
}
void unknownFunction(int argc, char **argv);
int main(int argc, char **argv) {
unknownFunction(argc, argv);
unknownFunction(argc, argv);
return **argv; // Chi chain goes through side effects from unknownFunction
}

View File

@@ -1188,3 +1188,47 @@ ssa.cpp:
# 268| v268_14(void) = UnmodeledUse : mu*
# 268| v268_15(void) = AliasedUse : ~mu268_4
# 268| v268_16(void) = ExitFunction :
# 276| int main(int, char**)
# 276| Block 0
# 276| v276_1(void) = EnterFunction :
# 276| mu276_2(unknown) = AliasedDefinition :
# 276| mu276_3(unknown) = InitializeNonLocal :
# 276| mu276_4(unknown) = UnmodeledDefinition :
# 276| r276_5(glval<int>) = VariableAddress[argc] :
# 276| m276_6(int) = InitializeParameter[argc] : &:r276_5
# 276| r276_7(glval<char **>) = VariableAddress[argv] :
# 276| m276_8(char **) = InitializeParameter[argv] : &:r276_7
# 276| r276_9(char **) = Load : &:r276_7, m276_8
# 276| mu276_10(unknown) = InitializeIndirection[argv] : &:r276_9
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 277| r277_2(glval<int>) = VariableAddress[argc] :
# 277| r277_3(int) = Load : &:r277_2, m276_6
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
# 277| r277_5(char **) = Load : &:r277_4, m276_8
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
# 277| mu277_7(unknown) = ^CallSideEffect : ~mu276_4
# 277| v277_8(void) = ^BufferReadSideEffect[1] : &:r277_5, ~mu276_4
# 277| mu277_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 278| r278_2(glval<int>) = VariableAddress[argc] :
# 278| r278_3(int) = Load : &:r278_2, m276_6
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
# 278| r278_5(char **) = Load : &:r278_4, m276_8
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
# 278| mu278_7(unknown) = ^CallSideEffect : ~mu276_4
# 278| v278_8(void) = ^BufferReadSideEffect[1] : &:r278_5, ~mu276_4
# 278| mu278_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
# 279| r279_1(glval<int>) = VariableAddress[#return] :
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
# 279| r279_3(char **) = Load : &:r279_2, m276_8
# 279| r279_4(char *) = Load : &:r279_3, ~mu276_4
# 279| r279_5(char) = Load : &:r279_4, ~mu276_4
# 279| r279_6(int) = Convert : r279_5
# 279| m279_7(int) = Store : &:r279_1, r279_6
# 276| v276_11(void) = ReturnIndirection[argv] : &:r276_9, ~mu276_4
# 276| r276_12(glval<int>) = VariableAddress[#return] :
# 276| v276_13(void) = ReturnValue : &:r276_12, m279_7
# 276| v276_14(void) = UnmodeledUse : mu*
# 276| v276_15(void) = AliasedUse : ~mu276_4
# 276| v276_16(void) = ExitFunction :

View File

@@ -1188,3 +1188,47 @@ ssa.cpp:
# 268| v268_14(void) = UnmodeledUse : mu*
# 268| v268_15(void) = AliasedUse : ~mu268_4
# 268| v268_16(void) = ExitFunction :
# 276| int main(int, char**)
# 276| Block 0
# 276| v276_1(void) = EnterFunction :
# 276| mu276_2(unknown) = AliasedDefinition :
# 276| mu276_3(unknown) = InitializeNonLocal :
# 276| mu276_4(unknown) = UnmodeledDefinition :
# 276| r276_5(glval<int>) = VariableAddress[argc] :
# 276| m276_6(int) = InitializeParameter[argc] : &:r276_5
# 276| r276_7(glval<char **>) = VariableAddress[argv] :
# 276| m276_8(char **) = InitializeParameter[argv] : &:r276_7
# 276| r276_9(char **) = Load : &:r276_7, m276_8
# 276| mu276_10(unknown) = InitializeIndirection[argv] : &:r276_9
# 277| r277_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 277| r277_2(glval<int>) = VariableAddress[argc] :
# 277| r277_3(int) = Load : &:r277_2, m276_6
# 277| r277_4(glval<char **>) = VariableAddress[argv] :
# 277| r277_5(char **) = Load : &:r277_4, m276_8
# 277| v277_6(void) = Call : func:r277_1, 0:r277_3, 1:r277_5
# 277| mu277_7(unknown) = ^CallSideEffect : ~mu276_4
# 277| v277_8(void) = ^BufferReadSideEffect[1] : &:r277_5, ~mu276_4
# 277| mu277_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r277_5
# 278| r278_1(glval<unknown>) = FunctionAddress[unknownFunction] :
# 278| r278_2(glval<int>) = VariableAddress[argc] :
# 278| r278_3(int) = Load : &:r278_2, m276_6
# 278| r278_4(glval<char **>) = VariableAddress[argv] :
# 278| r278_5(char **) = Load : &:r278_4, m276_8
# 278| v278_6(void) = Call : func:r278_1, 0:r278_3, 1:r278_5
# 278| mu278_7(unknown) = ^CallSideEffect : ~mu276_4
# 278| v278_8(void) = ^BufferReadSideEffect[1] : &:r278_5, ~mu276_4
# 278| mu278_9(unknown) = ^BufferMayWriteSideEffect[1] : &:r278_5
# 279| r279_1(glval<int>) = VariableAddress[#return] :
# 279| r279_2(glval<char **>) = VariableAddress[argv] :
# 279| r279_3(char **) = Load : &:r279_2, m276_8
# 279| r279_4(char *) = Load : &:r279_3, ~mu276_4
# 279| r279_5(char) = Load : &:r279_4, ~mu276_4
# 279| r279_6(int) = Convert : r279_5
# 279| m279_7(int) = Store : &:r279_1, r279_6
# 276| v276_11(void) = ReturnIndirection[argv] : &:r276_9, ~mu276_4
# 276| r276_12(glval<int>) = VariableAddress[#return] :
# 276| v276_13(void) = ReturnValue : &:r276_12, m279_7
# 276| v276_14(void) = UnmodeledUse : mu*
# 276| v276_15(void) = AliasedUse : ~mu276_4
# 276| v276_16(void) = ExitFunction :