Skip to content

Commit 7993cba

Browse files
committed
C++: fix global vars accesses in global vars
1 parent b5a2a2e commit 7993cba

File tree

5 files changed

+12
-6
lines changed

5 files changed

+12
-6
lines changed

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedElement.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ private Element getRealParent(Expr expr) {
2525
result.(Destructor).getADestruction() = expr
2626
}
2727

28-
IRUserVariable getIRUserVariable(Function func, Variable var) {
28+
IRUserVariable getIRUserVariable(Declaration decl, Variable var) {
2929
result.getVariable() = var and
30-
result.getEnclosingFunction() = func
30+
result.getEnclosingFunction() = decl
3131
}
3232

3333
IRTempVariable getIRTempVariable(Locatable ast, TempVariableTag tag) {

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,7 @@ class TranslatedNonFieldVariableAccess extends TranslatedVariableAccess {
841841

842842
override IRVariable getInstructionVariable(InstructionTag tag) {
843843
tag = OnlyInstructionTag() and
844-
result = getIRUserVariable(expr.getEnclosingFunction(), expr.getTarget())
844+
result = getIRUserVariable(expr.getEnclosingDeclaration(), expr.getTarget())
845845
}
846846
}
847847

cpp/ql/test/library-tests/ir/ir/operand_locations.expected

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8260,6 +8260,13 @@
82608260
| ir.cpp:1767:23:1767:37 | StoreValue | r1767_6 |
82618261
| ir.cpp:1767:23:1767:37 | Unary | r1767_4 |
82628262
| ir.cpp:1767:23:1767:37 | Unary | r1767_5 |
8263+
| ir.cpp:1769:5:1769:12 | Address | &:r1769_3 |
8264+
| ir.cpp:1769:5:1769:12 | SideEffect | ~m1769_7 |
8265+
| ir.cpp:1769:16:1769:23 | Address | &:r1769_4 |
8266+
| ir.cpp:1769:16:1769:23 | ChiPartial | partial:m1769_6 |
8267+
| ir.cpp:1769:16:1769:23 | ChiTotal | total:m1769_2 |
8268+
| ir.cpp:1769:16:1769:23 | Load | ~m1769_2 |
8269+
| ir.cpp:1769:16:1769:23 | StoreValue | r1769_5 |
82638270
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
82648271
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
82658272
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |

cpp/ql/test/library-tests/ir/ir/raw_consistency.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ nonUniqueEnclosingIRFunction
2828
fieldAddressOnNonPointer
2929
thisArgumentIsNonPointer
3030
nonUniqueIRVariable
31-
| 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 |
3231
missingCanonicalLanguageType
3332
multipleCanonicalLanguageTypes
3433
missingIRType

cpp/ql/test/library-tests/ir/ir/raw_ir.expected

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9499,8 +9499,8 @@ ir.cpp:
94999499
# 1769| v1769_1(void) = EnterFunction :
95009500
# 1769| mu1769_2(unknown) = AliasedDefinition :
95019501
# 1769| r1769_3(glval<int>) = VariableAddress[global_6] :
9502-
# 1769| r1769_4(glval<int>) = VariableAddress :
9503-
# 1769| r1769_5(int) = Load[?] : &:r1769_4, ~m?
9502+
# 1769| r1769_4(glval<int>) = VariableAddress[global_2] :
9503+
# 1769| r1769_5(int) = Load[global_2] : &:r1769_4, ~m?
95049504
# 1769| mu1769_6(int) = Store[global_6] : &:r1769_3, r1769_5
95059505
# 1769| v1769_7(void) = ReturnVoid :
95069506
# 1769| v1769_8(void) = AliasedUse : ~m?

0 commit comments

Comments
 (0)