mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Merge remote-tracking branch 'github/main' into kaspersv/overlay-java-annotations
This commit is contained in:
1
.github/workflows/check-change-note.yml
vendored
1
.github/workflows/check-change-note.yml
vendored
@@ -16,7 +16,6 @@ on:
|
|||||||
- "shared/**/*.qll"
|
- "shared/**/*.qll"
|
||||||
- "!**/experimental/**"
|
- "!**/experimental/**"
|
||||||
- "!ql/**"
|
- "!ql/**"
|
||||||
- "!rust/**"
|
|
||||||
- ".github/workflows/check-change-note.yml"
|
- ".github/workflows/check-change-note.yml"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
|||||||
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -419,6 +419,7 @@ dependencies = [
|
|||||||
"lazy_static",
|
"lazy_static",
|
||||||
"rayon",
|
"rayon",
|
||||||
"regex",
|
"regex",
|
||||||
|
"serde_json",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
"tree-sitter",
|
"tree-sitter",
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
## 0.4.12
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* Fixed performance issues in the parsing of Bash scripts in workflow files,
|
||||||
|
which led to out-of-disk errors when analysing certain workflow files with
|
||||||
|
complex interpolations of shell commands or quoted strings.
|
||||||
|
|
||||||
## 0.4.11
|
## 0.4.11
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
## 0.4.12
|
||||||
category: minorAnalysis
|
|
||||||
---
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
* Fixed performance issues in the parsing of Bash scripts in workflow files,
|
* Fixed performance issues in the parsing of Bash scripts in workflow files,
|
||||||
which led to out-of-disk errors when analysing certain workflow files with
|
which led to out-of-disk errors when analysing certain workflow files with
|
||||||
complex interpolations of shell commands or quoted strings.
|
complex interpolations of shell commands or quoted strings.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 0.4.11
|
lastReleaseVersion: 0.4.12
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/actions-all
|
name: codeql/actions-all
|
||||||
version: 0.4.12-dev
|
version: 0.4.13-dev
|
||||||
library: true
|
library: true
|
||||||
warnOnImplicitThis: true
|
warnOnImplicitThis: true
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 0.6.4
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
|
|
||||||
## 0.6.3
|
## 0.6.3
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
3
actions/ql/src/change-notes/released/0.6.4.md
Normal file
3
actions/ql/src/change-notes/released/0.6.4.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## 0.6.4
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 0.6.3
|
lastReleaseVersion: 0.6.4
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/actions-queries
|
name: codeql/actions-queries
|
||||||
version: 0.6.4-dev
|
version: 0.6.5-dev
|
||||||
library: false
|
library: false
|
||||||
warnOnImplicitThis: true
|
warnOnImplicitThis: true
|
||||||
groups: [actions, queries]
|
groups: [actions, queries]
|
||||||
|
|||||||
@@ -17,16 +17,16 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
from difflib import context_diff
|
from difflib import context_diff
|
||||||
|
|
||||||
|
OVERLAY_PATTERN = re.compile(r'overlay\[[a-zA-Z?_-]+\]')
|
||||||
|
|
||||||
def has_overlay_annotations(lines):
|
def has_overlay_annotations(lines):
|
||||||
'''
|
'''
|
||||||
Check whether the given lines contain any overlay[...] annotations.
|
Check whether the given lines contain any overlay[...] annotations.
|
||||||
'''
|
'''
|
||||||
overlays = ["local", "local?", "global", "caller", "caller?"]
|
return any(OVERLAY_PATTERN.search(line) for line in lines)
|
||||||
annotations = [f"overlay[{t}]" for t in overlays]
|
|
||||||
return any(ann in line for ann in annotations for line in lines)
|
|
||||||
|
|
||||||
|
|
||||||
def is_line_comment(line):
|
def is_line_comment(line):
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"/*- Diagnostic messages -*/",
|
"/*- Diagnostic messages -*/",
|
||||||
"/*- Diagnostic messages: severity -*/",
|
"/*- Diagnostic messages: severity -*/",
|
||||||
"/*- Source location prefix -*/",
|
"/*- Source location prefix -*/",
|
||||||
|
"/*- Database metadata -*/",
|
||||||
"/*- Lines of code -*/",
|
"/*- Lines of code -*/",
|
||||||
"/*- Configuration files with key value pairs -*/",
|
"/*- Configuration files with key value pairs -*/",
|
||||||
"/*- YAML -*/",
|
"/*- YAML -*/",
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ needs_an_re = re.compile(r'^(?!Unary)[AEIOU]') # Name requiring "an" instead of
|
|||||||
start_qldoc_re = re.compile(r'^\s*/\*\*') # Start of a QLDoc comment
|
start_qldoc_re = re.compile(r'^\s*/\*\*') # Start of a QLDoc comment
|
||||||
end_qldoc_re = re.compile(r'\*/\s*$') # End of a QLDoc comment
|
end_qldoc_re = re.compile(r'\*/\s*$') # End of a QLDoc comment
|
||||||
blank_qldoc_line_re = re.compile(r'^\s*\*\s*$') # A line in a QLDoc comment with only the '*'
|
blank_qldoc_line_re = re.compile(r'^\s*\*\s*$') # A line in a QLDoc comment with only the '*'
|
||||||
instruction_class_re = re.compile(r'^class (?P<name>[A-aa-z0-9]+)Instruction\s') # Declaration of an `Instruction` class
|
instruction_class_re = re.compile(r'^class (?P<name>[A-Za-z0-9]+)Instruction\s') # Declaration of an `Instruction` class
|
||||||
opcode_base_class_re = re.compile(r'^abstract class (?P<name>[A-aa-z0-9]+)Opcode\s') # Declaration of an `Opcode` base class
|
opcode_base_class_re = re.compile(r'^abstract class (?P<name>[A-Za-z0-9]+)Opcode\s') # Declaration of an `Opcode` base class
|
||||||
opcode_class_re = re.compile(r'^ class (?P<name>[A-aa-z0-9]+)\s') # Declaration of an `Opcode` class
|
opcode_class_re = re.compile(r'^ class (?P<name>[A-Za-z0-9]+)\s') # Declaration of an `Opcode` class
|
||||||
|
|
||||||
script_dir = path.realpath(path.dirname(__file__))
|
script_dir = path.realpath(path.dirname(__file__))
|
||||||
instruction_path = path.realpath(path.join(script_dir, '../cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll'))
|
instruction_path = path.realpath(path.join(script_dir, '../cpp/ql/src/semmle/code/cpp/ir/implementation/raw/Instruction.qll'))
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
class BuiltinType extends @builtintype {
|
||||||
|
string toString() { none() }
|
||||||
|
}
|
||||||
|
|
||||||
|
from BuiltinType type, string name, int kind, int kind_new, int size, int sign, int alignment
|
||||||
|
where
|
||||||
|
builtintypes(type, name, kind, size, sign, alignment) and
|
||||||
|
if
|
||||||
|
type instanceof @complex_fp16 or
|
||||||
|
type instanceof @complex_std_bfloat16 or
|
||||||
|
type instanceof @complex_std_float16
|
||||||
|
then kind_new = 2
|
||||||
|
else kind_new = kind
|
||||||
|
select type, name, kind_new, size, sign, alignment
|
||||||
2509
cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme
Normal file
2509
cpp/downgrades/7bc12b02a4363149f0727a4bce07952dbb9d98aa/old.dbscheme
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
|||||||
|
description: Introduce new complex 16-bit floating-point types
|
||||||
|
compatibility: backwards
|
||||||
|
builtintypes.rel: run builtintypes.qlo
|
||||||
@@ -1,3 +1,20 @@
|
|||||||
|
## 5.2.0
|
||||||
|
|
||||||
|
### Deprecated APIs
|
||||||
|
|
||||||
|
* The `ThrowingFunction` class (`semmle.code.cpp.models.interfaces.Throwing`) has been deprecated. Please use the `AlwaysSehThrowingFunction` class instead.
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
* Added a predicate `getAnAttribute` to `Namespace` to retrieve a namespace attribute.
|
||||||
|
* The Microsoft-specific `__leave` statement is now supported.
|
||||||
|
* A new class `LeaveStmt` extending `JumpStmt` was added to represent `__leave` statements.
|
||||||
|
* Added a predicate `hasParameterList` to `LambdaExpression` to capture whether a lambda has an explicitly specified parameter list.
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* `resolveTypedefs` now properly resolves typedefs for `ArrayType`s.
|
||||||
|
|
||||||
## 5.1.0
|
## 5.1.0
|
||||||
|
|
||||||
### New Features
|
### New Features
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: deprecated
|
|
||||||
---
|
|
||||||
* The `ThrowingFunction` class (`semmle.code.cpp.models.interfaces.Throwing`) has been deprecated. Please use the `AlwaysSehThrowingFunction` class instead.
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: feature
|
|
||||||
---
|
|
||||||
* Added a predicate `hasParameterList` to `LambdaExpression` to capture whether a lambda has an explicitly specified parameter list.
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
---
|
|
||||||
category: feature
|
|
||||||
---
|
|
||||||
* The Microsoft-specific `__leave` statement is now supported.
|
|
||||||
* A new class `LeaveStmt` extending `JumpStmt` was added to represent `__leave` statements.
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: feature
|
|
||||||
---
|
|
||||||
* Added a predicate `getAnAttribute` to `Namespace` to retrieve a namespace attribute.
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: fix
|
|
||||||
---
|
|
||||||
* `resolveTypedefs` now properly resolves typedefs for `ArrayType`s.
|
|
||||||
4
cpp/ql/lib/change-notes/2025-06-24-float16.md
Normal file
4
cpp/ql/lib/change-notes/2025-06-24-float16.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
category: minorAnalysis
|
||||||
|
---
|
||||||
|
* Added support for `__fp16 _Complex` and `__bf16 _Complex` types
|
||||||
16
cpp/ql/lib/change-notes/released/5.2.0.md
Normal file
16
cpp/ql/lib/change-notes/released/5.2.0.md
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
## 5.2.0
|
||||||
|
|
||||||
|
### Deprecated APIs
|
||||||
|
|
||||||
|
* The `ThrowingFunction` class (`semmle.code.cpp.models.interfaces.Throwing`) has been deprecated. Please use the `AlwaysSehThrowingFunction` class instead.
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
* Added a predicate `getAnAttribute` to `Namespace` to retrieve a namespace attribute.
|
||||||
|
* The Microsoft-specific `__leave` statement is now supported.
|
||||||
|
* A new class `LeaveStmt` extending `JumpStmt` was added to represent `__leave` statements.
|
||||||
|
* Added a predicate `hasParameterList` to `LambdaExpression` to capture whether a lambda has an explicitly specified parameter list.
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* `resolveTypedefs` now properly resolves typedefs for `ArrayType`s.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 5.1.0
|
lastReleaseVersion: 5.2.0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-all
|
name: codeql/cpp-all
|
||||||
version: 5.1.1-dev
|
version: 5.2.1-dev
|
||||||
groups: cpp
|
groups: cpp
|
||||||
dbscheme: semmlecode.cpp.dbscheme
|
dbscheme: semmlecode.cpp.dbscheme
|
||||||
extractor: cpp
|
extractor: cpp
|
||||||
|
|||||||
@@ -858,6 +858,15 @@ private predicate floatingPointTypeMapping(
|
|||||||
or
|
or
|
||||||
// __mfp8
|
// __mfp8
|
||||||
kind = 62 and base = 2 and domain = TRealDomain() and realKind = 62 and extended = false
|
kind = 62 and base = 2 and domain = TRealDomain() and realKind = 62 and extended = false
|
||||||
|
or
|
||||||
|
// _Complex __fp16
|
||||||
|
kind = 64 and base = 2 and domain = TComplexDomain() and realKind = 54 and extended = false
|
||||||
|
or
|
||||||
|
// _Complex __bf16
|
||||||
|
kind = 65 and base = 2 and domain = TComplexDomain() and realKind = 55 and extended = false
|
||||||
|
or
|
||||||
|
// _Complex std::float16_t
|
||||||
|
kind = 66 and base = 2 and domain = TComplexDomain() and realKind = 56 and extended = false
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ private predicate isDeeplyConstBelow(Type t) {
|
|||||||
or
|
or
|
||||||
isDeeplyConst(t.(GNUVectorType).getBaseType())
|
isDeeplyConst(t.(GNUVectorType).getBaseType())
|
||||||
or
|
or
|
||||||
|
isDeeplyConst(t.(ScalableVectorType).getBaseType())
|
||||||
|
or
|
||||||
isDeeplyConst(t.(FunctionPointerIshType).getBaseType())
|
isDeeplyConst(t.(FunctionPointerIshType).getBaseType())
|
||||||
or
|
or
|
||||||
isDeeplyConst(t.(PointerWrapper).getTemplateArgument(0))
|
isDeeplyConst(t.(PointerWrapper).getTemplateArgument(0))
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ private int getTypeSizeWorkaround(Type type) {
|
|||||||
not arrayType.hasArraySize() and
|
not arrayType.hasArraySize() and
|
||||||
result = getPointerSize()
|
result = getPointerSize()
|
||||||
)
|
)
|
||||||
|
or
|
||||||
|
// Scalable vectors are opaque and not of fixed size. Use 0 as a substitute.
|
||||||
|
type instanceof ScalableVectorType and
|
||||||
|
result = 0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -136,6 +140,8 @@ private predicate isOpaqueType(Type type) {
|
|||||||
type instanceof PointerToMemberType // PTMs are missing size info
|
type instanceof PointerToMemberType // PTMs are missing size info
|
||||||
or
|
or
|
||||||
type instanceof ScalableVectorCount
|
type instanceof ScalableVectorCount
|
||||||
|
or
|
||||||
|
type instanceof ScalableVectorType
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -693,6 +693,9 @@ case @builtintype.kind of
|
|||||||
| 61 = @complex_std_float128 // _Complex _Float128
|
| 61 = @complex_std_float128 // _Complex _Float128
|
||||||
| 62 = @mfp8 // __mfp8
|
| 62 = @mfp8 // __mfp8
|
||||||
| 63 = @scalable_vector_count // __SVCount_t
|
| 63 = @scalable_vector_count // __SVCount_t
|
||||||
|
| 64 = @complex_fp16 // _Complex __fp16
|
||||||
|
| 65 = @complex_std_bfloat16 // _Complex __bf16
|
||||||
|
| 66 = @complex_std_float16 // _Complex std::float16_t
|
||||||
;
|
;
|
||||||
|
|
||||||
builtintypes(
|
builtintypes(
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
|||||||
|
description: Support more complex 16-bit floating-point types
|
||||||
|
compatibility: full
|
||||||
@@ -1,3 +1,9 @@
|
|||||||
|
## 1.4.3
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* Added flow model for the following libraries: `madler/zlib`, `google/brotli`, `libidn/libidn2`, `libssh2/libssh2/`, `nghttp2/nghttp2`, `libuv/libuv/`, and `curl/curl`. This may result in more alerts when running queries on codebases that use these libraries.
|
||||||
|
|
||||||
## 1.4.2
|
## 1.4.2
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
---
|
## 1.4.3
|
||||||
category: minorAnalysis
|
|
||||||
---
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
* Added flow model for the following libraries: `madler/zlib`, `google/brotli`, `libidn/libidn2`, `libssh2/libssh2/`, `nghttp2/nghttp2`, `libuv/libuv/`, and `curl/curl`. This may result in more alerts when running queries on codebases that use these libraries.
|
* Added flow model for the following libraries: `madler/zlib`, `google/brotli`, `libidn/libidn2`, `libssh2/libssh2/`, `nghttp2/nghttp2`, `libuv/libuv/`, and `curl/curl`. This may result in more alerts when running queries on codebases that use these libraries.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.4.2
|
lastReleaseVersion: 1.4.3
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/cpp-queries
|
name: codeql/cpp-queries
|
||||||
version: 1.4.3-dev
|
version: 1.4.4-dev
|
||||||
groups:
|
groups:
|
||||||
- cpp
|
- cpp
|
||||||
- queries
|
- queries
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
#-----| Type = [LongType] unsigned long
|
#-----| Type = [LongType] unsigned long
|
||||||
#-----| getParameter(1): [Parameter] (unnamed parameter 1)
|
#-----| getParameter(1): [Parameter] (unnamed parameter 1)
|
||||||
#-----| Type = [ScopedEnum] align_val_t
|
#-----| Type = [ScopedEnum] align_val_t
|
||||||
arm.cpp:
|
arm_neon.cpp:
|
||||||
# 6| [TopLevelFunction] uint8x8_t vadd_u8(uint8x8_t, uint8x8_t)
|
# 6| [TopLevelFunction] uint8x8_t vadd_u8(uint8x8_t, uint8x8_t)
|
||||||
# 6| <params>:
|
# 6| <params>:
|
||||||
# 6| getParameter(0): [Parameter] a
|
# 6| getParameter(0): [Parameter] a
|
||||||
@@ -76,59 +76,105 @@ arm.cpp:
|
|||||||
# 7| getRightOperand(): [VariableAccess] b
|
# 7| getRightOperand(): [VariableAccess] b
|
||||||
# 7| Type = [CTypedefType] uint8x8_t
|
# 7| Type = [CTypedefType] uint8x8_t
|
||||||
# 7| ValueCategory = prvalue(load)
|
# 7| ValueCategory = prvalue(load)
|
||||||
# 12| [TopLevelFunction] uint16x8_t __builtin_aarch64_uaddlv8qi_uuu(uint8x8_t, uint8x8_t)
|
# 10| [TopLevelFunction] uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t)
|
||||||
|
# 10| <params>:
|
||||||
|
# 10| getParameter(0): [Parameter] a
|
||||||
|
# 10| Type = [CTypedefType] uint8x8_t
|
||||||
|
# 10| getParameter(1): [Parameter] b
|
||||||
|
# 10| Type = [CTypedefType] uint8x8_t
|
||||||
|
# 12| [TopLevelFunction] uint16x8_t arm_add(uint8x8_t, uint8x8_t*)
|
||||||
# 12| <params>:
|
# 12| <params>:
|
||||||
# 12| getParameter(0): [Parameter] (unnamed parameter 0)
|
# 12| getParameter(0): [Parameter] a
|
||||||
# 12| Type = [CTypedefType] uint8x8_t
|
# 12| Type = [CTypedefType] uint8x8_t
|
||||||
# 12| getParameter(1): [Parameter] (unnamed parameter 1)
|
# 12| getParameter(1): [Parameter] b
|
||||||
# 12| Type = [CTypedefType] uint8x8_t
|
# 12| Type = [PointerType] uint8x8_t *
|
||||||
# 14| [TopLevelFunction] uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t)
|
# 12| getEntryPoint(): [BlockStmt] { ... }
|
||||||
# 14| <params>:
|
# 13| getStmt(0): [DeclStmt] declaration
|
||||||
# 14| getParameter(0): [Parameter] a
|
# 13| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c
|
||||||
|
# 13| Type = [CTypedefType] uint8x8_t
|
||||||
|
# 13| getVariable().getInitializer(): [Initializer] initializer for c
|
||||||
|
# 13| getExpr(): [FunctionCall] call to vadd_u8
|
||||||
|
# 13| Type = [CTypedefType] uint8x8_t
|
||||||
|
# 13| ValueCategory = prvalue
|
||||||
|
# 13| getArgument(0): [VariableAccess] a
|
||||||
|
# 13| Type = [CTypedefType] uint8x8_t
|
||||||
|
# 13| ValueCategory = prvalue(load)
|
||||||
|
# 13| getArgument(1): [PointerDereferenceExpr] * ...
|
||||||
|
# 13| Type = [CTypedefType] uint8x8_t
|
||||||
|
# 13| ValueCategory = prvalue(load)
|
||||||
|
# 13| getOperand(): [VariableAccess] b
|
||||||
|
# 13| Type = [PointerType] uint8x8_t *
|
||||||
|
# 13| ValueCategory = prvalue(load)
|
||||||
|
# 14| getStmt(1): [ReturnStmt] return ...
|
||||||
|
# 14| getExpr(): [FunctionCall] call to vaddl_u8
|
||||||
|
# 14| Type = [CTypedefType] uint16x8_t
|
||||||
|
# 14| ValueCategory = prvalue
|
||||||
|
# 14| getArgument(0): [VariableAccess] a
|
||||||
# 14| Type = [CTypedefType] uint8x8_t
|
# 14| Type = [CTypedefType] uint8x8_t
|
||||||
# 14| getParameter(1): [Parameter] b
|
# 14| ValueCategory = prvalue(load)
|
||||||
|
# 14| getArgument(1): [VariableAccess] c
|
||||||
# 14| Type = [CTypedefType] uint8x8_t
|
# 14| Type = [CTypedefType] uint8x8_t
|
||||||
# 14| getEntryPoint(): [BlockStmt] { ... }
|
# 14| ValueCategory = prvalue(load)
|
||||||
# 15| getStmt(0): [ReturnStmt] return ...
|
# 20| [TopLevelFunction] mfloat8x8_t vreinterpret_mf8_s8(int8x8_t)
|
||||||
# 15| getExpr(): [FunctionCall] call to __builtin_aarch64_uaddlv8qi_uuu
|
# 20| <params>:
|
||||||
# 15| Type = [CTypedefType] uint16x8_t
|
# 20| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||||
# 15| ValueCategory = prvalue
|
# 20| Type = [CTypedefType] int8x8_t
|
||||||
# 15| getArgument(0): [VariableAccess] a
|
# 22| [TopLevelFunction] mfloat8x8_t arm_reinterpret(int8x8_t*)
|
||||||
# 15| Type = [CTypedefType] uint8x8_t
|
# 22| <params>:
|
||||||
# 15| ValueCategory = prvalue(load)
|
# 22| getParameter(0): [Parameter] a
|
||||||
# 15| getArgument(1): [VariableAccess] b
|
# 22| Type = [PointerType] int8x8_t *
|
||||||
# 15| Type = [CTypedefType] uint8x8_t
|
# 22| getEntryPoint(): [BlockStmt] { ... }
|
||||||
# 15| ValueCategory = prvalue(load)
|
# 23| getStmt(0): [ReturnStmt] return ...
|
||||||
# 18| [TopLevelFunction] uint16x8_t arm_add(uint8x8_t, uint8x8_t)
|
# 23| getExpr(): [FunctionCall] call to vreinterpret_mf8_s8
|
||||||
# 18| <params>:
|
# 23| Type = [CTypedefType] mfloat8x8_t
|
||||||
# 18| getParameter(0): [Parameter] a
|
# 23| ValueCategory = prvalue
|
||||||
# 18| Type = [CTypedefType] uint8x8_t
|
# 23| getArgument(0): [PointerDereferenceExpr] * ...
|
||||||
# 18| getParameter(1): [Parameter] b
|
# 23| Type = [CTypedefType] int8x8_t
|
||||||
# 18| Type = [CTypedefType] uint8x8_t
|
# 23| ValueCategory = prvalue(load)
|
||||||
# 18| getEntryPoint(): [BlockStmt] { ... }
|
# 23| getOperand(): [VariableAccess] a
|
||||||
# 19| getStmt(0): [DeclStmt] declaration
|
# 23| Type = [PointerType] int8x8_t *
|
||||||
# 19| getDeclarationEntry(0): [VariableDeclarationEntry] definition of c
|
# 23| ValueCategory = prvalue(load)
|
||||||
# 19| Type = [CTypedefType] uint8x8_t
|
arm_sve.cpp:
|
||||||
# 19| getVariable().getInitializer(): [Initializer] initializer for c
|
# 6| [TopLevelFunction] svuint8x2_t svsel_u8_x2(svcount_t, svuint8x2_t, svuint8x2_t)
|
||||||
# 19| getExpr(): [FunctionCall] call to vadd_u8
|
# 6| <params>:
|
||||||
# 19| Type = [CTypedefType] uint8x8_t
|
# 6| getParameter(0): [Parameter] (unnamed parameter 0)
|
||||||
# 19| ValueCategory = prvalue
|
# 6| Type = [CTypedefType] svcount_t
|
||||||
# 19| getArgument(0): [VariableAccess] a
|
# 6| getParameter(1): [Parameter] (unnamed parameter 1)
|
||||||
# 19| Type = [CTypedefType] uint8x8_t
|
# 6| Type = [CTypedefType] svuint8x2_t
|
||||||
# 19| ValueCategory = prvalue(load)
|
# 6| getParameter(2): [Parameter] (unnamed parameter 2)
|
||||||
# 19| getArgument(1): [VariableAccess] b
|
# 6| Type = [CTypedefType] svuint8x2_t
|
||||||
# 19| Type = [CTypedefType] uint8x8_t
|
# 8| [TopLevelFunction] svuint8x2_t arm_sel(svcount_t, svuint8x2_t, svuint8x2_t*)
|
||||||
# 19| ValueCategory = prvalue(load)
|
# 8| <params>:
|
||||||
# 20| getStmt(1): [ReturnStmt] return ...
|
# 8| getParameter(0): [Parameter] a
|
||||||
# 20| getExpr(): [FunctionCall] call to vaddl_u8
|
# 8| Type = [CTypedefType] svcount_t
|
||||||
# 20| Type = [CTypedefType] uint16x8_t
|
# 8| getParameter(1): [Parameter] b
|
||||||
# 20| ValueCategory = prvalue
|
# 8| Type = [CTypedefType] svuint8x2_t
|
||||||
# 20| getArgument(0): [VariableAccess] a
|
# 8| getParameter(2): [Parameter] c
|
||||||
# 20| Type = [CTypedefType] uint8x8_t
|
# 8| Type = [PointerType] svuint8x2_t *
|
||||||
# 20| ValueCategory = prvalue(load)
|
# 8| getEntryPoint(): [BlockStmt] { ... }
|
||||||
# 20| getArgument(1): [VariableAccess] c
|
# 9| getStmt(0): [DeclStmt] declaration
|
||||||
# 20| Type = [CTypedefType] uint8x8_t
|
# 9| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d
|
||||||
# 20| ValueCategory = prvalue(load)
|
# 9| Type = [CTypedefType] svuint8x2_t
|
||||||
|
# 9| getVariable().getInitializer(): [Initializer] initializer for d
|
||||||
|
# 9| getExpr(): [FunctionCall] call to svsel_u8_x2
|
||||||
|
# 9| Type = [CTypedefType] svuint8x2_t
|
||||||
|
# 9| ValueCategory = prvalue
|
||||||
|
# 9| getArgument(0): [VariableAccess] a
|
||||||
|
# 9| Type = [CTypedefType] svcount_t
|
||||||
|
# 9| ValueCategory = prvalue(load)
|
||||||
|
# 9| getArgument(1): [VariableAccess] b
|
||||||
|
# 9| Type = [CTypedefType] svuint8x2_t
|
||||||
|
# 9| ValueCategory = prvalue(load)
|
||||||
|
# 9| getArgument(2): [PointerDereferenceExpr] * ...
|
||||||
|
# 9| Type = [CTypedefType] svuint8x2_t
|
||||||
|
# 9| ValueCategory = prvalue(load)
|
||||||
|
# 9| getOperand(): [VariableAccess] c
|
||||||
|
# 9| Type = [PointerType] svuint8x2_t *
|
||||||
|
# 9| ValueCategory = prvalue(load)
|
||||||
|
# 10| getStmt(1): [ReturnStmt] return ...
|
||||||
|
# 10| getExpr(): [VariableAccess] d
|
||||||
|
# 10| Type = [CTypedefType] svuint8x2_t
|
||||||
|
# 10| ValueCategory = prvalue(load)
|
||||||
bad_asts.cpp:
|
bad_asts.cpp:
|
||||||
# 5| [CopyAssignmentOperator] Bad::S& Bad::S::operator=(Bad::S const&)
|
# 5| [CopyAssignmentOperator] Bad::S& Bad::S::operator=(Bad::S const&)
|
||||||
# 5| <params>:
|
# 5| <params>:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
arm.cpp:
|
arm_neon.cpp:
|
||||||
# 6| uint8x8_t vadd_u8(uint8x8_t, uint8x8_t)
|
# 6| uint8x8_t vadd_u8(uint8x8_t, uint8x8_t)
|
||||||
# 6| Block 0
|
# 6| Block 0
|
||||||
# 6| v6_1(void) = EnterFunction :
|
# 6| v6_1(void) = EnterFunction :
|
||||||
@@ -21,65 +21,107 @@ arm.cpp:
|
|||||||
# 6| v6_11(void) = AliasedUse : m6_3
|
# 6| v6_11(void) = AliasedUse : m6_3
|
||||||
# 6| v6_12(void) = ExitFunction :
|
# 6| v6_12(void) = ExitFunction :
|
||||||
|
|
||||||
# 14| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t)
|
# 12| uint16x8_t arm_add(uint8x8_t, uint8x8_t*)
|
||||||
# 14| Block 0
|
# 12| Block 0
|
||||||
# 14| v14_1(void) = EnterFunction :
|
# 12| v12_1(void) = EnterFunction :
|
||||||
# 14| m14_2(unknown) = AliasedDefinition :
|
# 12| m12_2(unknown) = AliasedDefinition :
|
||||||
# 14| m14_3(unknown) = InitializeNonLocal :
|
# 12| m12_3(unknown) = InitializeNonLocal :
|
||||||
# 14| m14_4(unknown) = Chi : total:m14_2, partial:m14_3
|
# 12| m12_4(unknown) = Chi : total:m12_2, partial:m12_3
|
||||||
# 14| r14_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 12| r12_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
||||||
# 14| m14_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r14_5
|
# 12| m12_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r12_5
|
||||||
# 14| r14_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 12| r12_7(glval<__attribute((neon_vector_type(8))) unsigned char *>) = VariableAddress[b] :
|
||||||
# 14| m14_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r14_7
|
# 12| m12_8(__attribute((neon_vector_type(8))) unsigned char *) = InitializeParameter[b] : &:r12_7
|
||||||
# 15| r15_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 12| r12_9(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r12_7, m12_8
|
||||||
# 15| r15_2(glval<unknown>) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] :
|
# 12| m12_10(unknown) = InitializeIndirection[b] : &:r12_9
|
||||||
# 15| r15_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 13| r13_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
||||||
# 15| r15_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r15_3, m14_6
|
# 13| r13_2(glval<unknown>) = FunctionAddress[vadd_u8] :
|
||||||
# 15| r15_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 13| r13_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
||||||
# 15| r15_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r15_5, m14_8
|
# 13| r13_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r13_3, m12_6
|
||||||
# 15| r15_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r15_2, 0:r15_4, 1:r15_6
|
# 13| r13_5(glval<__attribute((neon_vector_type(8))) unsigned char *>) = VariableAddress[b] :
|
||||||
# 15| m15_8(unknown) = ^CallSideEffect : ~m14_4
|
# 13| r13_6(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r13_5, m12_8
|
||||||
# 15| m15_9(unknown) = Chi : total:m14_4, partial:m15_8
|
# 13| r13_7(__attribute((neon_vector_type(8))) unsigned char) = Load[?] : &:r13_6, ~m12_10
|
||||||
# 15| m15_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r15_1, r15_7
|
# 13| r13_8(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r13_2, 0:r13_4, 1:r13_7
|
||||||
# 14| r14_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 13| m13_9(unknown) = ^CallSideEffect : ~m12_4
|
||||||
# 14| v14_10(void) = ReturnValue : &:r14_9, m15_10
|
# 13| m13_10(unknown) = Chi : total:m12_4, partial:m13_9
|
||||||
# 14| v14_11(void) = AliasedUse : ~m15_9
|
# 13| m13_11(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r13_1, r13_8
|
||||||
# 14| v14_12(void) = ExitFunction :
|
# 14| r14_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
||||||
|
# 14| r14_2(glval<unknown>) = FunctionAddress[vaddl_u8] :
|
||||||
|
# 14| r14_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
||||||
|
# 14| r14_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r14_3, m12_6
|
||||||
|
# 14| r14_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
||||||
|
# 14| r14_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r14_5, m13_11
|
||||||
|
# 14| r14_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r14_2, 0:r14_4, 1:r14_6
|
||||||
|
# 14| m14_8(unknown) = ^CallSideEffect : ~m13_10
|
||||||
|
# 14| m14_9(unknown) = Chi : total:m13_10, partial:m14_8
|
||||||
|
# 14| m14_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r14_1, r14_7
|
||||||
|
# 12| v12_11(void) = ReturnIndirection[b] : &:r12_9, m12_10
|
||||||
|
# 12| r12_12(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
||||||
|
# 12| v12_13(void) = ReturnValue : &:r12_12, m14_10
|
||||||
|
# 12| v12_14(void) = AliasedUse : ~m14_9
|
||||||
|
# 12| v12_15(void) = ExitFunction :
|
||||||
|
|
||||||
# 18| uint16x8_t arm_add(uint8x8_t, uint8x8_t)
|
# 22| mfloat8x8_t arm_reinterpret(int8x8_t*)
|
||||||
# 18| Block 0
|
# 22| Block 0
|
||||||
# 18| v18_1(void) = EnterFunction :
|
# 22| v22_1(void) = EnterFunction :
|
||||||
# 18| m18_2(unknown) = AliasedDefinition :
|
# 22| m22_2(unknown) = AliasedDefinition :
|
||||||
# 18| m18_3(unknown) = InitializeNonLocal :
|
# 22| m22_3(unknown) = InitializeNonLocal :
|
||||||
# 18| m18_4(unknown) = Chi : total:m18_2, partial:m18_3
|
# 22| m22_4(unknown) = Chi : total:m22_2, partial:m22_3
|
||||||
# 18| r18_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 22| r22_5(glval<char *>) = VariableAddress[a] :
|
||||||
# 18| m18_6(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r18_5
|
# 22| m22_6(char *) = InitializeParameter[a] : &:r22_5
|
||||||
# 18| r18_7(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 22| r22_7(char *) = Load[a] : &:r22_5, m22_6
|
||||||
# 18| m18_8(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r18_7
|
# 22| m22_8(unknown) = InitializeIndirection[a] : &:r22_7
|
||||||
# 19| r19_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
# 23| r23_1(glval<__mfp8>) = VariableAddress[#return] :
|
||||||
# 19| r19_2(glval<unknown>) = FunctionAddress[vadd_u8] :
|
# 23| r23_2(glval<unknown>) = FunctionAddress[vreinterpret_mf8_s8] :
|
||||||
# 19| r19_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 23| r23_3(glval<char *>) = VariableAddress[a] :
|
||||||
# 19| r19_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r19_3, m18_6
|
# 23| r23_4(char *) = Load[a] : &:r23_3, m22_6
|
||||||
# 19| r19_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 23| r23_5(char) = Load[?] : &:r23_4, ~m22_8
|
||||||
# 19| r19_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r19_5, m18_8
|
# 23| r23_6(__mfp8) = Call[vreinterpret_mf8_s8] : func:r23_2, 0:r23_5
|
||||||
# 19| r19_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r19_2, 0:r19_4, 1:r19_6
|
# 23| m23_7(unknown) = ^CallSideEffect : ~m22_4
|
||||||
# 19| m19_8(unknown) = ^CallSideEffect : ~m18_4
|
# 23| m23_8(unknown) = Chi : total:m22_4, partial:m23_7
|
||||||
# 19| m19_9(unknown) = Chi : total:m18_4, partial:m19_8
|
# 23| m23_9(__mfp8) = Store[#return] : &:r23_1, r23_6
|
||||||
# 19| m19_10(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r19_1, r19_7
|
# 22| v22_9(void) = ReturnIndirection[a] : &:r22_7, m22_8
|
||||||
# 20| r20_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 22| r22_10(glval<__mfp8>) = VariableAddress[#return] :
|
||||||
# 20| r20_2(glval<unknown>) = FunctionAddress[vaddl_u8] :
|
# 22| v22_11(void) = ReturnValue : &:r22_10, m23_9
|
||||||
# 20| r20_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 22| v22_12(void) = AliasedUse : ~m23_8
|
||||||
# 20| r20_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r20_3, m18_6
|
# 22| v22_13(void) = ExitFunction :
|
||||||
# 20| r20_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
|
||||||
# 20| r20_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r20_5, m19_10
|
arm_sve.cpp:
|
||||||
# 20| r20_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r20_2, 0:r20_4, 1:r20_6
|
# 8| svuint8x2_t arm_sel(svcount_t, svuint8x2_t, svuint8x2_t*)
|
||||||
# 20| m20_8(unknown) = ^CallSideEffect : ~m19_9
|
# 8| Block 0
|
||||||
# 20| m20_9(unknown) = Chi : total:m19_9, partial:m20_8
|
# 8| v8_1(void) = EnterFunction :
|
||||||
# 20| m20_10(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r20_1, r20_7
|
# 8| m8_2(unknown) = AliasedDefinition :
|
||||||
# 18| r18_9(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 8| m8_3(unknown) = InitializeNonLocal :
|
||||||
# 18| v18_10(void) = ReturnValue : &:r18_9, m20_10
|
# 8| m8_4(unknown) = Chi : total:m8_2, partial:m8_3
|
||||||
# 18| v18_11(void) = AliasedUse : ~m20_9
|
# 8| r8_5(glval<__SVCount_t>) = VariableAddress[a] :
|
||||||
# 18| v18_12(void) = ExitFunction :
|
# 8| m8_6(__SVCount_t) = InitializeParameter[a] : &:r8_5
|
||||||
|
# 8| r8_7(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[b] :
|
||||||
|
# 8| m8_8(__edg_scalable_vector_type__(unsigned char, 2)) = InitializeParameter[b] : &:r8_7
|
||||||
|
# 8| r8_9(glval<__edg_scalable_vector_type__(unsigned char, 2) *>) = VariableAddress[c] :
|
||||||
|
# 8| m8_10(__edg_scalable_vector_type__(unsigned char, 2) *) = InitializeParameter[c] : &:r8_9
|
||||||
|
# 8| r8_11(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r8_9, m8_10
|
||||||
|
# 8| m8_12(unknown) = InitializeIndirection[c] : &:r8_11
|
||||||
|
# 9| r9_1(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[d] :
|
||||||
|
# 9| r9_2(glval<unknown>) = FunctionAddress[svsel_u8_x2] :
|
||||||
|
# 9| r9_3(glval<__SVCount_t>) = VariableAddress[a] :
|
||||||
|
# 9| r9_4(__SVCount_t) = Load[a] : &:r9_3, m8_6
|
||||||
|
# 9| r9_5(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[b] :
|
||||||
|
# 9| r9_6(__edg_scalable_vector_type__(unsigned char, 2)) = Load[b] : &:r9_5, m8_8
|
||||||
|
# 9| r9_7(glval<__edg_scalable_vector_type__(unsigned char, 2) *>) = VariableAddress[c] :
|
||||||
|
# 9| r9_8(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r9_7, m8_10
|
||||||
|
# 9| r9_9(__edg_scalable_vector_type__(unsigned char, 2)) = Load[?] : &:r9_8, ~m8_12
|
||||||
|
# 9| r9_10(__edg_scalable_vector_type__(unsigned char, 2)) = Call[svsel_u8_x2] : func:r9_2, 0:r9_4, 1:r9_6, 2:r9_9
|
||||||
|
# 9| m9_11(unknown) = ^CallSideEffect : ~m8_4
|
||||||
|
# 9| m9_12(unknown) = Chi : total:m8_4, partial:m9_11
|
||||||
|
# 9| m9_13(__edg_scalable_vector_type__(unsigned char, 2)) = Store[d] : &:r9_1, r9_10
|
||||||
|
# 10| r10_1(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[#return] :
|
||||||
|
# 10| r10_2(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[d] :
|
||||||
|
# 10| r10_3(__edg_scalable_vector_type__(unsigned char, 2)) = Load[d] : &:r10_2, m9_13
|
||||||
|
# 10| m10_4(__edg_scalable_vector_type__(unsigned char, 2)) = Store[#return] : &:r10_1, r10_3
|
||||||
|
# 8| v8_13(void) = ReturnIndirection[c] : &:r8_11, m8_12
|
||||||
|
# 8| r8_14(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[#return] :
|
||||||
|
# 8| v8_15(void) = ReturnValue : &:r8_14, m10_4
|
||||||
|
# 8| v8_16(void) = AliasedUse : ~m9_12
|
||||||
|
# 8| v8_17(void) = ExitFunction :
|
||||||
|
|
||||||
bad_asts.cpp:
|
bad_asts.cpp:
|
||||||
# 9| int Bad::S::MemberFunction<int 6>(int)
|
# 9| int Bad::S::MemberFunction<int 6>(int)
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
// semmle-extractor-options: --edg --target --edg linux_arm64
|
|
||||||
|
|
||||||
typedef __Uint8x8_t uint8x8_t;
|
|
||||||
typedef __Uint16x8_t uint16x8_t;
|
|
||||||
|
|
||||||
uint8x8_t vadd_u8(uint8x8_t a, uint8x8_t b) {
|
|
||||||
return a + b;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Workaround: the frontend only exposes this when the arm_neon.h
|
|
||||||
// header is encountered.
|
|
||||||
uint16x8_t __builtin_aarch64_uaddlv8qi_uuu(uint8x8_t, uint8x8_t);
|
|
||||||
|
|
||||||
uint16x8_t vaddl_u8(uint8x8_t a, uint8x8_t b) {
|
|
||||||
return __builtin_aarch64_uaddlv8qi_uuu (a, b);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16x8_t arm_add(uint8x8_t a, uint8x8_t b) {
|
|
||||||
uint8x8_t c = vadd_u8(a, b);
|
|
||||||
return vaddl_u8(a, c);
|
|
||||||
}
|
|
||||||
24
cpp/ql/test/library-tests/ir/ir/arm_neon.cpp
Normal file
24
cpp/ql/test/library-tests/ir/ir/arm_neon.cpp
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
// semmle-extractor-options: --edg --target --edg linux_arm64 --gnu_version 150000
|
||||||
|
|
||||||
|
typedef __Uint8x8_t uint8x8_t;
|
||||||
|
typedef __Uint16x8_t uint16x8_t;
|
||||||
|
|
||||||
|
uint8x8_t vadd_u8(uint8x8_t a, uint8x8_t b) {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16x8_t vaddl_u8(uint8x8_t a, uint8x8_t b);
|
||||||
|
|
||||||
|
uint16x8_t arm_add(uint8x8_t a, uint8x8_t *b) {
|
||||||
|
uint8x8_t c = vadd_u8(a, *b);
|
||||||
|
return vaddl_u8(a, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef __attribute__((neon_vector_type(8))) __mfp8 mfloat8x8_t;
|
||||||
|
typedef __attribute__((neon_vector_type(8))) char int8x8_t;
|
||||||
|
|
||||||
|
mfloat8x8_t vreinterpret_mf8_s8(int8x8_t);
|
||||||
|
|
||||||
|
mfloat8x8_t arm_reinterpret(int8x8_t *a) {
|
||||||
|
return vreinterpret_mf8_s8(*a);
|
||||||
|
}
|
||||||
11
cpp/ql/test/library-tests/ir/ir/arm_sve.cpp
Normal file
11
cpp/ql/test/library-tests/ir/ir/arm_sve.cpp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
// semmle-extractor-options: --edg --target --edg linux_arm64 --clang_version 190000
|
||||||
|
|
||||||
|
typedef __clang_svuint8x2_t svuint8x2_t;
|
||||||
|
typedef __SVCount_t svcount_t;
|
||||||
|
|
||||||
|
svuint8x2_t svsel_u8_x2(svcount_t, svuint8x2_t, svuint8x2_t);
|
||||||
|
|
||||||
|
svuint8x2_t arm_sel(svcount_t a, svuint8x2_t b, svuint8x2_t *c) {
|
||||||
|
svuint8x2_t d = svsel_u8_x2(a, b, *c);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
arm.cpp:
|
arm_neon.cpp:
|
||||||
# 6| uint8x8_t vadd_u8(uint8x8_t, uint8x8_t)
|
# 6| uint8x8_t vadd_u8(uint8x8_t, uint8x8_t)
|
||||||
# 6| Block 0
|
# 6| Block 0
|
||||||
# 6| v6_1(void) = EnterFunction :
|
# 6| v6_1(void) = EnterFunction :
|
||||||
@@ -20,60 +20,100 @@ arm.cpp:
|
|||||||
# 6| v6_10(void) = AliasedUse : ~m?
|
# 6| v6_10(void) = AliasedUse : ~m?
|
||||||
# 6| v6_11(void) = ExitFunction :
|
# 6| v6_11(void) = ExitFunction :
|
||||||
|
|
||||||
# 14| uint16x8_t vaddl_u8(uint8x8_t, uint8x8_t)
|
# 12| uint16x8_t arm_add(uint8x8_t, uint8x8_t*)
|
||||||
# 14| Block 0
|
# 12| Block 0
|
||||||
# 14| v14_1(void) = EnterFunction :
|
# 12| v12_1(void) = EnterFunction :
|
||||||
# 14| mu14_2(unknown) = AliasedDefinition :
|
# 12| mu12_2(unknown) = AliasedDefinition :
|
||||||
# 14| mu14_3(unknown) = InitializeNonLocal :
|
# 12| mu12_3(unknown) = InitializeNonLocal :
|
||||||
# 14| r14_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 12| r12_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
||||||
# 14| mu14_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r14_4
|
# 12| mu12_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r12_4
|
||||||
# 14| r14_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 12| r12_6(glval<__attribute((neon_vector_type(8))) unsigned char *>) = VariableAddress[b] :
|
||||||
# 14| mu14_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r14_6
|
# 12| mu12_7(__attribute((neon_vector_type(8))) unsigned char *) = InitializeParameter[b] : &:r12_6
|
||||||
# 15| r15_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 12| r12_8(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r12_6, ~m?
|
||||||
# 15| r15_2(glval<unknown>) = FunctionAddress[__builtin_aarch64_uaddlv8qi_uuu] :
|
# 12| mu12_9(unknown) = InitializeIndirection[b] : &:r12_8
|
||||||
# 15| r15_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 13| r13_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
||||||
# 15| r15_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r15_3, ~m?
|
# 13| r13_2(glval<unknown>) = FunctionAddress[vadd_u8] :
|
||||||
# 15| r15_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 13| r13_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
||||||
# 15| r15_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r15_5, ~m?
|
# 13| r13_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r13_3, ~m?
|
||||||
# 15| r15_7(__attribute((neon_vector_type(8))) unsigned short) = Call[__builtin_aarch64_uaddlv8qi_uuu] : func:r15_2, 0:r15_4, 1:r15_6
|
# 13| r13_5(glval<__attribute((neon_vector_type(8))) unsigned char *>) = VariableAddress[b] :
|
||||||
# 15| mu15_8(unknown) = ^CallSideEffect : ~m?
|
# 13| r13_6(__attribute((neon_vector_type(8))) unsigned char *) = Load[b] : &:r13_5, ~m?
|
||||||
# 15| mu15_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r15_1, r15_7
|
# 13| r13_7(__attribute((neon_vector_type(8))) unsigned char) = Load[?] : &:r13_6, ~m?
|
||||||
# 14| r14_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 13| r13_8(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r13_2, 0:r13_4, 1:r13_7
|
||||||
# 14| v14_9(void) = ReturnValue : &:r14_8, ~m?
|
# 13| mu13_9(unknown) = ^CallSideEffect : ~m?
|
||||||
# 14| v14_10(void) = AliasedUse : ~m?
|
# 13| mu13_10(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r13_1, r13_8
|
||||||
# 14| v14_11(void) = ExitFunction :
|
# 14| r14_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
||||||
|
# 14| r14_2(glval<unknown>) = FunctionAddress[vaddl_u8] :
|
||||||
|
# 14| r14_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
||||||
|
# 14| r14_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r14_3, ~m?
|
||||||
|
# 14| r14_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
||||||
|
# 14| r14_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r14_5, ~m?
|
||||||
|
# 14| r14_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r14_2, 0:r14_4, 1:r14_6
|
||||||
|
# 14| mu14_8(unknown) = ^CallSideEffect : ~m?
|
||||||
|
# 14| mu14_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r14_1, r14_7
|
||||||
|
# 12| v12_10(void) = ReturnIndirection[b] : &:r12_8, ~m?
|
||||||
|
# 12| r12_11(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
||||||
|
# 12| v12_12(void) = ReturnValue : &:r12_11, ~m?
|
||||||
|
# 12| v12_13(void) = AliasedUse : ~m?
|
||||||
|
# 12| v12_14(void) = ExitFunction :
|
||||||
|
|
||||||
# 18| uint16x8_t arm_add(uint8x8_t, uint8x8_t)
|
# 22| mfloat8x8_t arm_reinterpret(int8x8_t*)
|
||||||
# 18| Block 0
|
# 22| Block 0
|
||||||
# 18| v18_1(void) = EnterFunction :
|
# 22| v22_1(void) = EnterFunction :
|
||||||
# 18| mu18_2(unknown) = AliasedDefinition :
|
# 22| mu22_2(unknown) = AliasedDefinition :
|
||||||
# 18| mu18_3(unknown) = InitializeNonLocal :
|
# 22| mu22_3(unknown) = InitializeNonLocal :
|
||||||
# 18| r18_4(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 22| r22_4(glval<char *>) = VariableAddress[a] :
|
||||||
# 18| mu18_5(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[a] : &:r18_4
|
# 22| mu22_5(char *) = InitializeParameter[a] : &:r22_4
|
||||||
# 18| r18_6(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 22| r22_6(char *) = Load[a] : &:r22_4, ~m?
|
||||||
# 18| mu18_7(__attribute((neon_vector_type(8))) unsigned char) = InitializeParameter[b] : &:r18_6
|
# 22| mu22_7(unknown) = InitializeIndirection[a] : &:r22_6
|
||||||
# 19| r19_1(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
# 23| r23_1(glval<__mfp8>) = VariableAddress[#return] :
|
||||||
# 19| r19_2(glval<unknown>) = FunctionAddress[vadd_u8] :
|
# 23| r23_2(glval<unknown>) = FunctionAddress[vreinterpret_mf8_s8] :
|
||||||
# 19| r19_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 23| r23_3(glval<char *>) = VariableAddress[a] :
|
||||||
# 19| r19_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r19_3, ~m?
|
# 23| r23_4(char *) = Load[a] : &:r23_3, ~m?
|
||||||
# 19| r19_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[b] :
|
# 23| r23_5(char) = Load[?] : &:r23_4, ~m?
|
||||||
# 19| r19_6(__attribute((neon_vector_type(8))) unsigned char) = Load[b] : &:r19_5, ~m?
|
# 23| r23_6(__mfp8) = Call[vreinterpret_mf8_s8] : func:r23_2, 0:r23_5
|
||||||
# 19| r19_7(__attribute((neon_vector_type(8))) unsigned char) = Call[vadd_u8] : func:r19_2, 0:r19_4, 1:r19_6
|
# 23| mu23_7(unknown) = ^CallSideEffect : ~m?
|
||||||
# 19| mu19_8(unknown) = ^CallSideEffect : ~m?
|
# 23| mu23_8(__mfp8) = Store[#return] : &:r23_1, r23_6
|
||||||
# 19| mu19_9(__attribute((neon_vector_type(8))) unsigned char) = Store[c] : &:r19_1, r19_7
|
# 22| v22_8(void) = ReturnIndirection[a] : &:r22_6, ~m?
|
||||||
# 20| r20_1(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 22| r22_9(glval<__mfp8>) = VariableAddress[#return] :
|
||||||
# 20| r20_2(glval<unknown>) = FunctionAddress[vaddl_u8] :
|
# 22| v22_10(void) = ReturnValue : &:r22_9, ~m?
|
||||||
# 20| r20_3(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[a] :
|
# 22| v22_11(void) = AliasedUse : ~m?
|
||||||
# 20| r20_4(__attribute((neon_vector_type(8))) unsigned char) = Load[a] : &:r20_3, ~m?
|
# 22| v22_12(void) = ExitFunction :
|
||||||
# 20| r20_5(glval<__attribute((neon_vector_type(8))) unsigned char>) = VariableAddress[c] :
|
|
||||||
# 20| r20_6(__attribute((neon_vector_type(8))) unsigned char) = Load[c] : &:r20_5, ~m?
|
arm_sve.cpp:
|
||||||
# 20| r20_7(__attribute((neon_vector_type(8))) unsigned short) = Call[vaddl_u8] : func:r20_2, 0:r20_4, 1:r20_6
|
# 8| svuint8x2_t arm_sel(svcount_t, svuint8x2_t, svuint8x2_t*)
|
||||||
# 20| mu20_8(unknown) = ^CallSideEffect : ~m?
|
# 8| Block 0
|
||||||
# 20| mu20_9(__attribute((neon_vector_type(8))) unsigned short) = Store[#return] : &:r20_1, r20_7
|
# 8| v8_1(void) = EnterFunction :
|
||||||
# 18| r18_8(glval<__attribute((neon_vector_type(8))) unsigned short>) = VariableAddress[#return] :
|
# 8| mu8_2(unknown) = AliasedDefinition :
|
||||||
# 18| v18_9(void) = ReturnValue : &:r18_8, ~m?
|
# 8| mu8_3(unknown) = InitializeNonLocal :
|
||||||
# 18| v18_10(void) = AliasedUse : ~m?
|
# 8| r8_4(glval<__SVCount_t>) = VariableAddress[a] :
|
||||||
# 18| v18_11(void) = ExitFunction :
|
# 8| mu8_5(__SVCount_t) = InitializeParameter[a] : &:r8_4
|
||||||
|
# 8| r8_6(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[b] :
|
||||||
|
# 8| mu8_7(__edg_scalable_vector_type__(unsigned char, 2)) = InitializeParameter[b] : &:r8_6
|
||||||
|
# 8| r8_8(glval<__edg_scalable_vector_type__(unsigned char, 2) *>) = VariableAddress[c] :
|
||||||
|
# 8| mu8_9(__edg_scalable_vector_type__(unsigned char, 2) *) = InitializeParameter[c] : &:r8_8
|
||||||
|
# 8| r8_10(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r8_8, ~m?
|
||||||
|
# 8| mu8_11(unknown) = InitializeIndirection[c] : &:r8_10
|
||||||
|
# 9| r9_1(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[d] :
|
||||||
|
# 9| r9_2(glval<unknown>) = FunctionAddress[svsel_u8_x2] :
|
||||||
|
# 9| r9_3(glval<__SVCount_t>) = VariableAddress[a] :
|
||||||
|
# 9| r9_4(__SVCount_t) = Load[a] : &:r9_3, ~m?
|
||||||
|
# 9| r9_5(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[b] :
|
||||||
|
# 9| r9_6(__edg_scalable_vector_type__(unsigned char, 2)) = Load[b] : &:r9_5, ~m?
|
||||||
|
# 9| r9_7(glval<__edg_scalable_vector_type__(unsigned char, 2) *>) = VariableAddress[c] :
|
||||||
|
# 9| r9_8(__edg_scalable_vector_type__(unsigned char, 2) *) = Load[c] : &:r9_7, ~m?
|
||||||
|
# 9| r9_9(__edg_scalable_vector_type__(unsigned char, 2)) = Load[?] : &:r9_8, ~m?
|
||||||
|
# 9| r9_10(__edg_scalable_vector_type__(unsigned char, 2)) = Call[svsel_u8_x2] : func:r9_2, 0:r9_4, 1:r9_6, 2:r9_9
|
||||||
|
# 9| mu9_11(unknown) = ^CallSideEffect : ~m?
|
||||||
|
# 9| mu9_12(__edg_scalable_vector_type__(unsigned char, 2)) = Store[d] : &:r9_1, r9_10
|
||||||
|
# 10| r10_1(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[#return] :
|
||||||
|
# 10| r10_2(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[d] :
|
||||||
|
# 10| r10_3(__edg_scalable_vector_type__(unsigned char, 2)) = Load[d] : &:r10_2, ~m?
|
||||||
|
# 10| mu10_4(__edg_scalable_vector_type__(unsigned char, 2)) = Store[#return] : &:r10_1, r10_3
|
||||||
|
# 8| v8_12(void) = ReturnIndirection[c] : &:r8_10, ~m?
|
||||||
|
# 8| r8_13(glval<__edg_scalable_vector_type__(unsigned char, 2)>) = VariableAddress[#return] :
|
||||||
|
# 8| v8_14(void) = ReturnValue : &:r8_13, ~m?
|
||||||
|
# 8| v8_15(void) = AliasedUse : ~m?
|
||||||
|
# 8| v8_16(void) = ExitFunction :
|
||||||
|
|
||||||
bad_asts.cpp:
|
bad_asts.cpp:
|
||||||
# 9| int Bad::S::MemberFunction<int 6>(int)
|
# 9| int Bad::S::MemberFunction<int 6>(int)
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
| file://:0:0:0:0 | operator= | file://:0:0:0:0 | __va_list_tag && |
|
| file://:0:0:0:0 | operator= | file://:0:0:0:0 | __va_list_tag && |
|
||||||
| file://:0:0:0:0 | operator= | file://:0:0:0:0 | const __va_list_tag & |
|
| file://:0:0:0:0 | operator= | file://:0:0:0:0 | const __va_list_tag & |
|
||||||
|
| test.cpp:2:6:2:6 | foo | file://:0:0:0:0 | float |
|
||||||
|
| test.cpp:2:6:2:6 | foo | file://:0:0:0:0 | int |
|
||||||
| test.cpp:2:6:2:8 | foo | test.cpp:1:19:1:19 | T |
|
| test.cpp:2:6:2:8 | foo | test.cpp:1:19:1:19 | T |
|
||||||
|
|||||||
@@ -10,3 +10,4 @@
|
|||||||
| isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> | ClassTemplateInstantiation | file://:0:0:0:0 | int |
|
| isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> | ClassTemplateInstantiation | file://:0:0:0:0 | int |
|
||||||
| isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<long> | ClassTemplateInstantiation | file://:0:0:0:0 | long |
|
| isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<long> | ClassTemplateInstantiation | file://:0:0:0:0 | long |
|
||||||
| load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> | ClassTemplateInstantiation | load.cpp:3:7:3:24 | std_istream_mockup |
|
| load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> | ClassTemplateInstantiation | load.cpp:3:7:3:24 | std_istream_mockup |
|
||||||
|
| load.cpp:22:10:22:10 | load | FunctionTemplateInstantiation | file://:0:0:0:0 | short |
|
||||||
|
|||||||
@@ -104,6 +104,15 @@
|
|||||||
| isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass<int> |
|
| isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:77:26:77:45 | AnotherTemplateClass<int> |
|
||||||
| isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:97:52:97:52 | AnotherTemplateClass<int>::myMethod2(MyClassEnum) |
|
| isfromtemplateinstantiation.cpp:99:1:99:1 | return ... | isfromtemplateinstantiation.cpp:97:52:97:52 | AnotherTemplateClass<int>::myMethod2(MyClassEnum) |
|
||||||
| isfromtemplateinstantiation.cpp:110:3:110:3 | definition of var_template | isfromtemplateinstantiation.cpp:110:3:110:3 | var_template |
|
| isfromtemplateinstantiation.cpp:110:3:110:3 | definition of var_template | isfromtemplateinstantiation.cpp:110:3:110:3 | var_template |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass<long *>::f() | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<long *> |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<long *> |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass<long *>::f() |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<long *> |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass<long *>::f() |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<long *> |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass<long *>::f() |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<long *> |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | isfromtemplateinstantiation.cpp:129:6:129:6 | AnotherTemplateClass<long *>::f() |
|
||||||
| isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<U> | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> |
|
| isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<U> | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> |
|
||||||
| isfromtemplateinstantiation.cpp:135:31:135:35 | declaration of Inner<U> | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> |
|
| isfromtemplateinstantiation.cpp:135:31:135:35 | declaration of Inner<U> | isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> |
|
||||||
| isfromtemplateinstantiation.cpp:136:7:136:7 | definition of x | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<long> |
|
| isfromtemplateinstantiation.cpp:136:7:136:7 | definition of x | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<long> |
|
||||||
@@ -112,7 +121,94 @@
|
|||||||
| isfromtemplateinstantiation.cpp:137:7:137:7 | y | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<long> |
|
| isfromtemplateinstantiation.cpp:137:7:137:7 | y | isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<long> |
|
||||||
| load.cpp:15:14:15:15 | definition of is | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
| load.cpp:15:14:15:15 | definition of is | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
| load.cpp:15:14:15:15 | is | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
| load.cpp:15:14:15:15 | is | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:18:5:18:5 | definition of basic_text_iprimitive | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:18:5:18:5 | definition of basic_text_iprimitive | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:18:36:18:42 | definition of isParam | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:18:36:18:42 | definition of isParam | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:18:36:18:42 | std_istream_mockup & isParam | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:18:36:18:42 | std_istream_mockup & isParam | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:19:11:19:21 | constructor init of field is | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:19:11:19:21 | constructor init of field is | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:19:14:19:20 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:19:14:19:20 | (reference dereference) | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:19:14:19:20 | (reference to) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:19:14:19:20 | (reference to) | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:19:14:19:20 | isParam | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:19:14:19:20 | isParam | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:19:23:19:24 | { ... } | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:19:23:19:24 | { ... } | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:19:24:19:24 | return ... | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:19:24:19:24 | return ... | load.cpp:18:5:18:5 | basic_text_iprimitive<std_istream_mockup>::basic_text_iprimitive(std_istream_mockup &) |
|
||||||
|
| load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:22:10:22:10 | definition of load | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:22:10:22:10 | definition of load | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
| load.cpp:22:10:22:13 | basic_text_iprimitive<std_istream_mockup>::load<T>(T &) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
| load.cpp:22:10:22:13 | basic_text_iprimitive<std_istream_mockup>::load<T>(T &) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
| load.cpp:22:10:22:13 | declaration of load | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
| load.cpp:22:10:22:13 | declaration of load | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
| load.cpp:22:19:22:19 | T & t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
| load.cpp:22:19:22:19 | T & t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
| load.cpp:22:19:22:19 | declaration of t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
| load.cpp:22:19:22:19 | declaration of t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:22:19:22:19 | definition of t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:22:19:22:19 | definition of t | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:22:19:22:19 | short & t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:22:19:22:19 | short & t | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:23:5:25:5 | { ... } | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:23:5:25:5 | { ... } | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:9:24:10 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:9:24:10 | (reference dereference) | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:9:24:10 | is | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:9:24:10 | is | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:9:24:10 | this | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:9:24:10 | this | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:9:24:16 | ExprStmt | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:9:24:16 | ExprStmt | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:12:24:12 | call to operator>> | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:12:24:12 | call to operator>> | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:12:24:16 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:12:24:16 | (reference dereference) | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:15:24:15 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:15:24:15 | (reference dereference) | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:15:24:15 | (reference to) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:15:24:15 | (reference to) | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:24:15:24:15 | t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:24:15:24:15 | t | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:25:5:25:5 | return ... | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:25:5:25:5 | return ... | load.cpp:22:10:22:10 | basic_text_iprimitive<std_istream_mockup>::load<short>(short &) |
|
||||||
|
| load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:27:10:27:10 | definition of load | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:27:10:27:10 | definition of load | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:27:22:27:22 | char & t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:27:22:27:22 | char & t | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:27:22:27:22 | definition of t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:27:22:27:22 | definition of t | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:28:5:32:5 | { ... } | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:28:5:32:5 | { ... } | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:29:9:29:20 | declaration | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:29:9:29:20 | declaration | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:29:19:29:19 | definition of i | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:29:19:29:19 | definition of i | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:29:19:29:19 | i | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:29:19:29:19 | i | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:30:9:30:12 | call to load | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:30:9:30:12 | call to load | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:30:9:30:12 | this | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:30:9:30:12 | this | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:30:9:30:16 | ExprStmt | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:30:9:30:16 | ExprStmt | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:30:14:30:14 | (reference to) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:30:14:30:14 | (reference to) | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:30:14:30:14 | i | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:30:14:30:14 | i | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:31:9:31:9 | (reference dereference) | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:31:9:31:9 | (reference dereference) | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:31:9:31:9 | t | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:31:9:31:9 | t | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:31:9:31:13 | ... = ... | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:31:9:31:13 | ... = ... | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:31:9:31:14 | ExprStmt | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:31:9:31:14 | ExprStmt | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:31:13:31:13 | (char)... | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:31:13:31:13 | (char)... | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:31:13:31:13 | i | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:31:13:31:13 | i | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
| load.cpp:32:5:32:5 | return ... | load.cpp:13:7:13:27 | basic_text_iprimitive<std_istream_mockup> |
|
||||||
|
| load.cpp:32:5:32:5 | return ... | load.cpp:27:10:27:10 | basic_text_iprimitive<std_istream_mockup>::load(char &) |
|
||||||
|
|||||||
@@ -425,7 +425,16 @@ isFromUninstantiatedTemplate
|
|||||||
| isfromtemplateinstantiation.cpp:123:6:123:6 | f | | | Declaration | |
|
| isfromtemplateinstantiation.cpp:123:6:123:6 | f | | | Declaration | |
|
||||||
| isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<T *> | | T | Declaration | |
|
| isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<T *> | | T | Declaration | |
|
||||||
| isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<long *> | I | | Declaration | |
|
| isfromtemplateinstantiation.cpp:128:7:128:30 | AnotherTemplateClass<long *> | I | | Declaration | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | | T | Definition | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:6:129:6 | definition of f | I | | Definition | |
|
||||||
| isfromtemplateinstantiation.cpp:129:6:129:6 | f | | T | Declaration | |
|
| isfromtemplateinstantiation.cpp:129:6:129:6 | f | | T | Declaration | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:6:129:6 | f | I | | Declaration | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | | T | Stmt | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:10:129:22 | { ... } | I | | Stmt | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | | T | Stmt | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:12:129:20 | return ... | I | | Stmt | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | | T | Expr | |
|
||||||
|
| isfromtemplateinstantiation.cpp:129:19:129:19 | 1 | I | | Expr | |
|
||||||
| isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> | | T | Declaration | |
|
| isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<T> | | T | Declaration | |
|
||||||
| isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> | I | | Declaration | |
|
| isfromtemplateinstantiation.cpp:134:29:134:33 | Outer<int> | I | | Declaration | |
|
||||||
| isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<U> | | T | Declaration | |
|
| isfromtemplateinstantiation.cpp:135:31:135:35 | Inner<U> | | T | Declaration | |
|
||||||
@@ -461,21 +470,82 @@ isFromUninstantiatedTemplate
|
|||||||
| load.cpp:15:14:15:15 | definition of is | I | | Definition | |
|
| load.cpp:15:14:15:15 | definition of is | I | | Definition | |
|
||||||
| load.cpp:15:14:15:15 | is | | T | Declaration | |
|
| load.cpp:15:14:15:15 | is | | T | Declaration | |
|
||||||
| load.cpp:15:14:15:15 | is | I | | Declaration | |
|
| load.cpp:15:14:15:15 | is | I | | Declaration | |
|
||||||
|
| load.cpp:18:5:18:5 | basic_text_iprimitive | I | | Declaration | |
|
||||||
| load.cpp:18:5:18:25 | basic_text_iprimitive | | T | Declaration | |
|
| load.cpp:18:5:18:25 | basic_text_iprimitive | | T | Declaration | |
|
||||||
|
| load.cpp:18:36:18:42 | definition of isParam | | T | Definition | |
|
||||||
|
| load.cpp:18:36:18:42 | definition of isParam | I | | Definition | |
|
||||||
|
| load.cpp:18:36:18:42 | isParam | | T | Declaration | |
|
||||||
|
| load.cpp:18:36:18:42 | isParam | I | | Declaration | |
|
||||||
|
| load.cpp:19:11:19:21 | constructor init of field is | | T | Expr | |
|
||||||
|
| load.cpp:19:11:19:21 | constructor init of field is | I | | Expr | |
|
||||||
| load.cpp:19:14:19:20 | (reference dereference) | | T | Expr | |
|
| load.cpp:19:14:19:20 | (reference dereference) | | T | Expr | |
|
||||||
|
| load.cpp:19:14:19:20 | (reference dereference) | I | | Expr | |
|
||||||
| load.cpp:19:14:19:20 | (reference to) | | T | Expr | |
|
| load.cpp:19:14:19:20 | (reference to) | | T | Expr | |
|
||||||
|
| load.cpp:19:14:19:20 | (reference to) | I | | Expr | |
|
||||||
| load.cpp:19:14:19:20 | isParam | | T | Expr | Ref |
|
| load.cpp:19:14:19:20 | isParam | | T | Expr | Ref |
|
||||||
|
| load.cpp:19:14:19:20 | isParam | I | | Expr | Ref |
|
||||||
|
| load.cpp:19:23:19:24 | { ... } | | T | Stmt | |
|
||||||
|
| load.cpp:19:23:19:24 | { ... } | I | | Stmt | |
|
||||||
|
| load.cpp:19:24:19:24 | return ... | | T | Stmt | |
|
||||||
|
| load.cpp:19:24:19:24 | return ... | I | | Stmt | |
|
||||||
|
| load.cpp:22:10:22:10 | load | I | | Declaration | |
|
||||||
| load.cpp:22:10:22:13 | load | | T | Declaration | |
|
| load.cpp:22:10:22:13 | load | | T | Declaration | |
|
||||||
| load.cpp:22:10:22:13 | load | I | T | Declaration | |
|
| load.cpp:22:10:22:13 | load | I | T | Declaration | |
|
||||||
|
| load.cpp:22:19:22:19 | definition of t | | T | Definition | |
|
||||||
|
| load.cpp:22:19:22:19 | definition of t | I | | Definition | |
|
||||||
| load.cpp:22:19:22:19 | t | | T | Declaration | |
|
| load.cpp:22:19:22:19 | t | | T | Declaration | |
|
||||||
|
| load.cpp:22:19:22:19 | t | I | | Declaration | |
|
||||||
| load.cpp:22:19:22:19 | t | I | T | Declaration | |
|
| load.cpp:22:19:22:19 | t | I | T | Declaration | |
|
||||||
|
| load.cpp:23:5:25:5 | { ... } | | T | Stmt | |
|
||||||
|
| load.cpp:23:5:25:5 | { ... } | I | | Stmt | |
|
||||||
| load.cpp:24:9:24:10 | (reference dereference) | | T | Expr | |
|
| load.cpp:24:9:24:10 | (reference dereference) | | T | Expr | |
|
||||||
|
| load.cpp:24:9:24:10 | (reference dereference) | I | | Expr | |
|
||||||
| load.cpp:24:9:24:10 | is | | T | Expr | Not ref |
|
| load.cpp:24:9:24:10 | is | | T | Expr | Not ref |
|
||||||
|
| load.cpp:24:9:24:10 | is | I | | Expr | Not ref |
|
||||||
| load.cpp:24:9:24:10 | this | | T | Expr | |
|
| load.cpp:24:9:24:10 | this | | T | Expr | |
|
||||||
|
| load.cpp:24:9:24:10 | this | I | | Expr | |
|
||||||
|
| load.cpp:24:9:24:16 | ExprStmt | | T | Stmt | |
|
||||||
|
| load.cpp:24:9:24:16 | ExprStmt | I | | Stmt | |
|
||||||
| load.cpp:24:15:24:15 | (reference dereference) | | T | Expr | |
|
| load.cpp:24:15:24:15 | (reference dereference) | | T | Expr | |
|
||||||
|
| load.cpp:24:15:24:15 | (reference dereference) | I | | Expr | |
|
||||||
|
| load.cpp:24:15:24:15 | (reference to) | I | | Expr | |
|
||||||
| load.cpp:24:15:24:15 | t | | T | Expr | Not ref |
|
| load.cpp:24:15:24:15 | t | | T | Expr | Not ref |
|
||||||
|
| load.cpp:24:15:24:15 | t | I | | Expr | Ref |
|
||||||
|
| load.cpp:25:5:25:5 | return ... | | T | Stmt | |
|
||||||
|
| load.cpp:25:5:25:5 | return ... | I | | Stmt | |
|
||||||
|
| load.cpp:27:10:27:10 | load | I | | Declaration | |
|
||||||
| load.cpp:27:10:27:13 | load | | T | Declaration | |
|
| load.cpp:27:10:27:13 | load | | T | Declaration | |
|
||||||
|
| load.cpp:27:22:27:22 | definition of t | | T | Definition | |
|
||||||
|
| load.cpp:27:22:27:22 | definition of t | I | | Definition | |
|
||||||
|
| load.cpp:27:22:27:22 | t | | T | Declaration | |
|
||||||
|
| load.cpp:27:22:27:22 | t | I | | Declaration | |
|
||||||
|
| load.cpp:28:5:32:5 | { ... } | | T | Stmt | |
|
||||||
|
| load.cpp:28:5:32:5 | { ... } | I | | Stmt | |
|
||||||
|
| load.cpp:29:9:29:20 | declaration | | T | Stmt | |
|
||||||
|
| load.cpp:29:9:29:20 | declaration | I | | Stmt | |
|
||||||
|
| load.cpp:29:19:29:19 | definition of i | | T | Definition | |
|
||||||
|
| load.cpp:29:19:29:19 | definition of i | I | | Definition | |
|
||||||
|
| load.cpp:29:19:29:19 | i | | T | Declaration | |
|
||||||
|
| load.cpp:29:19:29:19 | i | I | | Declaration | |
|
||||||
|
| load.cpp:30:9:30:12 | Unknown literal | | T | Expr | |
|
||||||
|
| load.cpp:30:9:30:12 | call to load | I | | Expr | |
|
||||||
|
| load.cpp:30:9:30:12 | this | I | | Expr | |
|
||||||
|
| load.cpp:30:9:30:16 | ExprStmt | | T | Stmt | |
|
||||||
|
| load.cpp:30:9:30:16 | ExprStmt | I | | Stmt | |
|
||||||
|
| load.cpp:30:14:30:14 | (reference to) | I | | Expr | |
|
||||||
|
| load.cpp:30:14:30:14 | i | | T | Expr | Not ref |
|
||||||
|
| load.cpp:30:14:30:14 | i | I | | Expr | Ref |
|
||||||
| load.cpp:31:9:31:9 | (reference dereference) | | T | Expr | |
|
| load.cpp:31:9:31:9 | (reference dereference) | | T | Expr | |
|
||||||
|
| load.cpp:31:9:31:9 | (reference dereference) | I | | Expr | |
|
||||||
| load.cpp:31:9:31:9 | t | | T | Expr | Not ref |
|
| load.cpp:31:9:31:9 | t | | T | Expr | Not ref |
|
||||||
|
| load.cpp:31:9:31:9 | t | I | | Expr | Not ref |
|
||||||
|
| load.cpp:31:9:31:13 | ... = ... | | T | Expr | |
|
||||||
|
| load.cpp:31:9:31:13 | ... = ... | I | | Expr | |
|
||||||
|
| load.cpp:31:9:31:14 | ExprStmt | | T | Stmt | |
|
||||||
|
| load.cpp:31:9:31:14 | ExprStmt | I | | Stmt | |
|
||||||
| load.cpp:31:13:31:13 | (char)... | | T | Expr | |
|
| load.cpp:31:13:31:13 | (char)... | | T | Expr | |
|
||||||
|
| load.cpp:31:13:31:13 | (char)... | I | | Expr | |
|
||||||
| load.cpp:31:13:31:13 | i | | T | Expr | Not ref |
|
| load.cpp:31:13:31:13 | i | | T | Expr | Not ref |
|
||||||
|
| load.cpp:31:13:31:13 | i | I | | Expr | Not ref |
|
||||||
|
| load.cpp:32:5:32:5 | return ... | | T | Stmt | |
|
||||||
|
| load.cpp:32:5:32:5 | return ... | I | | Stmt | |
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
| test.cpp:13:3:20:3 | switch (...) ... | 3 |
|
| test.cpp:13:3:20:3 | switch (...) ... | 3 |
|
||||||
|
| test.cpp:13:3:20:3 | switch (...) ... | 3 |
|
||||||
|
|||||||
@@ -5,10 +5,13 @@
|
|||||||
| file://:0:0:0:0 | _Complex _Float64 |
|
| file://:0:0:0:0 | _Complex _Float64 |
|
||||||
| file://:0:0:0:0 | _Complex _Float64x |
|
| file://:0:0:0:0 | _Complex _Float64x |
|
||||||
| file://:0:0:0:0 | _Complex _Float128 |
|
| file://:0:0:0:0 | _Complex _Float128 |
|
||||||
|
| file://:0:0:0:0 | _Complex __bf16 |
|
||||||
| file://:0:0:0:0 | _Complex __float128 |
|
| file://:0:0:0:0 | _Complex __float128 |
|
||||||
|
| file://:0:0:0:0 | _Complex __fp16 |
|
||||||
| file://:0:0:0:0 | _Complex double |
|
| file://:0:0:0:0 | _Complex double |
|
||||||
| file://:0:0:0:0 | _Complex float |
|
| file://:0:0:0:0 | _Complex float |
|
||||||
| file://:0:0:0:0 | _Complex long double |
|
| file://:0:0:0:0 | _Complex long double |
|
||||||
|
| file://:0:0:0:0 | _Complex std::float16_t |
|
||||||
| file://:0:0:0:0 | _Decimal32 |
|
| file://:0:0:0:0 | _Decimal32 |
|
||||||
| file://:0:0:0:0 | _Decimal64 |
|
| file://:0:0:0:0 | _Decimal64 |
|
||||||
| file://:0:0:0:0 | _Decimal128 |
|
| file://:0:0:0:0 | _Decimal128 |
|
||||||
|
|||||||
@@ -25,10 +25,13 @@
|
|||||||
| file://:0:0:0:0 | _Complex _Float64 | 16 |
|
| file://:0:0:0:0 | _Complex _Float64 | 16 |
|
||||||
| file://:0:0:0:0 | _Complex _Float64x | 32 |
|
| file://:0:0:0:0 | _Complex _Float64x | 32 |
|
||||||
| file://:0:0:0:0 | _Complex _Float128 | 32 |
|
| file://:0:0:0:0 | _Complex _Float128 | 32 |
|
||||||
|
| file://:0:0:0:0 | _Complex __bf16 | 4 |
|
||||||
| file://:0:0:0:0 | _Complex __float128 | 32 |
|
| file://:0:0:0:0 | _Complex __float128 | 32 |
|
||||||
|
| file://:0:0:0:0 | _Complex __fp16 | 4 |
|
||||||
| file://:0:0:0:0 | _Complex double | 16 |
|
| file://:0:0:0:0 | _Complex double | 16 |
|
||||||
| file://:0:0:0:0 | _Complex float | 8 |
|
| file://:0:0:0:0 | _Complex float | 8 |
|
||||||
| file://:0:0:0:0 | _Complex long double | 32 |
|
| file://:0:0:0:0 | _Complex long double | 32 |
|
||||||
|
| file://:0:0:0:0 | _Complex std::float16_t | 4 |
|
||||||
| file://:0:0:0:0 | _Decimal32 | 4 |
|
| file://:0:0:0:0 | _Decimal32 | 4 |
|
||||||
| file://:0:0:0:0 | _Decimal64 | 8 |
|
| file://:0:0:0:0 | _Decimal64 | 8 |
|
||||||
| file://:0:0:0:0 | _Decimal128 | 16 |
|
| file://:0:0:0:0 | _Decimal128 | 16 |
|
||||||
|
|||||||
@@ -7,10 +7,13 @@
|
|||||||
| file://:0:0:0:0 | _Complex _Float64 | _Complex _Float64 |
|
| file://:0:0:0:0 | _Complex _Float64 | _Complex _Float64 |
|
||||||
| file://:0:0:0:0 | _Complex _Float64x | _Complex _Float64x |
|
| file://:0:0:0:0 | _Complex _Float64x | _Complex _Float64x |
|
||||||
| file://:0:0:0:0 | _Complex _Float128 | _Complex _Float128 |
|
| file://:0:0:0:0 | _Complex _Float128 | _Complex _Float128 |
|
||||||
|
| file://:0:0:0:0 | _Complex __bf16 | _Complex __bf16 |
|
||||||
| file://:0:0:0:0 | _Complex __float128 | _Complex __float128 |
|
| file://:0:0:0:0 | _Complex __float128 | _Complex __float128 |
|
||||||
|
| file://:0:0:0:0 | _Complex __fp16 | _Complex __fp16 |
|
||||||
| file://:0:0:0:0 | _Complex double | _Complex double |
|
| file://:0:0:0:0 | _Complex double | _Complex double |
|
||||||
| file://:0:0:0:0 | _Complex float | _Complex float |
|
| file://:0:0:0:0 | _Complex float | _Complex float |
|
||||||
| file://:0:0:0:0 | _Complex long double | _Complex long double |
|
| file://:0:0:0:0 | _Complex long double | _Complex long double |
|
||||||
|
| file://:0:0:0:0 | _Complex std::float16_t | _Complex std::float16_t |
|
||||||
| file://:0:0:0:0 | _Decimal32 | _Decimal32 |
|
| file://:0:0:0:0 | _Decimal32 | _Decimal32 |
|
||||||
| file://:0:0:0:0 | _Decimal64 | _Decimal64 |
|
| file://:0:0:0:0 | _Decimal64 | _Decimal64 |
|
||||||
| file://:0:0:0:0 | _Decimal128 | _Decimal128 |
|
| file://:0:0:0:0 | _Decimal128 | _Decimal128 |
|
||||||
|
|||||||
@@ -6,10 +6,13 @@
|
|||||||
| _Complex _Float64 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
| _Complex _Float64 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
| _Complex _Float64x | BinaryFloatingPointType, ComplexNumberType | | | | |
|
| _Complex _Float64x | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
| _Complex _Float128 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
| _Complex _Float128 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
|
| _Complex __bf16 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
| _Complex __float128 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
| _Complex __float128 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
|
| _Complex __fp16 | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
| _Complex double | BinaryFloatingPointType, ComplexNumberType | | | | |
|
| _Complex double | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
| _Complex float | BinaryFloatingPointType, ComplexNumberType | | | | |
|
| _Complex float | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
| _Complex long double | BinaryFloatingPointType, ComplexNumberType | | | | |
|
| _Complex long double | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
|
| _Complex std::float16_t | BinaryFloatingPointType, ComplexNumberType | | | | |
|
||||||
| _Decimal32 | Decimal32Type | | | | |
|
| _Decimal32 | Decimal32Type | | | | |
|
||||||
| _Decimal64 | Decimal64Type | | | | |
|
| _Decimal64 | Decimal64Type | | | | |
|
||||||
| _Decimal128 | Decimal128Type | | | | |
|
| _Decimal128 | Decimal128Type | | | | |
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 1.7.43
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
|
|
||||||
## 1.7.42
|
## 1.7.42
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
## 1.7.43
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.7.42
|
lastReleaseVersion: 1.7.43
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/csharp-solorigate-all
|
name: codeql/csharp-solorigate-all
|
||||||
version: 1.7.43-dev
|
version: 1.7.44-dev
|
||||||
groups:
|
groups:
|
||||||
- csharp
|
- csharp
|
||||||
- solorigate
|
- solorigate
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 1.7.43
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
|
|
||||||
## 1.7.42
|
## 1.7.42
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
## 1.7.43
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.7.42
|
lastReleaseVersion: 1.7.43
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/csharp-solorigate-queries
|
name: codeql/csharp-solorigate-queries
|
||||||
version: 1.7.43-dev
|
version: 1.7.44-dev
|
||||||
groups:
|
groups:
|
||||||
- csharp
|
- csharp
|
||||||
- solorigate
|
- solorigate
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 5.1.9
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
|
|
||||||
## 5.1.8
|
## 5.1.8
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
3
csharp/ql/lib/change-notes/released/5.1.9.md
Normal file
3
csharp/ql/lib/change-notes/released/5.1.9.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## 5.1.9
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 5.1.8
|
lastReleaseVersion: 5.1.9
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/csharp-all
|
name: codeql/csharp-all
|
||||||
version: 5.1.9-dev
|
version: 5.1.10-dev
|
||||||
groups: csharp
|
groups: csharp
|
||||||
dbscheme: semmlecode.csharp.dbscheme
|
dbscheme: semmlecode.csharp.dbscheme
|
||||||
extractor: csharp
|
extractor: csharp
|
||||||
|
|||||||
@@ -1,3 +1,14 @@
|
|||||||
|
## 1.3.0
|
||||||
|
|
||||||
|
### Query Metadata Changes
|
||||||
|
|
||||||
|
* Query metadata tags have been systematically updated for many C# queries. Primary categorization as either `reliability` or `maintainability`, and relevant sub-category tags such as `readability`, `useless-code`, `complexity`, `performance`, `correctness`, `error-handling`, and `concurrency`. Aligns with the established [Query file metadata and alert message style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md#quality-query-sub-category-tags).
|
||||||
|
* Adjusts the `@security-severity` from 9.3 to 7.3 for `cs/uncontrolled-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact.
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* The queries `cs/dereferenced-value-is-always-null` and `cs/dereferenced-value-may-be-null` have been improved to reduce false positives. The queries no longer assume that expressions are dereferenced when passed as the receiver (`this` parameter) to extension methods where that parameter is a nullable type.
|
||||||
|
|
||||||
## 1.2.2
|
## 1.2.2
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: minorAnalysis
|
|
||||||
---
|
|
||||||
* The queries `cs/dereferenced-value-is-always-null` and `cs/dereferenced-value-may-be-null` have been improved to reduce false positives. The queries no longer assume that expressions are dereferenced when passed as the receiver (`this` parameter) to extension methods where that parameter is a nullable type.
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: queryMetadata
|
|
||||||
---
|
|
||||||
* Adjusts the `@security-severity` from 9.3 to 7.3 for `cs/uncontrolled-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact.
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
category: queryMetadata
|
|
||||||
---
|
|
||||||
* Query metadata tags have been systematically updated for many C# queries. Primary categorization as either `reliability` or `maintainability`, and relevant sub-category tags such as `readability`, `useless-code`, `complexity`, `performance`, `correctness`, `error-handling`, and `concurrency`. Aligns with the established [Query file metadata and alert message style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md#quality-query-sub-category-tags).
|
|
||||||
10
csharp/ql/src/change-notes/released/1.3.0.md
Normal file
10
csharp/ql/src/change-notes/released/1.3.0.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
## 1.3.0
|
||||||
|
|
||||||
|
### Query Metadata Changes
|
||||||
|
|
||||||
|
* Query metadata tags have been systematically updated for many C# queries. Primary categorization as either `reliability` or `maintainability`, and relevant sub-category tags such as `readability`, `useless-code`, `complexity`, `performance`, `correctness`, `error-handling`, and `concurrency`. Aligns with the established [Query file metadata and alert message style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md#quality-query-sub-category-tags).
|
||||||
|
* Adjusts the `@security-severity` from 9.3 to 7.3 for `cs/uncontrolled-format-string` to align `CWE-134` severity for memory safe languages to better reflect their impact.
|
||||||
|
|
||||||
|
### Minor Analysis Improvements
|
||||||
|
|
||||||
|
* The queries `cs/dereferenced-value-is-always-null` and `cs/dereferenced-value-may-be-null` have been improved to reduce false positives. The queries no longer assume that expressions are dereferenced when passed as the receiver (`this` parameter) to extension methods where that parameter is a nullable type.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.2.2
|
lastReleaseVersion: 1.3.0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/csharp-queries
|
name: codeql/csharp-queries
|
||||||
version: 1.2.3-dev
|
version: 1.3.1-dev
|
||||||
groups:
|
groups:
|
||||||
- csharp
|
- csharp
|
||||||
- queries
|
- queries
|
||||||
|
|||||||
@@ -517,7 +517,6 @@ The following components are supported:
|
|||||||
- **Member[**\ `name`\ **]** selects the property with the given name.
|
- **Member[**\ `name`\ **]** selects the property with the given name.
|
||||||
- **AnyMember** selects any property regardless of name.
|
- **AnyMember** selects any property regardless of name.
|
||||||
- **ArrayElement** selects an element of an array.
|
- **ArrayElement** selects an element of an array.
|
||||||
- **Element** selects an element of an array, iterator, or set object.
|
|
||||||
- **MapValue** selects a value of a map object.
|
- **MapValue** selects a value of a map object.
|
||||||
- **Awaited** selects the value of a promise.
|
- **Awaited** selects the value of a promise.
|
||||||
- **Instance** selects instances of a class, including instances of its subclasses.
|
- **Instance** selects instances of a class, including instances of its subclasses.
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 1.0.26
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
|
|
||||||
## 1.0.25
|
## 1.0.25
|
||||||
|
|
||||||
No user-facing changes.
|
No user-facing changes.
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
## 1.0.26
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.0.25
|
lastReleaseVersion: 1.0.26
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql-go-consistency-queries
|
name: codeql-go-consistency-queries
|
||||||
version: 1.0.26-dev
|
version: 1.0.27-dev
|
||||||
groups:
|
groups:
|
||||||
- go
|
- go
|
||||||
- queries
|
- queries
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 4.2.8
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
|
|
||||||
## 4.2.7
|
## 4.2.7
|
||||||
|
|
||||||
### Minor Analysis Improvements
|
### Minor Analysis Improvements
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
category: minorAnalysis
|
||||||
|
---
|
||||||
|
* Previously, `DefinedType.getBaseType` gave the underlying type. It now gives the right hand side of the type declaration, as the documentation indicated that it should.
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
category: deprecated
|
||||||
|
---
|
||||||
|
* The class `BuiltinType` is now deprecated. Use the new replacement `BuiltinTypeEntity` instead.
|
||||||
|
* The class `DeclaredType` is now deprecated. Use the new replacement `DeclaredTypeEntity` instead.
|
||||||
3
go/ql/lib/change-notes/released/4.2.8.md
Normal file
3
go/ql/lib/change-notes/released/4.2.8.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## 4.2.8
|
||||||
|
|
||||||
|
No user-facing changes.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 4.2.7
|
lastReleaseVersion: 4.2.8
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/go-all
|
name: codeql/go-all
|
||||||
version: 4.2.8-dev
|
version: 4.2.9-dev
|
||||||
groups: go
|
groups: go
|
||||||
dbscheme: go.dbscheme
|
dbscheme: go.dbscheme
|
||||||
extractor: go
|
extractor: go
|
||||||
|
|||||||
@@ -381,10 +381,20 @@ class TypeSpec extends @typespec, Spec, TypeParamDeclParent {
|
|||||||
string getName() { result = this.getNameExpr().getName() }
|
string getName() { result = this.getNameExpr().getName() }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the expression denoting the underlying type to which the newly declared type is bound.
|
* Gets the declared type of this specifier.
|
||||||
|
*
|
||||||
|
* Note that for alias types this will give the underlying type.
|
||||||
|
*/
|
||||||
|
Type getDeclaredType() { result = this.getNameExpr().getType() }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the expression denoting the underlying type to which the declared type is bound.
|
||||||
*/
|
*/
|
||||||
Expr getTypeExpr() { result = this.getChildExpr(1) }
|
Expr getTypeExpr() { result = this.getChildExpr(1) }
|
||||||
|
|
||||||
|
/** Gets the underlying type to which the declared type is bound. */
|
||||||
|
Type getRhsType() { result = this.getTypeExpr().getType() }
|
||||||
|
|
||||||
override string toString() { result = "type declaration specifier" }
|
override string toString() { result = "type declaration specifier" }
|
||||||
|
|
||||||
override string getAPrimaryQlClass() { result = "TypeSpec" }
|
override string getAPrimaryQlClass() { result = "TypeSpec" }
|
||||||
@@ -461,6 +471,7 @@ class FieldBase extends @field, ExprParent {
|
|||||||
* Examples:
|
* Examples:
|
||||||
*
|
*
|
||||||
* ```go
|
* ```go
|
||||||
|
* io.Reader
|
||||||
* Name string `json:"name"`
|
* Name string `json:"name"`
|
||||||
* x, y int
|
* x, y int
|
||||||
* ```
|
* ```
|
||||||
@@ -469,8 +480,9 @@ class FieldBase extends @field, ExprParent {
|
|||||||
*
|
*
|
||||||
* ```go
|
* ```go
|
||||||
* struct {
|
* struct {
|
||||||
* Name string `json:"name"`
|
* io.Reader // embedded field
|
||||||
* x, y int
|
* Name string `json:"name"` // field with tag
|
||||||
|
* x, y int // declares two fields with the same type
|
||||||
* }
|
* }
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
@@ -482,12 +494,24 @@ class FieldDecl extends FieldBase, Documentable, ExprParent {
|
|||||||
/**
|
/**
|
||||||
* Gets the expression representing the name of the `i`th field declared in this declaration
|
* Gets the expression representing the name of the `i`th field declared in this declaration
|
||||||
* (0-based).
|
* (0-based).
|
||||||
|
*
|
||||||
|
* This is not defined for embedded fields.
|
||||||
*/
|
*/
|
||||||
Expr getNameExpr(int i) {
|
Expr getNameExpr(int i) {
|
||||||
i >= 0 and
|
i >= 0 and
|
||||||
result = this.getChildExpr(i + 1)
|
result = this.getChildExpr(i + 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the `i`th field declared in this declaration (0-based).
|
||||||
|
*
|
||||||
|
* This is not defined for embedded fields.
|
||||||
|
*/
|
||||||
|
Field getField(int i) { this.getNameExpr(i).(Ident).declares(result) }
|
||||||
|
|
||||||
|
/** Holds if this field declaration declares an embedded type. */
|
||||||
|
predicate isEmbedded() { not exists(this.getNameExpr(_)) }
|
||||||
|
|
||||||
/** Gets the tag expression of this field declaration, if any. */
|
/** Gets the tag expression of this field declaration, if any. */
|
||||||
Expr getTag() { result = this.getChildExpr(-1) }
|
Expr getTag() { result = this.getChildExpr(-1) }
|
||||||
|
|
||||||
|
|||||||
@@ -202,13 +202,19 @@ class TypeEntity extends Entity, @typeobject { }
|
|||||||
class TypeParamParentEntity extends Entity, @typeparamparentobject { }
|
class TypeParamParentEntity extends Entity, @typeparamparentobject { }
|
||||||
|
|
||||||
/** A named type which has a declaration. */
|
/** A named type which has a declaration. */
|
||||||
class DeclaredType extends TypeEntity, DeclaredEntity, TypeParamParentEntity, @decltypeobject {
|
class DeclaredTypeEntity extends TypeEntity, DeclaredEntity, TypeParamParentEntity, @decltypeobject {
|
||||||
/** Gets the declaration specifier declaring this type. */
|
/** Gets the declaration specifier declaring this type. */
|
||||||
TypeSpec getSpec() { result.getNameExpr() = this.getDeclaration() }
|
TypeSpec getSpec() { result.getNameExpr() = this.getDeclaration() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** DEPRECATED: Use `DeclaredTypeEntity` instead. */
|
||||||
|
deprecated class DeclaredType = DeclaredTypeEntity;
|
||||||
|
|
||||||
/** A built-in type. */
|
/** A built-in type. */
|
||||||
class BuiltinType extends TypeEntity, BuiltinEntity, @builtintypeobject { }
|
class BuiltinTypeEntity extends TypeEntity, BuiltinEntity, @builtintypeobject { }
|
||||||
|
|
||||||
|
/** DEPRECATED: Use `BuiltinTypeEntity` instead. */
|
||||||
|
deprecated class BuiltinType = BuiltinTypeEntity;
|
||||||
|
|
||||||
/** A built-in or declared constant, variable, field, method or function. */
|
/** A built-in or declared constant, variable, field, method or function. */
|
||||||
class ValueEntity extends Entity, @valueobject {
|
class ValueEntity extends Entity, @valueobject {
|
||||||
@@ -754,64 +760,64 @@ private predicate builtinFunction(
|
|||||||
module Builtin {
|
module Builtin {
|
||||||
// built-in types
|
// built-in types
|
||||||
/** Gets the built-in type `bool`. */
|
/** Gets the built-in type `bool`. */
|
||||||
BuiltinType bool() { result.getName() = "bool" }
|
BuiltinTypeEntity bool() { result.getName() = "bool" }
|
||||||
|
|
||||||
/** Gets the built-in type `byte`. */
|
/** Gets the built-in type `byte`. */
|
||||||
BuiltinType byte() { result.getName() = "byte" }
|
BuiltinTypeEntity byte() { result.getName() = "byte" }
|
||||||
|
|
||||||
/** Gets the built-in type `complex64`. */
|
/** Gets the built-in type `complex64`. */
|
||||||
BuiltinType complex64() { result.getName() = "complex64" }
|
BuiltinTypeEntity complex64() { result.getName() = "complex64" }
|
||||||
|
|
||||||
/** Gets the built-in type `complex128`. */
|
/** Gets the built-in type `complex128`. */
|
||||||
BuiltinType complex128() { result.getName() = "complex128" }
|
BuiltinTypeEntity complex128() { result.getName() = "complex128" }
|
||||||
|
|
||||||
/** Gets the built-in type `error`. */
|
/** Gets the built-in type `error`. */
|
||||||
BuiltinType error() { result.getName() = "error" }
|
BuiltinTypeEntity error() { result.getName() = "error" }
|
||||||
|
|
||||||
/** Gets the built-in type `float32`. */
|
/** Gets the built-in type `float32`. */
|
||||||
BuiltinType float32() { result.getName() = "float32" }
|
BuiltinTypeEntity float32() { result.getName() = "float32" }
|
||||||
|
|
||||||
/** Gets the built-in type `float64`. */
|
/** Gets the built-in type `float64`. */
|
||||||
BuiltinType float64() { result.getName() = "float64" }
|
BuiltinTypeEntity float64() { result.getName() = "float64" }
|
||||||
|
|
||||||
/** Gets the built-in type `int`. */
|
/** Gets the built-in type `int`. */
|
||||||
BuiltinType int_() { result.getName() = "int" }
|
BuiltinTypeEntity int_() { result.getName() = "int" }
|
||||||
|
|
||||||
/** Gets the built-in type `int8`. */
|
/** Gets the built-in type `int8`. */
|
||||||
BuiltinType int8() { result.getName() = "int8" }
|
BuiltinTypeEntity int8() { result.getName() = "int8" }
|
||||||
|
|
||||||
/** Gets the built-in type `int16`. */
|
/** Gets the built-in type `int16`. */
|
||||||
BuiltinType int16() { result.getName() = "int16" }
|
BuiltinTypeEntity int16() { result.getName() = "int16" }
|
||||||
|
|
||||||
/** Gets the built-in type `int32`. */
|
/** Gets the built-in type `int32`. */
|
||||||
BuiltinType int32() { result.getName() = "int32" }
|
BuiltinTypeEntity int32() { result.getName() = "int32" }
|
||||||
|
|
||||||
/** Gets the built-in type `int64`. */
|
/** Gets the built-in type `int64`. */
|
||||||
BuiltinType int64() { result.getName() = "int64" }
|
BuiltinTypeEntity int64() { result.getName() = "int64" }
|
||||||
|
|
||||||
/** Gets the built-in type `rune`. */
|
/** Gets the built-in type `rune`. */
|
||||||
BuiltinType rune() { result.getName() = "rune" }
|
BuiltinTypeEntity rune() { result.getName() = "rune" }
|
||||||
|
|
||||||
/** Gets the built-in type `string`. */
|
/** Gets the built-in type `string`. */
|
||||||
BuiltinType string_() { result.getName() = "string" }
|
BuiltinTypeEntity string_() { result.getName() = "string" }
|
||||||
|
|
||||||
/** Gets the built-in type `uint`. */
|
/** Gets the built-in type `uint`. */
|
||||||
BuiltinType uint() { result.getName() = "uint" }
|
BuiltinTypeEntity uint() { result.getName() = "uint" }
|
||||||
|
|
||||||
/** Gets the built-in type `uint8`. */
|
/** Gets the built-in type `uint8`. */
|
||||||
BuiltinType uint8() { result.getName() = "uint8" }
|
BuiltinTypeEntity uint8() { result.getName() = "uint8" }
|
||||||
|
|
||||||
/** Gets the built-in type `uint16`. */
|
/** Gets the built-in type `uint16`. */
|
||||||
BuiltinType uint16() { result.getName() = "uint16" }
|
BuiltinTypeEntity uint16() { result.getName() = "uint16" }
|
||||||
|
|
||||||
/** Gets the built-in type `uint32`. */
|
/** Gets the built-in type `uint32`. */
|
||||||
BuiltinType uint32() { result.getName() = "uint32" }
|
BuiltinTypeEntity uint32() { result.getName() = "uint32" }
|
||||||
|
|
||||||
/** Gets the built-in type `uint64`. */
|
/** Gets the built-in type `uint64`. */
|
||||||
BuiltinType uint64() { result.getName() = "uint64" }
|
BuiltinTypeEntity uint64() { result.getName() = "uint64" }
|
||||||
|
|
||||||
/** Gets the built-in type `uintptr`. */
|
/** Gets the built-in type `uintptr`. */
|
||||||
BuiltinType uintptr() { result.getName() = "uintptr" }
|
BuiltinTypeEntity uintptr() { result.getName() = "uintptr" }
|
||||||
|
|
||||||
// built-in constants
|
// built-in constants
|
||||||
/** Gets the built-in constant `true`. */
|
/** Gets the built-in constant `true`. */
|
||||||
|
|||||||
@@ -1038,8 +1038,15 @@ deprecated class NamedType = DefinedType;
|
|||||||
|
|
||||||
/** A defined type. */
|
/** A defined type. */
|
||||||
class DefinedType extends @definedtype, CompositeType {
|
class DefinedType extends @definedtype, CompositeType {
|
||||||
/** Gets the type which this type is defined to be. */
|
/**
|
||||||
Type getBaseType() { underlying_type(this, result) }
|
* Gets the type which this type is defined to be, if available.
|
||||||
|
*
|
||||||
|
* Note that this is only defined for types declared in the project being
|
||||||
|
* analyzed. It will not be defined for types declared in external packages.
|
||||||
|
*/
|
||||||
|
Type getBaseType() {
|
||||||
|
result = this.getEntity().(DeclaredTypeEntity).getSpec().getTypeExpr().getType()
|
||||||
|
}
|
||||||
|
|
||||||
override Method getMethod(string m) {
|
override Method getMethod(string m) {
|
||||||
result = CompositeType.super.getMethod(m)
|
result = CompositeType.super.getMethod(m)
|
||||||
@@ -1049,7 +1056,7 @@ class DefinedType extends @definedtype, CompositeType {
|
|||||||
or
|
or
|
||||||
// handle promoted methods
|
// handle promoted methods
|
||||||
exists(StructType s, Type embedded |
|
exists(StructType s, Type embedded |
|
||||||
s = this.getBaseType() and
|
s = this.getUnderlyingType() and
|
||||||
s.hasOwnField(_, _, embedded, true) and
|
s.hasOwnField(_, _, embedded, true) and
|
||||||
// ensure `m` can be promoted
|
// ensure `m` can be promoted
|
||||||
not s.hasOwnField(_, m, _, _) and
|
not s.hasOwnField(_, m, _, _) and
|
||||||
@@ -1063,7 +1070,7 @@ class DefinedType extends @definedtype, CompositeType {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override Type getUnderlyingType() { result = this.getBaseType().getUnderlyingType() }
|
override Type getUnderlyingType() { underlying_type(this, result) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,3 +1,27 @@
|
|||||||
|
## 1.4.0
|
||||||
|
|
||||||
|
### Query Metadata Changes
|
||||||
|
|
||||||
|
* The tag `quality` has been added to multiple Go quality queries for consistency. They have all been given a tag for one of the two top-level categories `reliability` or `maintainability`, and a tag for a sub-category. See [Query file metadata and alert message style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md#quality-query-sub-category-tags) for more information about these categories.
|
||||||
|
* The tag `external/cwe/cwe-129` has been added to `go/constant-length-comparison`.
|
||||||
|
* The tag `external/cwe/cwe-193` has been added to `go/index-out-of-bounds`.
|
||||||
|
* The tag `external/cwe/cwe-197` has been added to `go/shift-out-of-range`.
|
||||||
|
* The tag `external/cwe/cwe-248` has been added to `go/redundant-recover`.
|
||||||
|
* The tag `external/cwe/cwe-252` has been added to `go/missing-error-check` and `go/unhandled-writable-file-close`.
|
||||||
|
* The tag `external/cwe/cwe-480` has been added to `go/mistyped-exponentiation`.
|
||||||
|
* The tag `external/cwe/cwe-570` has been added to `go/impossible-interface-nil-check` and `go/comparison-of-identical-expressions`.
|
||||||
|
* The tag `external/cwe/cwe-571` has been added to `go/negative-length-check` and `go/comparison-of-identical-expressions`.
|
||||||
|
* The tag `external/cwe/cwe-783` has been added to `go/whitespace-contradicts-precedence`.
|
||||||
|
* The tag `external/cwe/cwe-835` has been added to `go/inconsistent-loop-direction`.
|
||||||
|
* The tag `error-handling` has been added to `go/missing-error-check`, `go/unhandled-writable-file-close`, and `go/unexpected-nil-value`.
|
||||||
|
* The tag `useless-code` has been added to `go/useless-assignment-to-field`, `go/useless-assignment-to-local`, `go/useless-expression`, and `go/unreachable-statement`.
|
||||||
|
* The tag `logic` has been removed from `go/index-out-of-bounds` and `go/unexpected-nil-value`.
|
||||||
|
* The tags `call` and `defer` have been removed from `go/unhandled-writable-file-close`.
|
||||||
|
* The tags `correctness` and `quality` have been reordered in `go/missing-error-check` and `go/unhandled-writable-file-close`.
|
||||||
|
* The tag `maintainability` has been changed to `reliability` for `go/unhandled-writable-file-close`.
|
||||||
|
* The tag order has been standardized to have `quality` first, followed by the top-level category (`reliability` or `maintainability`), then sub-category tags, and finally CWE tags.
|
||||||
|
* The description text has been updated in `go/whitespace-contradicts-precedence` to change "may even indicate" to "may indicate".
|
||||||
|
|
||||||
## 1.3.0
|
## 1.3.0
|
||||||
|
|
||||||
### New Queries
|
### New Queries
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
## 1.4.0
|
||||||
category: queryMetadata
|
|
||||||
---
|
### Query Metadata Changes
|
||||||
|
|
||||||
* The tag `quality` has been added to multiple Go quality queries for consistency. They have all been given a tag for one of the two top-level categories `reliability` or `maintainability`, and a tag for a sub-category. See [Query file metadata and alert message style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md#quality-query-sub-category-tags) for more information about these categories.
|
* The tag `quality` has been added to multiple Go quality queries for consistency. They have all been given a tag for one of the two top-level categories `reliability` or `maintainability`, and a tag for a sub-category. See [Query file metadata and alert message style guide](https://github.com/github/codeql/blob/main/docs/query-metadata-style-guide.md#quality-query-sub-category-tags) for more information about these categories.
|
||||||
* The tag `external/cwe/cwe-129` has been added to `go/constant-length-comparison`.
|
* The tag `external/cwe/cwe-129` has been added to `go/constant-length-comparison`.
|
||||||
* The tag `external/cwe/cwe-193` has been added to `go/index-out-of-bounds`.
|
* The tag `external/cwe/cwe-193` has been added to `go/index-out-of-bounds`.
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
---
|
---
|
||||||
lastReleaseVersion: 1.3.0
|
lastReleaseVersion: 1.4.0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
name: codeql/go-queries
|
name: codeql/go-queries
|
||||||
version: 1.3.1-dev
|
version: 1.4.1-dev
|
||||||
groups:
|
groups:
|
||||||
- go
|
- go
|
||||||
- queries
|
- queries
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
| main.go:3:6:3:15 | type declaration specifier | status | int | def |
|
| main.go:3:6:3:15 | type declaration specifier | status | status | main.go:3:13:3:15 | int | int | def |
|
||||||
| main.go:5:6:5:20 | type declaration specifier | intlist | []int | alias |
|
| main.go:5:6:5:20 | type declaration specifier | intlist | []int | main.go:5:16:5:20 | array type | []int | alias |
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ import go
|
|||||||
|
|
||||||
from TypeSpec ts, string kind
|
from TypeSpec ts, string kind
|
||||||
where if ts instanceof AliasSpec then kind = "alias" else kind = "def"
|
where if ts instanceof AliasSpec then kind = "alias" else kind = "def"
|
||||||
select ts, ts.getName(), ts.getTypeExpr().getType().pp(), kind
|
select ts, ts.getName(), ts.getDeclaredType().pp(), ts.getTypeExpr(), ts.getRhsType().pp(), kind
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
| aliases.go:19:6:19:7 | S3 | struct { x int } |
|
||||||
|
| aliases.go:29:6:29:11 | MyType | struct { x MyTypeT } |
|
||||||
|
| cyclic.go:3:6:3:6 | s | struct { * s } |
|
||||||
|
| cyclic.go:7:6:7:6 | t | struct { * u; f int } |
|
||||||
|
| cyclic.go:12:6:12:6 | u | struct { t } |
|
||||||
|
| cyclic.go:16:6:16:6 | v | struct { s } |
|
||||||
|
| depth.go:5:6:5:6 | a | struct { b; c } |
|
||||||
|
| depth.go:10:6:10:6 | b | struct { f int } |
|
||||||
|
| depth.go:14:6:14:6 | c | struct { d } |
|
||||||
|
| depth.go:18:6:18:6 | d | struct { f string } |
|
||||||
|
| embedded.go:3:6:3:8 | Baz | struct { A string } |
|
||||||
|
| embedded.go:7:6:7:8 | Qux | struct { * Baz } |
|
||||||
|
| embedded.go:11:6:11:14 | EmbedsBaz | struct { Qux; Baz string } |
|
||||||
|
| generic.go:3:6:3:19 | GenericStruct1 | struct { valueField T; pointerField * T; arrayField [10]T; sliceField []T; mapField [string]T } |
|
||||||
|
| generic.go:11:6:11:27 | CircularGenericStruct1 | struct { pointerField * CircularGenericStruct1 } |
|
||||||
|
| generic.go:15:6:15:31 | UsesCircularGenericStruct1 | struct { root CircularGenericStruct1 } |
|
||||||
|
| generic.go:19:6:19:19 | GenericStruct2 | struct { structField GenericStruct1; mapField [S]T } |
|
||||||
|
| generic.go:24:6:24:20 | GenericStruct2b | struct { structField GenericStruct2 } |
|
||||||
|
| generic.go:28:6:28:27 | CircularGenericStruct2 | struct { pointerField * CircularGenericStruct2 } |
|
||||||
|
| generic.go:32:6:32:21 | GenericInterface | interface { GetT func() T } |
|
||||||
|
| generic.go:36:6:36:17 | GenericArray | [10]T |
|
||||||
|
| generic.go:37:6:37:19 | GenericPointer | * T |
|
||||||
|
| generic.go:38:6:38:17 | GenericSlice | []T |
|
||||||
|
| generic.go:39:6:39:16 | GenericMap1 | [string]V |
|
||||||
|
| generic.go:40:6:40:16 | GenericMap2 | [K]V |
|
||||||
|
| generic.go:41:6:41:19 | GenericChannel | chan<- T |
|
||||||
|
| generic.go:42:6:42:14 | MyMapType | [string]int |
|
||||||
|
| generic.go:43:6:43:19 | GenericDefined | MyMapType |
|
||||||
|
| generic.go:44:6:44:16 | MyFuncType1 | func(T) |
|
||||||
|
| generic.go:45:6:45:16 | MyFuncType2 | func(T1) T2 |
|
||||||
|
| generic.go:47:6:47:16 | MyInterface | interface { clone func() MyInterface; dummy1 func() [10]U; dummy11 func() GenericArray; dummy12 func() GenericPointer; dummy13 func() GenericSlice; dummy14 func() GenericMap1; dummy15 func() GenericMap2; dummy17 func() GenericChannel; dummy18 func() GenericDefined; dummy19 func() MyFuncType1; dummy2 func() * U; dummy20 func() MyFuncType2; dummy3 func() []U; dummy4 func() [U]U; dummy5 func() chan<- U; dummy6 func() MyMapType; dummy7 func() MyFuncType2 } |
|
||||||
|
| generic.go:67:6:67:22 | HasBlankTypeParam | struct { } |
|
||||||
|
| generic.go:68:6:68:23 | HasBlankTypeParams | struct { } |
|
||||||
|
| generic.go:84:6:84:21 | GenericSignature | func(T) T |
|
||||||
|
| interface.go:3:6:3:7 | i0 | comparable |
|
||||||
|
| interface.go:5:6:5:7 | i1 | interface { int } |
|
||||||
|
| interface.go:9:6:9:7 | i2 | interface { ~string } |
|
||||||
|
| interface.go:13:6:13:7 | i3 | interface { [5]int \| ~string } |
|
||||||
|
| interface.go:18:6:18:7 | i4 | interface { i1 \| i2 \| float32 } |
|
||||||
|
| interface.go:23:6:23:7 | i5 | interface { []uint8; int \| ~[]uint8 } |
|
||||||
|
| interface.go:28:6:28:7 | i6 | interface { ~[]int \| ~string; String func() string } |
|
||||||
|
| interface.go:34:6:34:7 | i7 | interface { [5]int \| ~string; ~string; String func() string } |
|
||||||
|
| interface.go:41:6:41:7 | i8 | interface { ~[]int \| ~string; String func() string; StringA func() string } |
|
||||||
|
| interface.go:47:6:47:7 | i9 | interface { ~[]int \| ~string; String func() string; StringB func() string } |
|
||||||
|
| interface.go:52:6:52:8 | i10 | interface { comparable } |
|
||||||
|
| interface.go:57:6:57:8 | i11 | interface { [5]uint8 \| string; int } |
|
||||||
|
| interface.go:63:6:63:8 | i12 | interface { comparable; []uint8 \| string } |
|
||||||
|
| interface.go:69:6:69:8 | i13 | interface { comparable; []uint8 \| string } |
|
||||||
|
| interface.go:75:6:75:8 | i14 | interface { []uint8 \| string; ~[]int \| ~string; String func() string; StringA func() string } |
|
||||||
|
| interface.go:81:6:81:8 | i15 | interface { []uint8 \| string; ~[]int \| ~string; String func() string; StringB func() string } |
|
||||||
|
| interface.go:87:6:87:8 | i16 | interface { } |
|
||||||
|
| interface.go:91:6:91:8 | i17 | interface { StringA func() string } |
|
||||||
|
| interface.go:95:6:95:8 | i18 | interface { comparable; StringA func() string } |
|
||||||
|
| interface.go:101:6:101:8 | i19 | interface { StringB func() string } |
|
||||||
|
| interface.go:105:6:105:8 | i20 | interface { comparable; StringB func() string } |
|
||||||
|
| interface.go:114:6:114:19 | testComparable | struct { } |
|
||||||
|
| interface.go:115:6:115:20 | testComparable0 | struct { } |
|
||||||
|
| interface.go:116:6:116:20 | testComparable1 | struct { } |
|
||||||
|
| interface.go:117:6:117:20 | testComparable2 | struct { } |
|
||||||
|
| interface.go:118:6:118:20 | testComparable3 | struct { } |
|
||||||
|
| interface.go:119:6:119:20 | testComparable4 | struct { } |
|
||||||
|
| interface.go:120:6:120:20 | testComparable5 | struct { } |
|
||||||
|
| interface.go:121:6:121:20 | testComparable6 | struct { } |
|
||||||
|
| interface.go:122:6:122:20 | testComparable7 | struct { } |
|
||||||
|
| interface.go:123:6:123:20 | testComparable8 | struct { } |
|
||||||
|
| interface.go:124:6:124:20 | testComparable9 | struct { } |
|
||||||
|
| interface.go:125:6:125:21 | testComparable10 | struct { } |
|
||||||
|
| interface.go:126:6:126:21 | testComparable11 | struct { } |
|
||||||
|
| interface.go:127:6:127:21 | testComparable12 | struct { } |
|
||||||
|
| interface.go:128:6:128:21 | testComparable13 | struct { } |
|
||||||
|
| interface.go:129:6:129:21 | testComparable14 | struct { } |
|
||||||
|
| interface.go:130:6:130:21 | testComparable15 | struct { } |
|
||||||
|
| interface.go:131:6:131:21 | testComparable16 | struct { } |
|
||||||
|
| interface.go:132:6:132:21 | testComparable17 | struct { } |
|
||||||
|
| interface.go:133:6:133:21 | testComparable18 | struct { } |
|
||||||
|
| interface.go:134:6:134:21 | testComparable19 | struct { } |
|
||||||
|
| interface.go:135:6:135:21 | testComparable20 | struct { } |
|
||||||
|
| interface.go:136:6:136:21 | testComparable21 | struct { } |
|
||||||
|
| interface.go:137:6:137:21 | testComparable22 | struct { } |
|
||||||
|
| interface.go:138:6:138:21 | testComparable23 | struct { } |
|
||||||
|
| main.go:17:6:17:20 | EmbedsNameClash | struct { NameClash } |
|
||||||
|
| pkg1/embedding.go:8:6:8:9 | base | struct { } |
|
||||||
|
| pkg1/embedding.go:19:6:19:13 | embedder | struct { base } |
|
||||||
|
| pkg1/embedding.go:22:6:22:16 | ptrembedder | struct { * base } |
|
||||||
|
| pkg1/embedding.go:25:6:25:14 | embedder2 | struct { embedder } |
|
||||||
|
| pkg1/embedding.go:28:6:28:14 | embedder3 | struct { embedder } |
|
||||||
|
| pkg1/embedding.go:35:6:35:14 | embedder4 | struct { base; f int } |
|
||||||
|
| pkg1/interfaces.go:3:6:3:6 | A | interface { m func() } |
|
||||||
|
| pkg1/interfaces.go:7:6:7:6 | B | interface { m func() ; n func() } |
|
||||||
|
| pkg1/interfaces.go:12:6:12:6 | C | interface { n func() ; o func() } |
|
||||||
|
| pkg1/interfaces.go:17:6:17:14 | AEmbedded | interface { m func() } |
|
||||||
|
| pkg1/interfaces.go:21:6:21:7 | AC | interface { m func() ; n func() ; o func() } |
|
||||||
|
| pkg1/interfaces.go:26:6:26:14 | AExtended | interface { m func() ; n func() } |
|
||||||
|
| pkg1/interfaces.go:31:6:31:7 | A2 | interface { m func() } |
|
||||||
|
| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | interface { Exported func() ; notExported func() } |
|
||||||
|
| pkg1/promotedStructs.go:4:6:4:6 | S | struct { SField string } |
|
||||||
|
| pkg1/promotedStructs.go:13:6:13:6 | P | struct { PField string } |
|
||||||
|
| pkg1/promotedStructs.go:22:6:22:12 | SEmbedS | struct { S } |
|
||||||
|
| pkg1/promotedStructs.go:25:6:25:12 | SEmbedP | struct { P } |
|
||||||
|
| pkg1/tst.go:5:6:5:6 | T | struct { f int; Foo; Bar } |
|
||||||
|
| pkg1/tst.go:11:6:11:7 | T2 | struct { Foo Foo; Bar } |
|
||||||
|
| pkg1/tst.go:16:6:16:7 | T3 | struct { * Foo; * Bar } |
|
||||||
|
| pkg1/tst.go:21:6:21:7 | T4 | struct { * Foo; Bar Bar } |
|
||||||
|
| pkg1/tst.go:26:6:26:8 | Foo | struct { val int; flag bool } |
|
||||||
|
| pkg1/tst.go:31:6:31:8 | Bar | struct { flag bool } |
|
||||||
|
| pkg1/tst.go:61:6:61:14 | NameClash | struct { NameClash } |
|
||||||
|
| pkg2/tst.go:3:6:3:6 | T | struct { g int } |
|
||||||
|
| pkg2/tst.go:7:6:7:6 | G | struct { g int } |
|
||||||
|
| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | interface { Exported func() ; notExported func() } |
|
||||||
|
| pkg2/tst.go:16:6:16:14 | NameClash | struct { NCField string } |
|
||||||
|
| struct_tags.go:3:6:3:7 | S1 | struct { field1 int `tag1a`; field2 int `tag2a` } |
|
||||||
|
| struct_tags.go:8:6:8:7 | S2 | struct { field1 int `tag1b`; field2 int `tag2b` } |
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import go
|
||||||
|
|
||||||
|
from DefinedType dt, Type tp
|
||||||
|
where tp = dt.getBaseType()
|
||||||
|
select dt, tp.pp()
|
||||||
70
go/ql/test/library-tests/semmle/go/Types/FieldDecl.expected
Normal file
70
go/ql/test/library-tests/semmle/go/Types/FieldDecl.expected
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
fieldDeclWithNamedFields
|
||||||
|
| aliases.go:6:26:6:35 | field declaration | 0 | aliases.go:6:26:6:26 | x |
|
||||||
|
| aliases.go:6:26:6:35 | field declaration | 0 | aliases.go:8:26:8:26 | x |
|
||||||
|
| aliases.go:6:26:6:35 | field declaration | 0 | aliases.go:19:17:19:17 | x |
|
||||||
|
| aliases.go:8:26:8:35 | field declaration | 0 | aliases.go:6:26:6:26 | x |
|
||||||
|
| aliases.go:8:26:8:35 | field declaration | 0 | aliases.go:8:26:8:26 | x |
|
||||||
|
| aliases.go:8:26:8:35 | field declaration | 0 | aliases.go:19:17:19:17 | x |
|
||||||
|
| aliases.go:19:17:19:21 | field declaration | 0 | aliases.go:6:26:6:26 | x |
|
||||||
|
| aliases.go:19:17:19:21 | field declaration | 0 | aliases.go:8:26:8:26 | x |
|
||||||
|
| aliases.go:19:17:19:21 | field declaration | 0 | aliases.go:19:17:19:17 | x |
|
||||||
|
| aliases.go:29:34:29:42 | field declaration | 0 | aliases.go:29:34:29:34 | x |
|
||||||
|
| cyclic.go:9:2:9:6 | field declaration | 0 | cyclic.go:9:2:9:2 | f |
|
||||||
|
| depth.go:11:2:11:6 | field declaration | 0 | depth.go:11:2:11:2 | f |
|
||||||
|
| depth.go:19:2:19:9 | field declaration | 0 | depth.go:19:2:19:2 | f |
|
||||||
|
| embedded.go:4:2:4:9 | field declaration | 0 | embedded.go:4:2:4:2 | A |
|
||||||
|
| embedded.go:13:2:13:11 | field declaration | 0 | embedded.go:13:2:13:4 | Baz |
|
||||||
|
| generic.go:4:2:4:15 | field declaration | 0 | generic.go:4:2:4:11 | valueField |
|
||||||
|
| generic.go:5:2:5:16 | field declaration | 0 | generic.go:5:2:5:13 | pointerField |
|
||||||
|
| generic.go:6:2:6:19 | field declaration | 0 | generic.go:6:2:6:11 | arrayField |
|
||||||
|
| generic.go:7:2:7:17 | field declaration | 0 | generic.go:7:2:7:11 | sliceField |
|
||||||
|
| generic.go:8:2:8:26 | field declaration | 0 | generic.go:8:2:8:9 | mapField |
|
||||||
|
| generic.go:12:2:12:40 | field declaration | 0 | generic.go:12:2:12:13 | pointerField |
|
||||||
|
| generic.go:16:2:16:31 | field declaration | 0 | generic.go:16:2:16:5 | root |
|
||||||
|
| generic.go:20:2:20:30 | field declaration | 0 | generic.go:20:2:20:12 | structField |
|
||||||
|
| generic.go:21:2:21:20 | field declaration | 0 | generic.go:21:2:21:9 | mapField |
|
||||||
|
| generic.go:25:2:25:33 | field declaration | 0 | generic.go:25:2:25:12 | structField |
|
||||||
|
| generic.go:29:2:29:43 | field declaration | 0 | generic.go:29:2:29:13 | pointerField |
|
||||||
|
| pkg1/embedding.go:37:2:37:6 | field declaration | 0 | pkg1/embedding.go:37:2:37:2 | f |
|
||||||
|
| pkg1/promotedStructs.go:5:2:5:14 | field declaration | 0 | pkg1/promotedStructs.go:5:2:5:7 | SField |
|
||||||
|
| pkg1/promotedStructs.go:14:2:14:14 | field declaration | 0 | pkg1/promotedStructs.go:14:2:14:7 | PField |
|
||||||
|
| pkg1/tst.go:6:2:6:6 | field declaration | 0 | pkg1/tst.go:6:2:6:2 | f |
|
||||||
|
| pkg1/tst.go:12:2:12:8 | field declaration | 0 | pkg1/tst.go:12:2:12:4 | Foo |
|
||||||
|
| pkg1/tst.go:23:2:23:8 | field declaration | 0 | pkg1/tst.go:23:2:23:4 | Bar |
|
||||||
|
| pkg1/tst.go:27:2:27:9 | field declaration | 0 | pkg1/tst.go:27:2:27:4 | val |
|
||||||
|
| pkg1/tst.go:28:2:28:10 | field declaration | 0 | pkg1/tst.go:28:2:28:5 | flag |
|
||||||
|
| pkg1/tst.go:32:2:32:10 | field declaration | 0 | pkg1/tst.go:32:2:32:5 | flag |
|
||||||
|
| pkg2/tst.go:4:2:4:6 | field declaration | 0 | pkg2/tst.go:4:2:4:2 | g |
|
||||||
|
| pkg2/tst.go:4:2:4:6 | field declaration | 0 | pkg2/tst.go:8:2:8:2 | g |
|
||||||
|
| pkg2/tst.go:8:2:8:6 | field declaration | 0 | pkg2/tst.go:4:2:4:2 | g |
|
||||||
|
| pkg2/tst.go:8:2:8:6 | field declaration | 0 | pkg2/tst.go:8:2:8:2 | g |
|
||||||
|
| pkg2/tst.go:17:2:17:15 | field declaration | 0 | pkg2/tst.go:17:2:17:8 | NCField |
|
||||||
|
| struct_tags.go:4:2:4:19 | field declaration | 0 | struct_tags.go:4:2:4:7 | field1 |
|
||||||
|
| struct_tags.go:5:2:5:19 | field declaration | 0 | struct_tags.go:5:2:5:7 | field2 |
|
||||||
|
| struct_tags.go:9:2:9:19 | field declaration | 0 | struct_tags.go:9:2:9:7 | field1 |
|
||||||
|
| struct_tags.go:10:2:10:19 | field declaration | 0 | struct_tags.go:10:2:10:7 | field2 |
|
||||||
|
fieldDeclWithEmbeddedField
|
||||||
|
| cyclic.go:4:2:4:3 | field declaration | * s |
|
||||||
|
| cyclic.go:8:2:8:3 | field declaration | * u |
|
||||||
|
| cyclic.go:13:2:13:2 | field declaration | t |
|
||||||
|
| cyclic.go:17:2:17:2 | field declaration | s |
|
||||||
|
| depth.go:6:2:6:2 | field declaration | b |
|
||||||
|
| depth.go:7:2:7:2 | field declaration | c |
|
||||||
|
| depth.go:15:2:15:2 | field declaration | d |
|
||||||
|
| embedded.go:8:2:8:5 | field declaration | * Baz |
|
||||||
|
| embedded.go:12:2:12:4 | field declaration | Qux |
|
||||||
|
| main.go:18:2:18:15 | field declaration | NameClash |
|
||||||
|
| pkg1/embedding.go:19:23:19:26 | field declaration | base |
|
||||||
|
| pkg1/embedding.go:22:26:22:30 | field declaration | * base |
|
||||||
|
| pkg1/embedding.go:25:24:25:31 | field declaration | embedder |
|
||||||
|
| pkg1/embedding.go:28:24:28:31 | field declaration | embedder |
|
||||||
|
| pkg1/embedding.go:36:2:36:5 | field declaration | base |
|
||||||
|
| pkg1/promotedStructs.go:22:22:22:22 | field declaration | S |
|
||||||
|
| pkg1/promotedStructs.go:25:22:25:22 | field declaration | P |
|
||||||
|
| pkg1/tst.go:7:2:7:4 | field declaration | Foo |
|
||||||
|
| pkg1/tst.go:8:2:8:4 | field declaration | Bar |
|
||||||
|
| pkg1/tst.go:13:2:13:4 | field declaration | Bar |
|
||||||
|
| pkg1/tst.go:17:2:17:5 | field declaration | * Foo |
|
||||||
|
| pkg1/tst.go:18:2:18:5 | field declaration | * Bar |
|
||||||
|
| pkg1/tst.go:22:2:22:5 | field declaration | * Foo |
|
||||||
|
| pkg1/tst.go:62:2:62:15 | field declaration | NameClash |
|
||||||
7
go/ql/test/library-tests/semmle/go/Types/FieldDecl.ql
Normal file
7
go/ql/test/library-tests/semmle/go/Types/FieldDecl.ql
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import go
|
||||||
|
|
||||||
|
query predicate fieldDeclWithNamedFields(FieldDecl fd, int i, Field f) { fd.getField(i) = f }
|
||||||
|
|
||||||
|
query predicate fieldDeclWithEmbeddedField(FieldDecl fd, string tp) {
|
||||||
|
fd.isEmbedded() and tp = fd.getType().pp()
|
||||||
|
}
|
||||||
@@ -31,12 +31,12 @@
|
|||||||
| interface.go:101:6:101:8 | i19 | StringB | func() string |
|
| interface.go:101:6:101:8 | i19 | StringB | func() string |
|
||||||
| interface.go:105:6:105:8 | i20 | StringB | func() string |
|
| interface.go:105:6:105:8 | i20 | StringB | func() string |
|
||||||
| main.go:17:6:17:20 | EmbedsNameClash | NCMethod | func() |
|
| main.go:17:6:17:20 | EmbedsNameClash | NCMethod | func() |
|
||||||
|
| pkg1/embedding.go:8:6:8:9 | base | f | func() int |
|
||||||
| pkg1/embedding.go:19:6:19:13 | embedder | f | func() int |
|
| pkg1/embedding.go:19:6:19:13 | embedder | f | func() int |
|
||||||
| pkg1/embedding.go:22:6:22:16 | ptrembedder | f | func() int |
|
| pkg1/embedding.go:22:6:22:16 | ptrembedder | f | func() int |
|
||||||
| pkg1/embedding.go:22:6:22:16 | ptrembedder | g | func() int |
|
| pkg1/embedding.go:22:6:22:16 | ptrembedder | g | func() int |
|
||||||
| pkg1/embedding.go:25:6:25:14 | embedder2 | f | func() int |
|
| pkg1/embedding.go:25:6:25:14 | embedder2 | f | func() int |
|
||||||
| pkg1/embedding.go:28:6:28:14 | embedder3 | f | func() int |
|
| pkg1/embedding.go:28:6:28:14 | embedder3 | f | func() int |
|
||||||
| pkg1/embedding.go:35:6:35:14 | embedder4 | f | func() int |
|
|
||||||
| pkg1/interfaces.go:3:6:3:6 | A | m | func() |
|
| pkg1/interfaces.go:3:6:3:6 | A | m | func() |
|
||||||
| pkg1/interfaces.go:7:6:7:6 | B | m | func() |
|
| pkg1/interfaces.go:7:6:7:6 | B | m | func() |
|
||||||
| pkg1/interfaces.go:7:6:7:6 | B | n | func() |
|
| pkg1/interfaces.go:7:6:7:6 | B | n | func() |
|
||||||
@@ -51,10 +51,13 @@
|
|||||||
| pkg1/interfaces.go:31:6:31:7 | A2 | m | func() |
|
| pkg1/interfaces.go:31:6:31:7 | A2 | m | func() |
|
||||||
| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | Exported | func() |
|
| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | Exported | func() |
|
||||||
| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | notExported | func() |
|
| pkg1/interfaces.go:35:6:35:24 | MixedExportedAndNot | notExported | func() |
|
||||||
|
| pkg1/promotedStructs.go:4:6:4:6 | S | SMethod | func() interface { } |
|
||||||
| pkg1/promotedStructs.go:22:6:22:12 | SEmbedS | SMethod | func() interface { } |
|
| pkg1/promotedStructs.go:22:6:22:12 | SEmbedS | SMethod | func() interface { } |
|
||||||
| pkg1/tst.go:5:6:5:6 | T | half | func() Foo |
|
| pkg1/tst.go:5:6:5:6 | T | half | func() Foo |
|
||||||
| pkg1/tst.go:16:6:16:7 | T3 | half | func() Foo |
|
| pkg1/tst.go:16:6:16:7 | T3 | half | func() Foo |
|
||||||
| pkg1/tst.go:21:6:21:7 | T4 | half | func() Foo |
|
| pkg1/tst.go:21:6:21:7 | T4 | half | func() Foo |
|
||||||
|
| pkg1/tst.go:26:6:26:8 | Foo | half | func() Foo |
|
||||||
| pkg1/tst.go:61:6:61:14 | NameClash | NCMethod | func() |
|
| pkg1/tst.go:61:6:61:14 | NameClash | NCMethod | func() |
|
||||||
| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | Exported | func() |
|
| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | Exported | func() |
|
||||||
| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | notExported | func() |
|
| pkg2/tst.go:11:6:11:24 | MixedExportedAndNot | notExported | func() |
|
||||||
|
| pkg2/tst.go:16:6:16:14 | NameClash | NCMethod | func() |
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import go
|
import go
|
||||||
|
|
||||||
from DefinedType t, string m, Type tp
|
from Type t, string m, Type tp
|
||||||
where
|
where
|
||||||
exists(t.getEntity().getDeclaration()) and
|
exists(t.getEntity().getDeclaration()) and
|
||||||
t.getBaseType().hasMethod(m, tp)
|
t.hasMethod(m, tp)
|
||||||
select t, m, tp.pp()
|
select t, m, tp.pp()
|
||||||
|
|||||||
15
go/ql/test/query-tests/Security/CWE-681/FilterTestResults.ql
Normal file
15
go/ql/test/query-tests/Security/CWE-681/FilterTestResults.ql
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* @kind test-postprocess
|
||||||
|
* @description Remove the query predicates that differ based on 32/64-bit architecture. This should leave behind `invalidModelRowAdd` and `testFailures` in case of test failures.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The input test results: query predicate `relation` contains `data` at (`row`, `column`).
|
||||||
|
*/
|
||||||
|
external private predicate queryResults(string relation, int row, int column, string data);
|
||||||
|
|
||||||
|
/** Holds if the test output's query predicate `relation` contains `data` at (`row`, `column`). */
|
||||||
|
query predicate results(string relation, int row, int column, string data) {
|
||||||
|
queryResults(relation, row, column, data) and
|
||||||
|
not relation in ["#select", "nodes", "edges"]
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user