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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy