mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
C++: Tighten up definitions of field accesses
This commit is contained in:
@@ -311,7 +311,7 @@ class ImplicitThisFieldAccess extends FieldAccess {
|
||||
override string getAPrimaryQlClass() { result = "ImplicitThisFieldAccess" }
|
||||
|
||||
ImplicitThisFieldAccess() {
|
||||
this.getQualifier().isCompilerGenerated() or not exists(this.getQualifier())
|
||||
this.getQualifier().(ThisExpr).isCompilerGenerated() or not exists(this.getQualifier())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -330,7 +330,7 @@ class PointerToFieldLiteral extends ImplicitThisFieldAccess {
|
||||
// access without a qualifier. The only other unqualified field accesses it
|
||||
// emits are for compiler-generated constructors and destructors. When we
|
||||
// filter those out, there are only pointer-to-field literals left.
|
||||
not this.isCompilerGenerated()
|
||||
not this.isCompilerGenerated() and not exists(this.getQualifier())
|
||||
}
|
||||
|
||||
override predicate isConstant() { any() }
|
||||
|
||||
@@ -83,7 +83,7 @@ bad_asts.cpp:
|
||||
# 10| Type = [IntType] int
|
||||
# 10| Value = [Literal] 6
|
||||
# 10| ValueCategory = prvalue
|
||||
# 10| getRightOperand(): [PointerFieldAccess] x
|
||||
# 10| getRightOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x
|
||||
# 10| Type = [IntType] int
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
# 10| getQualifier(): [ThisExpr] this
|
||||
@@ -108,7 +108,7 @@ bad_asts.cpp:
|
||||
# 10| Type = [IntType] int
|
||||
# 10| Value = [Literal] t
|
||||
# 10| ValueCategory = prvalue
|
||||
# 10| getRightOperand(): [PointerFieldAccess] x
|
||||
# 10| getRightOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x
|
||||
# 10| Type = [IntType] int
|
||||
# 10| ValueCategory = prvalue(load)
|
||||
# 10| getQualifier(): [ThisExpr] this
|
||||
@@ -5718,7 +5718,7 @@ ir.cpp:
|
||||
# 645| getExpr(): [AssignExpr] ... = ...
|
||||
# 645| Type = [IntType] int
|
||||
# 645| ValueCategory = lvalue
|
||||
# 645| getLValue(): [PointerFieldAccess] m_a
|
||||
# 645| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] m_a
|
||||
# 645| Type = [IntType] int
|
||||
# 645| ValueCategory = lvalue
|
||||
# 645| getQualifier(): [ThisExpr] this
|
||||
@@ -5770,7 +5770,7 @@ ir.cpp:
|
||||
# 649| getLValue(): [VariableAccess] x
|
||||
# 649| Type = [IntType] int
|
||||
# 649| ValueCategory = lvalue
|
||||
# 649| getRValue(): [PointerFieldAccess] m_a
|
||||
# 649| getRValue(): [ImplicitThisFieldAccess,PointerFieldAccess] m_a
|
||||
# 649| Type = [IntType] int
|
||||
# 649| ValueCategory = prvalue(load)
|
||||
# 649| getQualifier(): [ThisExpr] this
|
||||
@@ -9012,7 +9012,7 @@ ir.cpp:
|
||||
# 1043| getArrayBase(): [FunctionCall] call to c_str
|
||||
# 1043| Type = [PointerType] const char *
|
||||
# 1043| ValueCategory = prvalue
|
||||
# 1043| getQualifier(): [PointerFieldAccess] s
|
||||
# 1043| getQualifier(): [ImplicitThisFieldAccess,PointerFieldAccess] s
|
||||
# 1043| Type = [LValueReferenceType] const String &
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
# 1043| getQualifier(): [ThisExpr] this
|
||||
@@ -9021,7 +9021,7 @@ ir.cpp:
|
||||
# 1043| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1043| Type = [SpecifiedType] const String
|
||||
# 1043| ValueCategory = lvalue
|
||||
# 1043| getArrayOffset(): [PointerFieldAccess] x
|
||||
# 1043| getArrayOffset(): [ImplicitThisFieldAccess,PointerFieldAccess] x
|
||||
# 1043| Type = [LValueReferenceType] int &
|
||||
# 1043| ValueCategory = prvalue(load)
|
||||
# 1043| getQualifier(): [ThisExpr] this
|
||||
@@ -9070,13 +9070,13 @@ ir.cpp:
|
||||
# 1045| getArrayBase(): [FunctionCall] call to c_str
|
||||
# 1045| Type = [PointerType] const char *
|
||||
# 1045| ValueCategory = prvalue
|
||||
# 1045| getQualifier(): [PointerFieldAccess] s
|
||||
# 1045| getQualifier(): [ImplicitThisFieldAccess,PointerFieldAccess] s
|
||||
# 1045| Type = [SpecifiedType] const String
|
||||
# 1045| ValueCategory = lvalue
|
||||
# 1045| getQualifier(): [ThisExpr] this
|
||||
# 1045| Type = [PointerType] const lambda [] type at line 1045, col. 21 *
|
||||
# 1045| ValueCategory = prvalue(load)
|
||||
# 1045| getArrayOffset(): [PointerFieldAccess] x
|
||||
# 1045| getArrayOffset(): [ImplicitThisFieldAccess,PointerFieldAccess] x
|
||||
# 1045| Type = [IntType] int
|
||||
# 1045| ValueCategory = prvalue(load)
|
||||
# 1045| getQualifier(): [ThisExpr] this
|
||||
@@ -9108,7 +9108,7 @@ ir.cpp:
|
||||
# 1047| getArrayBase(): [FunctionCall] call to c_str
|
||||
# 1047| Type = [PointerType] const char *
|
||||
# 1047| ValueCategory = prvalue
|
||||
# 1047| getQualifier(): [PointerFieldAccess] s
|
||||
# 1047| getQualifier(): [ImplicitThisFieldAccess,PointerFieldAccess] s
|
||||
# 1047| Type = [LValueReferenceType] const String &
|
||||
# 1047| ValueCategory = prvalue(load)
|
||||
# 1047| getQualifier(): [ThisExpr] this
|
||||
@@ -9161,7 +9161,7 @@ ir.cpp:
|
||||
# 1049| getArrayBase(): [FunctionCall] call to c_str
|
||||
# 1049| Type = [PointerType] const char *
|
||||
# 1049| ValueCategory = prvalue
|
||||
# 1049| getQualifier(): [PointerFieldAccess] s
|
||||
# 1049| getQualifier(): [ImplicitThisFieldAccess,PointerFieldAccess] s
|
||||
# 1049| Type = [SpecifiedType] const String
|
||||
# 1049| ValueCategory = lvalue
|
||||
# 1049| getQualifier(): [ThisExpr] this
|
||||
@@ -9197,7 +9197,7 @@ ir.cpp:
|
||||
# 1051| getArrayBase(): [FunctionCall] call to c_str
|
||||
# 1051| Type = [PointerType] const char *
|
||||
# 1051| ValueCategory = prvalue
|
||||
# 1051| getQualifier(): [PointerFieldAccess] s
|
||||
# 1051| getQualifier(): [ImplicitThisFieldAccess,PointerFieldAccess] s
|
||||
# 1051| Type = [LValueReferenceType] const String &
|
||||
# 1051| ValueCategory = prvalue(load)
|
||||
# 1051| getQualifier(): [ThisExpr] this
|
||||
@@ -9206,7 +9206,7 @@ ir.cpp:
|
||||
# 1051| getQualifier().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
|
||||
# 1051| Type = [SpecifiedType] const String
|
||||
# 1051| ValueCategory = lvalue
|
||||
# 1051| getArrayOffset(): [PointerFieldAccess] x
|
||||
# 1051| getArrayOffset(): [ImplicitThisFieldAccess,PointerFieldAccess] x
|
||||
# 1051| Type = [IntType] int
|
||||
# 1051| ValueCategory = prvalue(load)
|
||||
# 1051| getQualifier(): [ThisExpr] this
|
||||
@@ -9238,7 +9238,7 @@ ir.cpp:
|
||||
# 1054| getArrayBase(): [FunctionCall] call to c_str
|
||||
# 1054| Type = [PointerType] const char *
|
||||
# 1054| ValueCategory = prvalue
|
||||
# 1054| getQualifier(): [PointerFieldAccess] s
|
||||
# 1054| getQualifier(): [ImplicitThisFieldAccess,PointerFieldAccess] s
|
||||
# 1054| Type = [LValueReferenceType] const String &
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| getQualifier(): [ThisExpr] this
|
||||
@@ -9253,7 +9253,7 @@ ir.cpp:
|
||||
# 1054| getLeftOperand(): [AddExpr] ... + ...
|
||||
# 1054| Type = [IntType] int
|
||||
# 1054| ValueCategory = prvalue
|
||||
# 1054| getLeftOperand(): [PointerFieldAccess] x
|
||||
# 1054| getLeftOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] x
|
||||
# 1054| Type = [IntType] int
|
||||
# 1054| ValueCategory = prvalue(load)
|
||||
# 1054| getQualifier(): [ThisExpr] this
|
||||
@@ -11484,7 +11484,7 @@ ir.cpp:
|
||||
# 1458| getExpr(): [AssignExpr] ... = ...
|
||||
# 1458| Type = [IntType] int
|
||||
# 1458| ValueCategory = lvalue
|
||||
# 1458| getLValue(): [PointerFieldAccess] y
|
||||
# 1458| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] y
|
||||
# 1458| Type = [IntType] int
|
||||
# 1458| ValueCategory = lvalue
|
||||
# 1458| getQualifier(): [ThisExpr] this
|
||||
@@ -12296,7 +12296,7 @@ ir.cpp:
|
||||
# 1567| <params>:
|
||||
# 1567| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1568| getStmt(0): [ReturnStmt] return ...
|
||||
# 1568| getExpr(): [PointerFieldAccess] i
|
||||
# 1568| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i
|
||||
# 1568| Type = [IntType] int
|
||||
# 1568| ValueCategory = lvalue
|
||||
# 1568| getQualifier(): [ThisExpr] this
|
||||
@@ -12309,7 +12309,7 @@ ir.cpp:
|
||||
# 1571| <params>:
|
||||
# 1571| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1572| getStmt(0): [ReturnStmt] return ...
|
||||
# 1572| getExpr(): [PointerFieldAccess] d
|
||||
# 1572| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] d
|
||||
# 1572| Type = [DoubleType] double
|
||||
# 1572| ValueCategory = lvalue
|
||||
# 1572| getQualifier(): [ThisExpr] this
|
||||
@@ -12322,7 +12322,7 @@ ir.cpp:
|
||||
# 1575| <params>:
|
||||
# 1575| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1576| getStmt(0): [ReturnStmt] return ...
|
||||
# 1576| getExpr(): [PointerFieldAccess] r
|
||||
# 1576| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r
|
||||
# 1576| Type = [LValueReferenceType] int &
|
||||
# 1576| ValueCategory = prvalue(load)
|
||||
# 1576| getQualifier(): [ThisExpr] this
|
||||
@@ -12663,7 +12663,7 @@ ir.cpp:
|
||||
# 1633| <params>:
|
||||
# 1633| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1634| getStmt(0): [ReturnStmt] return ...
|
||||
# 1634| getExpr(): [PointerFieldAccess] i
|
||||
# 1634| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] i
|
||||
# 1634| Type = [IntType] int
|
||||
# 1634| ValueCategory = prvalue(load)
|
||||
# 1634| getQualifier(): [ThisExpr] this
|
||||
@@ -12673,7 +12673,7 @@ ir.cpp:
|
||||
# 1637| <params>:
|
||||
# 1637| getEntryPoint(): [BlockStmt] { ... }
|
||||
# 1638| getStmt(0): [ReturnStmt] return ...
|
||||
# 1638| getExpr(): [PointerFieldAccess] r
|
||||
# 1638| getExpr(): [ImplicitThisFieldAccess,PointerFieldAccess] r
|
||||
# 1638| Type = [LValueReferenceType] int &
|
||||
# 1638| ValueCategory = prvalue(load)
|
||||
# 1638| getQualifier(): [ThisExpr] this
|
||||
@@ -13284,7 +13284,7 @@ ir.cpp:
|
||||
# 1703| getQualifier(): [AddressOfExpr] & ...
|
||||
# 1703| Type = [PointerType] const TrivialLambdaClass *
|
||||
# 1703| ValueCategory = prvalue
|
||||
# 1703| getOperand(): [PointerFieldAccess] (captured this)
|
||||
# 1703| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this)
|
||||
# 1703| Type = [SpecifiedType] const TrivialLambdaClass
|
||||
# 1703| ValueCategory = lvalue
|
||||
# 1703| getQualifier(): [ThisExpr] this
|
||||
@@ -13331,7 +13331,7 @@ ir.cpp:
|
||||
# 1706| getQualifier(): [AddressOfExpr] & ...
|
||||
# 1706| Type = [PointerType] const TrivialLambdaClass *
|
||||
# 1706| ValueCategory = prvalue
|
||||
# 1706| getOperand(): [PointerFieldAccess] (captured this)
|
||||
# 1706| getOperand(): [ImplicitThisFieldAccess,PointerFieldAccess] (captured this)
|
||||
# 1706| Type = [SpecifiedType] const TrivialLambdaClass
|
||||
# 1706| ValueCategory = lvalue
|
||||
# 1706| getQualifier(): [ThisExpr] this
|
||||
@@ -13477,7 +13477,7 @@ ir.cpp:
|
||||
# 1726| getExpr(): [AssignExpr] ... = ...
|
||||
# 1726| Type = [IntType] int
|
||||
# 1726| ValueCategory = lvalue
|
||||
# 1726| getLValue(): [PointerFieldAccess] x
|
||||
# 1726| getLValue(): [ImplicitThisFieldAccess,PointerFieldAccess] x
|
||||
# 1726| Type = [IntType] int
|
||||
# 1726| ValueCategory = lvalue
|
||||
# 1726| getQualifier(): [ThisExpr] this
|
||||
|
||||
Reference in New Issue
Block a user