C++: add test case from issue

This commit is contained in:
Robert Marsh
2020-05-26 11:38:14 -07:00
parent 43520b8f9b
commit 7ad45d50c0
5 changed files with 101 additions and 1 deletions

View File

@@ -1478,3 +1478,27 @@ ssa.cpp:
# 301| v301_14(void) = ReturnValue : &:r301_13, m304_7
# 301| v301_15(void) = AliasedUse : ~m303_11
# 301| v301_16(void) = ExitFunction :
# 310| void ThisAliasTest::setX(int)
# 310| Block 0
# 310| v310_1(void) = EnterFunction :
# 310| m310_2(unknown) = AliasedDefinition :
# 310| m310_3(unknown) = InitializeNonLocal :
# 310| m310_4(unknown) = Chi : total:m310_2, partial:m310_3
# 310| r310_5(glval<unknown>) = VariableAddress[#this] :
# 310| m310_6(glval<ThisAliasTest>) = InitializeParameter[#this] : &:r310_5
# 310| r310_7(glval<ThisAliasTest>) = Load : &:r310_5, m310_6
# 310| m310_8(ThisAliasTest) = InitializeIndirection[#this] : &:r310_7
# 310| r310_9(glval<int>) = VariableAddress[arg] :
# 310| m310_10(int) = InitializeParameter[arg] : &:r310_9
# 311| r311_1(glval<int>) = VariableAddress[arg] :
# 311| r311_2(int) = Load : &:r311_1, m310_10
# 311| r311_3(glval<unknown>) = VariableAddress[#this] :
# 311| r311_4(ThisAliasTest *) = Load : &:r311_3, m310_6
# 311| r311_5(glval<int>) = FieldAddress[x] : r311_4
# 311| m311_6(int) = Store : &:r311_5, r311_2
# 311| m311_7(unknown) = Chi : total:m310_8, partial:m311_6
# 312| v312_1(void) = NoOp :
# 310| v310_11(void) = ReturnVoid :
# 310| v310_12(void) = AliasedUse : m310_3
# 310| v310_13(void) = ExitFunction :

View File

@@ -1465,3 +1465,27 @@ ssa.cpp:
# 301| v301_13(void) = ReturnValue : &:r301_12, m304_7
# 301| v301_14(void) = AliasedUse : ~m303_8
# 301| v301_15(void) = ExitFunction :
# 310| void ThisAliasTest::setX(int)
# 310| Block 0
# 310| v310_1(void) = EnterFunction :
# 310| m310_2(unknown) = AliasedDefinition :
# 310| m310_3(unknown) = InitializeNonLocal :
# 310| m310_4(unknown) = Chi : total:m310_2, partial:m310_3
# 310| r310_5(glval<unknown>) = VariableAddress[#this] :
# 310| m310_6(glval<ThisAliasTest>) = InitializeParameter[#this] : &:r310_5
# 310| r310_7(glval<ThisAliasTest>) = Load : &:r310_5, m310_6
# 310| m310_8(ThisAliasTest) = InitializeIndirection[#this] : &:r310_7
# 310| r310_9(glval<int>) = VariableAddress[arg] :
# 310| m310_10(int) = InitializeParameter[arg] : &:r310_9
# 311| r311_1(glval<int>) = VariableAddress[arg] :
# 311| r311_2(int) = Load : &:r311_1, m310_10
# 311| r311_3(glval<unknown>) = VariableAddress[#this] :
# 311| r311_4(ThisAliasTest *) = Load : &:r311_3, m310_6
# 311| r311_5(glval<int>) = FieldAddress[x] : r311_4
# 311| m311_6(int) = Store : &:r311_5, r311_2
# 311| m311_7(unknown) = Chi : total:m310_8, partial:m311_6
# 312| v312_1(void) = NoOp :
# 310| v310_11(void) = ReturnVoid :
# 310| v310_12(void) = AliasedUse : m310_3
# 310| v310_13(void) = ExitFunction :

View File

@@ -302,4 +302,12 @@ int main(int argc, char **argv) {
unknownFunction(argc, argv);
unknownFunction(argc, argv);
return **argv; // Chi chain goes through side effects from unknownFunction
}
}
class ThisAliasTest {
int x, y;
void setX(int arg) {
this->x = arg;
}
};

View File

@@ -1348,3 +1348,25 @@ ssa.cpp:
# 301| v301_12(void) = ReturnValue : &:r301_11, m304_7
# 301| v301_13(void) = AliasedUse : ~m?
# 301| v301_14(void) = ExitFunction :
# 310| void ThisAliasTest::setX(int)
# 310| Block 0
# 310| v310_1(void) = EnterFunction :
# 310| mu310_2(unknown) = AliasedDefinition :
# 310| mu310_3(unknown) = InitializeNonLocal :
# 310| r310_4(glval<unknown>) = VariableAddress[#this] :
# 310| m310_5(glval<ThisAliasTest>) = InitializeParameter[#this] : &:r310_4
# 310| r310_6(glval<ThisAliasTest>) = Load : &:r310_4, m310_5
# 310| mu310_7(ThisAliasTest) = InitializeIndirection[#this] : &:r310_6
# 310| r310_8(glval<int>) = VariableAddress[arg] :
# 310| m310_9(int) = InitializeParameter[arg] : &:r310_8
# 311| r311_1(glval<int>) = VariableAddress[arg] :
# 311| r311_2(int) = Load : &:r311_1, m310_9
# 311| r311_3(glval<unknown>) = VariableAddress[#this] :
# 311| r311_4(ThisAliasTest *) = Load : &:r311_3, m310_5
# 311| r311_5(glval<int>) = FieldAddress[x] : r311_4
# 311| mu311_6(int) = Store : &:r311_5, r311_2
# 312| v312_1(void) = NoOp :
# 310| v310_10(void) = ReturnVoid :
# 310| v310_11(void) = AliasedUse : ~m?
# 310| v310_12(void) = ExitFunction :

View File

@@ -1348,3 +1348,25 @@ ssa.cpp:
# 301| v301_12(void) = ReturnValue : &:r301_11, m304_7
# 301| v301_13(void) = AliasedUse : ~m?
# 301| v301_14(void) = ExitFunction :
# 310| void ThisAliasTest::setX(int)
# 310| Block 0
# 310| v310_1(void) = EnterFunction :
# 310| mu310_2(unknown) = AliasedDefinition :
# 310| mu310_3(unknown) = InitializeNonLocal :
# 310| r310_4(glval<unknown>) = VariableAddress[#this] :
# 310| m310_5(glval<ThisAliasTest>) = InitializeParameter[#this] : &:r310_4
# 310| r310_6(glval<ThisAliasTest>) = Load : &:r310_4, m310_5
# 310| mu310_7(ThisAliasTest) = InitializeIndirection[#this] : &:r310_6
# 310| r310_8(glval<int>) = VariableAddress[arg] :
# 310| m310_9(int) = InitializeParameter[arg] : &:r310_8
# 311| r311_1(glval<int>) = VariableAddress[arg] :
# 311| r311_2(int) = Load : &:r311_1, m310_9
# 311| r311_3(glval<unknown>) = VariableAddress[#this] :
# 311| r311_4(ThisAliasTest *) = Load : &:r311_3, m310_5
# 311| r311_5(glval<int>) = FieldAddress[x] : r311_4
# 311| mu311_6(int) = Store : &:r311_5, r311_2
# 312| v312_1(void) = NoOp :
# 310| v310_10(void) = ReturnVoid :
# 310| v310_11(void) = AliasedUse : ~m?
# 310| v310_12(void) = ExitFunction :