CodeQL library for C/C++
codeql/cpp-all 0.13.1 (changelog, source)

Class Symbol

A program element which can be the target of inter-function or inter-file dependencies.

This is the union of Declaration, DeclarationEntry and Macro, minus various kinds of declaration:

  • FriendDecl is not included, as a friend declaration cannot be the target of a dependency (nor, as it happens, can they be a source).
  • TemplateParameter and related UserTypes are not included, as they are intrinsic sub-components of their associated template.
  • Template instantiations are excluded, as the template itself is more useful as a dependency target.
  • Stack variables and local types are excluded, as they are lexically tied to their enclosing function, and intra-function dependencies can only be inter-file dependencies in pathological cases.
  • Builtin functions and macros are excluded, as dependencies on them do not translate to inter-file dependencies (note that static functions and declarations within anonymous namespaces cannot be excluded for this reason, as the declaration can be in a header).
  • DeclarationEntrys are only needed if they’re not definitions, for the definition to declaration dependency.

Import path

import semmle.code.cpp.commons.Dependency

Direct supertypes

Indirect supertypes



Gets an element which depends upon this symbol.

Inherited predicates


Gets the source of this element: either itself or a macro that expanded to this element.

from Element

Holds if this element may be from source. This predicate holds for all elements, except for those in the dummy file, whose name is the empty string. The dummy file contains declarations that are built directly into the compiler.

from Element

Gets the name of a primary CodeQL class to which this element belongs.

from ElementBase

Gets the closest Element enclosing this one.

from Element

Gets the primary file where this element occurs.

from Element

Gets the primary location of this element.

from Element

Gets the parent scope of this Element, if any. A scope is a Type (Class / Enum), a Namespace, a BlockStmt, a Function, or certain kinds of Statement.

from Element

Gets a comma-separated list of the names of the primary CodeQL classes to which this element belongs.

from ElementBase

Holds if this element is affected in any way by a macro. All elements that are totally or partially generated by a macro are included, so this is a super-set of isInMacroExpansion.

from Element

Holds if this Element is a part of a template instantiation (but not the template itself).

from Element

Holds if this Element is part of a template template (not if it is part of an instantiation of template). This means it is represented in the database purely as syntax and without guarantees on the presence or correctness of type-based operations such as implicit conversions.

from Element

Holds if this element comes from a macro expansion. Only elements that are entirely generated by a macro are included - for elements that partially come from a macro, see isAffectedByMacro.

from Element

Gets a textual representation of this element.

from ElementBase