mirror of
https://github.com/github/codeql.git
synced 2026-02-23 02:13:41 +01:00
Merge branch 'main' into redsun82/bazel-9
This commit is contained in:
44
MODULE.bazel
44
MODULE.bazel
@@ -30,7 +30,7 @@ bazel_dep(name = "rules_kotlin", version = "2.2.2-codeql.1")
|
||||
bazel_dep(name = "gazelle", version = "0.47.0")
|
||||
bazel_dep(name = "rules_dotnet", version = "0.21.5-codeql.1")
|
||||
bazel_dep(name = "googletest", version = "1.14.0.bcr.1")
|
||||
bazel_dep(name = "rules_rust", version = "0.66.0")
|
||||
bazel_dep(name = "rules_rust", version = "0.68.1.codeql.1")
|
||||
bazel_dep(name = "zstd", version = "1.5.5.bcr.1")
|
||||
|
||||
bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
|
||||
@@ -43,7 +43,7 @@ RUST_EDITION = "2024"
|
||||
# a nightly toolchain is required to enable experimental_use_cc_common_link, which we require internally
|
||||
# we prefer to run the same version as internally, even if experimental_use_cc_common_link is not really
|
||||
# required in this repo
|
||||
RUST_VERSION = "nightly/2025-08-01"
|
||||
RUST_VERSION = "nightly/2026-01-22"
|
||||
|
||||
rust = use_extension("@rules_rust//rust:extensions.bzl", "rust")
|
||||
rust.toolchain(
|
||||
@@ -55,26 +55,26 @@ rust.toolchain(
|
||||
],
|
||||
# generated by buildutils-internal/scripts/fill-rust-sha256s.py (internal repo)
|
||||
sha256s = {
|
||||
"2025-08-01/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "9bbeaf5d3fc7247d31463a9083aa251c995cc50662c8219e7a2254d76a72a9a4",
|
||||
"2025-08-01/rustc-nightly-x86_64-apple-darwin.tar.xz": "c9ea539a8eff0d5d162701f99f9e1aabe14dd0dfb420d62362817a5d09219de7",
|
||||
"2025-08-01/rustc-nightly-aarch64-apple-darwin.tar.xz": "ae83feebbc39cfd982e4ecc8297731fe79c185173aee138467b334c5404b3773",
|
||||
"2025-08-01/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "9f170c30d802a349be60cf52ec46260802093cb1013ad667fc0d528b7b10152f",
|
||||
"2025-08-01/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "9ae5f3cd8f557c4f6df522597c69d14398cf604cfaed2b83e767c4b77a7eaaf6",
|
||||
"2025-08-01/clippy-nightly-x86_64-apple-darwin.tar.xz": "983cb9ee0b6b968188e04ab2d33743d54764b2681ce565e1b3f2b9135c696a3e",
|
||||
"2025-08-01/clippy-nightly-aarch64-apple-darwin.tar.xz": "ed2219dbc49d088225e1b7c5c4390fa295066e071fddaa2714018f6bb39ddbf0",
|
||||
"2025-08-01/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "911f40ab5cbdd686f40e00965271fe47c4805513a308ed01f30eafb25b448a50",
|
||||
"2025-08-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "106463c284e48e4904c717471eeec2be5cc83a9d2cae8d6e948b52438cad2e69",
|
||||
"2025-08-01/cargo-nightly-x86_64-apple-darwin.tar.xz": "6ad35c40efc41a8c531ea43235058347b6902d98a9693bf0aed7fc16d5590cef",
|
||||
"2025-08-01/cargo-nightly-aarch64-apple-darwin.tar.xz": "dd28c365e9d298abc3154c797720ad36a0058f131265c9978b4c8e4e37012c8a",
|
||||
"2025-08-01/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "7b431286e12d6b3834b038f078389a00cac73f351e8c3152b2504a3c06420b3b",
|
||||
"2025-08-01/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "e342e305d7927cc288d386983b2bc253cfad3776b113386e903d0b302648ef47",
|
||||
"2025-08-01/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "e44dd3506524d85c37b3a54bcc91d01378fd2c590b2db5c5974d12f05c1b84d1",
|
||||
"2025-08-01/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "0c1b5f46dd81be4a9227b10283a0fcaa39c14fea7e81aea6fd6d9887ff6cdc41",
|
||||
"2025-08-01/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "423e5fd11406adccbc31b8456ceb7375ce055cdf45e90d2c3babeb2d7f58383f",
|
||||
"2025-08-01/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "3c0ceb46a252647a1d4c7116d9ccae684fa5e42aaf3296419febd2c962c3b41d",
|
||||
"2025-08-01/rust-std-nightly-x86_64-apple-darwin.tar.xz": "3be416003cab10f767390a753d1d16ae4d26c7421c03c98992cf1943e5b0efe8",
|
||||
"2025-08-01/rust-std-nightly-aarch64-apple-darwin.tar.xz": "4046ac0ef951cb056b5028a399124f60999fa37792eab69d008d8d7965f389b4",
|
||||
"2025-08-01/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "191ed9d8603c3a4fe5a7bbbc2feb72049078dae2df3d3b7d5dedf3abbf823e6e",
|
||||
"2026-01-22/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "88db619323cc1321630d124efa51ed02fabc5e020f08cfa0eda2c0ac1afbe69a",
|
||||
"2026-01-22/rustc-nightly-x86_64-apple-darwin.tar.xz": "08484da3fa38db56f93629aeabdc0ae9ff8ed9704c0792d35259cbc849b3f54c",
|
||||
"2026-01-22/rustc-nightly-aarch64-apple-darwin.tar.xz": "a39c0b21b7058e364ea1bd43144e42e4bf1efade036b2e82455f2afce194ee81",
|
||||
"2026-01-22/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "d00248ee9850dbb6932b2578e32ff74fc7c429854c1aa071066ca31b65385a3b",
|
||||
"2026-01-22/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "70656a0ce994ffff16d5a35a7b170a0acd41e9bb54a589c96ed45bf97b094a4d",
|
||||
"2026-01-22/clippy-nightly-x86_64-apple-darwin.tar.xz": "fe242519fa961522734733009705aec3c2d9a20cc57291f2aa614e5e6262c88f",
|
||||
"2026-01-22/clippy-nightly-aarch64-apple-darwin.tar.xz": "38bb226363ec97c9722edf966cd58774a683e19fd2ff2a6030094445d51e06f9",
|
||||
"2026-01-22/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "6da9b4470beea67abfebf046f141eee0d2a8db7c7a9e4e2294478734fd477228",
|
||||
"2026-01-22/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "99004e9d10c43a01499642f53bb3184d41137a95d65bfb217098840a9e79e892",
|
||||
"2026-01-22/cargo-nightly-x86_64-apple-darwin.tar.xz": "6e021394cf8d8400ac6cfdfcef24e4d74f988e91eb8028b36de3a64ce3502990",
|
||||
"2026-01-22/cargo-nightly-aarch64-apple-darwin.tar.xz": "4b2494cb69ab64132cddbc411a38ea9f1105e54d6f986e43168d54f79510c673",
|
||||
"2026-01-22/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "c36613cf57407212d10d37b76e49a60ff42336e953cdff9e177283f530a83fc1",
|
||||
"2026-01-22/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "0b123c5027dbd833aae6845ffe9bd07d309bf798746a7176aadaea68fbcbd05d",
|
||||
"2026-01-22/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "a47864491ad5619158c950ab7570fb6e487d5117338585c27334d45824b406d8",
|
||||
"2026-01-22/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "db9bc826d6e2e7e914505d50157682e516ceb90357e83d77abddc32c2d962f41",
|
||||
"2026-01-22/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "ffaa406932b2fe62e01dad61cf4ed34860a5d2a6f9306ca340d79e630d930039",
|
||||
"2026-01-22/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "e9c0d5e06e18a4b509391b3088f29293e310cdc8ccc865be8fa3f09733326925",
|
||||
"2026-01-22/rust-std-nightly-x86_64-apple-darwin.tar.xz": "25d75995cee679a4828ca9fe48c5a31a67c3b0846018440ef912e5a6208f53f6",
|
||||
"2026-01-22/rust-std-nightly-aarch64-apple-darwin.tar.xz": "e4132bf3f2eed4684c86756a02315bcf481c23e675e3e25630fc604c9cb4594c",
|
||||
"2026-01-22/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "961bb535ef95ae8a5fa4e224cb94aff190f155c45a9bcf7a53e184b024aa41b1",
|
||||
},
|
||||
versions = [RUST_VERSION],
|
||||
)
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 0.4.28
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 0.4.27
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
3
actions/ql/lib/change-notes/released/0.4.28.md
Normal file
3
actions/ql/lib/change-notes/released/0.4.28.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 0.4.28
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 0.4.27
|
||||
lastReleaseVersion: 0.4.28
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/actions-all
|
||||
version: 0.4.28-dev
|
||||
version: 0.4.29-dev
|
||||
library: true
|
||||
warnOnImplicitThis: true
|
||||
dependencies:
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 0.6.20
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 0.6.19
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
3
actions/ql/src/change-notes/released/0.6.20.md
Normal file
3
actions/ql/src/change-notes/released/0.6.20.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 0.6.20
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 0.6.19
|
||||
lastReleaseVersion: 0.6.20
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/actions-queries
|
||||
version: 0.6.20-dev
|
||||
version: 0.6.21-dev
|
||||
library: false
|
||||
warnOnImplicitThis: true
|
||||
groups: [actions, queries]
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
## 7.1.1
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
* Added remote flow source models for the `winhttp.h` windows header and the Azure SDK core library for C/C++.
|
||||
|
||||
## 7.1.0
|
||||
|
||||
### New Features
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Added remote flow source models for the `winhttp.h` windows header and the Azure SDK core library for C/C++.
|
||||
4
cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md
Normal file
4
cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: fix
|
||||
---
|
||||
* The `allowInterproceduralFlow` predicate of must-flow data flow configurations now correctly handles direct recursion.
|
||||
4
cpp/ql/lib/change-notes/2026-02-14-must-flow.md
Normal file
4
cpp/ql/lib/change-notes/2026-02-14-must-flow.md
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: breaking
|
||||
---
|
||||
* `MustFlow`, the inter-procedural must-flow data flow analysis library, has been re-worked to use parameterized modules. Like in the case of data flow and taint tracking, instead of extending the `MustFlowConfiguration` class, the user should now implement a module with the `MustFlow::ConfigSig` signature, and instantiate the `MustFlow::Global` parameterized module with the implemented module.
|
||||
5
cpp/ql/lib/change-notes/released/7.1.1.md
Normal file
5
cpp/ql/lib/change-notes/released/7.1.1.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## 7.1.1
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
* Added remote flow source models for the `winhttp.h` windows header and the Azure SDK core library for C/C++.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 7.1.0
|
||||
lastReleaseVersion: 7.1.1
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/cpp-all
|
||||
version: 7.1.1-dev
|
||||
version: 7.1.2-dev
|
||||
groups: cpp
|
||||
dbscheme: semmlecode.cpp.dbscheme
|
||||
extractor: cpp
|
||||
|
||||
@@ -34,6 +34,38 @@ private string getSingleLocationFilePath(@element e) {
|
||||
macroinvocations(e, _, loc, _)
|
||||
or
|
||||
preprocdirects(e, _, loc)
|
||||
or
|
||||
diagnostics(e, _, _, _, _, loc)
|
||||
or
|
||||
usings(e, _, loc, _)
|
||||
or
|
||||
static_asserts(e, _, _, loc, _)
|
||||
or
|
||||
derivations(e, _, _, _, loc)
|
||||
or
|
||||
frienddecls(e, _, _, loc)
|
||||
or
|
||||
comments(e, _, loc)
|
||||
or
|
||||
exprs(e, _, loc)
|
||||
or
|
||||
stmts(e, _, loc)
|
||||
or
|
||||
initialisers(e, _, _, loc)
|
||||
or
|
||||
attributes(e, _, _, _, loc)
|
||||
or
|
||||
attribute_args(e, _, _, _, loc)
|
||||
or
|
||||
namequalifiers(e, _, _, loc)
|
||||
or
|
||||
enumconstants(e, _, _, _, _, loc)
|
||||
or
|
||||
type_mentions(e, _, loc, _)
|
||||
or
|
||||
lambda_capture(e, _, _, _, _, _, loc)
|
||||
or
|
||||
concept_templates(e, _, loc)
|
||||
|
|
||||
result = getLocationFilePath(loc)
|
||||
)
|
||||
|
||||
@@ -8,81 +8,143 @@ private import cpp
|
||||
private import semmle.code.cpp.ir.IR
|
||||
|
||||
/**
|
||||
* A configuration of a data flow analysis that performs must-flow analysis. This is different
|
||||
* from `DataFlow.qll` which performs may-flow analysis (i.e., it finds paths where the source _may_
|
||||
* flow to the sink).
|
||||
*
|
||||
* Like in `DataFlow.qll`, each use of the `MustFlow.qll` library must define its own unique extension
|
||||
* of this abstract class. To create a configuration, extend this class with a subclass whose
|
||||
* characteristic predicate is a unique singleton string and override `isSource`, `isSink` (and
|
||||
* `isAdditionalFlowStep` if additional steps are required).
|
||||
* Provides an inter-procedural must-flow data flow analysis.
|
||||
*/
|
||||
abstract class MustFlowConfiguration extends string {
|
||||
bindingset[this]
|
||||
MustFlowConfiguration() { any() }
|
||||
|
||||
module MustFlow {
|
||||
/**
|
||||
* Holds if `source` is a relevant data flow source.
|
||||
* An input configuration of a data flow analysis that performs must-flow analysis. This is different
|
||||
* from `DataFlow.qll` which performs may-flow analysis (i.e., it finds paths where the source _may_
|
||||
* flow to the sink).
|
||||
*/
|
||||
abstract predicate isSource(Instruction source);
|
||||
signature module ConfigSig {
|
||||
/**
|
||||
* Holds if `source` is a relevant data flow source.
|
||||
*/
|
||||
predicate isSource(Instruction source);
|
||||
|
||||
/**
|
||||
* Holds if `sink` is a relevant data flow sink.
|
||||
*/
|
||||
abstract predicate isSink(Operand sink);
|
||||
/**
|
||||
* Holds if `sink` is a relevant data flow sink.
|
||||
*/
|
||||
predicate isSink(Operand sink);
|
||||
|
||||
/**
|
||||
* Holds if data flow through `instr` is prohibited.
|
||||
*/
|
||||
predicate isBarrier(Instruction instr) { none() }
|
||||
/**
|
||||
* Holds if data flow through `instr` is prohibited.
|
||||
*/
|
||||
default predicate isBarrier(Instruction instr) { none() }
|
||||
|
||||
/**
|
||||
* Holds if the additional flow step from `node1` to `node2` must be taken
|
||||
* into account in the analysis.
|
||||
*/
|
||||
predicate isAdditionalFlowStep(Operand node1, Instruction node2) { none() }
|
||||
/**
|
||||
* Holds if the additional flow step from `node1` to `node2` must be taken
|
||||
* into account in the analysis.
|
||||
*/
|
||||
default predicate isAdditionalFlowStep(Operand node1, Instruction node2) { none() }
|
||||
|
||||
/** Holds if this configuration allows flow from arguments to parameters. */
|
||||
predicate allowInterproceduralFlow() { any() }
|
||||
|
||||
/**
|
||||
* Holds if data must flow from `source` to `sink` for this configuration.
|
||||
*
|
||||
* The corresponding paths are generated from the end-points and the graph
|
||||
* included in the module `PathGraph`.
|
||||
*/
|
||||
final predicate hasFlowPath(MustFlowPathNode source, MustFlowPathSink sink) {
|
||||
this.isSource(source.getInstruction()) and
|
||||
source.getASuccessor*() = sink
|
||||
/** Holds if this configuration allows flow from arguments to parameters. */
|
||||
default predicate allowInterproceduralFlow() { any() }
|
||||
}
|
||||
}
|
||||
|
||||
/** Holds if `node` flows from a source. */
|
||||
pragma[nomagic]
|
||||
private predicate flowsFromSource(Instruction node, MustFlowConfiguration config) {
|
||||
not config.isBarrier(node) and
|
||||
(
|
||||
config.isSource(node)
|
||||
or
|
||||
exists(Instruction mid |
|
||||
step(mid, node, config) and
|
||||
flowsFromSource(mid, pragma[only_bind_into](config))
|
||||
)
|
||||
)
|
||||
}
|
||||
/**
|
||||
* Constructs a global must-flow computation.
|
||||
*/
|
||||
module Global<ConfigSig Config> {
|
||||
import Config
|
||||
|
||||
/** Holds if `node` flows to a sink. */
|
||||
pragma[nomagic]
|
||||
private predicate flowsToSink(Instruction node, MustFlowConfiguration config) {
|
||||
flowsFromSource(node, pragma[only_bind_into](config)) and
|
||||
(
|
||||
config.isSink(node.getAUse())
|
||||
or
|
||||
exists(Instruction mid |
|
||||
step(node, mid, config) and
|
||||
flowsToSink(mid, pragma[only_bind_into](config))
|
||||
)
|
||||
)
|
||||
/**
|
||||
* Holds if data must flow from `source` to `sink`.
|
||||
*
|
||||
* The corresponding paths are generated from the end-points and the graph
|
||||
* included in the module `PathGraph`.
|
||||
*/
|
||||
predicate flowPath(PathNode source, PathSink sink) {
|
||||
isSource(source.getInstruction()) and
|
||||
source.getASuccessor*() = sink
|
||||
}
|
||||
|
||||
/** Holds if `node` flows from a source. */
|
||||
pragma[nomagic]
|
||||
private predicate flowsFromSource(Instruction node) {
|
||||
not isBarrier(node) and
|
||||
(
|
||||
isSource(node)
|
||||
or
|
||||
exists(Instruction mid |
|
||||
step(mid, node) and
|
||||
flowsFromSource(mid)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if `node` flows to a sink. */
|
||||
pragma[nomagic]
|
||||
private predicate flowsToSink(Instruction node) {
|
||||
flowsFromSource(node) and
|
||||
(
|
||||
isSink(node.getAUse())
|
||||
or
|
||||
exists(Instruction mid |
|
||||
step(node, mid) and
|
||||
flowsToSink(mid)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if `nodeFrom` flows to `nodeTo`. */
|
||||
private predicate step(Instruction nodeFrom, Instruction nodeTo) {
|
||||
Cached::localStep(nodeFrom, nodeTo)
|
||||
or
|
||||
allowInterproceduralFlow() and
|
||||
Cached::flowThroughCallable(nodeFrom, nodeTo)
|
||||
or
|
||||
isAdditionalFlowStep(nodeFrom.getAUse(), nodeTo)
|
||||
}
|
||||
|
||||
private newtype TLocalPathNode =
|
||||
MkLocalPathNode(Instruction n) {
|
||||
flowsToSink(n) and
|
||||
(
|
||||
isSource(n)
|
||||
or
|
||||
exists(PathNode mid | step(mid.getInstruction(), n))
|
||||
)
|
||||
}
|
||||
|
||||
/** A `Node` that is in a path from a source to a sink. */
|
||||
class PathNode extends TLocalPathNode {
|
||||
Instruction n;
|
||||
|
||||
PathNode() { this = MkLocalPathNode(n) }
|
||||
|
||||
/** Gets the underlying node. */
|
||||
Instruction getInstruction() { result = n }
|
||||
|
||||
/** Gets a textual representation of this node. */
|
||||
string toString() { result = n.getAst().toString() }
|
||||
|
||||
/** Gets the location of this element. */
|
||||
Location getLocation() { result = n.getLocation() }
|
||||
|
||||
/** Gets a successor node, if any. */
|
||||
PathNode getASuccessor() { step(this.getInstruction(), result.getInstruction()) }
|
||||
}
|
||||
|
||||
private class PathSink extends PathNode {
|
||||
PathSink() { isSink(this.getInstruction().getAUse()) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the query predicates needed to include a graph in a path-problem query.
|
||||
*/
|
||||
module PathGraph {
|
||||
private predicate reach(PathNode n) { n instanceof PathSink or reach(n.getASuccessor()) }
|
||||
|
||||
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
|
||||
query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) }
|
||||
|
||||
/** Holds if `n` is a node in the graph of data flow path explanations. */
|
||||
query predicate nodes(PathNode n, string key, string val) {
|
||||
reach(n) and key = "semmle.label" and val = n.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cached
|
||||
@@ -102,7 +164,7 @@ private module Cached {
|
||||
not f.isVirtual() and
|
||||
call.getPositionalArgument(n) = instr and
|
||||
f = call.getStaticCallTarget() and
|
||||
getEnclosingNonVirtualFunctionInitializeParameter(init, f) and
|
||||
isEnclosingNonVirtualFunctionInitializeParameter(init, f) and
|
||||
init.getParameter().getIndex() = pragma[only_bind_into](pragma[only_bind_out](n))
|
||||
}
|
||||
|
||||
@@ -111,7 +173,7 @@ private module Cached {
|
||||
* corresponding initialization instruction that receives the value of `instr` in `f`.
|
||||
*/
|
||||
pragma[noinline]
|
||||
private predicate getPositionalArgumentInitParam(
|
||||
private predicate isPositionalArgumentInitParam(
|
||||
CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f
|
||||
) {
|
||||
exists(int n |
|
||||
@@ -126,18 +188,18 @@ private module Cached {
|
||||
* `instr` in `f`.
|
||||
*/
|
||||
pragma[noinline]
|
||||
private predicate getThisArgumentInitParam(
|
||||
private predicate isThisArgumentInitParam(
|
||||
CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f
|
||||
) {
|
||||
not f.isVirtual() and
|
||||
call.getStaticCallTarget() = f and
|
||||
getEnclosingNonVirtualFunctionInitializeParameter(init, f) and
|
||||
isEnclosingNonVirtualFunctionInitializeParameter(init, f) and
|
||||
call.getThisArgument() = instr and
|
||||
init.getIRVariable() instanceof IRThisVariable
|
||||
}
|
||||
|
||||
/** Holds if `f` is the enclosing non-virtual function of `init`. */
|
||||
private predicate getEnclosingNonVirtualFunctionInitializeParameter(
|
||||
private predicate isEnclosingNonVirtualFunctionInitializeParameter(
|
||||
InitializeParameterInstruction init, Function f
|
||||
) {
|
||||
not f.isVirtual() and
|
||||
@@ -145,7 +207,7 @@ private module Cached {
|
||||
}
|
||||
|
||||
/** Holds if `f` is the enclosing non-virtual function of `init`. */
|
||||
private predicate getEnclosingNonVirtualFunctionInitializeIndirection(
|
||||
private predicate isEnclosingNonVirtualFunctionInitializeIndirection(
|
||||
InitializeIndirectionInstruction init, Function f
|
||||
) {
|
||||
not f.isVirtual() and
|
||||
@@ -153,15 +215,16 @@ private module Cached {
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `instr` is an argument (or argument indirection) to a call, and
|
||||
* `succ` is the corresponding initialization instruction in the call target.
|
||||
* Holds if `argument` is an argument (or argument indirection) to a call, and
|
||||
* `parameter` is the corresponding initialization instruction in the call target.
|
||||
*/
|
||||
private predicate flowThroughCallable(Instruction argument, Instruction parameter) {
|
||||
cached
|
||||
predicate flowThroughCallable(Instruction argument, Instruction parameter) {
|
||||
// Flow from an argument to a parameter
|
||||
exists(CallInstruction call, InitializeParameterInstruction init | init = parameter |
|
||||
getPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget())
|
||||
isPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget())
|
||||
or
|
||||
getThisArgumentInitParam(call, argument, init, call.getStaticCallTarget())
|
||||
isThisArgumentInitParam(call, argument, init, call.getStaticCallTarget())
|
||||
)
|
||||
or
|
||||
// Flow from argument indirection to parameter indirection
|
||||
@@ -170,7 +233,7 @@ private module Cached {
|
||||
|
|
||||
init = parameter and
|
||||
read.getPrimaryInstruction() = call and
|
||||
getEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget())
|
||||
isEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget())
|
||||
|
|
||||
exists(int n |
|
||||
read.getSideEffectOperand().getAnyDef() = argument and
|
||||
@@ -205,92 +268,10 @@ private module Cached {
|
||||
}
|
||||
|
||||
cached
|
||||
predicate step(Instruction nodeFrom, Instruction nodeTo) {
|
||||
predicate localStep(Instruction nodeFrom, Instruction nodeTo) {
|
||||
exists(Operand mid |
|
||||
instructionToOperandStep(nodeFrom, mid) and
|
||||
operandToInstructionStep(mid, nodeTo)
|
||||
)
|
||||
or
|
||||
flowThroughCallable(nodeFrom, nodeTo)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the enclosing callable of `n`. Unlike `n.getEnclosingCallable()`, this
|
||||
* predicate ensures that joins go from `n` to the result instead of the other
|
||||
* way around.
|
||||
*/
|
||||
pragma[inline]
|
||||
private IRFunction getEnclosingCallable(Instruction n) {
|
||||
pragma[only_bind_into](result) = pragma[only_bind_out](n).getEnclosingIRFunction()
|
||||
}
|
||||
|
||||
/** Holds if `nodeFrom` flows to `nodeTo`. */
|
||||
private predicate step(Instruction nodeFrom, Instruction nodeTo, MustFlowConfiguration config) {
|
||||
exists(config) and
|
||||
Cached::step(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) and
|
||||
(
|
||||
config.allowInterproceduralFlow()
|
||||
or
|
||||
getEnclosingCallable(nodeFrom) = getEnclosingCallable(nodeTo)
|
||||
)
|
||||
or
|
||||
config.isAdditionalFlowStep(nodeFrom.getAUse(), nodeTo)
|
||||
}
|
||||
|
||||
private newtype TLocalPathNode =
|
||||
MkLocalPathNode(Instruction n, MustFlowConfiguration config) {
|
||||
flowsToSink(n, config) and
|
||||
(
|
||||
config.isSource(n)
|
||||
or
|
||||
exists(MustFlowPathNode mid | step(mid.getInstruction(), n, config))
|
||||
)
|
||||
}
|
||||
|
||||
/** A `Node` that is in a path from a source to a sink. */
|
||||
class MustFlowPathNode extends TLocalPathNode {
|
||||
Instruction n;
|
||||
|
||||
MustFlowPathNode() { this = MkLocalPathNode(n, _) }
|
||||
|
||||
/** Gets the underlying node. */
|
||||
Instruction getInstruction() { result = n }
|
||||
|
||||
/** Gets a textual representation of this node. */
|
||||
string toString() { result = n.getAst().toString() }
|
||||
|
||||
/** Gets the location of this element. */
|
||||
Location getLocation() { result = n.getLocation() }
|
||||
|
||||
/** Gets a successor node, if any. */
|
||||
MustFlowPathNode getASuccessor() {
|
||||
step(this.getInstruction(), result.getInstruction(), this.getConfiguration())
|
||||
}
|
||||
|
||||
/** Gets the associated configuration. */
|
||||
MustFlowConfiguration getConfiguration() { this = MkLocalPathNode(_, result) }
|
||||
}
|
||||
|
||||
private class MustFlowPathSink extends MustFlowPathNode {
|
||||
MustFlowPathSink() { this.getConfiguration().isSink(this.getInstruction().getAUse()) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the query predicates needed to include a graph in a path-problem query.
|
||||
*/
|
||||
module PathGraph {
|
||||
private predicate reach(MustFlowPathNode n) {
|
||||
n instanceof MustFlowPathSink or reach(n.getASuccessor())
|
||||
}
|
||||
|
||||
/** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */
|
||||
query predicate edges(MustFlowPathNode a, MustFlowPathNode b) {
|
||||
a.getASuccessor() = b and reach(b)
|
||||
}
|
||||
|
||||
/** Holds if `n` is a node in the graph of data flow path explanations. */
|
||||
query predicate nodes(MustFlowPathNode n, string key, string val) {
|
||||
reach(n) and key = "semmle.label" and val = n.toString()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -404,7 +404,7 @@ predicate cmpWithLinearBound(
|
||||
* For example, if `t` is a signed 32-bit type then holds if `lb` is
|
||||
* `-2^31` and `ub` is `2^31 - 1`.
|
||||
*/
|
||||
private predicate typeBounds(ArithmeticType t, float lb, float ub) {
|
||||
private predicate typeBounds0(ArithmeticType t, float lb, float ub) {
|
||||
exists(IntegralType integralType, float limit |
|
||||
integralType = t and limit = 2.pow(8 * integralType.getSize())
|
||||
|
|
||||
@@ -423,6 +423,42 @@ private predicate typeBounds(ArithmeticType t, float lb, float ub) {
|
||||
t instanceof FloatingPointType and lb = -(1.0 / 0.0) and ub = 1.0 / 0.0
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the underlying type for an enumeration `e`.
|
||||
*
|
||||
* If the enumeration does not have an explicit type we approximate it using
|
||||
* the following rules:
|
||||
* - The result type is always `signed`, and
|
||||
* - if the largest value fits in an `int` the result is `int`. Otherwise, the
|
||||
* result is `long`.
|
||||
*/
|
||||
private IntegralType getUnderlyingTypeForEnum(Enum e) {
|
||||
result = e.getExplicitUnderlyingType()
|
||||
or
|
||||
not e.hasExplicitUnderlyingType() and
|
||||
result.isSigned() and
|
||||
exists(IntType intType |
|
||||
if max(e.getAnEnumConstant().getValue().toFloat()) >= 2.pow(8 * intType.getSize() - 1)
|
||||
then result instanceof LongType
|
||||
else result = intType
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `lb` and `ub` are the lower and upper bounds of the unspecified
|
||||
* type `t`.
|
||||
*
|
||||
* For example, if `t` is a signed 32-bit type then holds if `lb` is
|
||||
* `-2^31` and `ub` is `2^31 - 1`.
|
||||
*
|
||||
* Unlike `typeBounds0`, this predicate also handles `Enum` types.
|
||||
*/
|
||||
private predicate typeBounds(Type t, float lb, float ub) {
|
||||
typeBounds0(t, lb, ub)
|
||||
or
|
||||
typeBounds0(getUnderlyingTypeForEnum(t), lb, ub)
|
||||
}
|
||||
|
||||
private Type stripReference(Type t) {
|
||||
if t instanceof ReferenceType then result = t.(ReferenceType).getBaseType() else result = t
|
||||
}
|
||||
|
||||
@@ -512,8 +512,8 @@ private module BoundsEstimate {
|
||||
*/
|
||||
float getBoundsLimit() {
|
||||
// This limit is arbitrary, but low enough that it prevents timeouts on
|
||||
// specific observed customer databases (and the in the tests).
|
||||
result = 2.0.pow(40)
|
||||
// specific observed customer databases (and in the tests).
|
||||
result = 2.0.pow(29)
|
||||
}
|
||||
|
||||
/** Gets the maximum number of bounds possible for `t` when widening is used. */
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.5.11
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.5.10
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -16,17 +16,15 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.ir.IR
|
||||
import semmle.code.cpp.ir.dataflow.MustFlow
|
||||
import PathGraph
|
||||
import ReturnStackAllocatedMemory::PathGraph
|
||||
|
||||
/** Holds if `f` has a name that we interpret as evidence of intentionally returning the value of the stack pointer. */
|
||||
predicate intentionallyReturnsStackPointer(Function f) {
|
||||
f.getName().toLowerCase().matches(["%stack%", "%sp%"])
|
||||
}
|
||||
|
||||
class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration {
|
||||
ReturnStackAllocatedMemoryConfig() { this = "ReturnStackAllocatedMemoryConfig" }
|
||||
|
||||
override predicate isSource(Instruction source) {
|
||||
module ReturnStackAllocatedMemoryConfig implements MustFlow::ConfigSig {
|
||||
predicate isSource(Instruction source) {
|
||||
exists(Function func |
|
||||
// Rule out FPs caused by extraction errors.
|
||||
not func.hasErrors() and
|
||||
@@ -50,7 +48,7 @@ class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration {
|
||||
)
|
||||
}
|
||||
|
||||
override predicate isSink(Operand sink) {
|
||||
predicate isSink(Operand sink) {
|
||||
// Holds if `sink` is a node that represents the `StoreInstruction` that is subsequently used in
|
||||
// a `ReturnValueInstruction`.
|
||||
// We use the `StoreInstruction` instead of the instruction that defines the
|
||||
@@ -72,7 +70,7 @@ class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration {
|
||||
// int* px = id(&x);
|
||||
// }
|
||||
// ```
|
||||
override predicate allowInterproceduralFlow() { none() }
|
||||
predicate allowInterproceduralFlow() { none() }
|
||||
|
||||
/**
|
||||
* This configuration intentionally conflates addresses of fields and their object, and pointer offsets
|
||||
@@ -87,20 +85,22 @@ class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration {
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
override predicate isAdditionalFlowStep(Operand node1, Instruction node2) {
|
||||
predicate isAdditionalFlowStep(Operand node1, Instruction node2) {
|
||||
node2.(FieldAddressInstruction).getObjectAddressOperand() = node1
|
||||
or
|
||||
node2.(PointerOffsetInstruction).getLeftOperand() = node1
|
||||
}
|
||||
|
||||
override predicate isBarrier(Instruction n) { n.getResultType() instanceof ErroneousType }
|
||||
predicate isBarrier(Instruction n) { n.getResultType() instanceof ErroneousType }
|
||||
}
|
||||
|
||||
module ReturnStackAllocatedMemory = MustFlow::Global<ReturnStackAllocatedMemoryConfig>;
|
||||
|
||||
from
|
||||
MustFlowPathNode source, MustFlowPathNode sink, Instruction instr,
|
||||
ReturnStackAllocatedMemoryConfig conf
|
||||
ReturnStackAllocatedMemory::PathNode source, ReturnStackAllocatedMemory::PathNode sink,
|
||||
Instruction instr
|
||||
where
|
||||
conf.hasFlowPath(pragma[only_bind_into](source), pragma[only_bind_into](sink)) and
|
||||
ReturnStackAllocatedMemory::flowPath(pragma[only_bind_into](source), pragma[only_bind_into](sink)) and
|
||||
source.getInstruction() = instr
|
||||
select sink.getInstruction(), source, sink, "May return stack-allocated memory from $@.",
|
||||
instr.getAst(), instr.getAst().toString()
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.ir.IR
|
||||
import semmle.code.cpp.ir.dataflow.MustFlow
|
||||
import PathGraph
|
||||
import UninitializedLocal::PathGraph
|
||||
|
||||
/**
|
||||
* Auxiliary predicate: Types that don't require initialization
|
||||
@@ -70,25 +70,26 @@ predicate isSinkImpl(Instruction sink, VariableAccess va) {
|
||||
)
|
||||
}
|
||||
|
||||
class MustFlow extends MustFlowConfiguration {
|
||||
MustFlow() { this = "MustFlow" }
|
||||
|
||||
override predicate isSource(Instruction source) {
|
||||
module UninitializedLocalConfig implements MustFlow::ConfigSig {
|
||||
predicate isSource(Instruction source) {
|
||||
source instanceof UninitializedInstruction and
|
||||
exists(Type t | t = source.getResultType() | not allocatedType(t))
|
||||
}
|
||||
|
||||
override predicate isSink(Operand sink) { isSinkImpl(sink.getDef(), _) }
|
||||
predicate isSink(Operand sink) { isSinkImpl(sink.getDef(), _) }
|
||||
|
||||
override predicate allowInterproceduralFlow() { none() }
|
||||
predicate allowInterproceduralFlow() { none() }
|
||||
|
||||
override predicate isBarrier(Instruction instr) { instr instanceof ChiInstruction }
|
||||
predicate isBarrier(Instruction instr) { instr instanceof ChiInstruction }
|
||||
}
|
||||
|
||||
module UninitializedLocal = MustFlow::Global<UninitializedLocalConfig>;
|
||||
|
||||
from
|
||||
VariableAccess va, LocalVariable v, MustFlow conf, MustFlowPathNode source, MustFlowPathNode sink
|
||||
VariableAccess va, LocalVariable v, UninitializedLocal::PathNode source,
|
||||
UninitializedLocal::PathNode sink
|
||||
where
|
||||
conf.hasFlowPath(source, sink) and
|
||||
UninitializedLocal::flowPath(source, sink) and
|
||||
isSinkImpl(sink.getInstruction(), va) and
|
||||
v = va.getTarget()
|
||||
select va, source, sink, "The variable $@ may not be initialized at this access.", v, v.getName()
|
||||
|
||||
@@ -17,16 +17,16 @@
|
||||
import cpp
|
||||
import semmle.code.cpp.ir.IR
|
||||
import semmle.code.cpp.ir.dataflow.MustFlow
|
||||
import PathGraph
|
||||
import UnsafeUseOfThis::PathGraph
|
||||
|
||||
class UnsafeUseOfThisConfig extends MustFlowConfiguration {
|
||||
UnsafeUseOfThisConfig() { this = "UnsafeUseOfThisConfig" }
|
||||
module UnsafeUseOfThisConfig implements MustFlow::ConfigSig {
|
||||
predicate isSource(Instruction source) { isSource(source, _, _) }
|
||||
|
||||
override predicate isSource(Instruction source) { isSource(source, _, _) }
|
||||
|
||||
override predicate isSink(Operand sink) { isSink(sink, _) }
|
||||
predicate isSink(Operand sink) { isSink(sink, _) }
|
||||
}
|
||||
|
||||
module UnsafeUseOfThis = MustFlow::Global<UnsafeUseOfThisConfig>;
|
||||
|
||||
/** Holds if `sink` is a `this` pointer used by the call instruction `call`. */
|
||||
predicate isSink(Operand sink, CallInstruction call) {
|
||||
exists(PureVirtualFunction func |
|
||||
@@ -66,19 +66,17 @@ predicate isSource(InitializeParameterInstruction source, string msg, Class c) {
|
||||
* - `msg` is a string describing whether `source` is from a constructor or destructor.
|
||||
*/
|
||||
predicate flows(
|
||||
MustFlowPathNode source, string msg, Class sourceClass, MustFlowPathNode sink,
|
||||
UnsafeUseOfThis::PathNode source, string msg, Class sourceClass, UnsafeUseOfThis::PathNode sink,
|
||||
CallInstruction call
|
||||
) {
|
||||
exists(UnsafeUseOfThisConfig conf |
|
||||
conf.hasFlowPath(source, sink) and
|
||||
isSource(source.getInstruction(), msg, sourceClass) and
|
||||
isSink(sink.getInstruction().getAUse(), call)
|
||||
)
|
||||
UnsafeUseOfThis::flowPath(source, sink) and
|
||||
isSource(source.getInstruction(), msg, sourceClass) and
|
||||
isSink(sink.getInstruction().getAUse(), call)
|
||||
}
|
||||
|
||||
from
|
||||
MustFlowPathNode source, MustFlowPathNode sink, CallInstruction call, string msg,
|
||||
Class sourceClass
|
||||
UnsafeUseOfThis::PathNode source, UnsafeUseOfThis::PathNode sink, CallInstruction call,
|
||||
string msg, Class sourceClass
|
||||
where
|
||||
flows(source, msg, sourceClass, sink, call) and
|
||||
// Only raise an alert if there is no override of the pure virtual function in any base class.
|
||||
|
||||
3
cpp/ql/src/change-notes/released/1.5.11.md
Normal file
3
cpp/ql/src/change-notes/released/1.5.11.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 1.5.11
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.5.10
|
||||
lastReleaseVersion: 1.5.11
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/cpp-queries
|
||||
version: 1.5.11-dev
|
||||
version: 1.5.12-dev
|
||||
groups:
|
||||
- cpp
|
||||
- queries
|
||||
|
||||
@@ -1025,6 +1025,7 @@
|
||||
| test.c:970:12:970:12 | y | 256 |
|
||||
| test.c:971:9:971:9 | x | 2147483647 |
|
||||
| test.c:972:9:972:9 | y | 256 |
|
||||
| test.c:985:7:985:7 | e | -2147483648 |
|
||||
| test.cpp:10:7:10:7 | b | -2147483648 |
|
||||
| test.cpp:11:5:11:5 | x | -2147483648 |
|
||||
| test.cpp:13:10:13:10 | x | -2147483648 |
|
||||
@@ -1093,3 +1094,64 @@
|
||||
| test.cpp:122:4:122:4 | n | 0 |
|
||||
| test.cpp:122:8:122:8 | n | 0 |
|
||||
| test.cpp:122:12:122:12 | n | 1 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:20 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:21 | x | 0 |
|
||||
| test_nr_of_bounds.cpp:72:12:72:12 | x | 0 |
|
||||
|
||||
@@ -4546,6 +4546,13 @@ estimateNrOfBounds
|
||||
| test.c:970:18:970:20 | 512 | 1.0 |
|
||||
| test.c:971:9:971:9 | x | 1.0 |
|
||||
| test.c:972:9:972:9 | y | 1.0 |
|
||||
| test.c:977:9:977:11 | 1 | 1.0 |
|
||||
| test.c:978:9:978:11 | 2 | 1.0 |
|
||||
| test.c:979:9:979:11 | 4 | 1.0 |
|
||||
| test.c:980:9:980:11 | 8 | 1.0 |
|
||||
| test.c:981:9:981:12 | 16 | 1.0 |
|
||||
| test.c:985:7:985:7 | (int)... | 1.0 |
|
||||
| test.c:985:7:985:7 | e | 1.0 |
|
||||
| test.cpp:9:11:9:12 | - ... | 1.0 |
|
||||
| test.cpp:9:12:9:12 | 1 | 1.0 |
|
||||
| test.cpp:10:7:10:7 | (bool)... | 1.0 |
|
||||
@@ -4721,3 +4728,394 @@ estimateNrOfBounds
|
||||
| test.cpp:122:4:122:4 | n | 8.0 |
|
||||
| test.cpp:122:8:122:8 | n | 8.0 |
|
||||
| test.cpp:122:12:122:12 | n | 8.0 |
|
||||
| test_nr_of_bounds.cpp:2:9:2:11 | 1 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:3:9:3:11 | 2 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:4:9:4:11 | 4 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:5:9:5:11 | 8 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:6:9:6:12 | 16 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:7:9:7:12 | 32 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:8:9:8:12 | 64 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:9:9:9:12 | 128 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:10:9:10:13 | 256 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:11:9:11:13 | 512 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:12:9:12:13 | 1024 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:13:9:13:13 | 2048 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:14:9:14:14 | 4096 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:15:9:15:14 | 8192 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:16:9:16:14 | 16384 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:17:9:17:14 | 32768 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:18:9:18:15 | 65536 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:19:9:19:15 | 131072 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:20:9:20:15 | 262144 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:21:9:21:15 | 524288 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:22:9:22:16 | 1048576 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:23:9:23:16 | 2097152 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:24:9:24:16 | 4194304 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:25:9:25:16 | 8388608 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:26:9:26:17 | 16777216 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:27:10:27:18 | 33554432 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:28:10:28:18 | 67108864 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:29:10:29:18 | 134217728 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:30:10:30:19 | 268435456 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:31:10:31:19 | 536870912 | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:19 | ... & ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:19 | ... -= ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:20 | (...) | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 |
|
||||
| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:19 | ... & ... | 2.0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:19 | ... -= ... | 2.0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:20 | (...) | 2.0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 |
|
||||
| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 |
|
||||
| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 |
|
||||
| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:19 | ... & ... | 4.0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:19 | ... -= ... | 4.0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:20 | (...) | 4.0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 |
|
||||
| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 |
|
||||
| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 |
|
||||
| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:19 | ... & ... | 8.0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:19 | ... -= ... | 8.0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:20 | (...) | 8.0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 |
|
||||
| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 |
|
||||
| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 |
|
||||
| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:19 | ... & ... | 16.0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:19 | ... -= ... | 16.0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:20 | (...) | 16.0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 |
|
||||
| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 |
|
||||
| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 |
|
||||
| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:19 | ... & ... | 32.0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:19 | ... -= ... | 32.0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:20 | (...) | 32.0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 |
|
||||
| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 |
|
||||
| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 |
|
||||
| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:19 | ... & ... | 64.0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:19 | ... -= ... | 64.0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:20 | (...) | 64.0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 |
|
||||
| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 |
|
||||
| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 |
|
||||
| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:19 | ... & ... | 128.0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:19 | ... -= ... | 128.0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:20 | (...) | 128.0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 |
|
||||
| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 |
|
||||
| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 |
|
||||
| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:19 | ... & ... | 256.0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:19 | ... -= ... | 256.0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:20 | (...) | 256.0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 |
|
||||
| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 |
|
||||
| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 |
|
||||
| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:19 | ... & ... | 512.0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:19 | ... -= ... | 512.0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:20 | (...) | 512.0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 |
|
||||
| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 |
|
||||
| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 |
|
||||
| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:19 | ... & ... | 1024.0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:19 | ... -= ... | 1024.0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:20 | (...) | 1024.0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 |
|
||||
| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 |
|
||||
| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 |
|
||||
| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:19 | ... & ... | 2048.0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:19 | ... -= ... | 2048.0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:20 | (...) | 2048.0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 |
|
||||
| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 |
|
||||
| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 |
|
||||
| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:19 | ... & ... | 4096.0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:19 | ... -= ... | 4096.0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:20 | (...) | 4096.0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 |
|
||||
| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 |
|
||||
| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 |
|
||||
| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:19 | ... & ... | 8192.0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:19 | ... -= ... | 8192.0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:20 | (...) | 8192.0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 |
|
||||
| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 |
|
||||
| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 |
|
||||
| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:19 | ... & ... | 16384.0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:19 | ... -= ... | 16384.0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:20 | (...) | 16384.0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 |
|
||||
| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 |
|
||||
| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 |
|
||||
| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:19 | ... & ... | 32768.0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:19 | ... -= ... | 32768.0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:20 | (...) | 32768.0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 |
|
||||
| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 |
|
||||
| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 |
|
||||
| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:19 | ... & ... | 65536.0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:19 | ... -= ... | 65536.0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:20 | (...) | 65536.0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 |
|
||||
| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 |
|
||||
| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 |
|
||||
| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:19 | ... & ... | 131072.0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:19 | ... -= ... | 131072.0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:20 | (...) | 131072.0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 |
|
||||
| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 |
|
||||
| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 |
|
||||
| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:19 | ... & ... | 262144.0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:19 | ... -= ... | 262144.0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:20 | (...) | 262144.0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 |
|
||||
| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 |
|
||||
| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 |
|
||||
| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:19 | ... & ... | 524288.0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:19 | ... -= ... | 524288.0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:20 | (...) | 524288.0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 |
|
||||
| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 |
|
||||
| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 |
|
||||
| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:19 | ... & ... | 1048576.0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:19 | ... -= ... | 1048576.0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:20 | (...) | 1048576.0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 |
|
||||
| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 |
|
||||
| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 |
|
||||
| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:19 | ... & ... | 2097152.0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:19 | ... -= ... | 2097152.0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:20 | (...) | 2097152.0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 |
|
||||
| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 |
|
||||
| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 |
|
||||
| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:19 | ... & ... | 4194304.0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:19 | ... -= ... | 4194304.0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:20 | (...) | 4194304.0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 |
|
||||
| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 |
|
||||
| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 |
|
||||
| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:19 | ... & ... | 8388608.0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:19 | ... -= ... | 8388608.0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:20 | (...) | 8388608.0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 |
|
||||
| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 |
|
||||
| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 |
|
||||
| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:19 | ... & ... | 1.6777216E7 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:19 | ... -= ... | 1.6777216E7 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:19 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:20 | (...) | 1.6777216E7 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 |
|
||||
| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 |
|
||||
| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 |
|
||||
| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:20 | ... & ... | 3.3554432E7 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:20 | ... -= ... | 3.3554432E7 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:20 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:21 | (...) | 3.3554432E7 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 |
|
||||
| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 |
|
||||
| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 |
|
||||
| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:20 | ... & ... | 6.7108864E7 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:20 | ... -= ... | 6.7108864E7 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:20 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:21 | (...) | 6.7108864E7 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 |
|
||||
| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 |
|
||||
| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 |
|
||||
| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:20 | ... & ... | 1.34217728E8 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:20 | ... -= ... | 1.34217728E8 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:20 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:21 | (...) | 1.34217728E8 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 |
|
||||
| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 |
|
||||
| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 |
|
||||
| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:20 | ... & ... | 2.68435456E8 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:20 | ... -= ... | 2.68435456E8 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:20 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:21 | (...) | 2.68435456E8 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 |
|
||||
| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 |
|
||||
| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 |
|
||||
| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:20 | ... & ... | 5.36870912E8 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:20 | ... -= ... | 5.36870912E8 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:20 | ... == ... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:21 | (...) | 5.36870912E8 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 |
|
||||
| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 |
|
||||
| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 |
|
||||
| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 |
|
||||
| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 |
|
||||
| test_nr_of_bounds.cpp:72:12:72:12 | x | 1.073741824E9 |
|
||||
|
||||
@@ -14,8 +14,14 @@ private predicate nonFunctionalNrOfBounds(Expr e) {
|
||||
strictcount(SimpleRangeAnalysisInternal::estimateNrOfBounds(e)) > 1
|
||||
}
|
||||
|
||||
private predicate nrOfBoundsNotEq1(Expr e, int n) {
|
||||
e.getFile().getBaseName() = "test_nr_of_bounds.cpp" and
|
||||
n = count(SimpleRangeAnalysisInternal::estimateNrOfBounds(e)) and
|
||||
n != 1
|
||||
}
|
||||
|
||||
module FunctionalityTest implements TestSig {
|
||||
string getARelevantTag() { result = "nonFunctionalNrOfBounds" }
|
||||
string getARelevantTag() { result = ["nonFunctionalNrOfBounds", "bounds"] }
|
||||
|
||||
predicate hasActualResult(Location location, string element, string tag, string value) {
|
||||
exists(Expr e |
|
||||
@@ -25,6 +31,14 @@ module FunctionalityTest implements TestSig {
|
||||
tag = "nonFunctionalNrOfBounds" and
|
||||
value = ""
|
||||
)
|
||||
or
|
||||
exists(Expr e, int n |
|
||||
nrOfBoundsNotEq1(e, n) and
|
||||
location = e.getLocation() and
|
||||
element = e.toString() and
|
||||
tag = "bounds" and
|
||||
value = n.toString()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -972,3 +972,15 @@ void test_overflow() {
|
||||
out(y);
|
||||
}
|
||||
}
|
||||
|
||||
enum MY_ENUM_2 {
|
||||
A = 0x1,
|
||||
B = 0x2,
|
||||
C = 0x4,
|
||||
D = 0x8,
|
||||
E = 0x10
|
||||
};
|
||||
|
||||
void test_enum(enum MY_ENUM_2 e) {
|
||||
out(e);
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
enum MY_ENUM {
|
||||
A = 0x1,
|
||||
B = 0x2,
|
||||
C = 0x4,
|
||||
D = 0x8,
|
||||
E = 0x10,
|
||||
F = 0x20,
|
||||
G = 0x40,
|
||||
H = 0x80,
|
||||
I = 0x100,
|
||||
J = 0x200,
|
||||
L = 0x400,
|
||||
M = 0x800,
|
||||
N = 0x1000,
|
||||
O = 0x2000,
|
||||
P = 0x4000,
|
||||
Q = 0x8000,
|
||||
R = 0x10000,
|
||||
S = 0x20000,
|
||||
T = 0x40000,
|
||||
U = 0x80000,
|
||||
V = 0x100000,
|
||||
W = 0x200000,
|
||||
X = 0x400000,
|
||||
Y = 0x800000,
|
||||
Z = 0x1000000,
|
||||
AA = 0x2000000,
|
||||
AB = 0x4000000,
|
||||
AC = 0x8000000,
|
||||
AD = 0x10000000,
|
||||
AE = 0x20000000
|
||||
};
|
||||
|
||||
typedef unsigned int MY_ENUM_FLAGS;
|
||||
|
||||
MY_ENUM_FLAGS check_and_subs(MY_ENUM_FLAGS x)
|
||||
{
|
||||
|
||||
#define CHECK_AND_SUB(flag) if ((x & flag) == flag) { x -= flag; }
|
||||
CHECK_AND_SUB(A);
|
||||
CHECK_AND_SUB(B);
|
||||
CHECK_AND_SUB(C);
|
||||
CHECK_AND_SUB(D);
|
||||
CHECK_AND_SUB(E);
|
||||
CHECK_AND_SUB(F);
|
||||
CHECK_AND_SUB(G);
|
||||
CHECK_AND_SUB(H);
|
||||
CHECK_AND_SUB(I);
|
||||
CHECK_AND_SUB(J);
|
||||
CHECK_AND_SUB(L);
|
||||
CHECK_AND_SUB(M);
|
||||
CHECK_AND_SUB(N);
|
||||
CHECK_AND_SUB(O);
|
||||
CHECK_AND_SUB(P);
|
||||
CHECK_AND_SUB(Q);
|
||||
CHECK_AND_SUB(R);
|
||||
CHECK_AND_SUB(S);
|
||||
CHECK_AND_SUB(T);
|
||||
CHECK_AND_SUB(U);
|
||||
CHECK_AND_SUB(V);
|
||||
CHECK_AND_SUB(W);
|
||||
CHECK_AND_SUB(X);
|
||||
CHECK_AND_SUB(Y);
|
||||
CHECK_AND_SUB(Z);
|
||||
CHECK_AND_SUB(AA);
|
||||
CHECK_AND_SUB(AB);
|
||||
CHECK_AND_SUB(AC);
|
||||
CHECK_AND_SUB(AD);
|
||||
CHECK_AND_SUB(AE);
|
||||
#undef CHECK_AND_SUB
|
||||
|
||||
return x;
|
||||
}
|
||||
@@ -1025,6 +1025,7 @@
|
||||
| test.c:970:12:970:12 | y | 256 |
|
||||
| test.c:971:9:971:9 | x | 2147483647 |
|
||||
| test.c:972:9:972:9 | y | 256 |
|
||||
| test.c:985:7:985:7 | e | 2147483647 |
|
||||
| test.cpp:10:7:10:7 | b | 2147483647 |
|
||||
| test.cpp:11:5:11:5 | x | 2147483647 |
|
||||
| test.cpp:13:10:13:10 | x | 2147483647 |
|
||||
@@ -1093,3 +1094,64 @@
|
||||
| test.cpp:122:4:122:4 | n | 32767 |
|
||||
| test.cpp:122:8:122:8 | n | 0 |
|
||||
| test.cpp:122:12:122:12 | n | 32767 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:40:5:40:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:41:5:41:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:42:5:42:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:43:5:43:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:44:5:44:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:45:5:45:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:46:5:46:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:47:5:47:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:48:5:48:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:49:5:49:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:50:5:50:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:51:5:51:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:52:5:52:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:53:5:53:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:54:5:54:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:55:5:55:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:56:5:56:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:57:5:57:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:58:5:58:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:59:5:59:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:60:5:60:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:61:5:61:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:62:5:62:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:63:5:63:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:64:5:64:20 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:65:5:65:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:66:5:66:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:67:5:67:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:68:5:68:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:69:5:69:21 | x | 4294967295 |
|
||||
| test_nr_of_bounds.cpp:72:12:72:12 | x | 4294967295 |
|
||||
|
||||
@@ -250,3 +250,8 @@ void* test_strndupa(const char* s, size_t size) {
|
||||
return s2; // BAD
|
||||
}
|
||||
|
||||
int* f_rec(int *p) {
|
||||
int x;
|
||||
int* px = f_rec(&x); // GOOD
|
||||
return p;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,10 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
private Event(Context cx, IEventSymbol init)
|
||||
: base(cx, init) { }
|
||||
|
||||
protected override IEventSymbol BodyDeclaringSymbol => Symbol.PartialImplementationPart ?? Symbol;
|
||||
|
||||
public override Microsoft.CodeAnalysis.Location? ReportingLocation => BodyDeclaringSymbol.Locations.BestOrDefault();
|
||||
|
||||
public override void WriteId(EscapingTextWriter trapFile)
|
||||
{
|
||||
trapFile.WriteSubId(ContainingType!);
|
||||
@@ -27,13 +31,13 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
var type = Type.Create(Context, Symbol.Type);
|
||||
trapFile.events(this, Symbol.GetName(), ContainingType!, type.TypeRef, Create(Context, Symbol.OriginalDefinition));
|
||||
|
||||
var adder = Symbol.AddMethod;
|
||||
var remover = Symbol.RemoveMethod;
|
||||
var adder = BodyDeclaringSymbol.AddMethod;
|
||||
var remover = BodyDeclaringSymbol.RemoveMethod;
|
||||
|
||||
if (!(adder is null))
|
||||
if (adder is not null)
|
||||
Method.Create(Context, adder);
|
||||
|
||||
if (!(remover is null))
|
||||
if (remover is not null)
|
||||
Method.Create(Context, remover);
|
||||
|
||||
PopulateModifiers(trapFile);
|
||||
|
||||
@@ -13,6 +13,10 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
this.@event = @event;
|
||||
}
|
||||
|
||||
public override bool NeedsPopulation =>
|
||||
base.NeedsPopulation &&
|
||||
!Symbol.IsPartialDefinition; // Accessors always have an implementing declaration as well.
|
||||
|
||||
/// <summary>
|
||||
/// Gets the event symbol associated with accessor `symbol`, or `null`
|
||||
/// if there is no associated symbol.
|
||||
|
||||
@@ -160,6 +160,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
case SyntaxKind.ThisExpression:
|
||||
return This.CreateExplicit(info);
|
||||
|
||||
case SyntaxKind.FieldExpression:
|
||||
return PropertyFieldAccess.Create(info);
|
||||
|
||||
case SyntaxKind.AddressOfExpression:
|
||||
return Unary.Create(info.SetKind(ExprKind.ADDRESS_OF));
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
using System.IO;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Semmle.Extraction.Kinds;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
{
|
||||
internal class PropertyFieldAccess : Expression<FieldExpressionSyntax>
|
||||
{
|
||||
private PropertyFieldAccess(ExpressionNodeInfo info) : base(info.SetKind(ExprKind.FIELD_ACCESS)) { }
|
||||
|
||||
public static Expression Create(ExpressionNodeInfo info) => new PropertyFieldAccess(info).TryPopulate();
|
||||
|
||||
protected override void PopulateExpression(TextWriter trapFile)
|
||||
{
|
||||
var symbolInfo = Context.GetSymbolInfo(Syntax);
|
||||
if (symbolInfo.Symbol is IFieldSymbol field)
|
||||
{
|
||||
var target = PropertyField.Create(Context, field);
|
||||
trapFile.expr_access(this, target);
|
||||
if (!field.IsStatic)
|
||||
{
|
||||
This.CreateImplicit(Context, field.ContainingType, Location, this, -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
{
|
||||
internal class Field : CachedSymbol<IFieldSymbol>, IExpressionParentEntity
|
||||
{
|
||||
private Field(Context cx, IFieldSymbol init)
|
||||
protected Field(Context cx, IFieldSymbol init)
|
||||
: base(cx, init)
|
||||
{
|
||||
type = new Lazy<Type>(() => Entities.Type.Create(cx, Symbol.Type));
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
using System.IO;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Semmle.Extraction.CSharp.Util;
|
||||
using Semmle.Extraction.Kinds;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents the autogenerated backing field `field` for a property.
|
||||
/// It is only created for properties that use the `field` keyword in their getter or setter, and
|
||||
/// is not created for auto-properties.
|
||||
/// </summary>
|
||||
internal class PropertyField : Field
|
||||
{
|
||||
protected PropertyField(Context cx, IFieldSymbol init)
|
||||
: base(cx, init)
|
||||
{
|
||||
}
|
||||
|
||||
public static new PropertyField Create(Context cx, IFieldSymbol field) => PropertyFieldFactory.Instance.CreateEntity(cx, (field, field.AssociatedSymbol), field);
|
||||
|
||||
public override bool NeedsPopulation => true;
|
||||
|
||||
public override void Populate(TextWriter trapFile)
|
||||
{
|
||||
PopulateNullability(trapFile, Symbol.GetAnnotatedType());
|
||||
|
||||
var unboundFieldKey = PropertyField.Create(Context, Symbol.OriginalDefinition);
|
||||
var name = Symbol.AssociatedSymbol is not null ? $"{Symbol.AssociatedSymbol.GetName()}.field" : Symbol.Name;
|
||||
trapFile.fields(this, VariableKind.None, name, ContainingType!, Type.TypeRef, unboundFieldKey);
|
||||
trapFile.compiler_generated(this);
|
||||
|
||||
PopulateModifiers(trapFile);
|
||||
|
||||
if (Context.OnlyScaffold)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (Context.ExtractLocation(Symbol))
|
||||
{
|
||||
WriteLocationsToTrap(trapFile.field_location, this, Locations);
|
||||
}
|
||||
}
|
||||
|
||||
private class PropertyFieldFactory : CachedEntityFactory<IFieldSymbol, PropertyField>
|
||||
{
|
||||
public static PropertyFieldFactory Instance { get; } = new PropertyFieldFactory();
|
||||
|
||||
public override PropertyField Create(Context cx, IFieldSymbol init) => new PropertyField(cx, init);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.7.59
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.7.58
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
## 1.7.59
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.7.58
|
||||
lastReleaseVersion: 1.7.59
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/csharp-solorigate-all
|
||||
version: 1.7.59-dev
|
||||
version: 1.7.60-dev
|
||||
groups:
|
||||
- csharp
|
||||
- solorigate
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.7.59
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.7.58
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
## 1.7.59
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.7.58
|
||||
lastReleaseVersion: 1.7.59
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/csharp-solorigate-queries
|
||||
version: 1.7.59-dev
|
||||
version: 1.7.60-dev
|
||||
groups:
|
||||
- csharp
|
||||
- solorigate
|
||||
|
||||
19
csharp/ql/integration-tests/posix/conftest.py
Normal file
19
csharp/ql/integration-tests/posix/conftest.py
Normal file
@@ -0,0 +1,19 @@
|
||||
import runs_on
|
||||
|
||||
|
||||
def _supports_mono_nuget():
|
||||
"""
|
||||
Helper function to determine if the current platform supports Mono and nuget.
|
||||
|
||||
Returns True if running on Linux or on macOS x86_64 (excluding macos-15 and macos-26).
|
||||
macOS ARM runners (macos-15 and macos-26) are excluded due to issues with Mono and nuget.
|
||||
"""
|
||||
return (
|
||||
runs_on.linux
|
||||
or (
|
||||
runs_on.macos
|
||||
and runs_on.x86_64
|
||||
and not runs_on.macos_15
|
||||
and not runs_on.macos_26
|
||||
)
|
||||
)
|
||||
@@ -1,13 +1,9 @@
|
||||
import runs_on
|
||||
import pytest
|
||||
import os
|
||||
from ..conftest import _supports_mono_nuget
|
||||
|
||||
|
||||
# Skipping the test on the ARM runners and macos-15, as we're running into trouble with Mono and nuget.
|
||||
@pytest.mark.only_if(
|
||||
runs_on.linux
|
||||
or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15)
|
||||
)
|
||||
@pytest.mark.only_if(_supports_mono_nuget())
|
||||
def test(codeql, csharp):
|
||||
os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES"] = (
|
||||
"/non-existent-path"
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
import os
|
||||
import runs_on
|
||||
import pytest
|
||||
from ..conftest import _supports_mono_nuget
|
||||
|
||||
|
||||
# Skipping the test on the ARM runners and macos-15, as we're running into trouble with Mono and nuget.
|
||||
@pytest.mark.only_if(
|
||||
runs_on.linux
|
||||
or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15)
|
||||
)
|
||||
@pytest.mark.only_if(_supports_mono_nuget())
|
||||
def test(codeql, csharp):
|
||||
# making sure we're not doing any fallback restore:
|
||||
os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_TIMEOUT"] = "1"
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
import runs_on
|
||||
import pytest
|
||||
from ..conftest import _supports_mono_nuget
|
||||
|
||||
|
||||
# Skipping the test on the ARM runners and macos-15, as we're running into trouble with Mono and nuget.
|
||||
@pytest.mark.only_if(
|
||||
runs_on.linux
|
||||
or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15)
|
||||
)
|
||||
@pytest.mark.only_if(_supports_mono_nuget())
|
||||
def test(codeql, csharp):
|
||||
codeql.database.create(build_mode="none")
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
import runs_on
|
||||
import pytest
|
||||
from ..conftest import _supports_mono_nuget
|
||||
|
||||
|
||||
# Skipping the test on the ARM runners, as we're running into trouble with Mono and nuget.
|
||||
@pytest.mark.only_if(
|
||||
runs_on.linux
|
||||
or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15)
|
||||
)
|
||||
@pytest.mark.only_if(_supports_mono_nuget())
|
||||
def test(codeql, csharp):
|
||||
codeql.database.create(source_root="proj", build_mode="none")
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
## 5.4.7
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
* The model for `System.Web.HttpUtility` has been modified to better model the flow of tainted URIs.
|
||||
* C# 14: Added support for `extension` members in the extractor, QL library, data flow, and Models as Data, covering extension methods, properties, and operators.
|
||||
|
||||
## 5.4.6
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* The model for `System.Web.HttpUtility` has been modified to better model the flow of tainted URIs.
|
||||
4
csharp/ql/lib/change-notes/2026-02-12-field-keyword.md
Normal file
4
csharp/ql/lib/change-notes/2026-02-12-field-keyword.md
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* C# 14: Added support for the `field` keyword in properties.
|
||||
4
csharp/ql/lib/change-notes/2026-02-16-partial-events.md
Normal file
4
csharp/ql/lib/change-notes/2026-02-16-partial-events.md
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* C# 14: Added support for partial events.
|
||||
@@ -1,4 +1,6 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
## 5.4.7
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
* The model for `System.Web.HttpUtility` has been modified to better model the flow of tainted URIs.
|
||||
* C# 14: Added support for `extension` members in the extractor, QL library, data flow, and Models as Data, covering extension methods, properties, and operators.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 5.4.6
|
||||
lastReleaseVersion: 5.4.7
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/csharp-all
|
||||
version: 5.4.7-dev
|
||||
version: 5.4.8-dev
|
||||
groups: csharp
|
||||
dbscheme: semmlecode.csharp.dbscheme
|
||||
extractor: csharp
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
## 1.6.2
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* The `cs/web/missing-token-validation` ("Missing cross-site request forgery token validation") query now recognizes antiforgery attributes on base controller classes, fixing false positives when `[ValidateAntiForgeryToken]` or `[AutoValidateAntiforgeryToken]` is applied to a parent class.
|
||||
|
||||
## 1.6.1
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
---
|
||||
category: fix
|
||||
---
|
||||
## 1.6.2
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* The `cs/web/missing-token-validation` ("Missing cross-site request forgery token validation") query now recognizes antiforgery attributes on base controller classes, fixing false positives when `[ValidateAntiForgeryToken]` or `[AutoValidateAntiforgeryToken]` is applied to a parent class.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.6.1
|
||||
lastReleaseVersion: 1.6.2
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/csharp-queries
|
||||
version: 1.6.2-dev
|
||||
version: 1.6.3-dev
|
||||
groups:
|
||||
- csharp
|
||||
- queries
|
||||
|
||||
@@ -89,3 +89,65 @@ public partial class DPartial
|
||||
|
||||
static T Source<T>(object source) => throw null;
|
||||
}
|
||||
|
||||
public class DFieldProps
|
||||
{
|
||||
object FieldProp0
|
||||
{
|
||||
get { return field; }
|
||||
set { field = value; }
|
||||
} = Source<object>(0);
|
||||
|
||||
object FieldProp1
|
||||
{
|
||||
get { return field; }
|
||||
set { field = value; }
|
||||
}
|
||||
|
||||
object FieldProp2
|
||||
{
|
||||
get { return field; }
|
||||
set
|
||||
{
|
||||
var x = value;
|
||||
field = x;
|
||||
}
|
||||
}
|
||||
|
||||
static object StaticFieldProp
|
||||
{
|
||||
get { return field; }
|
||||
set { field = value; }
|
||||
}
|
||||
|
||||
private void M()
|
||||
{
|
||||
var d0 = new DFieldProps();
|
||||
Sink(d0.FieldProp0); // $ hasValueFlow=0
|
||||
Sink(d0.FieldProp1); // no flow
|
||||
Sink(d0.FieldProp2); // no flow
|
||||
|
||||
var d1 = new DFieldProps();
|
||||
var o1 = Source<object>(1);
|
||||
d1.FieldProp1 = o1;
|
||||
Sink(d1.FieldProp0); // $ hasValueFlow=0
|
||||
Sink(d1.FieldProp1); // $ hasValueFlow=1
|
||||
Sink(d1.FieldProp2); // no flow
|
||||
|
||||
var d2 = new DFieldProps();
|
||||
var o2 = Source<object>(2);
|
||||
d2.FieldProp2 = o2;
|
||||
Sink(d2.FieldProp0); // $ hasValueFlow=0
|
||||
Sink(d2.FieldProp1); // no flow
|
||||
Sink(d2.FieldProp2); // $ hasValueFlow=2
|
||||
|
||||
var o3 = Source<object>(3);
|
||||
DFieldProps.StaticFieldProp = o3;
|
||||
Sink(DFieldProps.StaticFieldProp); // $ hasValueFlow=3
|
||||
}
|
||||
|
||||
public static void Sink(object o) { }
|
||||
|
||||
static T Source<T>(object source) => throw null;
|
||||
|
||||
}
|
||||
|
||||
@@ -532,6 +532,118 @@ edges
|
||||
| D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:60:9:60:11 | this : DPartial [field _backingField] : Object | provenance | |
|
||||
| D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:84:14:84:27 | access to property PartialProp1 | provenance | |
|
||||
| D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:84:14:84:27 | access to property PartialProp1 | provenance | |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | provenance | |
|
||||
| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | provenance | |
|
||||
| D.cs:98:9:98:11 | value : Object | D.cs:98:23:98:27 | access to parameter value : Object | provenance | |
|
||||
| D.cs:98:9:98:11 | value : Object | D.cs:98:23:98:27 | access to parameter value : Object | provenance | |
|
||||
| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:98:23:98:27 | access to parameter value : Object | D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:98:23:98:27 | access to parameter value : Object | D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:98:9:98:11 | value : Object | provenance | |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:98:9:98:11 | value : Object | provenance | |
|
||||
| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | provenance | |
|
||||
| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | provenance | |
|
||||
| D.cs:104:9:104:11 | value : Object | D.cs:104:23:104:27 | access to parameter value : Object | provenance | |
|
||||
| D.cs:104:9:104:11 | value : Object | D.cs:104:23:104:27 | access to parameter value : Object | provenance | |
|
||||
| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:104:23:104:27 | access to parameter value : Object | D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:104:23:104:27 | access to parameter value : Object | D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | provenance | |
|
||||
| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | provenance | |
|
||||
| D.cs:110:9:110:11 | value : Object | D.cs:112:17:112:17 | access to local variable x : Object | provenance | |
|
||||
| D.cs:110:9:110:11 | value : Object | D.cs:112:17:112:17 | access to local variable x : Object | provenance | |
|
||||
| D.cs:112:17:112:17 | access to local variable x : Object | D.cs:113:21:113:21 | access to local variable x : Object | provenance | |
|
||||
| D.cs:112:17:112:17 | access to local variable x : Object | D.cs:113:21:113:21 | access to local variable x : Object | provenance | |
|
||||
| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:113:21:113:21 | access to local variable x : Object | D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:113:21:113:21 | access to local variable x : Object | D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | |
|
||||
| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | |
|
||||
| D.cs:120:9:120:11 | value : Object | D.cs:120:23:120:27 | access to parameter value : Object | provenance | |
|
||||
| D.cs:120:9:120:11 | value : Object | D.cs:120:23:120:27 | access to parameter value : Object | provenance | |
|
||||
| D.cs:120:23:120:27 | access to parameter value : Object | D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | provenance | |
|
||||
| D.cs:120:23:120:27 | access to parameter value : Object | D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | provenance | |
|
||||
| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:26 | access to property FieldProp0 | provenance | |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:26 | access to property FieldProp0 | provenance | |
|
||||
| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:131:13:131:14 | access to local variable o1 : Object | D.cs:132:25:132:26 | access to local variable o1 : Object | provenance | |
|
||||
| D.cs:131:13:131:14 | access to local variable o1 : Object | D.cs:132:25:132:26 | access to local variable o1 : Object | provenance | |
|
||||
| D.cs:131:18:131:34 | call to method Source<Object> : Object | D.cs:131:13:131:14 | access to local variable o1 : Object | provenance | |
|
||||
| D.cs:131:18:131:34 | call to method Source<Object> : Object | D.cs:131:13:131:14 | access to local variable o1 : Object | provenance | |
|
||||
| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | provenance | |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | provenance | |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:26 | access to property FieldProp0 | provenance | |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:26 | access to property FieldProp0 | provenance | |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | provenance | |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:26 | access to property FieldProp1 | provenance | |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:26 | access to property FieldProp1 | provenance | |
|
||||
| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:138:13:138:14 | access to local variable o2 : Object | D.cs:139:25:139:26 | access to local variable o2 : Object | provenance | |
|
||||
| D.cs:138:13:138:14 | access to local variable o2 : Object | D.cs:139:25:139:26 | access to local variable o2 : Object | provenance | |
|
||||
| D.cs:138:18:138:34 | call to method Source<Object> : Object | D.cs:138:13:138:14 | access to local variable o2 : Object | provenance | |
|
||||
| D.cs:138:18:138:34 | call to method Source<Object> : Object | D.cs:138:13:138:14 | access to local variable o2 : Object | provenance | |
|
||||
| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | provenance | |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | provenance | |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:26 | access to property FieldProp0 | provenance | |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:26 | access to property FieldProp0 | provenance | |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | provenance | |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:26 | access to property FieldProp2 | provenance | |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:26 | access to property FieldProp2 | provenance | |
|
||||
| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:9:145:35 | access to property StaticFieldProp : Object | provenance | |
|
||||
| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:9:145:35 | access to property StaticFieldProp : Object | provenance | |
|
||||
| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:39:145:40 | access to local variable o3 : Object | provenance | |
|
||||
| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:39:145:40 | access to local variable o3 : Object | provenance | |
|
||||
| D.cs:144:18:144:34 | call to method Source<Object> : Object | D.cs:144:13:144:14 | access to local variable o3 : Object | provenance | |
|
||||
| D.cs:144:18:144:34 | call to method Source<Object> : Object | D.cs:144:13:144:14 | access to local variable o3 : Object | provenance | |
|
||||
| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | |
|
||||
| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | |
|
||||
| D.cs:145:39:145:40 | access to local variable o3 : Object | D.cs:120:9:120:11 | value : Object | provenance | |
|
||||
| D.cs:145:39:145:40 | access to local variable o3 : Object | D.cs:120:9:120:11 | value : Object | provenance | |
|
||||
| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | |
|
||||
| E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | |
|
||||
| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | provenance | |
|
||||
@@ -1807,6 +1919,120 @@ nodes
|
||||
| D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | semmle.label | access to local variable d : DPartial [field _backingField] : Object |
|
||||
| D.cs:84:14:84:27 | access to property PartialProp1 | semmle.label | access to property PartialProp1 |
|
||||
| D.cs:84:14:84:27 | access to property PartialProp1 | semmle.label | access to property PartialProp1 |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | semmle.label | this : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | semmle.label | this : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:97:22:97:26 | access to field FieldProp0.field : Object | semmle.label | access to field FieldProp0.field : Object |
|
||||
| D.cs:97:22:97:26 | access to field FieldProp0.field : Object | semmle.label | access to field FieldProp0.field : Object |
|
||||
| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:98:9:98:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:98:9:98:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:98:23:98:27 | access to parameter value : Object | semmle.label | access to parameter value : Object |
|
||||
| D.cs:98:23:98:27 | access to parameter value : Object | semmle.label | access to parameter value : Object |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | semmle.label | this : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | semmle.label | this : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:103:22:103:26 | access to field FieldProp1.field : Object | semmle.label | access to field FieldProp1.field : Object |
|
||||
| D.cs:103:22:103:26 | access to field FieldProp1.field : Object | semmle.label | access to field FieldProp1.field : Object |
|
||||
| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | this access : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | this access : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:104:9:104:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:104:9:104:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:104:23:104:27 | access to parameter value : Object | semmle.label | access to parameter value : Object |
|
||||
| D.cs:104:23:104:27 | access to parameter value : Object | semmle.label | access to parameter value : Object |
|
||||
| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | semmle.label | this : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | semmle.label | this : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:109:22:109:26 | access to field FieldProp2.field : Object | semmle.label | access to field FieldProp2.field : Object |
|
||||
| D.cs:109:22:109:26 | access to field FieldProp2.field : Object | semmle.label | access to field FieldProp2.field : Object |
|
||||
| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | this access : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | this access : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:110:9:110:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:110:9:110:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:112:17:112:17 | access to local variable x : Object | semmle.label | access to local variable x : Object |
|
||||
| D.cs:112:17:112:17 | access to local variable x : Object | semmle.label | access to local variable x : Object |
|
||||
| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:113:21:113:21 | access to local variable x : Object | semmle.label | access to local variable x : Object |
|
||||
| D.cs:113:21:113:21 | access to local variable x : Object | semmle.label | access to local variable x : Object |
|
||||
| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | semmle.label | access to field StaticFieldProp.field : Object |
|
||||
| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | semmle.label | access to field StaticFieldProp.field : Object |
|
||||
| D.cs:120:9:120:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:120:9:120:11 | value : Object | semmle.label | value : Object |
|
||||
| D.cs:120:23:120:27 | access to parameter value : Object | semmle.label | access to parameter value : Object |
|
||||
| D.cs:120:23:120:27 | access to parameter value : Object | semmle.label | access to parameter value : Object |
|
||||
| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:126:14:126:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 |
|
||||
| D.cs:126:14:126:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 |
|
||||
| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:131:13:131:14 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object |
|
||||
| D.cs:131:13:131:14 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object |
|
||||
| D.cs:131:18:131:34 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:131:18:131:34 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:133:14:133:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 |
|
||||
| D.cs:133:14:133:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:134:14:134:26 | access to property FieldProp1 | semmle.label | access to property FieldProp1 |
|
||||
| D.cs:134:14:134:26 | access to property FieldProp1 | semmle.label | access to property FieldProp1 |
|
||||
| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:138:13:138:14 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object |
|
||||
| D.cs:138:13:138:14 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object |
|
||||
| D.cs:138:18:138:34 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:138:18:138:34 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:140:14:140:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 |
|
||||
| D.cs:140:14:140:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:142:14:142:26 | access to property FieldProp2 | semmle.label | access to property FieldProp2 |
|
||||
| D.cs:142:14:142:26 | access to property FieldProp2 | semmle.label | access to property FieldProp2 |
|
||||
| D.cs:144:13:144:14 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object |
|
||||
| D.cs:144:13:144:14 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object |
|
||||
| D.cs:144:18:144:34 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:144:18:144:34 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
|
||||
| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | semmle.label | access to property StaticFieldProp : Object |
|
||||
| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | semmle.label | access to property StaticFieldProp : Object |
|
||||
| D.cs:145:39:145:40 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object |
|
||||
| D.cs:145:39:145:40 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object |
|
||||
| D.cs:146:14:146:40 | access to property StaticFieldProp | semmle.label | access to property StaticFieldProp |
|
||||
| D.cs:146:14:146:40 | access to property StaticFieldProp | semmle.label | access to property StaticFieldProp |
|
||||
| E.cs:8:29:8:29 | o : Object | semmle.label | o : Object |
|
||||
| E.cs:8:29:8:29 | o : Object | semmle.label | o : Object |
|
||||
| E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | semmle.label | [post] access to local variable ret : S [field Field] : Object |
|
||||
@@ -2648,6 +2874,22 @@ subpaths
|
||||
| D.cs:81:26:81:26 | access to local variable o : Object | D.cs:61:9:61:11 | value : Object | D.cs:61:9:61:11 | this [Return] : DPartial [field _backingField] : Object | D.cs:81:9:81:9 | [post] access to local variable d : DPartial [field _backingField] : Object |
|
||||
| D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:60:9:60:11 | this : DPartial [field _backingField] : Object | D.cs:60:22:60:34 | access to field _backingField : Object | D.cs:84:14:84:27 | access to property PartialProp1 |
|
||||
| D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:60:9:60:11 | this : DPartial [field _backingField] : Object | D.cs:60:22:60:34 | access to field _backingField : Object | D.cs:84:14:84:27 | access to property PartialProp1 |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:98:9:98:11 | value : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:98:9:98:11 | value : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:126:14:126:26 | access to property FieldProp0 |
|
||||
| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:126:14:126:26 | access to property FieldProp0 |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:133:14:133:26 | access to property FieldProp0 |
|
||||
| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:133:14:133:26 | access to property FieldProp0 |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | D.cs:134:14:134:26 | access to property FieldProp1 |
|
||||
| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | D.cs:134:14:134:26 | access to property FieldProp1 |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:140:14:140:26 | access to property FieldProp0 |
|
||||
| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:140:14:140:26 | access to property FieldProp0 |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | D.cs:142:14:142:26 | access to property FieldProp2 |
|
||||
| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | D.cs:142:14:142:26 | access to property FieldProp2 |
|
||||
| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object |
|
||||
| E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object |
|
||||
| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object |
|
||||
@@ -2758,6 +3000,18 @@ testFailures
|
||||
| D.cs:47:14:47:26 | access to property ComplexProp | D.cs:43:32:43:48 | call to method Source<Object> : Object | D.cs:47:14:47:26 | access to property ComplexProp | $@ | D.cs:43:32:43:48 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:84:14:84:27 | access to property PartialProp1 | D.cs:78:17:78:33 | call to method Source<Object> : Object | D.cs:84:14:84:27 | access to property PartialProp1 | $@ | D.cs:78:17:78:33 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:84:14:84:27 | access to property PartialProp1 | D.cs:78:17:78:33 | call to method Source<Object> : Object | D.cs:84:14:84:27 | access to property PartialProp1 | $@ | D.cs:78:17:78:33 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:126:14:126:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:126:14:126:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:126:14:126:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:126:14:126:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:133:14:133:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:133:14:133:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:133:14:133:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:133:14:133:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:134:14:134:26 | access to property FieldProp1 | D.cs:131:18:131:34 | call to method Source<Object> : Object | D.cs:134:14:134:26 | access to property FieldProp1 | $@ | D.cs:131:18:131:34 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:134:14:134:26 | access to property FieldProp1 | D.cs:131:18:131:34 | call to method Source<Object> : Object | D.cs:134:14:134:26 | access to property FieldProp1 | $@ | D.cs:131:18:131:34 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:140:14:140:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:140:14:140:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:140:14:140:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source<Object> : Object | D.cs:140:14:140:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:142:14:142:26 | access to property FieldProp2 | D.cs:138:18:138:34 | call to method Source<Object> : Object | D.cs:142:14:142:26 | access to property FieldProp2 | $@ | D.cs:138:18:138:34 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:142:14:142:26 | access to property FieldProp2 | D.cs:138:18:138:34 | call to method Source<Object> : Object | D.cs:142:14:142:26 | access to property FieldProp2 | $@ | D.cs:138:18:138:34 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:146:14:146:40 | access to property StaticFieldProp | D.cs:144:18:144:34 | call to method Source<Object> : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | $@ | D.cs:144:18:144:34 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| D.cs:146:14:146:40 | access to property StaticFieldProp | D.cs:144:18:144:34 | call to method Source<Object> : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | $@ | D.cs:144:18:144:34 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source<Object> : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source<Object> : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
| E.cs:57:14:57:26 | access to field RefField | E.cs:54:21:54:37 | call to method Source<Object> : Object | E.cs:57:14:57:26 | access to field RefField | $@ | E.cs:54:21:54:37 | call to method Source<Object> : Object | call to method Source<Object> : Object |
|
||||
|
||||
@@ -270,7 +270,9 @@
|
||||
| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:637:21:637:21 | M |
|
||||
| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:646:21:646:21 | M |
|
||||
| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:648:21:648:21 | M |
|
||||
| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:702:42:702:44 | get_Property |
|
||||
| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:702:63:702:65 | set_Property |
|
||||
| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:704:49:704:51 | get_Item |
|
||||
| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:704:70:704:72 | set_Item |
|
||||
| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:703:42:703:44 | get_Property |
|
||||
| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:703:63:703:65 | set_Property |
|
||||
| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:705:49:705:51 | get_Item |
|
||||
| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:705:70:705:72 | set_Item |
|
||||
| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:706:51:706:53 | add_Event |
|
||||
| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:706:59:706:64 | remove_Event |
|
||||
|
||||
@@ -518,7 +518,9 @@
|
||||
| ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(Int32[]) |
|
||||
| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:712:9:712:18 | access to property Property | C23+Partial1.set_Property(object) |
|
||||
| ViableCallable.cs:715:13:715:22 | access to property Property | C23+Partial1.get_Property() |
|
||||
| ViableCallable.cs:718:9:718:12 | access to indexer | C23+Partial1.set_Item(int, object) |
|
||||
| ViableCallable.cs:721:13:721:16 | access to indexer | C23+Partial1.get_Item(int) |
|
||||
| ViableCallable.cs:714:9:714:18 | access to property Property | C23+Partial1.set_Property(object) |
|
||||
| ViableCallable.cs:717:13:717:22 | access to property Property | C23+Partial1.get_Property() |
|
||||
| ViableCallable.cs:720:9:720:12 | access to indexer | C23+Partial1.set_Item(int, object) |
|
||||
| ViableCallable.cs:723:13:723:16 | access to indexer | C23+Partial1.get_Item(int) |
|
||||
| ViableCallable.cs:726:9:726:15 | access to event Event | C23+Partial1.add_Event(EventHandler) |
|
||||
| ViableCallable.cs:729:9:729:15 | access to event Event | C23+Partial1.remove_Event(EventHandler) |
|
||||
|
||||
@@ -695,6 +695,7 @@ public class C23
|
||||
public partial object Property { get; set; }
|
||||
|
||||
public partial object this[int index] { get; set; }
|
||||
public partial event EventHandler Event;
|
||||
}
|
||||
|
||||
public partial class Partial1
|
||||
@@ -702,6 +703,7 @@ public class C23
|
||||
public partial object Property { get { return null; } set { } }
|
||||
|
||||
public partial object this[int index] { get { return null; } set { } }
|
||||
public partial event EventHandler Event { add { } remove { } }
|
||||
}
|
||||
|
||||
public void Run1(Partial1 p)
|
||||
@@ -719,5 +721,11 @@ public class C23
|
||||
|
||||
// Viable callable: Partial1.get_Item(int)
|
||||
o = p[0];
|
||||
|
||||
// Viable callable: Partial1.add_Event
|
||||
p.Event += (sender, e) => { };
|
||||
|
||||
// Viable callable: Partial1.remove_Event
|
||||
p.Event -= (sender, e) => { };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | true |
|
||||
| Partial.cs:5:17:5:23 | Method2 | false |
|
||||
| Partial.cs:14:18:14:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:15:17:15:23 | Method3 | false |
|
||||
| Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | true |
|
||||
| Partial.cs:35:17:35:23 | Method4 | false |
|
||||
| Partial.cs:40:17:40:23 | Method5 | false |
|
||||
| Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 | true |
|
||||
| Partial.cs:7:17:7:23 | Method2 | false |
|
||||
| Partial.cs:18:18:18:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:19:17:19:23 | Method3 | false |
|
||||
| Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 | true |
|
||||
| Partial.cs:42:17:42:23 | Method4 | false |
|
||||
| Partial.cs:47:17:47:23 | Method5 | false |
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
using System;
|
||||
|
||||
partial class TwoPartClass
|
||||
{
|
||||
partial void PartialMethodWithBody1();
|
||||
@@ -7,6 +9,8 @@ partial class TwoPartClass
|
||||
public partial object PartialProperty1 { get; set; }
|
||||
// Declaring declaration.
|
||||
public partial object this[int index] { get; set; }
|
||||
// Declaring declaration.
|
||||
public partial event EventHandler PartialEvent1;
|
||||
}
|
||||
|
||||
partial class TwoPartClass
|
||||
@@ -27,6 +31,9 @@ partial class TwoPartClass
|
||||
get { return _backingArray[index]; }
|
||||
set { _backingArray[index] = value; }
|
||||
}
|
||||
|
||||
// Implementation declaration.
|
||||
public partial event EventHandler PartialEvent1 { add { } remove { } }
|
||||
}
|
||||
|
||||
partial class OnePartPartialClass
|
||||
@@ -44,4 +51,5 @@ class NonPartialClass
|
||||
get { return null; }
|
||||
set { }
|
||||
}
|
||||
public event EventHandler Event;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass |
|
||||
| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:12:15:12:26 | TwoPartClass |
|
||||
| Partial.cs:14:18:14:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:18:27:18:42 | PartialProperty1 |
|
||||
| Partial.cs:20:9:20:11 | get_PartialProperty1 |
|
||||
| Partial.cs:21:9:21:11 | set_PartialProperty1 |
|
||||
| Partial.cs:25:27:25:30 | Item |
|
||||
| Partial.cs:27:9:27:11 | get_Item |
|
||||
| Partial.cs:28:9:28:11 | set_Item |
|
||||
| Partial.cs:32:15:32:33 | OnePartPartialClass |
|
||||
| Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 |
|
||||
| Partial.cs:3:15:3:26 | TwoPartClass |
|
||||
| Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:16:15:16:26 | TwoPartClass |
|
||||
| Partial.cs:18:18:18:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:22:27:22:42 | PartialProperty1 |
|
||||
| Partial.cs:24:9:24:11 | get_PartialProperty1 |
|
||||
| Partial.cs:25:9:25:11 | set_PartialProperty1 |
|
||||
| Partial.cs:29:27:29:30 | Item |
|
||||
| Partial.cs:31:9:31:11 | get_Item |
|
||||
| Partial.cs:32:9:32:11 | set_Item |
|
||||
| Partial.cs:36:39:36:51 | PartialEvent1 |
|
||||
| Partial.cs:36:55:36:57 | add_PartialEvent1 |
|
||||
| Partial.cs:36:63:36:68 | remove_PartialEvent1 |
|
||||
| Partial.cs:39:15:39:33 | OnePartPartialClass |
|
||||
| Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 |
|
||||
| PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles |
|
||||
| PartialMultipleFiles2.cs:1:22:1:41 | PartialMultipleFiles |
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:1:15:1:26 | <object initializer> |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:14:18:14:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:15:17:15:23 | Method3 |
|
||||
| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:1:15:1:26 | <object initializer> |
|
||||
| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 |
|
||||
| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:14:18:14:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:15:17:15:23 | Method3 |
|
||||
| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:32:15:32:33 | <object initializer> |
|
||||
| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 |
|
||||
| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:35:17:35:23 | Method4 |
|
||||
| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:3:15:3:26 | <object initializer> |
|
||||
| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:7:17:7:23 | Method2 |
|
||||
| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:18:18:18:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:19:17:19:23 | Method3 |
|
||||
| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:3:15:3:26 | <object initializer> |
|
||||
| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 |
|
||||
| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:7:17:7:23 | Method2 |
|
||||
| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:18:18:18:39 | PartialMethodWithBody1 |
|
||||
| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:19:17:19:23 | Method3 |
|
||||
| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:39:15:39:33 | <object initializer> |
|
||||
| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 |
|
||||
| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:42:17:42:23 | Method4 |
|
||||
| PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | <object initializer> |
|
||||
| PartialMultipleFiles2.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | <object initializer> |
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
| Partial.cs:20:9:20:11 | get_PartialProperty1 | true |
|
||||
| Partial.cs:21:9:21:11 | set_PartialProperty1 | true |
|
||||
| Partial.cs:27:9:27:11 | get_Item | true |
|
||||
| Partial.cs:28:9:28:11 | set_Item | true |
|
||||
| Partial.cs:41:30:41:32 | get_Property | false |
|
||||
| Partial.cs:41:35:41:37 | set_Property | false |
|
||||
| Partial.cs:44:9:44:11 | get_Item | false |
|
||||
| Partial.cs:45:9:45:11 | set_Item | false |
|
||||
| Partial.cs:24:9:24:11 | get_PartialProperty1 | true |
|
||||
| Partial.cs:25:9:25:11 | set_PartialProperty1 | true |
|
||||
| Partial.cs:31:9:31:11 | get_Item | true |
|
||||
| Partial.cs:32:9:32:11 | set_Item | true |
|
||||
| Partial.cs:36:55:36:57 | add_PartialEvent1 | true |
|
||||
| Partial.cs:36:63:36:68 | remove_PartialEvent1 | true |
|
||||
| Partial.cs:48:30:48:32 | get_Property | false |
|
||||
| Partial.cs:48:35:48:37 | set_Property | false |
|
||||
| Partial.cs:51:9:51:11 | get_Item | false |
|
||||
| Partial.cs:52:9:52:11 | set_Item | false |
|
||||
| Partial.cs:54:31:54:35 | add_Event | false |
|
||||
| Partial.cs:54:31:54:35 | remove_Event | false |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:1:15:1:26 | {...} |
|
||||
| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:32:15:32:33 | {...} |
|
||||
| Partial.cs:38:7:38:21 | NonPartialClass | Partial.cs:38:7:38:21 | {...} |
|
||||
| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:3:15:3:26 | {...} |
|
||||
| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:39:15:39:33 | {...} |
|
||||
| Partial.cs:45:7:45:21 | NonPartialClass | Partial.cs:45:7:45:21 | {...} |
|
||||
| PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | {...} |
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
| Partial.cs:36:39:36:51 | PartialEvent1 | true |
|
||||
| Partial.cs:54:31:54:35 | Event | false |
|
||||
7
csharp/ql/test/library-tests/partial/PartialEvents.ql
Normal file
7
csharp/ql/test/library-tests/partial/PartialEvents.ql
Normal file
@@ -0,0 +1,7 @@
|
||||
import csharp
|
||||
|
||||
private boolean isPartial(Event e) { if e.isPartial() then result = true else result = false }
|
||||
|
||||
from Event e
|
||||
where e.fromSource()
|
||||
select e, isPartial(e)
|
||||
@@ -1,2 +1,2 @@
|
||||
| Partial.cs:25:27:25:30 | Item | true |
|
||||
| Partial.cs:42:19:42:22 | Item | false |
|
||||
| Partial.cs:29:27:29:30 | Item | true |
|
||||
| Partial.cs:49:19:49:22 | Item | false |
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | false |
|
||||
| Partial.cs:14:18:14:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | false |
|
||||
| Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 | false |
|
||||
| Partial.cs:18:18:18:39 | PartialMethodWithBody1 | true |
|
||||
| Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 | false |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
| Partial.cs:18:27:18:42 | PartialProperty1 | true |
|
||||
| Partial.cs:41:19:41:26 | Property | false |
|
||||
| Partial.cs:22:27:22:42 | PartialProperty1 | true |
|
||||
| Partial.cs:48:19:48:26 | Property | false |
|
||||
|
||||
@@ -1,94 +1,112 @@
|
||||
Partial.cs:
|
||||
# 1| [Class] TwoPartClass
|
||||
# 4| 6: [Method] PartialMethodWithoutBody1
|
||||
# 4| -1: [TypeMention] Void
|
||||
# 5| 7: [Method] Method2
|
||||
# 3| [Class] TwoPartClass
|
||||
# 6| 6: [Method] PartialMethodWithoutBody1
|
||||
# 6| -1: [TypeMention] Void
|
||||
# 7| 7: [Method] Method2
|
||||
# 7| -1: [TypeMention] Void
|
||||
# 7| 4: [BlockStmt] {...}
|
||||
# 18| 8: [Method] PartialMethodWithBody1
|
||||
# 5| -1: [TypeMention] Void
|
||||
# 5| 4: [BlockStmt] {...}
|
||||
# 14| 8: [Method] PartialMethodWithBody1
|
||||
# 3| -1: [TypeMention] Void
|
||||
# 14| 4: [BlockStmt] {...}
|
||||
# 15| 9: [Method] Method3
|
||||
# 15| -1: [TypeMention] Void
|
||||
# 15| 4: [BlockStmt] {...}
|
||||
# 16| 10: [Field] _backingField
|
||||
# 16| -1: [TypeMention] object
|
||||
# 18| 11: [Property] PartialProperty1
|
||||
# 7| -1: [TypeMention] object
|
||||
# 18| -1: [TypeMention] object
|
||||
# 20| 3: [Getter] get_PartialProperty1
|
||||
# 20| 4: [BlockStmt] {...}
|
||||
# 20| 0: [ReturnStmt] return ...;
|
||||
# 20| 0: [FieldAccess] access to field _backingField
|
||||
# 21| 4: [Setter] set_PartialProperty1
|
||||
#-----| 2: (Parameters)
|
||||
# 21| 0: [Parameter] value
|
||||
# 21| 4: [BlockStmt] {...}
|
||||
# 21| 0: [ExprStmt] ...;
|
||||
# 21| 0: [AssignExpr] ... = ...
|
||||
# 21| 0: [FieldAccess] access to field _backingField
|
||||
# 21| 1: [ParameterAccess] access to parameter value
|
||||
# 23| 12: [Field] _backingArray
|
||||
# 23| -1: [TypeMention] Object[]
|
||||
# 23| 1: [TypeMention] object
|
||||
# 25| 13: [Indexer] Item
|
||||
# 18| 4: [BlockStmt] {...}
|
||||
# 19| 9: [Method] Method3
|
||||
# 19| -1: [TypeMention] Void
|
||||
# 19| 4: [BlockStmt] {...}
|
||||
# 20| 10: [Field] _backingField
|
||||
# 20| -1: [TypeMention] object
|
||||
# 22| 11: [Property] PartialProperty1
|
||||
# 9| -1: [TypeMention] object
|
||||
# 25| -1: [TypeMention] object
|
||||
# 22| -1: [TypeMention] object
|
||||
# 24| 3: [Getter] get_PartialProperty1
|
||||
# 24| 4: [BlockStmt] {...}
|
||||
# 24| 0: [ReturnStmt] return ...;
|
||||
# 24| 0: [FieldAccess] access to field _backingField
|
||||
# 25| 4: [Setter] set_PartialProperty1
|
||||
#-----| 2: (Parameters)
|
||||
# 25| 0: [Parameter] value
|
||||
# 25| 4: [BlockStmt] {...}
|
||||
# 25| 0: [ExprStmt] ...;
|
||||
# 25| 0: [AssignExpr] ... = ...
|
||||
# 25| 0: [FieldAccess] access to field _backingField
|
||||
# 25| 1: [ParameterAccess] access to parameter value
|
||||
# 27| 12: [Field] _backingArray
|
||||
# 27| -1: [TypeMention] Object[]
|
||||
# 27| 1: [TypeMention] object
|
||||
# 29| 13: [Indexer] Item
|
||||
# 11| -1: [TypeMention] object
|
||||
# 29| -1: [TypeMention] object
|
||||
#-----| 1: (Parameters)
|
||||
# 9| 0: [Parameter] index
|
||||
# 9| -1: [TypeMention] int
|
||||
# 25| -1: [TypeMention] int
|
||||
# 27| 3: [Getter] get_Item
|
||||
# 11| 0: [Parameter] index
|
||||
# 11| -1: [TypeMention] int
|
||||
# 29| -1: [TypeMention] int
|
||||
# 31| 3: [Getter] get_Item
|
||||
#-----| 2: (Parameters)
|
||||
# 25| 0: [Parameter] index
|
||||
# 27| 4: [BlockStmt] {...}
|
||||
# 27| 0: [ReturnStmt] return ...;
|
||||
# 27| 0: [ArrayAccess] access to array element
|
||||
# 27| -1: [FieldAccess] access to field _backingArray
|
||||
# 27| 0: [ParameterAccess] access to parameter index
|
||||
# 28| 4: [Setter] set_Item
|
||||
# 29| 0: [Parameter] index
|
||||
# 31| 4: [BlockStmt] {...}
|
||||
# 31| 0: [ReturnStmt] return ...;
|
||||
# 31| 0: [ArrayAccess] access to array element
|
||||
# 31| -1: [FieldAccess] access to field _backingArray
|
||||
# 31| 0: [ParameterAccess] access to parameter index
|
||||
# 32| 4: [Setter] set_Item
|
||||
#-----| 2: (Parameters)
|
||||
# 25| 0: [Parameter] index
|
||||
# 28| 1: [Parameter] value
|
||||
# 28| 4: [BlockStmt] {...}
|
||||
# 28| 0: [ExprStmt] ...;
|
||||
# 28| 0: [AssignExpr] ... = ...
|
||||
# 28| 0: [ArrayAccess] access to array element
|
||||
# 28| -1: [FieldAccess] access to field _backingArray
|
||||
# 28| 0: [ParameterAccess] access to parameter index
|
||||
# 28| 1: [ParameterAccess] access to parameter value
|
||||
# 32| [Class] OnePartPartialClass
|
||||
# 34| 6: [Method] PartialMethodWithoutBody2
|
||||
# 34| -1: [TypeMention] Void
|
||||
# 35| 7: [Method] Method4
|
||||
# 35| -1: [TypeMention] Void
|
||||
# 35| 4: [BlockStmt] {...}
|
||||
# 38| [Class] NonPartialClass
|
||||
# 40| 6: [Method] Method5
|
||||
# 40| -1: [TypeMention] Void
|
||||
# 40| 4: [BlockStmt] {...}
|
||||
# 41| 7: [Property] Property
|
||||
# 41| -1: [TypeMention] object
|
||||
# 41| 3: [Getter] get_Property
|
||||
# 41| 4: [Setter] set_Property
|
||||
# 29| 0: [Parameter] index
|
||||
# 32| 1: [Parameter] value
|
||||
# 32| 4: [BlockStmt] {...}
|
||||
# 32| 0: [ExprStmt] ...;
|
||||
# 32| 0: [AssignExpr] ... = ...
|
||||
# 32| 0: [ArrayAccess] access to array element
|
||||
# 32| -1: [FieldAccess] access to field _backingArray
|
||||
# 32| 0: [ParameterAccess] access to parameter index
|
||||
# 32| 1: [ParameterAccess] access to parameter value
|
||||
# 36| 14: [Event] PartialEvent1
|
||||
# 13| -1: [TypeMention] EventHandler
|
||||
# 36| 3: [AddEventAccessor] add_PartialEvent1
|
||||
#-----| 2: (Parameters)
|
||||
# 41| 0: [Parameter] value
|
||||
# 42| 8: [Indexer] Item
|
||||
# 42| -1: [TypeMention] object
|
||||
# 36| 0: [Parameter] value
|
||||
# 36| 4: [BlockStmt] {...}
|
||||
# 36| 4: [RemoveEventAccessor] remove_PartialEvent1
|
||||
#-----| 2: (Parameters)
|
||||
# 36| 0: [Parameter] value
|
||||
# 36| 4: [BlockStmt] {...}
|
||||
# 39| [Class] OnePartPartialClass
|
||||
# 41| 6: [Method] PartialMethodWithoutBody2
|
||||
# 41| -1: [TypeMention] Void
|
||||
# 42| 7: [Method] Method4
|
||||
# 42| -1: [TypeMention] Void
|
||||
# 42| 4: [BlockStmt] {...}
|
||||
# 45| [Class] NonPartialClass
|
||||
# 47| 6: [Method] Method5
|
||||
# 47| -1: [TypeMention] Void
|
||||
# 47| 4: [BlockStmt] {...}
|
||||
# 48| 7: [Property] Property
|
||||
# 48| -1: [TypeMention] object
|
||||
# 48| 3: [Getter] get_Property
|
||||
# 48| 4: [Setter] set_Property
|
||||
#-----| 2: (Parameters)
|
||||
# 48| 0: [Parameter] value
|
||||
# 49| 8: [Indexer] Item
|
||||
# 49| -1: [TypeMention] object
|
||||
#-----| 1: (Parameters)
|
||||
# 42| 0: [Parameter] index
|
||||
# 42| -1: [TypeMention] int
|
||||
# 44| 3: [Getter] get_Item
|
||||
# 49| 0: [Parameter] index
|
||||
# 49| -1: [TypeMention] int
|
||||
# 51| 3: [Getter] get_Item
|
||||
#-----| 2: (Parameters)
|
||||
# 42| 0: [Parameter] index
|
||||
# 44| 4: [BlockStmt] {...}
|
||||
# 44| 0: [ReturnStmt] return ...;
|
||||
# 44| 0: [NullLiteral] null
|
||||
# 45| 4: [Setter] set_Item
|
||||
# 49| 0: [Parameter] index
|
||||
# 51| 4: [BlockStmt] {...}
|
||||
# 51| 0: [ReturnStmt] return ...;
|
||||
# 51| 0: [NullLiteral] null
|
||||
# 52| 4: [Setter] set_Item
|
||||
#-----| 2: (Parameters)
|
||||
# 42| 0: [Parameter] index
|
||||
# 45| 1: [Parameter] value
|
||||
# 45| 4: [BlockStmt] {...}
|
||||
# 49| 0: [Parameter] index
|
||||
# 52| 1: [Parameter] value
|
||||
# 52| 4: [BlockStmt] {...}
|
||||
# 54| 9: [Event] Event
|
||||
# 54| -1: [TypeMention] EventHandler
|
||||
# 54| 3: [AddEventAccessor] add_Event
|
||||
#-----| 2: (Parameters)
|
||||
# 54| 0: [Parameter] value
|
||||
# 54| 4: [RemoveEventAccessor] remove_Event
|
||||
#-----| 2: (Parameters)
|
||||
# 54| 0: [Parameter] value
|
||||
PartialMultipleFiles1.cs:
|
||||
# 1| [Class] PartialMultipleFiles
|
||||
PartialMultipleFiles2.cs:
|
||||
|
||||
@@ -230,3 +230,19 @@ properties.cs:
|
||||
#-----| 2: (Parameters)
|
||||
# 124| 0: [Parameter] value
|
||||
# 124| 4: [BlockStmt] {...}
|
||||
# 128| 10: [Class] UseFieldKeyword
|
||||
# 130| 6: [Property] Prop
|
||||
# 130| -1: [TypeMention] object
|
||||
# 132| 3: [Getter] get_Prop
|
||||
# 132| 4: [BlockStmt] {...}
|
||||
# 132| 0: [ReturnStmt] return ...;
|
||||
# 132| 0: [FieldAccess] access to field Prop.field
|
||||
# 133| 4: [Setter] set_Prop
|
||||
#-----| 2: (Parameters)
|
||||
# 133| 0: [Parameter] value
|
||||
# 133| 4: [BlockStmt] {...}
|
||||
# 133| 0: [ExprStmt] ...;
|
||||
# 133| 0: [AssignExpr] ... = ...
|
||||
# 133| 0: [FieldAccess] access to field Prop.field
|
||||
# 133| 1: [ParameterAccess] access to parameter value
|
||||
# 130| 7: [Field] Prop.field
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
| Prop.field |
|
||||
| caption |
|
||||
| next |
|
||||
| y |
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @name Test that there are no backing fields
|
||||
* @name Test that there are no backing fields except for properties that use the `field` keyword in their getter or setter.
|
||||
*/
|
||||
|
||||
import csharp
|
||||
|
||||
@@ -124,4 +124,13 @@ namespace Properties
|
||||
set { }
|
||||
}
|
||||
}
|
||||
|
||||
class UseFieldKeyword
|
||||
{
|
||||
public object Prop
|
||||
{
|
||||
get { return field; }
|
||||
set { field = value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace Test
|
||||
{
|
||||
class TestClass1 : IEquatable<TestClass1>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass1? param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object? param2)
|
||||
{
|
||||
return param2 is TestClass1 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
|
||||
class TestClass2 : IEquatable<TestClass2>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass2 param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object? param2)
|
||||
{
|
||||
return param2 is TestClass2 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
|
||||
class TestClass3 : IEquatable<TestClass3>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass3? param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object param2)
|
||||
{
|
||||
return param2 is TestClass3 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
|
||||
class TestClass4 : IEquatable<TestClass4>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass4 param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object param2)
|
||||
{
|
||||
return param2 is TestClass4 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace Test
|
||||
{
|
||||
class TestClass1 : IEquatable<TestClass1>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass1? param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object? param2)
|
||||
{
|
||||
return param2 is TestClass1 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
|
||||
class TestClass2 : IEquatable<TestClass2>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass2 param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object? param2)
|
||||
{
|
||||
return param2 is TestClass2 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
|
||||
class TestClass3 : IEquatable<TestClass3>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass3? param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object param2)
|
||||
{
|
||||
return param2 is TestClass3 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
|
||||
class TestClass4 : IEquatable<TestClass4>
|
||||
{
|
||||
private int field1;
|
||||
|
||||
public bool Equals(TestClass4 param1)
|
||||
{
|
||||
return param1 != null && field1 == param1.field1;
|
||||
}
|
||||
|
||||
public override bool Equals(object param2)
|
||||
{
|
||||
return param2 is TestClass4 tc && Equals(tc);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return field1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@
|
||||
.NET 5, .NET 6, .NET 7, .NET 8, .NET 9","``.sln``, ``.slnx``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``"
|
||||
GitHub Actions,"Not applicable",Not applicable,"``.github/workflows/*.yml``, ``.github/workflows/*.yaml``, ``**/action.yml``, ``**/action.yaml``"
|
||||
Go (aka Golang), "Go up to 1.26", "Go 1.11 or more recent", ``.go``
|
||||
Java,"Java 7 to 25 [6]_","javac (OpenJDK and Oracle JDK),
|
||||
Java,"Java 7 to 26 [6]_","javac (OpenJDK and Oracle JDK),
|
||||
|
||||
Eclipse compiler for Java (ECJ) [7]_",``.java``
|
||||
Kotlin,"Kotlin 1.8.0 to 2.3.0\ *x*","kotlinc",``.kt``
|
||||
@@ -36,7 +36,7 @@
|
||||
.. [3] Objective-C, Objective-C++, C++/CLI, and C++/CX are not supported.
|
||||
.. [4] Support for the clang-cl compiler is preliminary.
|
||||
.. [5] Support for the Arm Compiler (armcc) is preliminary.
|
||||
.. [6] Builds that execute on Java 7 to 25 can be analyzed. The analysis understands standard language features in Java 8 to 25; "preview" and "incubator" features are not supported. Source code using Java language versions older than Java 8 are analyzed as Java 8 code.
|
||||
.. [6] Builds that execute on Java 7 to 26 can be analyzed. The analysis understands standard language features in Java 8 to 26; "preview" and "incubator" features are not supported. Source code using Java language versions older than Java 8 are analyzed as Java 8 code.
|
||||
.. [7] ECJ is supported when the build invokes it via the Maven Compiler plugin or the Takari Lifecycle plugin.
|
||||
.. [8] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files.
|
||||
.. [9] The extractor requires Python 3 to run. To analyze Python 2.7 you should install both versions of Python.
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.0.42
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.0.41
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
## 1.0.42
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.0.41
|
||||
lastReleaseVersion: 1.0.42
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql-go-consistency-queries
|
||||
version: 1.0.42-dev
|
||||
version: 1.0.43-dev
|
||||
groups:
|
||||
- go
|
||||
- queries
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
## 7.0.0
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
* The `BasicBlock` class is now defined using the shared basic blocks library. `BasicBlock.getRoot` has been replaced by `BasicBlock.getScope`. `BasicBlock.getAPredecessor` and `BasicBlock.getASuccessor` now take a `SuccessorType` argument. `ReachableJoinBlock.inDominanceFrontierOf` has been removed, so use `BasicBlock.inDominanceFrontier` instead, swapping the receiver and the argument.
|
||||
|
||||
### Major Analysis Improvements
|
||||
|
||||
* Go 1.26 is now supported.
|
||||
|
||||
## 6.0.1
|
||||
|
||||
### Minor Analysis Improvements
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
category: majorAnalysis
|
||||
---
|
||||
* Go 1.26 is now supported.
|
||||
@@ -1,4 +1,9 @@
|
||||
---
|
||||
category: breaking
|
||||
---
|
||||
## 7.0.0
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
* The `BasicBlock` class is now defined using the shared basic blocks library. `BasicBlock.getRoot` has been replaced by `BasicBlock.getScope`. `BasicBlock.getAPredecessor` and `BasicBlock.getASuccessor` now take a `SuccessorType` argument. `ReachableJoinBlock.inDominanceFrontierOf` has been removed, so use `BasicBlock.inDominanceFrontier` instead, swapping the receiver and the argument.
|
||||
|
||||
### Major Analysis Improvements
|
||||
|
||||
* Go 1.26 is now supported.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 6.0.1
|
||||
lastReleaseVersion: 7.0.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: codeql/go-all
|
||||
version: 6.0.2-dev
|
||||
version: 7.0.1-dev
|
||||
groups: go
|
||||
dbscheme: go.dbscheme
|
||||
extractor: go
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 1.5.6
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
## 1.5.5
|
||||
|
||||
No user-facing changes.
|
||||
|
||||
3
go/ql/src/change-notes/released/1.5.6.md
Normal file
3
go/ql/src/change-notes/released/1.5.6.md
Normal file
@@ -0,0 +1,3 @@
|
||||
## 1.5.6
|
||||
|
||||
No user-facing changes.
|
||||
@@ -1,2 +1,2 @@
|
||||
---
|
||||
lastReleaseVersion: 1.5.5
|
||||
lastReleaseVersion: 1.5.6
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user