mirror of
https://github.com/github/codeql.git
synced 2025-12-21 19:26:31 +01:00
C++: Add testcases with new and accept output
This commit is contained in:
@@ -73,3 +73,18 @@
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:93:18:93:18 | s | |
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:97:7:97:12 | buffer | |
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:100:17:100:22 | buffer | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:8:24:8:25 | s1 | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:11:20:11:21 | s1 | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:11:36:11:37 | s2 | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:106:17:106:24 | userName | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:106:28:106:33 | call to getenv | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:106:28:106:46 | (const char *)... | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:108:8:108:11 | copy | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:109:2:109:7 | call to strcpy | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:109:9:109:12 | copy | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:109:15:109:22 | userName | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:6:111:27 | ! ... | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:7:111:12 | call to strcmp | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:7:111:27 | (bool)... | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:14:111:17 | (const char *)... | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:14:111:17 | copy | |
|
||||
|
||||
@@ -14,3 +14,12 @@
|
||||
| test.cpp:100:12:100:15 | call to gets | test.cpp:100:2:100:8 | pointer | AST only |
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:97:7:97:12 | buffer | AST only |
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:100:17:100:22 | array to pointer conversion | IR only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:8:24:8:25 | s1 | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:11:20:11:21 | s1 | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:108:8:108:11 | copy | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:109:9:109:12 | copy | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:6:111:27 | ! ... | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:7:111:12 | call to strcmp | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:7:111:27 | (bool)... | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:14:111:17 | (const char *)... | AST only |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:111:14:111:17 | copy | AST only |
|
||||
|
||||
@@ -57,3 +57,9 @@
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:93:18:93:18 | s | |
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:100:17:100:22 | array to pointer conversion | |
|
||||
| test.cpp:100:17:100:22 | buffer | test.cpp:100:17:100:22 | buffer | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:11:36:11:37 | s2 | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:106:17:106:24 | userName | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:106:28:106:33 | call to getenv | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:106:28:106:46 | (const char *)... | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:109:2:109:7 | call to strcpy | |
|
||||
| test.cpp:106:28:106:33 | call to getenv | test.cpp:109:15:109:22 | userName | |
|
||||
|
||||
@@ -99,3 +99,16 @@ void test_gets()
|
||||
|
||||
pointer = gets(buffer);
|
||||
}
|
||||
|
||||
const char *alias_global_new;
|
||||
|
||||
void newBuffer() {
|
||||
const char *userName = getenv("USER_NAME");
|
||||
char *alias = new char[4096];
|
||||
char *copy = new char[4096];
|
||||
strcpy(copy, userName);
|
||||
alias_global_new = alias; // to force a Chi node on all aliased memory
|
||||
if (!strcmp(copy, "admin")) { // copy should be tainted
|
||||
isAdmin = true;
|
||||
}
|
||||
}
|
||||
@@ -1345,3 +1345,134 @@ ssa.cpp:
|
||||
# 275| v275_13(void) = UnmodeledUse : mu*
|
||||
# 275| v275_14(void) = AliasedUse : ~m281_2
|
||||
# 275| v275_15(void) = ExitFunction :
|
||||
|
||||
# 286| void A::A(int)
|
||||
# 286| Block 0
|
||||
# 286| v286_1(void) = EnterFunction :
|
||||
# 286| m286_2(unknown) = AliasedDefinition :
|
||||
# 286| m286_3(unknown) = InitializeNonLocal :
|
||||
# 286| m286_4(unknown) = Chi : total:m286_2, partial:m286_3
|
||||
# 286| mu286_5(unknown) = UnmodeledDefinition :
|
||||
# 286| r286_6(glval<A>) = InitializeThis :
|
||||
# 286| r286_7(glval<int>) = VariableAddress[x] :
|
||||
# 286| m286_8(int) = InitializeParameter[x] : &:r286_7
|
||||
# 286| v286_9(void) = NoOp :
|
||||
# 286| v286_10(void) = ReturnVoid :
|
||||
# 286| v286_11(void) = UnmodeledUse : mu*
|
||||
# 286| v286_12(void) = AliasedUse : m286_3
|
||||
# 286| v286_13(void) = ExitFunction :
|
||||
|
||||
# 287| void A::A(A*)
|
||||
# 287| Block 0
|
||||
# 287| v287_1(void) = EnterFunction :
|
||||
# 287| m287_2(unknown) = AliasedDefinition :
|
||||
# 287| m287_3(unknown) = InitializeNonLocal :
|
||||
# 287| m287_4(unknown) = Chi : total:m287_2, partial:m287_3
|
||||
# 287| mu287_5(unknown) = UnmodeledDefinition :
|
||||
# 287| r287_6(glval<A>) = InitializeThis :
|
||||
# 287| r287_7(glval<A *>) = VariableAddress[p#0] :
|
||||
# 287| m287_8(A *) = InitializeParameter[p#0] : &:r287_7
|
||||
# 287| r287_9(A *) = Load : &:r287_7, m287_8
|
||||
# 287| m287_10(unknown) = InitializeIndirection[p#0] : &:r287_9
|
||||
# 287| v287_11(void) = NoOp :
|
||||
# 287| v287_12(void) = ReturnIndirection : &:r287_9, m287_10
|
||||
# 287| v287_13(void) = ReturnVoid :
|
||||
# 287| v287_14(void) = UnmodeledUse : mu*
|
||||
# 287| v287_15(void) = AliasedUse : m287_3
|
||||
# 287| v287_16(void) = ExitFunction :
|
||||
|
||||
# 288| void A::A()
|
||||
# 288| Block 0
|
||||
# 288| v288_1(void) = EnterFunction :
|
||||
# 288| m288_2(unknown) = AliasedDefinition :
|
||||
# 288| m288_3(unknown) = InitializeNonLocal :
|
||||
# 288| m288_4(unknown) = Chi : total:m288_2, partial:m288_3
|
||||
# 288| mu288_5(unknown) = UnmodeledDefinition :
|
||||
# 288| r288_6(glval<A>) = InitializeThis :
|
||||
# 288| v288_7(void) = NoOp :
|
||||
# 288| v288_8(void) = ReturnVoid :
|
||||
# 288| v288_9(void) = UnmodeledUse : mu*
|
||||
# 288| v288_10(void) = AliasedUse : m288_3
|
||||
# 288| v288_11(void) = ExitFunction :
|
||||
|
||||
# 291| Point* NewAliasing(int)
|
||||
# 291| Block 0
|
||||
# 291| v291_1(void) = EnterFunction :
|
||||
# 291| m291_2(unknown) = AliasedDefinition :
|
||||
# 291| m291_3(unknown) = InitializeNonLocal :
|
||||
# 291| m291_4(unknown) = Chi : total:m291_2, partial:m291_3
|
||||
# 291| mu291_5(unknown) = UnmodeledDefinition :
|
||||
# 291| r291_6(glval<int>) = VariableAddress[x] :
|
||||
# 291| m291_7(int) = InitializeParameter[x] : &:r291_6
|
||||
# 292| r292_1(glval<Point *>) = VariableAddress[p] :
|
||||
# 292| r292_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 292| r292_3(unsigned long) = Constant[8] :
|
||||
# 292| r292_4(void *) = Call : func:r292_2, 0:r292_3
|
||||
# 292| m292_5(unknown) = ^CallSideEffect : ~m291_4
|
||||
# 292| m292_6(unknown) = Chi : total:m291_4, partial:m292_5
|
||||
# 292| r292_7(Point *) = Convert : r292_4
|
||||
# 292| m292_8(Point *) = Store : &:r292_1, r292_7
|
||||
# 293| r293_1(glval<Point *>) = VariableAddress[q] :
|
||||
# 293| r293_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 293| r293_3(unsigned long) = Constant[8] :
|
||||
# 293| r293_4(void *) = Call : func:r293_2, 0:r293_3
|
||||
# 293| m293_5(unknown) = ^CallSideEffect : ~m292_6
|
||||
# 293| m293_6(unknown) = Chi : total:m292_6, partial:m293_5
|
||||
# 293| r293_7(Point *) = Convert : r293_4
|
||||
# 293| m293_8(Point *) = Store : &:r293_1, r293_7
|
||||
# 294| r294_1(glval<int>) = VariableAddress[j] :
|
||||
# 294| r294_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_3(unsigned long) = Constant[4] :
|
||||
# 294| r294_4(void *) = Call : func:r294_2, 0:r294_3
|
||||
# 294| m294_5(unknown) = ^CallSideEffect : ~m293_6
|
||||
# 294| m294_6(unknown) = Chi : total:m293_6, partial:m294_5
|
||||
# 294| r294_7(A *) = Convert : r294_4
|
||||
# 294| r294_8(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_9(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_10(unsigned long) = Constant[4] :
|
||||
# 294| r294_11(void *) = Call : func:r294_9, 0:r294_10
|
||||
# 294| m294_12(unknown) = ^CallSideEffect : ~m294_6
|
||||
# 294| m294_13(unknown) = Chi : total:m294_6, partial:m294_12
|
||||
# 294| r294_14(A *) = Convert : r294_11
|
||||
# 294| r294_15(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_16(glval<int>) = VariableAddress[x] :
|
||||
# 294| r294_17(int) = Load : &:r294_16, m291_7
|
||||
# 294| v294_18(void) = Call : func:r294_15, this:r294_14, 0:r294_17
|
||||
# 294| m294_19(unknown) = ^CallSideEffect : ~m294_13
|
||||
# 294| m294_20(unknown) = Chi : total:m294_13, partial:m294_19
|
||||
# 294| m294_21(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_14
|
||||
# 294| m294_22(unknown) = Chi : total:m294_20, partial:m294_21
|
||||
# 294| v294_23(void) = Call : func:r294_8, this:r294_7, 0:r294_14
|
||||
# 294| m294_24(unknown) = ^CallSideEffect : ~m294_22
|
||||
# 294| m294_25(unknown) = Chi : total:m294_22, partial:m294_24
|
||||
# 294| m294_26(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_7
|
||||
# 294| m294_27(unknown) = Chi : total:m294_25, partial:m294_26
|
||||
# 294| v294_28(void) = ^BufferReadSideEffect[0] : &:r294_14, ~m294_27
|
||||
# 294| m294_29(unknown) = ^BufferMayWriteSideEffect[0] : &:r294_14
|
||||
# 294| m294_30(unknown) = Chi : total:m294_27, partial:m294_29
|
||||
# 294| r294_31(glval<int>) = FieldAddress[i] : r294_7
|
||||
# 294| r294_32(int) = Load : &:r294_31, ~m294_30
|
||||
# 294| m294_33(int) = Store : &:r294_1, r294_32
|
||||
# 295| r295_1(glval<A *>) = VariableAddress[a] :
|
||||
# 295| r295_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 295| r295_3(unsigned long) = Constant[4] :
|
||||
# 295| r295_4(void *) = Call : func:r295_2, 0:r295_3
|
||||
# 295| m295_5(unknown) = ^CallSideEffect : ~m294_30
|
||||
# 295| m295_6(unknown) = Chi : total:m294_30, partial:m295_5
|
||||
# 295| r295_7(A *) = Convert : r295_4
|
||||
# 295| r295_8(glval<unknown>) = FunctionAddress[A] :
|
||||
# 295| v295_9(void) = Call : func:r295_8, this:r295_7
|
||||
# 295| m295_10(unknown) = ^CallSideEffect : ~m295_6
|
||||
# 295| m295_11(unknown) = Chi : total:m295_6, partial:m295_10
|
||||
# 295| m295_12(A) = ^IndirectMayWriteSideEffect[-1] : &:r295_7
|
||||
# 295| m295_13(unknown) = Chi : total:m295_11, partial:m295_12
|
||||
# 295| m295_14(A *) = Store : &:r295_1, r295_7
|
||||
# 296| r296_1(glval<Point *>) = VariableAddress[#return] :
|
||||
# 296| r296_2(glval<Point *>) = VariableAddress[p] :
|
||||
# 296| r296_3(Point *) = Load : &:r296_2, m292_8
|
||||
# 296| m296_4(Point *) = Store : &:r296_1, r296_3
|
||||
# 291| r291_8(glval<Point *>) = VariableAddress[#return] :
|
||||
# 291| v291_9(void) = ReturnValue : &:r291_8, m296_4
|
||||
# 291| v291_10(void) = UnmodeledUse : mu*
|
||||
# 291| v291_11(void) = AliasedUse : ~m295_13
|
||||
# 291| v291_12(void) = ExitFunction :
|
||||
|
||||
@@ -1334,3 +1334,134 @@ ssa.cpp:
|
||||
# 275| v275_13(void) = UnmodeledUse : mu*
|
||||
# 275| v275_14(void) = AliasedUse : ~m277_5
|
||||
# 275| v275_15(void) = ExitFunction :
|
||||
|
||||
# 286| void A::A(int)
|
||||
# 286| Block 0
|
||||
# 286| v286_1(void) = EnterFunction :
|
||||
# 286| m286_2(unknown) = AliasedDefinition :
|
||||
# 286| m286_3(unknown) = InitializeNonLocal :
|
||||
# 286| m286_4(unknown) = Chi : total:m286_2, partial:m286_3
|
||||
# 286| mu286_5(unknown) = UnmodeledDefinition :
|
||||
# 286| r286_6(glval<A>) = InitializeThis :
|
||||
# 286| r286_7(glval<int>) = VariableAddress[x] :
|
||||
# 286| m286_8(int) = InitializeParameter[x] : &:r286_7
|
||||
# 286| v286_9(void) = NoOp :
|
||||
# 286| v286_10(void) = ReturnVoid :
|
||||
# 286| v286_11(void) = UnmodeledUse : mu*
|
||||
# 286| v286_12(void) = AliasedUse : m286_3
|
||||
# 286| v286_13(void) = ExitFunction :
|
||||
|
||||
# 287| void A::A(A*)
|
||||
# 287| Block 0
|
||||
# 287| v287_1(void) = EnterFunction :
|
||||
# 287| m287_2(unknown) = AliasedDefinition :
|
||||
# 287| m287_3(unknown) = InitializeNonLocal :
|
||||
# 287| m287_4(unknown) = Chi : total:m287_2, partial:m287_3
|
||||
# 287| mu287_5(unknown) = UnmodeledDefinition :
|
||||
# 287| r287_6(glval<A>) = InitializeThis :
|
||||
# 287| r287_7(glval<A *>) = VariableAddress[p#0] :
|
||||
# 287| m287_8(A *) = InitializeParameter[p#0] : &:r287_7
|
||||
# 287| r287_9(A *) = Load : &:r287_7, m287_8
|
||||
# 287| m287_10(unknown) = InitializeIndirection[p#0] : &:r287_9
|
||||
# 287| v287_11(void) = NoOp :
|
||||
# 287| v287_12(void) = ReturnIndirection : &:r287_9, m287_10
|
||||
# 287| v287_13(void) = ReturnVoid :
|
||||
# 287| v287_14(void) = UnmodeledUse : mu*
|
||||
# 287| v287_15(void) = AliasedUse : m287_3
|
||||
# 287| v287_16(void) = ExitFunction :
|
||||
|
||||
# 288| void A::A()
|
||||
# 288| Block 0
|
||||
# 288| v288_1(void) = EnterFunction :
|
||||
# 288| m288_2(unknown) = AliasedDefinition :
|
||||
# 288| m288_3(unknown) = InitializeNonLocal :
|
||||
# 288| m288_4(unknown) = Chi : total:m288_2, partial:m288_3
|
||||
# 288| mu288_5(unknown) = UnmodeledDefinition :
|
||||
# 288| r288_6(glval<A>) = InitializeThis :
|
||||
# 288| v288_7(void) = NoOp :
|
||||
# 288| v288_8(void) = ReturnVoid :
|
||||
# 288| v288_9(void) = UnmodeledUse : mu*
|
||||
# 288| v288_10(void) = AliasedUse : m288_3
|
||||
# 288| v288_11(void) = ExitFunction :
|
||||
|
||||
# 291| Point* NewAliasing(int)
|
||||
# 291| Block 0
|
||||
# 291| v291_1(void) = EnterFunction :
|
||||
# 291| m291_2(unknown) = AliasedDefinition :
|
||||
# 291| m291_3(unknown) = InitializeNonLocal :
|
||||
# 291| m291_4(unknown) = Chi : total:m291_2, partial:m291_3
|
||||
# 291| mu291_5(unknown) = UnmodeledDefinition :
|
||||
# 291| r291_6(glval<int>) = VariableAddress[x] :
|
||||
# 291| m291_7(int) = InitializeParameter[x] : &:r291_6
|
||||
# 292| r292_1(glval<Point *>) = VariableAddress[p] :
|
||||
# 292| r292_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 292| r292_3(unsigned long) = Constant[8] :
|
||||
# 292| r292_4(void *) = Call : func:r292_2, 0:r292_3
|
||||
# 292| m292_5(unknown) = ^CallSideEffect : ~m291_4
|
||||
# 292| m292_6(unknown) = Chi : total:m291_4, partial:m292_5
|
||||
# 292| r292_7(Point *) = Convert : r292_4
|
||||
# 292| m292_8(Point *) = Store : &:r292_1, r292_7
|
||||
# 293| r293_1(glval<Point *>) = VariableAddress[q] :
|
||||
# 293| r293_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 293| r293_3(unsigned long) = Constant[8] :
|
||||
# 293| r293_4(void *) = Call : func:r293_2, 0:r293_3
|
||||
# 293| m293_5(unknown) = ^CallSideEffect : ~m292_6
|
||||
# 293| m293_6(unknown) = Chi : total:m292_6, partial:m293_5
|
||||
# 293| r293_7(Point *) = Convert : r293_4
|
||||
# 293| m293_8(Point *) = Store : &:r293_1, r293_7
|
||||
# 294| r294_1(glval<int>) = VariableAddress[j] :
|
||||
# 294| r294_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_3(unsigned long) = Constant[4] :
|
||||
# 294| r294_4(void *) = Call : func:r294_2, 0:r294_3
|
||||
# 294| m294_5(unknown) = ^CallSideEffect : ~m293_6
|
||||
# 294| m294_6(unknown) = Chi : total:m293_6, partial:m294_5
|
||||
# 294| r294_7(A *) = Convert : r294_4
|
||||
# 294| r294_8(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_9(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_10(unsigned long) = Constant[4] :
|
||||
# 294| r294_11(void *) = Call : func:r294_9, 0:r294_10
|
||||
# 294| m294_12(unknown) = ^CallSideEffect : ~m294_6
|
||||
# 294| m294_13(unknown) = Chi : total:m294_6, partial:m294_12
|
||||
# 294| r294_14(A *) = Convert : r294_11
|
||||
# 294| r294_15(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_16(glval<int>) = VariableAddress[x] :
|
||||
# 294| r294_17(int) = Load : &:r294_16, m291_7
|
||||
# 294| v294_18(void) = Call : func:r294_15, this:r294_14, 0:r294_17
|
||||
# 294| m294_19(unknown) = ^CallSideEffect : ~m294_13
|
||||
# 294| m294_20(unknown) = Chi : total:m294_13, partial:m294_19
|
||||
# 294| m294_21(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_14
|
||||
# 294| m294_22(unknown) = Chi : total:m294_20, partial:m294_21
|
||||
# 294| v294_23(void) = Call : func:r294_8, this:r294_7, 0:r294_14
|
||||
# 294| m294_24(unknown) = ^CallSideEffect : ~m294_22
|
||||
# 294| m294_25(unknown) = Chi : total:m294_22, partial:m294_24
|
||||
# 294| m294_26(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_7
|
||||
# 294| m294_27(unknown) = Chi : total:m294_25, partial:m294_26
|
||||
# 294| v294_28(void) = ^BufferReadSideEffect[0] : &:r294_14, ~m294_27
|
||||
# 294| m294_29(unknown) = ^BufferMayWriteSideEffect[0] : &:r294_14
|
||||
# 294| m294_30(unknown) = Chi : total:m294_27, partial:m294_29
|
||||
# 294| r294_31(glval<int>) = FieldAddress[i] : r294_7
|
||||
# 294| r294_32(int) = Load : &:r294_31, ~m294_30
|
||||
# 294| m294_33(int) = Store : &:r294_1, r294_32
|
||||
# 295| r295_1(glval<A *>) = VariableAddress[a] :
|
||||
# 295| r295_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 295| r295_3(unsigned long) = Constant[4] :
|
||||
# 295| r295_4(void *) = Call : func:r295_2, 0:r295_3
|
||||
# 295| m295_5(unknown) = ^CallSideEffect : ~m294_30
|
||||
# 295| m295_6(unknown) = Chi : total:m294_30, partial:m295_5
|
||||
# 295| r295_7(A *) = Convert : r295_4
|
||||
# 295| r295_8(glval<unknown>) = FunctionAddress[A] :
|
||||
# 295| v295_9(void) = Call : func:r295_8, this:r295_7
|
||||
# 295| m295_10(unknown) = ^CallSideEffect : ~m295_6
|
||||
# 295| m295_11(unknown) = Chi : total:m295_6, partial:m295_10
|
||||
# 295| m295_12(A) = ^IndirectMayWriteSideEffect[-1] : &:r295_7
|
||||
# 295| m295_13(unknown) = Chi : total:m295_11, partial:m295_12
|
||||
# 295| m295_14(A *) = Store : &:r295_1, r295_7
|
||||
# 296| r296_1(glval<Point *>) = VariableAddress[#return] :
|
||||
# 296| r296_2(glval<Point *>) = VariableAddress[p] :
|
||||
# 296| r296_3(Point *) = Load : &:r296_2, m292_8
|
||||
# 296| m296_4(Point *) = Store : &:r296_1, r296_3
|
||||
# 291| r291_8(glval<Point *>) = VariableAddress[#return] :
|
||||
# 291| v291_9(void) = ReturnValue : &:r291_8, m296_4
|
||||
# 291| v291_10(void) = UnmodeledUse : mu*
|
||||
# 291| v291_11(void) = AliasedUse : ~m295_13
|
||||
# 291| v291_12(void) = ExitFunction :
|
||||
|
||||
@@ -280,3 +280,18 @@ void EscapedButNotConflated(bool c, Point p, int x1) {
|
||||
}
|
||||
int x = a.x; // The phi node here is not conflated
|
||||
}
|
||||
|
||||
struct A {
|
||||
int i;
|
||||
A(int x) {}
|
||||
A(A*) {}
|
||||
A() {}
|
||||
};
|
||||
|
||||
Point *NewAliasing(int x) {
|
||||
Point* p = new Point;
|
||||
Point* q = new Point;
|
||||
int j = new A(new A(x))->i;
|
||||
A* a = new A;
|
||||
return p;
|
||||
}
|
||||
@@ -1238,3 +1238,118 @@ ssa.cpp:
|
||||
# 275| v275_12(void) = UnmodeledUse : mu*
|
||||
# 275| v275_13(void) = AliasedUse : ~mu275_4
|
||||
# 275| v275_14(void) = ExitFunction :
|
||||
|
||||
# 286| void A::A(int)
|
||||
# 286| Block 0
|
||||
# 286| v286_1(void) = EnterFunction :
|
||||
# 286| mu286_2(unknown) = AliasedDefinition :
|
||||
# 286| mu286_3(unknown) = InitializeNonLocal :
|
||||
# 286| mu286_4(unknown) = UnmodeledDefinition :
|
||||
# 286| r286_5(glval<A>) = InitializeThis :
|
||||
# 286| r286_6(glval<int>) = VariableAddress[x] :
|
||||
# 286| m286_7(int) = InitializeParameter[x] : &:r286_6
|
||||
# 286| v286_8(void) = NoOp :
|
||||
# 286| v286_9(void) = ReturnVoid :
|
||||
# 286| v286_10(void) = UnmodeledUse : mu*
|
||||
# 286| v286_11(void) = AliasedUse : ~mu286_4
|
||||
# 286| v286_12(void) = ExitFunction :
|
||||
|
||||
# 287| void A::A(A*)
|
||||
# 287| Block 0
|
||||
# 287| v287_1(void) = EnterFunction :
|
||||
# 287| mu287_2(unknown) = AliasedDefinition :
|
||||
# 287| mu287_3(unknown) = InitializeNonLocal :
|
||||
# 287| mu287_4(unknown) = UnmodeledDefinition :
|
||||
# 287| r287_5(glval<A>) = InitializeThis :
|
||||
# 287| r287_6(glval<A *>) = VariableAddress[p#0] :
|
||||
# 287| m287_7(A *) = InitializeParameter[p#0] : &:r287_6
|
||||
# 287| r287_8(A *) = Load : &:r287_6, m287_7
|
||||
# 287| mu287_9(unknown) = InitializeIndirection[p#0] : &:r287_8
|
||||
# 287| v287_10(void) = NoOp :
|
||||
# 287| v287_11(void) = ReturnIndirection : &:r287_8, ~mu287_4
|
||||
# 287| v287_12(void) = ReturnVoid :
|
||||
# 287| v287_13(void) = UnmodeledUse : mu*
|
||||
# 287| v287_14(void) = AliasedUse : ~mu287_4
|
||||
# 287| v287_15(void) = ExitFunction :
|
||||
|
||||
# 288| void A::A()
|
||||
# 288| Block 0
|
||||
# 288| v288_1(void) = EnterFunction :
|
||||
# 288| mu288_2(unknown) = AliasedDefinition :
|
||||
# 288| mu288_3(unknown) = InitializeNonLocal :
|
||||
# 288| mu288_4(unknown) = UnmodeledDefinition :
|
||||
# 288| r288_5(glval<A>) = InitializeThis :
|
||||
# 288| v288_6(void) = NoOp :
|
||||
# 288| v288_7(void) = ReturnVoid :
|
||||
# 288| v288_8(void) = UnmodeledUse : mu*
|
||||
# 288| v288_9(void) = AliasedUse : ~mu288_4
|
||||
# 288| v288_10(void) = ExitFunction :
|
||||
|
||||
# 291| Point* NewAliasing(int)
|
||||
# 291| Block 0
|
||||
# 291| v291_1(void) = EnterFunction :
|
||||
# 291| mu291_2(unknown) = AliasedDefinition :
|
||||
# 291| mu291_3(unknown) = InitializeNonLocal :
|
||||
# 291| mu291_4(unknown) = UnmodeledDefinition :
|
||||
# 291| r291_5(glval<int>) = VariableAddress[x] :
|
||||
# 291| m291_6(int) = InitializeParameter[x] : &:r291_5
|
||||
# 292| r292_1(glval<Point *>) = VariableAddress[p] :
|
||||
# 292| r292_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 292| r292_3(unsigned long) = Constant[8] :
|
||||
# 292| r292_4(void *) = Call : func:r292_2, 0:r292_3
|
||||
# 292| mu292_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 292| r292_6(Point *) = Convert : r292_4
|
||||
# 292| m292_7(Point *) = Store : &:r292_1, r292_6
|
||||
# 293| r293_1(glval<Point *>) = VariableAddress[q] :
|
||||
# 293| r293_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 293| r293_3(unsigned long) = Constant[8] :
|
||||
# 293| r293_4(void *) = Call : func:r293_2, 0:r293_3
|
||||
# 293| mu293_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 293| r293_6(Point *) = Convert : r293_4
|
||||
# 293| m293_7(Point *) = Store : &:r293_1, r293_6
|
||||
# 294| r294_1(glval<int>) = VariableAddress[j] :
|
||||
# 294| r294_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_3(unsigned long) = Constant[4] :
|
||||
# 294| r294_4(void *) = Call : func:r294_2, 0:r294_3
|
||||
# 294| mu294_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| r294_6(A *) = Convert : r294_4
|
||||
# 294| r294_7(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_8(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_9(unsigned long) = Constant[4] :
|
||||
# 294| r294_10(void *) = Call : func:r294_8, 0:r294_9
|
||||
# 294| mu294_11(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| r294_12(A *) = Convert : r294_10
|
||||
# 294| r294_13(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_14(glval<int>) = VariableAddress[x] :
|
||||
# 294| r294_15(int) = Load : &:r294_14, m291_6
|
||||
# 294| v294_16(void) = Call : func:r294_13, this:r294_12, 0:r294_15
|
||||
# 294| mu294_17(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| mu294_18(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_12
|
||||
# 294| v294_19(void) = Call : func:r294_7, this:r294_6, 0:r294_12
|
||||
# 294| mu294_20(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| mu294_21(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_6
|
||||
# 294| v294_22(void) = ^BufferReadSideEffect[0] : &:r294_12, ~mu291_4
|
||||
# 294| mu294_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r294_12
|
||||
# 294| r294_24(glval<int>) = FieldAddress[i] : r294_6
|
||||
# 294| r294_25(int) = Load : &:r294_24, ~mu291_4
|
||||
# 294| m294_26(int) = Store : &:r294_1, r294_25
|
||||
# 295| r295_1(glval<A *>) = VariableAddress[a] :
|
||||
# 295| r295_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 295| r295_3(unsigned long) = Constant[4] :
|
||||
# 295| r295_4(void *) = Call : func:r295_2, 0:r295_3
|
||||
# 295| mu295_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 295| r295_6(A *) = Convert : r295_4
|
||||
# 295| r295_7(glval<unknown>) = FunctionAddress[A] :
|
||||
# 295| v295_8(void) = Call : func:r295_7, this:r295_6
|
||||
# 295| mu295_9(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 295| mu295_10(A) = ^IndirectMayWriteSideEffect[-1] : &:r295_6
|
||||
# 295| m295_11(A *) = Store : &:r295_1, r295_6
|
||||
# 296| r296_1(glval<Point *>) = VariableAddress[#return] :
|
||||
# 296| r296_2(glval<Point *>) = VariableAddress[p] :
|
||||
# 296| r296_3(Point *) = Load : &:r296_2, m292_7
|
||||
# 296| m296_4(Point *) = Store : &:r296_1, r296_3
|
||||
# 291| r291_7(glval<Point *>) = VariableAddress[#return] :
|
||||
# 291| v291_8(void) = ReturnValue : &:r291_7, m296_4
|
||||
# 291| v291_9(void) = UnmodeledUse : mu*
|
||||
# 291| v291_10(void) = AliasedUse : ~mu291_4
|
||||
# 291| v291_11(void) = ExitFunction :
|
||||
|
||||
@@ -1238,3 +1238,118 @@ ssa.cpp:
|
||||
# 275| v275_12(void) = UnmodeledUse : mu*
|
||||
# 275| v275_13(void) = AliasedUse : ~mu275_4
|
||||
# 275| v275_14(void) = ExitFunction :
|
||||
|
||||
# 286| void A::A(int)
|
||||
# 286| Block 0
|
||||
# 286| v286_1(void) = EnterFunction :
|
||||
# 286| mu286_2(unknown) = AliasedDefinition :
|
||||
# 286| mu286_3(unknown) = InitializeNonLocal :
|
||||
# 286| mu286_4(unknown) = UnmodeledDefinition :
|
||||
# 286| r286_5(glval<A>) = InitializeThis :
|
||||
# 286| r286_6(glval<int>) = VariableAddress[x] :
|
||||
# 286| m286_7(int) = InitializeParameter[x] : &:r286_6
|
||||
# 286| v286_8(void) = NoOp :
|
||||
# 286| v286_9(void) = ReturnVoid :
|
||||
# 286| v286_10(void) = UnmodeledUse : mu*
|
||||
# 286| v286_11(void) = AliasedUse : ~mu286_4
|
||||
# 286| v286_12(void) = ExitFunction :
|
||||
|
||||
# 287| void A::A(A*)
|
||||
# 287| Block 0
|
||||
# 287| v287_1(void) = EnterFunction :
|
||||
# 287| mu287_2(unknown) = AliasedDefinition :
|
||||
# 287| mu287_3(unknown) = InitializeNonLocal :
|
||||
# 287| mu287_4(unknown) = UnmodeledDefinition :
|
||||
# 287| r287_5(glval<A>) = InitializeThis :
|
||||
# 287| r287_6(glval<A *>) = VariableAddress[p#0] :
|
||||
# 287| m287_7(A *) = InitializeParameter[p#0] : &:r287_6
|
||||
# 287| r287_8(A *) = Load : &:r287_6, m287_7
|
||||
# 287| mu287_9(unknown) = InitializeIndirection[p#0] : &:r287_8
|
||||
# 287| v287_10(void) = NoOp :
|
||||
# 287| v287_11(void) = ReturnIndirection : &:r287_8, ~mu287_4
|
||||
# 287| v287_12(void) = ReturnVoid :
|
||||
# 287| v287_13(void) = UnmodeledUse : mu*
|
||||
# 287| v287_14(void) = AliasedUse : ~mu287_4
|
||||
# 287| v287_15(void) = ExitFunction :
|
||||
|
||||
# 288| void A::A()
|
||||
# 288| Block 0
|
||||
# 288| v288_1(void) = EnterFunction :
|
||||
# 288| mu288_2(unknown) = AliasedDefinition :
|
||||
# 288| mu288_3(unknown) = InitializeNonLocal :
|
||||
# 288| mu288_4(unknown) = UnmodeledDefinition :
|
||||
# 288| r288_5(glval<A>) = InitializeThis :
|
||||
# 288| v288_6(void) = NoOp :
|
||||
# 288| v288_7(void) = ReturnVoid :
|
||||
# 288| v288_8(void) = UnmodeledUse : mu*
|
||||
# 288| v288_9(void) = AliasedUse : ~mu288_4
|
||||
# 288| v288_10(void) = ExitFunction :
|
||||
|
||||
# 291| Point* NewAliasing(int)
|
||||
# 291| Block 0
|
||||
# 291| v291_1(void) = EnterFunction :
|
||||
# 291| mu291_2(unknown) = AliasedDefinition :
|
||||
# 291| mu291_3(unknown) = InitializeNonLocal :
|
||||
# 291| mu291_4(unknown) = UnmodeledDefinition :
|
||||
# 291| r291_5(glval<int>) = VariableAddress[x] :
|
||||
# 291| m291_6(int) = InitializeParameter[x] : &:r291_5
|
||||
# 292| r292_1(glval<Point *>) = VariableAddress[p] :
|
||||
# 292| r292_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 292| r292_3(unsigned long) = Constant[8] :
|
||||
# 292| r292_4(void *) = Call : func:r292_2, 0:r292_3
|
||||
# 292| mu292_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 292| r292_6(Point *) = Convert : r292_4
|
||||
# 292| m292_7(Point *) = Store : &:r292_1, r292_6
|
||||
# 293| r293_1(glval<Point *>) = VariableAddress[q] :
|
||||
# 293| r293_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 293| r293_3(unsigned long) = Constant[8] :
|
||||
# 293| r293_4(void *) = Call : func:r293_2, 0:r293_3
|
||||
# 293| mu293_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 293| r293_6(Point *) = Convert : r293_4
|
||||
# 293| m293_7(Point *) = Store : &:r293_1, r293_6
|
||||
# 294| r294_1(glval<int>) = VariableAddress[j] :
|
||||
# 294| r294_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_3(unsigned long) = Constant[4] :
|
||||
# 294| r294_4(void *) = Call : func:r294_2, 0:r294_3
|
||||
# 294| mu294_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| r294_6(A *) = Convert : r294_4
|
||||
# 294| r294_7(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_8(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 294| r294_9(unsigned long) = Constant[4] :
|
||||
# 294| r294_10(void *) = Call : func:r294_8, 0:r294_9
|
||||
# 294| mu294_11(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| r294_12(A *) = Convert : r294_10
|
||||
# 294| r294_13(glval<unknown>) = FunctionAddress[A] :
|
||||
# 294| r294_14(glval<int>) = VariableAddress[x] :
|
||||
# 294| r294_15(int) = Load : &:r294_14, m291_6
|
||||
# 294| v294_16(void) = Call : func:r294_13, this:r294_12, 0:r294_15
|
||||
# 294| mu294_17(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| mu294_18(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_12
|
||||
# 294| v294_19(void) = Call : func:r294_7, this:r294_6, 0:r294_12
|
||||
# 294| mu294_20(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 294| mu294_21(A) = ^IndirectMayWriteSideEffect[-1] : &:r294_6
|
||||
# 294| v294_22(void) = ^BufferReadSideEffect[0] : &:r294_12, ~mu291_4
|
||||
# 294| mu294_23(unknown) = ^BufferMayWriteSideEffect[0] : &:r294_12
|
||||
# 294| r294_24(glval<int>) = FieldAddress[i] : r294_6
|
||||
# 294| r294_25(int) = Load : &:r294_24, ~mu291_4
|
||||
# 294| m294_26(int) = Store : &:r294_1, r294_25
|
||||
# 295| r295_1(glval<A *>) = VariableAddress[a] :
|
||||
# 295| r295_2(glval<unknown>) = FunctionAddress[operator new] :
|
||||
# 295| r295_3(unsigned long) = Constant[4] :
|
||||
# 295| r295_4(void *) = Call : func:r295_2, 0:r295_3
|
||||
# 295| mu295_5(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 295| r295_6(A *) = Convert : r295_4
|
||||
# 295| r295_7(glval<unknown>) = FunctionAddress[A] :
|
||||
# 295| v295_8(void) = Call : func:r295_7, this:r295_6
|
||||
# 295| mu295_9(unknown) = ^CallSideEffect : ~mu291_4
|
||||
# 295| mu295_10(A) = ^IndirectMayWriteSideEffect[-1] : &:r295_6
|
||||
# 295| m295_11(A *) = Store : &:r295_1, r295_6
|
||||
# 296| r296_1(glval<Point *>) = VariableAddress[#return] :
|
||||
# 296| r296_2(glval<Point *>) = VariableAddress[p] :
|
||||
# 296| r296_3(Point *) = Load : &:r296_2, m292_7
|
||||
# 296| m296_4(Point *) = Store : &:r296_1, r296_3
|
||||
# 291| r291_7(glval<Point *>) = VariableAddress[#return] :
|
||||
# 291| v291_8(void) = ReturnValue : &:r291_7, m296_4
|
||||
# 291| v291_9(void) = UnmodeledUse : mu*
|
||||
# 291| v291_10(void) = AliasedUse : ~mu291_4
|
||||
# 291| v291_11(void) = ExitFunction :
|
||||
|
||||
Reference in New Issue
Block a user