Skip to content

Commit d82d5c2

Browse files
authored
Merge pull request #20026 from jketema/concept-fix
C++: Fix C++20 concept related class extensions
2 parents 391e9f7 + 232377a commit d82d5c2

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ class RequiresExpr extends Expr, @requires_expr {
5757
/**
5858
* A C++ requirement in a requires expression.
5959
*/
60-
class RequirementExpr extends Expr { }
60+
class RequirementExpr extends Expr {
61+
RequirementExpr() { this.getParent() instanceof RequiresExpr }
62+
}
6163

6264
/**
6365
* A C++ simple requirement in a requires expression.
@@ -70,7 +72,6 @@ class RequirementExpr extends Expr { }
7072
*/
7173
class SimpleRequirementExpr extends RequirementExpr {
7274
SimpleRequirementExpr() {
73-
this.getParent() instanceof RequiresExpr and
7475
not this instanceof TypeRequirementExpr and
7576
not this instanceof CompoundRequirementExpr and
7677
not this instanceof NestedRequirementExpr
@@ -89,8 +90,6 @@ class SimpleRequirementExpr extends RequirementExpr {
8990
* with `T` a template parameter, then `typename T::a_field;` is a type requirement.
9091
*/
9192
class TypeRequirementExpr extends RequirementExpr, TypeName {
92-
TypeRequirementExpr() { this.getParent() instanceof RequiresExpr }
93-
9493
override string getAPrimaryQlClass() { result = "TypeRequirementExpr" }
9594
}
9695

@@ -140,7 +139,7 @@ class CompoundRequirementExpr extends RequirementExpr, @compound_requirement {
140139
* with `T` a template parameter, then `requires std::is_same<T, int>::value;` is
141140
* a nested requirement.
142141
*/
143-
class NestedRequirementExpr extends Expr, @nested_requirement {
142+
class NestedRequirementExpr extends RequirementExpr, @nested_requirement {
144143
override string toString() { result = "requires ..." }
145144

146145
override string getAPrimaryQlClass() { result = "NestedRequirementExpr" }
@@ -163,7 +162,7 @@ class NestedRequirementExpr extends Expr, @nested_requirement {
163162
* then `C<int, 1>` is a concept id expression that refers to
164163
* the concept `C`.
165164
*/
166-
class ConceptIdExpr extends RequirementExpr, @concept_id {
165+
class ConceptIdExpr extends Expr, @concept_id {
167166
override string toString() {
168167
result = this.getConcept().getName() + "<...>"
169168
or

0 commit comments

Comments
 (0)