mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
C++: Prevent incomplete classes from being Types
Raw classes from the database that are incomplete and should be represented by their complete twin are now allowed to be `Element`s for performance reasons, but this commit prevents them from being `Type`s. It was causing confusion in test results and might also cause confusion in queries.
This commit is contained in:
@@ -12,8 +12,7 @@ private import semmle.code.cpp.internal.ResolveClass
|
||||
*/
|
||||
class Class extends UserType {
|
||||
Class() {
|
||||
isClass(this.underlying()) and
|
||||
this = resolveClass(_)
|
||||
isClass(this.underlying())
|
||||
}
|
||||
|
||||
override @element unresolve() {
|
||||
|
||||
@@ -7,6 +7,8 @@ private import semmle.code.cpp.internal.ResolveClass
|
||||
* A C/C++ type.
|
||||
*/
|
||||
class Type extends Locatable, @type {
|
||||
Type() { isType(this.underlying()) }
|
||||
|
||||
/**
|
||||
* Gets the name of this type.
|
||||
*/
|
||||
|
||||
@@ -54,4 +54,10 @@ cached private module Cached {
|
||||
(usertypes(t,_,1) or usertypes(t,_,2) or usertypes(t,_,3) or usertypes(t,_,6)
|
||||
or usertypes(t,_,10) or usertypes(t,_,11) or usertypes(t,_,12))
|
||||
}
|
||||
|
||||
cached predicate isType(@type t) {
|
||||
not isClass(t)
|
||||
or
|
||||
t = resolveClass(_)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user