C++: Add testcases with new and accept output

This commit is contained in:
Mathias Vorreiter Pedersen
2020-03-31 12:22:07 +02:00
parent e31143c9f8
commit 688464a00f
9 changed files with 550 additions and 0 deletions

View File

@@ -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 | |

View File

@@ -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 |

View File

@@ -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 | |

View File

@@ -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;
}
}

View File

@@ -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 :

View File

@@ -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 :

View File

@@ -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;
}

View File

@@ -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 :

View File

@@ -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 :