mirror of
https://github.com/github/codeql.git
synced 2025-12-21 03:06:31 +01:00
C++: Bring back the StackVariable QL class
The new `StackVariable` class actually denotes what its name suggests.
This commit is contained in:
@@ -307,8 +307,8 @@ class ParameterDeclarationEntry extends VariableDeclarationEntry {
|
|||||||
* }
|
* }
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* Local variables can be static; use the `isStatic` member predicate to
|
* See also `StackVariable`, which is the class of local-scope variables
|
||||||
* detect those.
|
* without statics and thread-locals.
|
||||||
*/
|
*/
|
||||||
class LocalScopeVariable extends Variable, @localscopevariable {
|
class LocalScopeVariable extends Variable, @localscopevariable {
|
||||||
/** Gets the function to which this variable belongs. */
|
/** Gets the function to which this variable belongs. */
|
||||||
@@ -316,12 +316,21 @@ class LocalScopeVariable extends Variable, @localscopevariable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DEPRECATED: use `LocalScopeVariable` instead.
|
* A C/C++ variable with _automatic storage duration_. In other words, a
|
||||||
|
* function parameter or a local variable that is not static or thread-local.
|
||||||
|
* For example, the variables `a` and `b` in the following code.
|
||||||
|
* ```
|
||||||
|
* void myFunction(int a) {
|
||||||
|
* int b;
|
||||||
|
* static int c;
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
deprecated class StackVariable extends Variable {
|
class StackVariable extends LocalScopeVariable {
|
||||||
StackVariable() { this instanceof LocalScopeVariable }
|
StackVariable() {
|
||||||
|
not this.isStatic() and
|
||||||
Function getFunction() { result = this.(LocalScopeVariable).getFunction() }
|
not this.isThreadLocal()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -496,7 +505,7 @@ class TemplateVariable extends Variable {
|
|||||||
* `myTemplateFunction<T>`:
|
* `myTemplateFunction<T>`:
|
||||||
* ```
|
* ```
|
||||||
* void myFunction() {
|
* void myFunction() {
|
||||||
* T a;
|
* float a;
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* template<type T>
|
* template<type T>
|
||||||
@@ -509,9 +518,6 @@ class TemplateVariable extends Variable {
|
|||||||
* myTemplateFunction<int>();
|
* myTemplateFunction<int>();
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
class SemanticStackVariable extends LocalScopeVariable {
|
class SemanticStackVariable extends StackVariable {
|
||||||
SemanticStackVariable() {
|
SemanticStackVariable() { not this.isFromUninstantiatedTemplate(_) }
|
||||||
not this.isStatic() and
|
|
||||||
not this.isFromUninstantiatedTemplate(_)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,13 +2,9 @@
|
|||||||
| file://:0:0:0:0 | gp_offset | file://:0:0:0:0 | unsigned int | Field | | |
|
| file://:0:0:0:0 | gp_offset | file://:0:0:0:0 | unsigned int | Field | | |
|
||||||
| file://:0:0:0:0 | overflow_arg_area | file://:0:0:0:0 | void * | Field | | |
|
| file://:0:0:0:0 | overflow_arg_area | file://:0:0:0:0 | void * | Field | | |
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | SemanticStackVariable | | |
|
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | SemanticStackVariable | | |
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | __va_list_tag && | StackVariable | | |
|
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | address && | SemanticStackVariable | | |
|
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | address && | SemanticStackVariable | | |
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | address && | StackVariable | | |
|
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | SemanticStackVariable | | |
|
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | SemanticStackVariable | | |
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const __va_list_tag & | StackVariable | | |
|
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const address & | SemanticStackVariable | | |
|
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const address & | SemanticStackVariable | | |
|
||||||
| file://:0:0:0:0 | p#0 | file://:0:0:0:0 | const address & | StackVariable | | |
|
|
||||||
| file://:0:0:0:0 | reg_save_area | file://:0:0:0:0 | void * | Field | | |
|
| file://:0:0:0:0 | reg_save_area | file://:0:0:0:0 | void * | Field | | |
|
||||||
| variables.cpp:1:12:1:12 | i | file://:0:0:0:0 | int | GlobalVariable | | |
|
| variables.cpp:1:12:1:12 | i | file://:0:0:0:0 | int | GlobalVariable | | |
|
||||||
| variables.cpp:2:12:2:12 | i | file://:0:0:0:0 | int | GlobalVariable | | |
|
| variables.cpp:2:12:2:12 | i | file://:0:0:0:0 | int | GlobalVariable | | |
|
||||||
@@ -38,11 +34,10 @@
|
|||||||
| variables.cpp:37:6:37:8 | ap3 | file://:0:0:0:0 | int * | GlobalVariable | | |
|
| variables.cpp:37:6:37:8 | ap3 | file://:0:0:0:0 | int * | GlobalVariable | | |
|
||||||
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | LocalVariable | | |
|
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | LocalVariable | | |
|
||||||
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | SemanticStackVariable | | |
|
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | SemanticStackVariable | | |
|
||||||
| variables.cpp:41:7:41:11 | local | file://:0:0:0:0 | char[] | StackVariable | | |
|
|
||||||
| variables.cpp:43:14:43:18 | local | file://:0:0:0:0 | int | LocalVariable | | static |
|
| variables.cpp:43:14:43:18 | local | file://:0:0:0:0 | int | LocalVariable | | static |
|
||||||
| variables.cpp:43:14:43:18 | local | file://:0:0:0:0 | int | StackVariable | | static |
|
|
||||||
| variables.cpp:48:9:48:12 | name | file://:0:0:0:0 | char * | Field | | |
|
| variables.cpp:48:9:48:12 | name | file://:0:0:0:0 | char * | Field | | |
|
||||||
| variables.cpp:49:12:49:17 | number | file://:0:0:0:0 | long | Field | | |
|
| variables.cpp:49:12:49:17 | number | file://:0:0:0:0 | long | Field | | |
|
||||||
| variables.cpp:50:9:50:14 | street | file://:0:0:0:0 | char * | Field | | |
|
| variables.cpp:50:9:50:14 | street | file://:0:0:0:0 | char * | Field | | |
|
||||||
| variables.cpp:51:9:51:12 | town | file://:0:0:0:0 | char * | Field | | |
|
| variables.cpp:51:9:51:12 | town | file://:0:0:0:0 | char * | Field | | |
|
||||||
| variables.cpp:52:16:52:22 | country | file://:0:0:0:0 | char * | MemberVariable | | static |
|
| variables.cpp:52:16:52:22 | country | file://:0:0:0:0 | char * | MemberVariable | | static |
|
||||||
|
| variables.cpp:56:14:56:29 | externInFunction | file://:0:0:0:0 | int | GlobalVariable | | |
|
||||||
|
|||||||
@@ -51,3 +51,7 @@ struct address {
|
|||||||
char* town;
|
char* town;
|
||||||
static char* country;
|
static char* country;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void hasExtern() {
|
||||||
|
extern int externInFunction;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user