Class Function
A C/C++ function [N4140 8.3.5]. Both member functions and non-member
functions are included. For example the function MyFunction
in:
void MyFunction() {
DoSomething();
}
Function has a one-to-many relationship with FunctionDeclarationEntry,
because the same function can be declared in multiple locations. This
relationship between Declaration
and DeclarationEntry
is explained
in more detail in Declaration.qll
.
Import path
import cpp
Direct supertypes
Indirect supertypes
Known direct subtypes
- AliasFunction
- AllocationFunction
- ArrayFunction
- BuiltInFunction
- CommandExecutionFunction
- DeallocationFunction
- DeductionGuide
- FunctionTemplateInstantiation
- FunctionTemplateSpecialization
- FunctionWithWrappers
- GetIteratorFunction
- HeuristicAllocationFunction
- IteratorReferenceFunction
- LocalFlowSourceFunction
- MemberFunction
- MetricFunction
- Operator
- OverloadedPointerDereferenceFunction
- PartialFlowFunction
- PrivateDataFunction
- RemoteFlowSinkFunction
- RemoteFlowSourceFunction
- ScanfFunction
- SensitiveFunction
- SideEffectFunction
- SqlBarrierFunction
- SqlExecutionFunction
- SslSetOptionsFunction
- TemplateFunction
- ThrowingFunction
- TopLevelFunction
- UserDefinedLiteral
Predicates
accesses | Holds if this function accesses a function or variable or enumerator |
accesses | Holds if this function accesses a function or variable or enumerator |
calls | Holds if this function calls the function |
calls | Holds if this function calls the function |
getACallToThisFunction | Gets a call to this function. |
getADeclaration | Gets a child declaration of this function. |
getADeclarationEntry | Gets a declaration entry corresponding to this declaration. The relationship between |
getADeclarationLocation | Gets the location of a |
getALinkTarget | Gets a link target which compiled or referenced this function. |
getAParameter | Gets a parameter of this function. There is no result for the implicit |
getASpecifier | Gets a specifier of this function. |
getAThrownType | Gets a type that is specified to be thrown by the function. |
getAWrittenVariable | Gets a variable that is written-to in this function. |
getAnAccess | Gets an access of this function. |
getAnAttribute | Gets an attribute of this function. |
getAnOverload | Gets a function that overloads this one. |
getBlock | Gets the block that is the function body. |
getClassAndName | Gets the class of which this function, called |
getControlFlowScope | Implements |
getDefinition | Gets the declaration entry corresponding to this declaration that is a definition, if any. |
getDefinitionLocation | Gets the location of the definition, if any. |
getEffectiveNumberOfParameters | Gets the number of parameters of this function, including any implicit |
getEnclosingAccessHolder | Gets the nearest enclosing AccessHolder. |
getEnclosingStmt | Implements |
getEntryPoint | Gets the first node in this function’s control flow graph. |
getExplicitExpr | Gets the constant expression that determines whether the function is explicit. |
getFullSignature | DEPRECATED: Use |
getLocation | Gets the preferred location of this declaration. (The location of the definition, if possible.) |
getMetrics | Gets the metric class. |
getName | Gets the name of this declaration. |
getNumberOfParameters | Gets the number of parameters of this function, not including any implicit |
getParameter | Gets the nth parameter of this function. There is no result for the implicit |
getParameterString | Gets a string representing the parameters of this function. |
getThrownType | Gets the |
getType | Gets the return type of this function. |
getUnspecifiedType | Gets the return type of this function after specifiers have been deeply stripped and typedefs have been resolved. |
hasCLinkage | Holds if this function has C linkage, as specified by one of its declaration entries. For example: |
hasEntryPoint | Holds if this function has an entry point. |
hasExceptionSpecification | Holds if the function has an exception specification. |
hasTrailingReturnType | Holds if this function has a trailing return type. |
isCompilerGenerated | Holds if this function is generated by the compiler. |
isConsteval | Holds if this function is declared to be |
isConstexpr | Holds if this function is |
isConstructedFrom | Holds if this function is constructed from |
isDeclaredConstexpr | Holds if this function is declared to be |
isDeclaredVirtual | Holds if this function is declared with the |
isDefaulted | Holds if this function is explicitly defaulted with the |
isDeleted | Holds if this function is deleted. This may be because it was explicitly deleted with an |
isExplicit | Holds if this function is declared to be |
isFinal | Holds if this function is declared with the |
isInline | Holds if this function is inline. |
isMultiplyDefined | Holds if this function is defined in several files. This is illegal in C (though possible in some C++ compilers), and likely indicates that several functions that are not linked together have been compiled. An example would be a project with many ‘main’ functions. |
isNaked | Holds if this function is declared with |
isNoExcept | Holds if this function has a |
isNoThrow | Holds if this function has a |
isOverride | Holds if this function is declared with the |
isPrototyped | Holds if this function has a prototyped interface. |
isSideEffectFree | Holds if this function is side-effect free (conservative approximation). |
isSpecialization | Holds if this Function is a Template specialization. |
isVarargs | Holds if this function is a varargs function. |
isVirtual | Holds if this function is virtual. |
mayHaveSideEffects | Holds if this function may have side-effects; if in doubt, we assume it may. |
Inherited predicates
canAccessClass | Holds if a base class | from AccessHolder |
canAccessMember | Holds if a non-static member | from AccessHolder |
couldAccessMember | Holds if a hypothetical non-static member of | from AccessHolder |
findRootCause | Gets the source of this element: either itself or a macro that expanded to this element. | from Element |
fromSource | 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 |
getAFalseSuccessor | Gets a node such that the control-flow edge | from ControlFlowNode |
getAFile | Gets a file where this element occurs. | from Declaration |
getAPredecessor | Gets a direct predecessor of this control-flow node, if any. | from ControlFlowNode |
getAPrimaryQlClass | Gets the name of a primary CodeQL class to which this element belongs. | from ElementBase |
getASuccessor | Gets a direct successor of this control-flow node, if any. | from ControlFlowNode |
getATemplateArgument | Gets a template argument used to instantiate this declaration from a template. When called on a template, this will return a template parameter type for both typed and non-typed parameters. | from Declaration |
getATemplateArgumentKind | Gets a template argument used to instantiate this declaration from a template. When called on a template, this will return a non-typed template parameter value. | from Declaration |
getATrueSuccessor | Gets a node such that the control-flow edge | from ControlFlowNode |
getBasicBlock | Gets the | from ControlFlowNode |
getDeclaringType | Gets the class where this member is declared, if it is a member. For templates, both the template itself and all instantiations of the template are considered to have the same declaring class. | from Declaration |
getDescription | Gets a description of this | from Declaration |
getEnclosingElement | Gets the closest | from Element |
getFile | Gets the primary file where this element occurs. | from Element |
getNamespace | Gets the innermost namespace which contains this declaration. | from Declaration |
getNumberOfTemplateArguments | Gets the number of template arguments for this declaration. | from Declaration |
getParentScope | Gets the parent scope of this | from Element |
getPrimaryQlClasses | Gets a comma-separated list of the names of the primary CodeQL classes to which this element belongs. | from ElementBase |
getQualifiedName | Gets the name of the declaration, fully qualified with its namespace and declaring type. | from Declaration |
getTemplateArgument | Gets the | from Declaration |
getTemplateArgumentKind | Gets the | from Declaration |
hasDeclaringType | Holds if this declaration is a member of a class/struct/union. | from Declaration |
hasDefinition | Holds if the declaration has a definition. | from Declaration |
hasGlobalName | Holds if this declaration has the given name in the global namespace. | from Declaration |
hasGlobalOrStdName | Holds if this declaration has the given name in the global namespace or the | from Declaration |
hasGlobalOrStdOrBslName | Holds if this declaration has the given name in the global namespace, the | from Declaration |
hasName | Holds if this declaration has the given name. | from Declaration |
hasQualifiedName | DEPRECATED: Prefer | from Declaration |
hasQualifiedName | Holds if this declaration has a fully-qualified name with a name-space component of | from Declaration |
hasQualifiedName | Holds if this declaration has a fully-qualified name with a name-space component of | from Declaration |
hasSpecifier | Holds if this declaration has a specifier with the given name. | from Declaration |
inMemberOrFriendOf | Holds if | from AccessHolder |
isAffectedByMacro | 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 | from Element |
isCondition | Holds if this node is the top-level expression of a conditional statement, meaning that | from ControlFlowNode |
isDefined | DEPRECATED: Use | from Declaration |
isFromTemplateInstantiation | Holds if this | from Element |
isFromUninstantiatedTemplate | Holds if this | from Element |
isInMacroExpansion | 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 | from Element |
isMember | Holds if this declaration is a member of a class/struct/union. | from Declaration |
isStatic | Holds if this declaration is static. | from Declaration |
isTopLevel | Holds if this declaration is a top-level declaration. | from Declaration |
toString | Gets a textual representation of this element. | from Declaration |