Skip to content

Commit e43f7fb

Browse files
committed
C++: Fix AST printing for OverloadedArrayExpr
1 parent 0a7ed15 commit e43f7fb

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

cpp/ql/lib/semmle/code/cpp/PrintAST.qll

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -954,17 +954,26 @@ private predicate namedExprChildPredicates(Expr expr, Element ele, string pred)
954954
expr.(C11GenericExpr).getAssociationExpr(n) = ele and pred = "getAssociationExpr(" + n + ")"
955955
)
956956
or
957-
expr.(Call).getQualifier() = ele and pred = "getQualifier()"
958-
or
959-
exists(int n | expr.(Call).getArgument(n) = ele and pred = "getArgument(" + n.toString() + ")")
957+
// OverloadedArrayExpr::getArrayBase/0 also considers qualifiers, and is already handled below.
958+
not expr.(OverloadedArrayExpr).getArrayBase() = expr.(Call).getQualifier() and
959+
expr.(Call).getQualifier() = ele and
960+
pred = "getQualifier()"
961+
or
962+
// OverloadedArrayExpr::getArrayBase/0 and OverloadedArrayExpr::getArrayOffset/0 also consider arguments, and are already handled below.
963+
exists(int n, Expr arg | expr.(Call).getArgument(n) = arg |
964+
not expr.(OverloadedArrayExpr).getArrayBase() = arg and
965+
not expr.(OverloadedArrayExpr).getArrayOffset() = arg and
966+
arg = ele and
967+
pred = "getArgument(" + n.toString() + ")"
968+
)
960969
or
961970
expr.(ExprCall).getExpr() = ele and pred = "getExpr()"
962971
or
963972
expr.(OverloadedArrayExpr).getArrayBase() = ele and pred = "getArrayBase()"
964973
or
965974
expr.(OverloadedArrayExpr).getArrayOffset() = ele and pred = "getArrayOffset()"
966975
or
967-
// OverloadedPointerDereferenceExpr::getExpr/0 also considers qualifiers, which are already handled above for all Call classes.
976+
// OverloadedPointerDereferenceExpr::getExpr/0 also considers qualifiers, and is already handled above for all Call classes.
968977
not expr.(OverloadedPointerDereferenceExpr).getQualifier() =
969978
expr.(OverloadedPointerDereferenceExpr).getExpr() and
970979
expr.(OverloadedPointerDereferenceExpr).getExpr() = ele and

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24112,7 +24112,7 @@ ir.cpp:
2411224112
# 2725| getArrayBase(): [VariableAccess] line
2411324113
# 2725| Type = [SpecifiedType] const WithBracketOperator
2411424114
# 2725| ValueCategory = lvalue
24115-
# 2725| : [VariableAccess] indent
24115+
# 2725| getArrayOffset(): [VariableAccess] indent
2411624116
# 2725| Type = [IntType] int
2411724117
# 2725| ValueCategory = prvalue(load)
2411824118
# 2725| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)

0 commit comments

Comments
 (0)