Skip to content

Commit eb3e864

Browse files
authored
Merge pull request #20784 from jketema/qual-fail
C++: Fix named qualifier dataset check error with decltypes
2 parents 3de598e + 0bf415a commit eb3e864

File tree

10 files changed

+9767
-9
lines changed

10 files changed

+9767
-9
lines changed

cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/old.dbscheme

Lines changed: 2437 additions & 0 deletions
Large diffs are not rendered by default.

cpp/downgrades/2121ffec11fac265524955fee1775217364d4ca4/semmlecode.cpp.dbscheme

Lines changed: 2436 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
description: Fix decltype qualifier issue
2+
compatibility: full

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,14 +144,14 @@ class NameQualifiableElement extends Element, @namequalifiableelement {
144144
class NameQualifyingElement extends Element, @namequalifyingelement {
145145
/**
146146
* Gets a name qualifier for which this is the qualifying namespace or
147-
* user-defined type. For example: class `X` is the
147+
* user-defined type, or decltype. For example: class `X` is the
148148
* `NameQualifyingElement` and `X::` is the `NameQualifier`.
149149
*/
150150
NameQualifier getANameQualifier() {
151151
namequalifiers(unresolveElement(result), _, underlyingElement(this), _)
152152
}
153153

154-
/** Gets the name of this namespace or user-defined type. */
154+
/** Gets the name of this namespace, user-defined type, or decltype. */
155155
string getName() { none() }
156156
}
157157

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,7 +1146,7 @@ class DerivedType extends Type, @derivedtype {
11461146
* decltype(a) b;
11471147
* ```
11481148
*/
1149-
class Decltype extends Type {
1149+
class Decltype extends Type, NameQualifyingElement {
11501150
Decltype() { decltypes(underlyingElement(this), _, 0, _, _) }
11511151

11521152
override string getAPrimaryQlClass() { result = "Decltype" }
@@ -1187,7 +1187,7 @@ class Decltype extends Type {
11871187

11881188
override string toString() { result = "decltype(...)" }
11891189

1190-
override string getName() { none() }
1190+
override string getName() { result = "decltype(...)" }
11911191

11921192
override int getSize() { result = this.getBaseType().getSize() }
11931193

@@ -1247,7 +1247,7 @@ class TypeofType extends Type {
12471247

12481248
override string toString() { result = "typeof(...)" }
12491249

1250-
override string getName() { none() }
1250+
override string getName() { result = "typeof(...)" }
12511251

12521252
override int getSize() { result = this.getBaseType().getSize() }
12531253

@@ -1311,8 +1311,6 @@ class TypeofTypeType extends TypeofType {
13111311
Type getType() { type_operators(underlyingElement(this), unresolveElement(result), _, _) }
13121312

13131313
override string getAPrimaryQlClass() { result = "TypeofTypeType" }
1314-
1315-
override string toString() { result = "typeof(...)" }
13161314
}
13171315

13181316
/**
@@ -1394,7 +1392,7 @@ class IntrinsicTransformedType extends Type {
13941392

13951393
override Type resolveTypedefs() { result = this.getBaseType().resolveTypedefs() }
13961394

1397-
override string getName() { none() }
1395+
override string getName() { result = this.getIntrinsicName() + "(...)" }
13981396

13991397
override int getSize() { result = this.getBaseType().getSize() }
14001398

cpp/ql/lib/semmlecode.cpp.dbscheme

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1327,7 +1327,8 @@ specialnamequalifyingelements(
13271327
@namequalifiableelement = @expr | @namequalifier;
13281328
@namequalifyingelement = @namespace
13291329
| @specialnamequalifyingelement
1330-
| @usertype;
1330+
| @usertype
1331+
| @decltype;
13311332

13321333
namequalifiers(
13331334
unique int id: @namequalifier,

0 commit comments

Comments
 (0)