C++: fix global vars accesses in global vars

This commit is contained in:
Robert Marsh
2022-05-02 12:27:10 -04:00
parent b5a2a2e8c2
commit 7993cba457
5 changed files with 12 additions and 6 deletions

View File

@@ -25,9 +25,9 @@ private Element getRealParent(Expr expr) {
result.(Destructor).getADestruction() = expr
}
IRUserVariable getIRUserVariable(Function func, Variable var) {
IRUserVariable getIRUserVariable(Declaration decl, Variable var) {
result.getVariable() = var and
result.getEnclosingFunction() = func
result.getEnclosingFunction() = decl
}
IRTempVariable getIRTempVariable(Locatable ast, TempVariableTag tag) {

View File

@@ -841,7 +841,7 @@ class TranslatedNonFieldVariableAccess extends TranslatedVariableAccess {
override IRVariable getInstructionVariable(InstructionTag tag) {
tag = OnlyInstructionTag() and
result = getIRUserVariable(expr.getEnclosingFunction(), expr.getTarget())
result = getIRUserVariable(expr.getEnclosingDeclaration(), expr.getTarget())
}
}

View File

@@ -8260,6 +8260,13 @@
| ir.cpp:1767:23:1767:37 | StoreValue | r1767_6 |
| ir.cpp:1767:23:1767:37 | Unary | r1767_4 |
| ir.cpp:1767:23:1767:37 | Unary | r1767_5 |
| ir.cpp:1769:5:1769:12 | Address | &:r1769_3 |
| ir.cpp:1769:5:1769:12 | SideEffect | ~m1769_7 |
| ir.cpp:1769:16:1769:23 | Address | &:r1769_4 |
| ir.cpp:1769:16:1769:23 | ChiPartial | partial:m1769_6 |
| ir.cpp:1769:16:1769:23 | ChiTotal | total:m1769_2 |
| ir.cpp:1769:16:1769:23 | Load | ~m1769_2 |
| ir.cpp:1769:16:1769:23 | StoreValue | r1769_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

View File

@@ -28,7 +28,6 @@ nonUniqueEnclosingIRFunction
fieldAddressOnNonPointer
thisArgumentIsNonPointer
nonUniqueIRVariable
| ir.cpp:1769:16:1769:23 | VariableAddress: global_2 | Variable address instruction 'VariableAddress: global_2' has no associated variable, in function '$@'. | ir.cpp:1769:5:1769:12 | int global_6 | int global_6 |
missingCanonicalLanguageType
multipleCanonicalLanguageTypes
missingIRType

View File

@@ -9499,8 +9499,8 @@ ir.cpp:
# 1769| v1769_1(void) = EnterFunction :
# 1769| mu1769_2(unknown) = AliasedDefinition :
# 1769| r1769_3(glval<int>) = VariableAddress[global_6] :
# 1769| r1769_4(glval<int>) = VariableAddress :
# 1769| r1769_5(int) = Load[?] : &:r1769_4, ~m?
# 1769| r1769_4(glval<int>) = VariableAddress[global_2] :
# 1769| r1769_5(int) = Load[global_2] : &:r1769_4, ~m?
# 1769| mu1769_6(int) = Store[global_6] : &:r1769_3, r1769_5
# 1769| v1769_7(void) = ReturnVoid :
# 1769| v1769_8(void) = AliasedUse : ~m?