Merge remote-tracking branch 'github/main' into kaspersv/overlay-java-annotations

This commit is contained in:
Kasper Svendsen
2025-06-26 13:18:25 +02:00
2432 changed files with 50615 additions and 27388 deletions

View File

@@ -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
View File

@@ -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",

View File

@@ -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.

View File

@@ -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.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 0.4.11 lastReleaseVersion: 0.4.12

View File

@@ -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:

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
## 0.6.4
No user-facing changes.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 0.6.3 lastReleaseVersion: 0.6.4

View File

@@ -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]

View File

@@ -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):

View File

@@ -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 -*/",

View File

@@ -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'))

View File

@@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
description: Introduce new complex 16-bit floating-point types
compatibility: backwards
builtintypes.rel: run builtintypes.qlo

View File

@@ -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

View File

@@ -1,4 +0,0 @@
---
category: deprecated
---
* The `ThrowingFunction` class (`semmle.code.cpp.models.interfaces.Throwing`) has been deprecated. Please use the `AlwaysSehThrowingFunction` class instead.

View File

@@ -1,4 +0,0 @@
---
category: feature
---
* Added a predicate `hasParameterList` to `LambdaExpression` to capture whether a lambda has an explicitly specified parameter list.

View File

@@ -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.

View File

@@ -1,4 +0,0 @@
---
category: feature
---
* Added a predicate `getAnAttribute` to `Namespace` to retrieve a namespace attribute.

View File

@@ -1,4 +0,0 @@
---
category: fix
---
* `resolveTypedefs` now properly resolves typedefs for `ArrayType`s.

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* Added support for `__fp16 _Complex` and `__bf16 _Complex` types

View 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.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 5.1.0 lastReleaseVersion: 5.2.0

View File

@@ -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

View File

@@ -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
} }
/** /**

View File

@@ -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))

View File

@@ -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
} }
/** /**

View File

@@ -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

View File

@@ -0,0 +1,2 @@
description: Support more complex 16-bit floating-point types
compatibility: full

View File

@@ -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.

View File

@@ -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.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 1.4.2 lastReleaseVersion: 1.4.3

View File

@@ -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

View File

@@ -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>:

View File

@@ -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)

View File

@@ -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);
}

View 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);
}

View 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;
}

View File

@@ -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)

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -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 &) |

View File

@@ -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 | |

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -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 |

View File

@@ -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 | | | | |

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
## 1.7.43
No user-facing changes.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 1.7.42 lastReleaseVersion: 1.7.43

View File

@@ -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

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
## 1.7.43
No user-facing changes.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 1.7.42 lastReleaseVersion: 1.7.43

View File

@@ -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

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
## 5.1.9
No user-facing changes.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 5.1.8 lastReleaseVersion: 5.1.9

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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).

View 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.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 1.2.2 lastReleaseVersion: 1.3.0

View File

@@ -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

View File

@@ -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.

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
## 1.0.26
No user-facing changes.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 1.0.25 lastReleaseVersion: 1.0.26

View File

@@ -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

View File

@@ -1,3 +1,7 @@
## 4.2.8
No user-facing changes.
## 4.2.7 ## 4.2.7
### Minor Analysis Improvements ### Minor Analysis Improvements

View File

@@ -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.

View File

@@ -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.

View File

@@ -0,0 +1,3 @@
## 4.2.8
No user-facing changes.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 4.2.7 lastReleaseVersion: 4.2.8

View File

@@ -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

View File

@@ -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) }

View File

@@ -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`. */

View File

@@ -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) }
} }
/** /**

View File

@@ -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

View File

@@ -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`.

View File

@@ -1,2 +1,2 @@
--- ---
lastReleaseVersion: 1.3.0 lastReleaseVersion: 1.4.0

View File

@@ -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

View File

@@ -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 |

View File

@@ -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

View File

@@ -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` } |

View File

@@ -0,0 +1,5 @@
import go
from DefinedType dt, Type tp
where tp = dt.getBaseType()
select dt, tp.pp()

View 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 |

View 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()
}

View File

@@ -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() |

View File

@@ -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()

View 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