diff --git a/.bazelrc b/.bazelrc index 679eeec77a3..8687f4406cb 100644 --- a/.bazelrc +++ b/.bazelrc @@ -11,6 +11,8 @@ build --compilation_mode opt common --override_module=semmle_code=%workspace%/misc/bazel/semmle_code_stub build --repo_env=CC=clang --repo_env=CXX=clang++ +# Disable Android SDK auto-detection (we don't use it, and rules_android has Bazel 9 compatibility issues) +build --repo_env=ANDROID_HOME= # print test output, like sembuild does. # Set to `errors` if this is too verbose. @@ -34,7 +36,7 @@ common --@rules_dotnet//dotnet/settings:strict_deps=false common --@rules_rust//rust/toolchain/channel=nightly # Reduce this eventually to empty, once we've fixed all our usages of java, and https://github.com/bazel-contrib/rules_go/issues/4193 is fixed -common --incompatible_autoload_externally="+@rules_java,+@rules_shell" +common --incompatible_autoload_externally="+@rules_cc,+@rules_java,+@rules_shell" build --java_language_version=17 build --tool_java_language_version=17 diff --git a/.bazelversion b/.bazelversion index e7fdef7e2e6..f7ee06693c1 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -8.4.2 +9.0.0 diff --git a/MODULE.bazel b/MODULE.bazel index 9b326127ce7..2b37719584c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -15,20 +15,22 @@ local_path_override( # see https://registry.bazel.build/ for a list of available packages bazel_dep(name = "platforms", version = "1.0.0") -bazel_dep(name = "rules_go", version = "0.56.1") +bazel_dep(name = "rules_cc", version = "0.2.16") +bazel_dep(name = "rules_go", version = "0.59.0") +bazel_dep(name = "rules_java", version = "9.0.3") bazel_dep(name = "rules_pkg", version = "1.0.1") -bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1") +bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "rules_python", version = "0.40.0") bazel_dep(name = "rules_shell", version = "0.5.0") bazel_dep(name = "bazel_skylib", version = "1.8.1") bazel_dep(name = "abseil-cpp", version = "20240116.1", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "12.1.0-codeql.1") -bazel_dep(name = "rules_kotlin", version = "2.2.0-codeql.1") -bazel_dep(name = "gazelle", version = "0.40.0") +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) @@ -41,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( @@ -53,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], ) @@ -188,6 +190,15 @@ pip.parse( ) use_repo(pip, "codegen_deps") +python = use_extension("@rules_python//python/extensions:python.bzl", "python") +python.toolchain( + is_default = True, + python_version = "3.12", +) +use_repo(python, "python_3_12", "python_versions") + +register_toolchains("@python_versions//3.12:all") + swift_deps = use_extension("//swift/third_party:load.bzl", "swift_deps") # following list can be kept in sync with `bazel mod tidy` diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 5725fb5f9aa..a9d5b7e61f6 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.28 +version: 0.4.29-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index e41369b5193..f4e731dc26d 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.20 +version: 0.6.21-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md b/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md new file mode 100644 index 00000000000..4a2cf3ef189 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Refactored the "Year field changed using an arithmetic operation without checking for leap year" query (`cpp/leap-year/unchecked-after-arithmetic-year-modification`) to address large numbers of false positive results. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md b/cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md new file mode 100644 index 00000000000..fc838f51c06 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* The `allowInterproceduralFlow` predicate of must-flow data flow configurations now correctly handles direct recursion. diff --git a/cpp/ql/lib/change-notes/2026-02-14-must-flow.md b/cpp/ql/lib/change-notes/2026-02-14-must-flow.md new file mode 100644 index 00000000000..3d1afaa6344 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-02-14-must-flow.md @@ -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. diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index d2b42410887..31ce003aadc 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 7.1.1 +version: 7.1.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll b/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll index c67bf7cf96e..a4022161076 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll @@ -14,7 +14,9 @@ class PackedTimeType extends Type { } } -private predicate timeType(string typeName) { typeName = ["_SYSTEMTIME", "SYSTEMTIME", "tm"] } +private predicate timeType(string typeName) { + typeName = ["_SYSTEMTIME", "SYSTEMTIME", "tm", "TIME_FIELDS", "_TIME_FIELDS", "PTIME_FIELDS"] +} /** * A type that is used to represent times and dates in an 'unpacked' form, that is, @@ -95,3 +97,24 @@ class StructTmMonthFieldAccess extends MonthFieldAccess { class StructTmYearFieldAccess extends YearFieldAccess { StructTmYearFieldAccess() { this.getTarget().getName() = "tm_year" } } + +/** + * A `DayFieldAccess` for the `TIME_FIELDS` struct. + */ +class TimeFieldsDayFieldAccess extends DayFieldAccess { + TimeFieldsDayFieldAccess() { this.getTarget().getName() = "Day" } +} + +/** + * A `MonthFieldAccess` for the `TIME_FIELDS` struct. + */ +class TimeFieldsMonthFieldAccess extends MonthFieldAccess { + TimeFieldsMonthFieldAccess() { this.getTarget().getName() = "Month" } +} + +/** + * A `YearFieldAccess` for the `TIME_FIELDS` struct. + */ +class TimeFieldsYearFieldAccess extends YearFieldAccess { + TimeFieldsYearFieldAccess() { this.getTarget().getName() = "Year" } +} diff --git a/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll b/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll index 7e98177f323..3dea144bbf6 100644 --- a/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll +++ b/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll @@ -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) ) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll index b085440f6bc..2b61190fb71 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll @@ -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 { + 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() } } diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 90f6a827255..86753abc5b7 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -552,34 +552,47 @@ private module BoundsEstimate { private float nrOfBoundsPhiGuard(RangeSsaDefinition def, StackVariable v) { // If we have // + // if (x < c) { e1 } else { e2 } + // e3 + // + // then `{ e1 }` and `{ e2 }` are both guard phi nodes guarded by `x < c`. + // The range analysis propagates bounds on `x` into both branches, filtered + // by the condition. In this case all lower bounds flow to `{ e1 }` and only + // lower bounds that are smaller than `c` flow to `{ e2 }`. + // + // The largest number of bounds possible for `e3` is the number of bounds on `x` plus + // one. This happens when all bounds flow from `x` to `e1` to `e3` and the + // bound `c` can flow to `e2` to `e3`. + // + // We want to optimize our bounds estimate for `e3`, as that is the estimate + // that can continue propagating forward. We don't know how the existing + // bounds will be split between the different branches. That depends on + // whether the range analysis is tracking lower bounds or upper bounds, and + // on the meaning of the condition. + // + // As a heuristic we divide the number of bounds on `x` by 2 to "average" + // the effect of the condition and add 1 to account for the bound from the + // condition itself. This will approximate estimates inside the branches, + // but will give a good estimate after the branches are merged. + // + // This also handles cases such as this one + // // if (x < c) { e1 } - // e2 + // e3 // - // then `e2` is both a guard phi node (guarded by `x < c`) and a normal - // phi node (control is merged after the `if` statement). - // - // Assume `x` has `n` bounds. Then `n` bounds are propagated to the guard - // phi node `{ e1 }` and, since `{ e1 }` is input to `e2` as a normal phi - // node, `n` bounds are propagated to `e2`. If we also propagate the `n` - // bounds to `e2` as a guard phi node, then we square the number of - // bounds. - // - // However in practice `x < c` is going to cut down the number of bounds: - // The tracked bounds can't flow to both branches as that would require - // them to simultaneously be greater and smaller than `c`. To approximate - // this better, the contribution from a guard phi node that is also a - // normal phi node is 1. - exists(def.getAPhiInput(v)) and - isGuardPhiWithBound(def, v, _) and - result = 1 - or - not exists(def.getAPhiInput(v)) and - // If there's different `access`es, then they refer to the same variable - // with the same lower bounds. Hence adding these guards make no sense (the - // implementation will take the union, but they'll be removed by - // deduplication). Hence we use `max` as an approximation. - result = - max(VariableAccess access | isGuardPhiWithBound(def, v, access) | nrOfBoundsExpr(access)) + // where `e3` is both a guard phi node (guarded by `x < c`) and a normal + // phi node (control is merged after the `if` statement). Here half of the + // bounds flow into the branch and then to `e3` as a normal phi node and the + // "other" half flow from the condition to `e3` as a guard phi node. + exists(float varBounds | + // If there's different `access`es, then they refer to the same + // variable with the same lower bounds. Hence adding these guards makes no + // sense (the implementation will take the union, but they'll be removed by + // deduplication). Hence we use `max` as an approximation. + varBounds = + max(VariableAccess access | isGuardPhiWithBound(def, v, access) | nrOfBoundsExpr(access)) and + result = (varBounds + 1) / 2 + ) or def.isPhiNode(v) and not isGuardPhiWithBound(def, v, _) and @@ -2180,6 +2193,16 @@ module SimpleRangeAnalysisInternal { /** Gets the estimate of the number of bounds for `e`. */ float estimateNrOfBounds(Expr e) { result = BoundsEstimate::nrOfBoundsExpr(e) } + + /** Counts the numbers of lower bounds that are computed internally for `e`. */ + float countNrOfLowerBounds(Expr e) { + result = strictcount(float lb | lb = getLowerBoundsImpl(e) | lb) + } + + /** Counts the numbers of upper bounds that are computed internally for `e`. */ + float countNrOfUpperBounds(Expr e) { + result = strictcount(float ub | ub = getUpperBoundsImpl(e) | ub) + } } /** Provides predicates for debugging the simple range analysis library. */ @@ -2208,7 +2231,7 @@ private module Debug { */ predicate countGetLowerBoundsImpl(Expr e, int n) { e = getRelevantLocatable() and - n = strictcount(float lb | lb = getLowerBoundsImpl(e) | lb) + n = SimpleRangeAnalysisInternal::countNrOfLowerBounds(e) } float debugNrOfBounds(Expr e) { diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll index 2b68730fa58..99981873d26 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll +++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll @@ -308,3 +308,37 @@ private module PossibleYearArithmeticOperationCheckConfig implements DataFlow::C module PossibleYearArithmeticOperationCheckFlow = TaintTracking::Global; + +/** + * A time conversion function where either + * 1) an incorrect leap year date would result in an error that can be checked from the return value or + * 2) an incorrect leap year date is auto corrected (no checks required) + */ +class TimeConversionFunction extends Function { + boolean autoLeapYearCorrecting; + + TimeConversionFunction() { + autoLeapYearCorrecting = false and + ( + this.getName() = + [ + "FileTimeToSystemTime", "SystemTimeToFileTime", "SystemTimeToTzSpecificLocalTime", + "SystemTimeToTzSpecificLocalTimeEx", "TzSpecificLocalTimeToSystemTime", + "TzSpecificLocalTimeToSystemTimeEx", "RtlLocalTimeToSystemTime", + "RtlTimeToSecondsSince1970", "_mkgmtime", "SetSystemTime", "VarUdateFromDate", "from_tm" + ] + or + // Matches all forms of GetDateFormat, e.g. GetDateFormatA/W/Ex + this.getName().matches("GetDateFormat%") + ) + or + autoLeapYearCorrecting = true and + this.getName() = + ["mktime", "_mktime32", "_mktime64", "SystemTimeToVariantTime", "VariantTimeToSystemTime"] + } + + /** + * Holds if the function is expected to auto convert a bad leap year date. + */ + predicate isAutoLeapYearCorrecting() { autoLeapYearCorrecting = true } +} diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 03570b3611c..0a52a2b0ff4 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -1,7 +1,7 @@ /** * @name Year field changed using an arithmetic operation without checking for leap year * @description A field that represents a year is being modified by an arithmetic operation, but no proper check for leap years can be detected afterwards. - * @kind problem + * @kind path-problem * @problem.severity warning * @id cpp/leap-year/unchecked-after-arithmetic-year-modification * @precision medium @@ -11,49 +11,844 @@ import cpp import LeapYear +import semmle.code.cpp.controlflow.IRGuards -from Variable var, LeapYearFieldAccess yfa -where - exists(VariableAccess va | - yfa.getQualifier() = va and - var.getAnAccess() = va and - // The year is modified with an arithmetic operation. Avoid values that are likely false positives - yfa.isModifiedByArithmeticOperationNotForNormalization() and - // Avoid false positives - not ( - // If there is a local check for leap year after the modification - exists(LeapYearFieldAccess yfacheck | - yfacheck.getQualifier() = var.getAnAccess() and - yfacheck.isUsedInCorrectLeapYearCheck() and - yfacheck.getBasicBlock() = yfa.getBasicBlock().getASuccessor*() - ) +/** + * Functions whose operations should never be considered a + * source or sink of a dangerous leap year operation. + * The general concept is to add conversion functions + * that convert one time type to another. Often + * other ignorable operation heuristics will filter these, + * but some cases, the simplest approach is to simply filter + * the function entirely. + * Note that flow through these functions should still be allowed + * we just cannot start or end flow from an operation to a + * year assignment in one of these functions. + */ +class IgnorableFunction extends Function { + IgnorableFunction() { + // arithmetic in known time conversion functions may look like dangerous operations + // we assume all known time conversion functions are safe. + this instanceof TimeConversionFunction + or + // Helper utility in postgres with string time conversions + this.getName() = "DecodeISO8601Interval" + or + // helper utility for date conversions in qtbase + this.getName() = "adjacentDay" + or + // Windows API function that does timezone conversions + this.getName().matches("%SystemTimeToTzSpecificLocalTime%") + or + // Windows APIs that do time conversions + this.getName().matches("%localtime%\\_s%") + or + // Windows APIs that do time conversions + this.getName().matches("%SpecificLocalTimeToSystemTime%") + or + // postgres function for diffing timestamps, date for leap year + // is not applicable. + this.getName().toLowerCase().matches("%timestamp%age%") + or + // Reading byte streams often involves operations of some base, but that's + // not a real source of leap year issues. + this.getName().toLowerCase().matches("%read%bytes%") + or + // A postgres function for local time conversions + // conversion operations (from one time structure to another) are generally ignorable + this.getName() = "localsub" + or + // Indication of a calendar not applicable to + // gregorian leap year, e.g., Hijri, Persian, Hebrew + this.getName().toLowerCase().matches("%hijri%") + or + this.getFile().getBaseName().toLowerCase().matches("%hijri%") + or + this.getName().toLowerCase().matches("%persian%") + or + this.getFile().getBaseName().toLowerCase().matches("%persian%") + or + this.getName().toLowerCase().matches("%hebrew%") + or + this.getFile().getBaseName().toLowerCase().matches("%hebrew%") + or + // misc. from string/char converters heuristic + this.getName() + .toLowerCase() + .matches(["%char%to%", "%string%to%", "%from%char%", "%from%string%"]) + or + // boost's gregorian.cpp has year manipulations that are checked in complex ways. + // ignore the entire file as a source or sink. + this.getFile().getAbsolutePath().toLowerCase().matches("%boost%gregorian.cpp%") + } +} + +/** + * The set of expressions which are ignorable; either because they seem to not be part of a year mutation, + * or because they seem to be a conversion pattern of mapping date scalars. + */ +abstract class IgnorableOperation extends Expr { } + +class IgnorableExprRem extends IgnorableOperation instanceof RemExpr { } + +/** + * An operation with 10, 100, 1000, 10000 as an operand is often a sign of conversion + * or atoi. + */ +class IgnorableExpr10MultipleComponent extends IgnorableOperation { + IgnorableExpr10MultipleComponent() { + this.(Operation).getAnOperand().getValue().toInt() in [10, 100, 1000, 10000] + or + exists(AssignOperation a | a.getRValue() = this | + a.getRValue().getValue().toInt() in [10, 100, 1000, 10000] + ) + } +} + +/** + * An operation involving a sub expression with char literal `48`, ignore as a likely string conversion. For example: `X - '0'` + */ +class IgnorableExpr48Mapping extends IgnorableOperation { + IgnorableExpr48Mapping() { + this.(SubExpr).getRightOperand().getValue().toInt() = 48 + or + exists(AssignSubExpr e | e.getRValue() = this | e.getRValue().getValue().toInt() = 48) + } +} + +/** + * A binary or arithmetic operation whereby one of the components is textual or a string. + */ +class IgnorableCharLiteralArithmetic extends IgnorableOperation { + IgnorableCharLiteralArithmetic() { + this.(BinaryArithmeticOperation).getAnOperand() instanceof TextLiteral + or + this instanceof TextLiteral and + any(AssignArithmeticOperation arith).getRValue() = this + } +} + +/** + * Constants often used in date conversions (from one date data type to another) + * Numerous examples exist, like 1900 or 2000 that convert years from one + * representation to another. + * Also '0' is sometimes observed as an atoi style conversion. + */ +bindingset[c] +predicate isLikelyConversionConstant(int c) { + exists(int i | i = c.abs() | + i = + [ + 146097, // days in 400-year Gregorian cycle + 36524, // days in 100-year Gregorian subcycle + 1461, // days in 4-year cycle (incl. 1 leap) + 32044, // Fliegel-van Flandern JDN epoch shift + 1721425, // JDN of 0001-01-01 (Gregorian) + 1721119, // alt epoch offset + 2400000, // MJD -> JDN conversion + 2400001, // alt MJD -> JDN conversion + 2141, // fixed-point month/day extraction + 65536, // observed in some conversions + 7834, // observed in some conversions + 256, // observed in some conversions + 292275056, // qdatetime.h Qt Core year range first year constant + 292278994, // qdatetime.h Qt Core year range last year constant + 1601, // Windows FILETIME epoch start year + 1970, // Unix epoch start year + 70, // Unix epoch start year short form + 1899, // Observed in uses with 1900 to address off by one scenarios + 1900, // Used when converting a 2 digit year + 2000, // Used when converting a 2 digit year + 1400, // Hijri base year, used when converting a 2 digit year + 1980, // FAT filesystem epoch start year + 227013, // constant observed for Hirji year conversion, and Hirji years are not applicable for gregorian leap year + 10631, // constant observed for Hirji year conversion, and Hirji years are not applicable for gregorian leap year, + 80, // 1980/01/01 is the start of the epoch on DOS + 0 + ] + ) +} + +/** + * An `isLikelyConversionConstant` constant indicates conversion that is ignorable, e.g., + * julian to gregorian conversion or conversions from linux time structs + * that start at 1900, etc. + */ +class IgnorableConstantArithmetic extends IgnorableOperation { + IgnorableConstantArithmetic() { + exists(int i | isLikelyConversionConstant(i) | + this.(Operation).getAnOperand().getValue().toInt() = i or - // If there is a data flow from the variable that was modified to a function that seems to check for leap year - exists(VariableAccess source, ChecksForLeapYearFunctionCall fc | - source = var.getAnAccess() and - LeapYearCheckFlow::flow(DataFlow::exprNode(source), DataFlow::exprNode(fc.getAnArgument())) - ) - or - // If there is a data flow from the field that was modified to a function that seems to check for leap year - exists(VariableAccess vacheck, YearFieldAccess yfacheck, ChecksForLeapYearFunctionCall fc | - vacheck = var.getAnAccess() and - yfacheck.getQualifier() = vacheck and - LeapYearCheckFlow::flow(DataFlow::exprNode(yfacheck), DataFlow::exprNode(fc.getAnArgument())) - ) - or - // If there is a successor or predecessor that sets the month = 1 - exists(MonthFieldAccess mfa, AssignExpr ae | - mfa.getQualifier() = var.getAnAccess() and - mfa.isModified() and - ( - mfa.getBasicBlock() = yfa.getBasicBlock().getASuccessor*() or - yfa.getBasicBlock() = mfa.getBasicBlock().getASuccessor+() - ) and - ae = mfa.getEnclosingElement() and - ae.getAnOperand().getValue().toInt() = 1 + exists(AssignArithmeticOperation a | this = a.getRValue() | + a.getRValue().getValue().toInt() = i ) ) + } +} + +// If a unary minus assume it is some sort of conversion +class IgnorableUnaryMinus extends IgnorableOperation { + IgnorableUnaryMinus() { + this instanceof UnaryMinusExpr + or + this.(Operation).getAnOperand() instanceof UnaryMinusExpr + } +} + +/** + * An argument to a function is ignorable if the function that is called is an ignored function + */ +class OperationAsArgToIgnorableFunction extends IgnorableOperation { + OperationAsArgToIgnorableFunction() { + exists(Call c | + c.getAnArgument().getAChild*() = this and + c.getTarget() instanceof IgnorableFunction + ) + } +} + +/** + * A binary operation on two literals means the result is constant/known + * and the operation is basically ignorable (it's not a real operation but + * probably one visual simplicity what it means). + */ +class ConstantBinaryArithmeticOperation extends IgnorableOperation, BinaryArithmeticOperation { + ConstantBinaryArithmeticOperation() { + this.getLeftOperand() instanceof Literal and + this.getRightOperand() instanceof Literal + } +} + +class IgnorableBinaryBitwiseOperation extends IgnorableOperation instanceof BinaryBitwiseOperation { +} + +class IgnorableUnaryBitwiseOperation extends IgnorableOperation instanceof UnaryBitwiseOperation { } + +class IgnorableAssignmentBitwiseOperation extends IgnorableOperation instanceof AssignBitwiseOperation +{ } + +/** + * An arithmetic operation where one of the operands is a pointer or char type, ignore it + */ +class IgnorablePointerOrCharArithmetic extends IgnorableOperation { + IgnorablePointerOrCharArithmetic() { + this instanceof BinaryArithmeticOperation and + exists(Expr op | op = this.(BinaryArithmeticOperation).getAnOperand() | + op.getUnspecifiedType() instanceof PointerType + or + op.getUnspecifiedType() instanceof CharType + or + // Operations on calls to functions that accept char or char* + op.(Call).getAnArgument().getUnspecifiedType().stripType() instanceof CharType + or + // Operations on calls to functions named like "strlen", "wcslen", etc + // NOTE: workaround for cases where the wchar_t type is not a char, but an unsigned short + // unclear if there is a best way to filter cases like these out based on type info. + op.(Call).getTarget().getName().matches("%len%") + ) + or + exists(AssignArithmeticOperation a | a.getRValue() = this | + exists(Expr op | op = a.getAnOperand() | + op.getUnspecifiedType() instanceof PointerType + or + op.getUnspecifiedType() instanceof CharType + or + // Operations on calls to functions that accept char or char* + op.(Call).getAnArgument().getUnspecifiedType().stripType() instanceof CharType + ) + or + // Operations on calls to functions named like "strlen", "wcslen", etc + // for example `strlen(foo) + bar` + this.(BinaryArithmeticOperation).getAnOperand().(Call).getTarget().getName().matches("%len%") + ) + } +} + +/** + * Holds for an expression that is an add or similar operation that could flow to a Year field. + */ +predicate isOperationSourceCandidate(Expr e) { + not e instanceof IgnorableOperation and + exists(Function f | + f = e.getEnclosingFunction() and + not f instanceof IgnorableFunction + ) and + ( + e instanceof SubExpr + or + e instanceof AddExpr + or + e instanceof CrementOperation + or + e instanceof AssignSubExpr + or + e instanceof AssignAddExpr ) -select yfa, - "Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found.", - yfa.getTarget(), yfa.getTarget().toString(), var, var.toString() +} + +/** + * A data flow that tracks an ignorable operation (such as a bitwise operation) to an operation source, so we may disqualify it. + */ +module IgnorableOperationToOperationSourceCandidateConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr() instanceof IgnorableOperation } + + predicate isSink(DataFlow::Node n) { isOperationSourceCandidate(n.asExpr()) } + + // looking for sources and sinks in the same function + DataFlow::FlowFeature getAFeature() { + result instanceof DataFlow::FeatureEqualSourceSinkCallContext + } +} + +module IgnorableOperationToOperationSourceCandidateFlow = + TaintTracking::Global; + +/** + * The set of all expressions which is a candidate expression and also does not flow from to to some ignorable expression (eg. bitwise op) + * ``` + * a = something <<< 2; + * myDate.year = a + 1; // invalid + * ... + * a = someDate.year + 1; + * myDate.year = a; // valid + * ``` + */ +class OperationSource extends Expr { + OperationSource() { + isOperationSourceCandidate(this) and + // If the candidate came from an ignorable operation, ignore the candidate + // NOTE: we cannot easily flow the candidate to an ignorable operation as that can + // be tricky in practice, e.g., a mod operation on a year would be part of a leap year check + // but a mod operation ending in a year is more indicative of something to ignore (a conversion) + not exists(IgnorableOperationToOperationSourceCandidateFlow::PathNode sink | + sink.getNode().asExpr() = this and + sink.isSink() + ) + } +} + +class YearFieldAssignmentNode extends DataFlow::Node { + YearFieldAccess access; + + YearFieldAssignmentNode() { + exists(Function f | + f = this.getEnclosingCallable().getUnderlyingCallable() and not f instanceof IgnorableFunction + ) and + ( + this.asDefinition().(Assignment).getLValue() = access + or + this.asDefinition().(CrementOperation).getOperand() = access + or + exists(Call c | c.getAnArgument() = access and this.asDefiningArgument() = access) + or + exists(Call c, AddressOfExpr aoe | + c.getAnArgument() = aoe and + aoe.getOperand() = access and + this.asDefiningArgument() = aoe + ) + ) + } + + YearFieldAccess getYearFieldAccess() { result = access } +} + +/** + * A DataFlow configuration for identifying flows from an identified source + * to the Year field of a date object. + */ +module OperationToYearAssignmentConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr() instanceof OperationSource } + + predicate isSink(DataFlow::Node n) { + n instanceof YearFieldAssignmentNode and + not isYearModifiedWithCheck(n) and + not isControlledByMonthEqualityCheckNonFebruary(n.asExpr()) + } + + predicate isBarrier(DataFlow::Node n) { + exists(ArrayExpr arr | arr.getArrayOffset() = n.asExpr()) + or + n.getType().getUnspecifiedType() instanceof PointerType + or + n.getType().getUnspecifiedType() instanceof CharType + or + // If a type resembles "string" ignore flow (likely string conversion, currently ignored) + n.getType().getUnspecifiedType().stripType().getName().toLowerCase().matches("%string%") + or + n.asExpr() instanceof IgnorableOperation + or + // Flowing into variables that indicate likely non-gregorian years are barriers + // e.g., names similar to hijri, persian, lunar, chinese, hebrew, etc. + exists(Variable v | + v.getName() + .toLowerCase() + .matches(["%hijri%", "%persian%", "%lunar%", "%chinese%", "%hebrew%"]) and + v.getAnAccess() = [n.asIndirectExpr(), n.asExpr()] + ) + or + isLeapYearCheckSink(n) + or + // this is a bit of a hack to address cases where a year is normalized and checked, but the + // normalized year is never itself assigned to the final year struct + // isLeapYear(getCivilYear(year)) + // struct.year = year + // This is assuming a user would have done this all on one line though. + // setting a variable for the conversion and passing that separately would be more difficult to track + // considering this approach good enough for current observed false positives + exists(Expr arg | + isLeapYearCheckCall(_, arg) and arg.getAChild*() = [n.asExpr(), n.asIndirectExpr()] + ) + or + // If as the flow progresses, the value holding a dangerous operation result + // is apparently being passed by address to some function, it is more than likely + // intended to be modified, and therefore, the definition is killed. + exists(Call c | c.getAnArgument().(AddressOfExpr).getAnOperand() = n.asIndirectExpr()) + } + + /** Block flow out of an operation source to get the "closest" operation to the sink */ + predicate isBarrierIn(DataFlow::Node n) { isSource(n) } + + predicate isBarrierOut(DataFlow::Node n) { isSink(n) } +} + +module OperationToYearAssignmentFlow = TaintTracking::Global; + +predicate isLeapYearCheckSink(DataFlow::Node sink) { + exists(LeapYearGuardCondition lgc | + lgc.checkedYearAccess() = [sink.asExpr(), sink.asIndirectExpr()] + ) + or + isLeapYearCheckCall(_, [sink.asExpr(), sink.asIndirectExpr()]) +} + +predicate yearAssignmentToCheckCommonSteps(DataFlow::Node node1, DataFlow::Node node2) { + // flow from a YearFieldAccess to the qualifier + node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() + or + // getting the 'access' can be tricky at definitions (assignments especially) + // as dataflow uses asDefinition not asExpr. + // the YearFieldAssignmentNode holds the access in these cases + node1.(YearFieldAssignmentNode).getYearFieldAccess().getQualifier() = node2.asExpr() + or + // flow from a year access qualifier to a year field + exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) + or + node1.(YearFieldAssignmentNode).getYearFieldAccess().getQualifier() = node2.asExpr() + or + // Pass through any intermediate struct + exists(Assignment a | + a.getRValue() = node1.asExpr() and + node2.asExpr() = a.getLValue().(YearFieldAccess).getQualifier*() + ) + or + // in cases of t.year = x and the value of x is checked, but the year t.year isn't directly checked + // flow from a year assignment node to an RHS if it is an assignment + // e.g., + // t.year = x; + // isLeapYear(x); + // --> at this point there is no flow of t.year to a check, but only its raw value + // To detect the flow of 'x' to the isLeapYear check, + // flow from t.year to 'x' (at assignment, t.year = x, flow to the RHS to track use-use flow of x) + exists(YearFieldAssignmentNode yfan | + node1 = yfan and + node2.asExpr() = yfan.asDefinition().(Assignment).getRValue() + ) +} + +/** + * A flow configuration from a Year field access to some Leap year check or guard + */ +module YearAssignmentToLeapYearCheckConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof YearFieldAssignmentNode } + + predicate isSink(DataFlow::Node sink) { isLeapYearCheckSink(sink) } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + yearAssignmentToCheckCommonSteps(node1, node2) + } + + /** + * Enforcing the check must occur in the same call context as the source, + * i.e., do not return from the source function and check in a caller. + */ + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +module YearAssignmentToLeapYearCheckFlow = + TaintTracking::Global; + +/** Does there exist a flow from the given YearFieldAccess to a Leap Year check or guard? */ +predicate isYearModifiedWithCheck(YearFieldAssignmentNode n) { + exists(YearAssignmentToLeapYearCheckFlow::PathNode src | + src.isSource() and + src.getNode() = n + ) + or + // If the time flows to a time conversion whose value/result is checked, + // assume the leap year is being handled. + exists(YearAssignmentToCheckedTimeConversionFlow::PathNode timeQualSrc | + timeQualSrc.isSource() and + timeQualSrc.getNode() = n + ) +} + +/** + * An expression which checks the value of a Month field `a->month == 1`. + */ +class MonthEqualityCheck extends EqualityOperation { + MonthEqualityCheck() { this.getAnOperand() instanceof MonthFieldAccess } + + Expr getExprCompared() { + exists(Expr e | + e = this.getAnOperand() and + not e instanceof MonthFieldAccess and + result = e + ) + } +} + +final class FinalMonthEqualityCheck = MonthEqualityCheck; + +class MonthEqualityCheckGuard extends GuardCondition, FinalMonthEqualityCheck { } + +/** + * Verifies if the expression is guarded by a check on the Month property of a date struct, that is NOT February. + */ +bindingset[e] +pragma[inline_late] +predicate isControlledByMonthEqualityCheckNonFebruary(Expr e) { + exists(MonthEqualityCheckGuard monthGuard, Expr compared | + monthGuard.controls(e.getBasicBlock(), true) and + compared = monthGuard.getExprCompared() and + not compared.getValue().toInt() = 2 + ) +} + +/** + * Flow from a year field access to a time conversion function + * that auto converts feb29 in non-leap year, or through a conversion function that doesn't + * auto convert to a sanity check guard of the result for error conditions. + */ +module YearAssignmentToCheckedTimeConversionConfig implements DataFlow::StateConfigSig { + // Flow state tracks if flow goes through a known time conversion function + // see `TimeConversionFunction`. + // A valid check with a time conversion function is either the case: + // 1) the year flows into a time conversion function, and the time conversion function's result is checked or + // 2) the year flows into a time conversion function that auto corrects for leap year, so no check is necessary. + class FlowState = boolean; + + predicate isSource(DataFlow::Node source, FlowState state) { + source instanceof YearFieldAssignmentNode and + state = false + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + // Case 1: Flow through a time conversion function that requires a check, + // and we have arrived at a guard, implying the result was checked for possible error, including leap year error. + // state = true indicates the flow went through a time conversion function + state = true and + ( + exists(IfStmt ifs | ifs.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()]) + or + exists(ConditionalExpr ce | + ce.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()] + ) + or + exists(Loop l | l.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()]) + ) + or + // Case 2: Flow through a time conversion function that auto corrects for leap year, so no check is necessary. + // state true or false, as flowing through a time conversion function is not necessary in this instance. + state in [true, false] and + exists(Call c, TimeConversionFunction f | + f.isAutoLeapYearCorrecting() and + c.getTarget() = f and + c.getAnArgument().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()] + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 + ) { + state1 in [true, false] and + state2 = true and + exists(Call c | + c.getTarget() instanceof TimeConversionFunction and + c.getAnArgument().getAChild*() = [node1.asExpr(), node1.asIndirectExpr()] and + node2.asExpr() = c + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + yearAssignmentToCheckCommonSteps(node1, node2) + } + + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +module YearAssignmentToCheckedTimeConversionFlow = + DataFlow::GlobalWithState; + +/** + * Finds flow from a parameter of a function to a leap year check. + * This is necessary to handle for scenarios like this: + * + * year = DANGEROUS_OP // source + * isLeap = isLeapYear(year); + * // logic based on isLeap + * struct.year = year; // sink + * + * In this case, we may flow a dangerous op to a year assignment, failing + * to barrier the flow through a leap year check, as the leap year check + * is nested, and dataflow does not progress down into the check and out. + * Instead, the point of this flow is to detect isLeapYear's argument + * is checked for leap year, making the isLeapYear call a barrier for + * the dangerous flow if we flow through the parameter identified to + * be checked. + */ +module ParameterToLeapYearCheckConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { exists(source.asParameter()) } + + predicate isSink(DataFlow::Node sink) { + exists(LeapYearGuardCondition lgc | + lgc.checkedYearAccess() = [sink.asExpr(), sink.asIndirectExpr()] + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + // flow from a YearFieldAccess to the qualifier + node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() + or + // flow from a year access qualifier to a year field + exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) + } + + /** + * Enforcing the check must occur in the same call context as the source, + * i.e., do not return from the source function and check in a caller. + */ + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +// NOTE: I do not believe taint flow is necessary here as we should +// be flowing directyly from some parameter to a leap year check. +module ParameterToLeapYearCheckFlow = DataFlow::Global; + +predicate isLeapYearCheckCall(Call c, Expr arg) { + exists(ParameterToLeapYearCheckFlow::PathNode src, Function f, int i | + src.isSource() and + f.getParameter(i) = src.getNode().asParameter() and + c.getTarget() = f and + c.getArgument(i) = arg + ) +} + +class LeapYearGuardCondition extends GuardCondition { + Expr yearSinkDiv4; + Expr yearSinkDiv100; + Expr yearSinkDiv400; + + LeapYearGuardCondition() { + exists( + LogicalAndExpr andExpr, LogicalOrExpr orExpr, GuardCondition div4Check, + GuardCondition div100Check, GuardCondition div400Check, GuardValue gv + | + // canonical case: + // form: `(year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)` + // `!((year % 4 == 0) && (year % 100 != 0 || year % 400 == 0))` + // `!(year % 4) && (year % 100 || !(year % 400))` + // Also accepting `((year & 3) == 0) && (year % 100 != 0 || year % 400 == 0)` + // and `(year % 4 == 0) && (year % 100 > 0 || year % 400 == 0)` + this = andExpr and + andExpr.hasOperands(div4Check, orExpr) and + orExpr.hasOperands(div100Check, div400Check) and + ( + // year % 4 == 0 + exists(RemExpr e | + div4Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 4 and + yearSinkDiv4 = e.getLeftOperand() + ) + or + // year & 3 == 0 + exists(BitwiseAndExpr e | + div4Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 3 and + yearSinkDiv4 = e.getLeftOperand() + ) + ) and + exists(RemExpr e | + // year % 100 != 0 or year % 100 > 0 + ( + div100Check.comparesEq(e, 0, false, gv) or + div100Check.comparesLt(e, 1, false, gv) + ) and + e.getRightOperand().getValue().toInt() = 100 and + yearSinkDiv100 = e.getLeftOperand() + ) and + // year % 400 == 0 + exists(RemExpr e | + div400Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 400 and + yearSinkDiv400 = e.getLeftOperand() + ) + or + // Inverted logic case: + // `year % 4 != 0 || (year % 100 == 0 && year % 400 != 0)` + // or `year & 3 != 0 || (year % 100 == 0 && year % 400 != 0)` + // also accepting `year % 4 > 0 || (year % 100 == 0 && year % 400 > 0)` + this = orExpr and + orExpr.hasOperands(div4Check, andExpr) and + andExpr.hasOperands(div100Check, div400Check) and + ( + // year % 4 != 0 or year % 4 > 0 + exists(RemExpr e | + ( + div4Check.comparesEq(e, 0, false, gv) + or + div4Check.comparesLt(e, 1, false, gv) + ) and + e.getRightOperand().getValue().toInt() = 4 and + yearSinkDiv4 = e.getLeftOperand() + ) + or + // year & 3 != 0 + exists(BitwiseAndExpr e | + div4Check.comparesEq(e, 0, false, gv) and + e.getRightOperand().getValue().toInt() = 3 and + yearSinkDiv4 = e.getLeftOperand() + ) + ) and + // year % 100 == 0 + exists(RemExpr e | + div100Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 100 and + yearSinkDiv100 = e.getLeftOperand() + ) and + // year % 400 != 0 or year % 400 > 0 + exists(RemExpr e | + ( + div400Check.comparesEq(e, 0, false, gv) + or + div400Check.comparesLt(e, 1, false, gv) + ) and + e.getRightOperand().getValue().toInt() = 400 and + yearSinkDiv400 = e.getLeftOperand() + ) + ) + } + + Expr getYearSinkDiv4() { result = yearSinkDiv4 } + + Expr getYearSinkDiv100() { result = yearSinkDiv100 } + + Expr getYearSinkDiv400() { result = yearSinkDiv400 } + + /** + * Gets the variable access that is used in all 3 components of the leap year check + * e.g., see getYearSinkDiv4/100/400.. + * If a field access is used, the qualifier and the field access are both returned + * in checked condition. + * NOTE: if the year is not checked using the same access in all 3 components, no result is returned. + * The typical case observed is a consistent variable access is used. If not, this may indicate a bug. + * We could check more accurately with a dataflow analysis, but this is likely sufficient for now. + */ + VariableAccess checkedYearAccess() { + exists(Variable var | + ( + this.getYearSinkDiv4().getAChild*() = var.getAnAccess() and + this.getYearSinkDiv100().getAChild*() = var.getAnAccess() and + this.getYearSinkDiv400().getAChild*() = var.getAnAccess() and + result = var.getAnAccess() and + ( + result = this.getYearSinkDiv4().getAChild*() or + result = this.getYearSinkDiv100().getAChild*() or + result = this.getYearSinkDiv400().getAChild*() + ) + ) + ) + } +} + +/** + * A difficult case to detect is if a year modification is tied to a month or day modification + * and the month or day is safe for leap year. + * e.g., + * year++; + * month = 1; + * // alternative: day = 15; + * ... values eventually used in the same time struct + * If this is even more challenging if the struct the values end up in are not + * local (set inter-procedurally). + * This configuration looks for constants 1-31 flowing to a month or day assignment. + * It is assumed a user of this flow will check if the month/day source and month/day sink + * are in the same basic blocks as a year modification source and a year modification sink. + * It is also assumed a user will check if the constant source is a value that is ignorable + * e.g., if it is 2 and the sink is a month assignment, then it isn't ignorable or + * if the value is < 27 and is a day assignment, it is likely ignorable + * + * Obviously this does not handle all conditions (e.g., the month set in another block). + * It is meant to capture the most common cases of false positives. + */ +module CandidateConstantToDayOrMonthAssignmentConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source.asExpr().getValue().toInt() in [1 .. 31] and + ( + exists(Assignment a | a.getRValue() = source.asExpr()) + or + exists(Call c | c.getAnArgument() = source.asExpr()) + ) + } + + predicate isSink(DataFlow::Node sink) { + exists(Assignment a | + (a.getLValue() instanceof MonthFieldAccess or a.getLValue() instanceof DayFieldAccess) and + a.getRValue() = sink.asExpr() + ) + } +} + +// NOTE: only data flow here (no taint tracking) as we want the exact +// constant flowing to the month assignment +module CandidateConstantToDayOrMonthAssignmentFlow = + DataFlow::Global; + +/** + * Holds if value the assignment `a` resolves to (`dayOrMonthValSrcExpr`) doesn't represent February, + * and/or if it represents a day, is a 'safe' day (meaning the 27th or prior). + */ +bindingset[dayOrMonthValSrcExpr] +predicate isSafeValueForAssignmentOfMonthOrDayValue(Assignment a, Expr dayOrMonthValSrcExpr) { + a.getLValue() instanceof MonthFieldAccess and + dayOrMonthValSrcExpr.getValue().toInt() != 2 + or + a.getLValue() instanceof DayFieldAccess and + dayOrMonthValSrcExpr.getValue().toInt() <= 27 +} + +import OperationToYearAssignmentFlow::PathGraph + +from OperationToYearAssignmentFlow::PathNode src, OperationToYearAssignmentFlow::PathNode sink +where + OperationToYearAssignmentFlow::flowPath(src, sink) and + // Check if a month is set in the same block as the year operation source + // and the month value would indicate its set to any other month than february. + // Finds if the source year node is in the same block as a source month block + // and if the same for the sinks. + not exists(DataFlow::Node dayOrMonthValSrc, DataFlow::Node dayOrMonthValSink, Assignment a | + CandidateConstantToDayOrMonthAssignmentFlow::flow(dayOrMonthValSrc, dayOrMonthValSink) and + a.getRValue() = dayOrMonthValSink.asExpr() and + dayOrMonthValSink.getBasicBlock() = sink.getNode().getBasicBlock() and + exists(IRBlock dayOrMonthValBB | + dayOrMonthValBB = dayOrMonthValSrc.getBasicBlock() and + // The source of the day is set in the same block as the source for the year + // or the source for the day is set in the same block as the sink for the year + dayOrMonthValBB in [ + src.getNode().getBasicBlock(), + sink.getNode().getBasicBlock() + ] + ) and + isSafeValueForAssignmentOfMonthOrDayValue(a, dayOrMonthValSrc.asExpr()) + ) +select sink, src, sink, + "Year field has been modified, but no appropriate check for LeapYear was found." diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql index af02a2814a2..8e2d6e9d10f 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql @@ -44,23 +44,9 @@ class SafeTimeGatheringFunction extends Function { } } -/** - * This list of APIs should check for the return value to detect problems during the conversion. - */ -class TimeConversionFunction extends Function { - TimeConversionFunction() { - this.getQualifiedName() = - [ - "FileTimeToSystemTime", "SystemTimeToFileTime", "SystemTimeToTzSpecificLocalTime", - "SystemTimeToTzSpecificLocalTimeEx", "TzSpecificLocalTimeToSystemTime", - "TzSpecificLocalTimeToSystemTimeEx", "RtlLocalTimeToSystemTime", - "RtlTimeToSecondsSince1970", "_mkgmtime" - ] - } -} - from FunctionCall fcall, TimeConversionFunction trf, Variable var where + not trf.isAutoLeapYearCorrecting() and fcall = trf.getACallToThisFunction() and fcall instanceof ExprInVoidContext and var.getUnderlyingType() instanceof UnpackedTimeType and diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql index b8788910332..efd136bcd2d 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql @@ -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; + 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() diff --git a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql index 763a142f1b9..1697ad31810 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql @@ -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; + 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() diff --git a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql index bb62cfc1755..63b56d470e2 100644 --- a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql +++ b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql @@ -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; + /** 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. diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 51a78ddd3fc..d8620439fe6 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.11 +version: 1.5.12-dev groups: - cpp - queries diff --git a/cpp/ql/test/library-tests/builtins/complex/builtin.expected b/cpp/ql/test/library-tests/builtins/complex/builtin.expected index c1b9b18a412..2537ff065ac 100644 --- a/cpp/ql/test/library-tests/builtins/complex/builtin.expected +++ b/cpp/ql/test/library-tests/builtins/complex/builtin.expected @@ -1,4 +1,4 @@ | complex.c:3:23:3:51 | __builtin_complex | file://:0:0:0:0 | _Complex double | complex.c:3:41:3:44 | real | file://:0:0:0:0 | double | complex.c:3:47:3:50 | imag | file://:0:0:0:0 | double | -| complex.c:4:23:4:57 | __builtin_complex | file://:0:0:0:0 | _Complex double | complex.c:4:41:4:47 | 2.71828000000000003 | file://:0:0:0:0 | double | complex.c:4:50:4:56 | 3.141589999999999883 | file://:0:0:0:0 | double | +| complex.c:4:23:4:57 | __builtin_complex | file://:0:0:0:0 | _Complex double | complex.c:4:41:4:47 | 2.71828 | file://:0:0:0:0 | double | complex.c:4:50:4:56 | 3.14159 | file://:0:0:0:0 | double | | complex.c:8:22:8:52 | __builtin_complex | file://:0:0:0:0 | _Complex float | complex.c:8:40:8:44 | realf | file://:0:0:0:0 | float | complex.c:8:47:8:51 | imagf | file://:0:0:0:0 | float | -| complex.c:9:22:9:52 | __builtin_complex | file://:0:0:0:0 | _Complex float | complex.c:9:40:9:44 | 1.230000019 | file://:0:0:0:0 | float | complex.c:9:47:9:51 | 4.559999943 | file://:0:0:0:0 | float | +| complex.c:9:22:9:52 | __builtin_complex | file://:0:0:0:0 | _Complex float | complex.c:9:40:9:44 | 1.23 | file://:0:0:0:0 | float | complex.c:9:47:9:51 | 4.56 | file://:0:0:0:0 | float | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 4d78c4016da..f6833ab4ff1 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -298,16 +298,16 @@ | test.c:182:8:182:34 | ! ... | ! ... == 1 when ! ... is true | | test.c:182:8:182:34 | ! ... | ... && ... != 0 when ! ... is false | | test.c:182:8:182:34 | ! ... | ... && ... == 0 when ! ... is true | -| test.c:182:10:182:20 | ... >= ... | 9.999999999999999547e-07 < foo+1 when ... >= ... is true | -| test.c:182:10:182:20 | ... >= ... | 9.999999999999999547e-07 >= foo+1 when ... >= ... is false | +| test.c:182:10:182:20 | ... >= ... | 1.0E-6 < foo+1 when ... >= ... is true | +| test.c:182:10:182:20 | ... >= ... | 1.0E-6 >= foo+1 when ... >= ... is false | | test.c:182:10:182:20 | ... >= ... | ... >= ... != 0 when ... >= ... is true | | test.c:182:10:182:20 | ... >= ... | ... >= ... != 1 when ... >= ... is false | | test.c:182:10:182:20 | ... >= ... | ... >= ... == 0 when ... >= ... is false | | test.c:182:10:182:20 | ... >= ... | ... >= ... == 1 when ... >= ... is true | -| test.c:182:10:182:20 | ... >= ... | foo < 9.999999999999999547e-07+0 when ... >= ... is false | -| test.c:182:10:182:20 | ... >= ... | foo >= 9.999999999999999547e-07+0 when ... >= ... is true | +| test.c:182:10:182:20 | ... >= ... | foo < 1.0E-6+0 when ... >= ... is false | +| test.c:182:10:182:20 | ... >= ... | foo >= 1.0E-6+0 when ... >= ... is true | | test.c:182:10:182:33 | ... && ... | 1.0 >= foo+1 when ... && ... is true | -| test.c:182:10:182:33 | ... && ... | 9.999999999999999547e-07 < foo+1 when ... && ... is true | +| test.c:182:10:182:33 | ... && ... | 1.0E-6 < foo+1 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | ! ... != 0 when ... && ... is false | | test.c:182:10:182:33 | ... && ... | ! ... != 1 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | ! ... == 0 when ... && ... is true | @@ -319,7 +319,7 @@ | test.c:182:10:182:33 | ... && ... | ... >= ... != 0 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | ... >= ... == 1 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | foo < 1.0+0 when ... && ... is true | -| test.c:182:10:182:33 | ... && ... | foo >= 9.999999999999999547e-07+0 when ... && ... is true | +| test.c:182:10:182:33 | ... && ... | foo >= 1.0E-6+0 when ... && ... is true | | test.c:182:25:182:33 | ... < ... | 1.0 < foo+1 when ... < ... is false | | test.c:182:25:182:33 | ... < ... | 1.0 >= foo+1 when ... < ... is true | | test.c:182:25:182:33 | ... < ... | ... < ... != 0 when ... < ... is true | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index 5a364e3deaa..cf99d2c20b8 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -169,12 +169,12 @@ binary | test.c:176:8:176:15 | ! ... | test.c:176:14:176:14 | b | < | test.c:176:10:176:10 | a | 1 | test.c:176:18:178:5 | { ... } | | test.c:176:10:176:14 | ... < ... | test.c:176:10:176:10 | a | >= | test.c:176:14:176:14 | b | 0 | test.c:176:18:178:5 | { ... } | | test.c:176:10:176:14 | ... < ... | test.c:176:14:176:14 | b | < | test.c:176:10:176:10 | a | 1 | test.c:176:18:178:5 | { ... } | -| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | test.c:181:25:182:20 | { ... } | -| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | test.c:182:25:182:33 | foo | -| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | -| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | test.c:182:25:182:33 | foo | -| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | test.c:181:25:182:20 | { ... } | -| test.c:182:10:182:33 | ... && ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 1.0E-6 | 0 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 1.0E-6 | 0 | test.c:182:25:182:33 | foo | +| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 1.0E-6 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 1.0E-6 | < | test.c:182:10:182:12 | foo | 1 | test.c:182:25:182:33 | foo | +| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 1.0E-6 | 0 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:33 | ... && ... | test.c:182:17:182:20 | 1.0E-6 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | | test.c:182:10:182:33 | ... && ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | test.c:181:25:182:20 | { ... } | | test.c:182:10:182:33 | ... && ... | test.c:182:31:182:33 | 1.0 | >= | test.c:182:25:182:27 | foo | 1 | test.c:181:25:182:20 | { ... } | | test.c:182:25:182:33 | ... < ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | test.c:181:25:182:20 | { ... } | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected index 6bb1f192e1d..231b0b22e32 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected @@ -513,519 +513,553 @@ | test.c:445:7:445:9 | rhs | 0 | | test.c:445:19:445:21 | rhs | 0 | | test.c:446:10:446:12 | rhs | 0 | -| test.c:450:7:450:7 | a | -2147483648 | -| test.c:451:9:451:9 | b | -2147483648 | -| test.c:452:7:452:7 | a | 17 | -| test.c:452:12:452:12 | b | 23 | -| test.c:454:9:454:9 | a | 17 | -| test.c:455:7:455:7 | b | -2147483648 | -| test.c:460:11:460:11 | a | -2147483648 | -| test.c:460:15:460:15 | b | -2147483648 | -| test.c:461:10:461:10 | a | -2147483648 | -| test.c:461:14:461:14 | b | -2147483648 | -| test.c:468:10:468:11 | ip | 0 | -| test.c:468:20:468:21 | ip | 0 | -| test.c:468:40:468:41 | ip | 0 | -| test.c:469:14:469:15 | ip | 1 | -| test.c:470:14:470:15 | ip | 0 | -| test.c:470:34:470:35 | ip | 0 | -| test.c:471:11:471:12 | ip | 0 | -| test.c:472:13:472:14 | ip | 0 | -| test.c:473:14:473:15 | ip | 0 | -| test.c:474:14:474:15 | ip | 0 | -| test.c:475:15:475:16 | ip | 0 | -| test.c:475:41:475:42 | ip | 0 | -| test.c:475:52:475:53 | ip | 0 | -| test.c:475:67:475:68 | ip | 0 | -| test.c:475:78:475:79 | ip | 0 | -| test.c:476:18:476:19 | ip | 0 | -| test.c:477:23:477:24 | ip | 0 | -| test.c:477:34:477:35 | ip | 0 | -| test.c:478:25:478:26 | ip | 0 | -| test.c:479:20:479:21 | ip | 0 | -| test.c:480:11:480:12 | ip | 0 | -| test.c:480:26:480:27 | ip | 0 | -| test.c:481:16:481:17 | ip | 0 | -| test.c:482:16:482:17 | ip | 0 | -| test.c:483:16:483:17 | ip | 0 | -| test.c:484:17:484:18 | ip | 0 | -| test.c:485:22:485:23 | ip | 0 | -| test.c:485:33:485:34 | ip | 0 | -| test.c:485:48:485:49 | ip | 0 | -| test.c:485:59:485:60 | ip | 0 | -| test.c:486:20:486:21 | ip | 0 | -| test.c:487:25:487:26 | ip | 0 | -| test.c:487:36:487:37 | ip | 0 | -| test.c:488:27:488:28 | ip | 0 | -| test.c:489:22:489:23 | ip | 0 | -| test.c:490:15:490:16 | ip | 0 | -| test.c:490:30:490:31 | ip | 0 | -| test.c:491:11:491:12 | ip | 0 | -| test.c:492:12:492:13 | ip | 0 | -| test.c:493:12:493:13 | ip | 0 | -| test.c:494:13:494:14 | ip | 0 | -| test.c:494:39:494:40 | ip | 0 | -| test.c:494:50:494:51 | ip | 0 | -| test.c:494:65:494:66 | ip | 0 | -| test.c:494:76:494:77 | ip | 0 | -| test.c:495:16:495:17 | ip | 0 | -| test.c:496:21:496:22 | ip | 0 | -| test.c:496:32:496:33 | ip | 0 | -| test.c:497:23:497:24 | ip | 0 | -| test.c:498:18:498:19 | ip | 0 | -| test.c:499:11:499:12 | ip | 0 | -| test.c:499:17:499:18 | ip | 0 | -| test.c:499:37:499:38 | ip | 0 | -| test.c:499:43:499:44 | ip | 0 | -| test.c:500:14:500:15 | ip | 0 | -| test.c:501:14:501:15 | ip | 0 | -| test.c:502:14:502:15 | ip | 0 | -| test.c:503:15:503:16 | ip | 0 | -| test.c:503:41:503:42 | ip | 0 | -| test.c:503:52:503:53 | ip | 0 | -| test.c:503:67:503:68 | ip | 0 | -| test.c:503:78:503:79 | ip | 0 | -| test.c:504:18:504:19 | ip | 0 | -| test.c:505:23:505:24 | ip | 0 | -| test.c:505:34:505:35 | ip | 0 | -| test.c:506:25:506:26 | ip | 0 | -| test.c:507:20:507:21 | ip | 0 | -| test.c:508:14:508:15 | ip | 0 | -| test.c:508:20:508:21 | ip | 0 | -| test.c:509:16:509:17 | ip | 0 | +| test.c:452:7:452:9 | rhs | 0 | +| test.c:452:19:452:21 | rhs | 0 | +| test.c:452:38:452:40 | rhs | 10 | +| test.c:453:7:453:9 | rhs | 0 | +| test.c:453:19:453:21 | rhs | 0 | +| test.c:453:38:453:40 | rhs | 11 | +| test.c:454:7:454:9 | rhs | 0 | +| test.c:454:19:454:21 | rhs | 0 | +| test.c:454:38:454:40 | rhs | 12 | +| test.c:455:7:455:9 | rhs | 0 | +| test.c:455:19:455:21 | rhs | 0 | +| test.c:455:38:455:40 | rhs | 13 | +| test.c:456:7:456:9 | rhs | 0 | +| test.c:456:19:456:21 | rhs | 0 | +| test.c:456:38:456:40 | rhs | 14 | +| test.c:457:7:457:9 | rhs | 0 | +| test.c:457:19:457:21 | rhs | 0 | +| test.c:457:38:457:40 | rhs | 15 | +| test.c:458:7:458:9 | rhs | 0 | +| test.c:458:19:458:21 | rhs | 0 | +| test.c:458:38:458:40 | rhs | 16 | +| test.c:459:7:459:9 | rhs | 0 | +| test.c:459:19:459:21 | rhs | 0 | +| test.c:459:38:459:40 | rhs | 17 | +| test.c:460:7:460:9 | rhs | 0 | +| test.c:460:19:460:21 | rhs | 0 | +| test.c:460:38:460:40 | rhs | 18 | +| test.c:461:7:461:9 | rhs | 0 | +| test.c:461:19:461:21 | rhs | 0 | +| test.c:461:38:461:40 | rhs | 19 | +| test.c:462:7:462:9 | rhs | 0 | +| test.c:462:19:462:21 | rhs | 0 | +| test.c:462:38:462:40 | rhs | 20 | +| test.c:463:10:463:12 | rhs | 0 | +| test.c:467:7:467:7 | a | -2147483648 | +| test.c:468:9:468:9 | b | -2147483648 | +| test.c:469:7:469:7 | a | 17 | +| test.c:469:12:469:12 | b | 23 | +| test.c:471:9:471:9 | a | 17 | +| test.c:472:7:472:7 | b | -2147483648 | +| test.c:477:11:477:11 | a | -2147483648 | +| test.c:477:15:477:15 | b | -2147483648 | +| test.c:478:10:478:10 | a | -2147483648 | +| test.c:478:14:478:14 | b | -2147483648 | +| test.c:485:10:485:11 | ip | 0 | +| test.c:485:20:485:21 | ip | 0 | +| test.c:485:40:485:41 | ip | 0 | +| test.c:486:14:486:15 | ip | 1 | +| test.c:487:14:487:15 | ip | 0 | +| test.c:487:34:487:35 | ip | 0 | +| test.c:488:11:488:12 | ip | 0 | +| test.c:489:13:489:14 | ip | 0 | +| test.c:490:14:490:15 | ip | 0 | +| test.c:491:14:491:15 | ip | 0 | +| test.c:492:15:492:16 | ip | 0 | +| test.c:492:41:492:42 | ip | 0 | +| test.c:492:52:492:53 | ip | 0 | +| test.c:492:67:492:68 | ip | 0 | +| test.c:492:78:492:79 | ip | 0 | +| test.c:493:18:493:19 | ip | 0 | +| test.c:494:23:494:24 | ip | 0 | +| test.c:494:34:494:35 | ip | 0 | +| test.c:495:25:495:26 | ip | 0 | +| test.c:496:20:496:21 | ip | 0 | +| test.c:497:11:497:12 | ip | 0 | +| test.c:497:26:497:27 | ip | 0 | +| test.c:498:16:498:17 | ip | 0 | +| test.c:499:16:499:17 | ip | 0 | +| test.c:500:16:500:17 | ip | 0 | +| test.c:501:17:501:18 | ip | 0 | +| test.c:502:22:502:23 | ip | 0 | +| test.c:502:33:502:34 | ip | 0 | +| test.c:502:48:502:49 | ip | 0 | +| test.c:502:59:502:60 | ip | 0 | +| test.c:503:20:503:21 | ip | 0 | +| test.c:504:25:504:26 | ip | 0 | +| test.c:504:36:504:37 | ip | 0 | +| test.c:505:27:505:28 | ip | 0 | +| test.c:506:22:506:23 | ip | 0 | +| test.c:507:15:507:16 | ip | 0 | +| test.c:507:30:507:31 | ip | 0 | +| test.c:508:11:508:12 | ip | 0 | +| test.c:509:12:509:13 | ip | 0 | | test.c:510:12:510:13 | ip | 0 | -| test.c:511:14:511:15 | ip | 0 | -| test.c:512:15:512:16 | ip | 0 | -| test.c:513:16:513:17 | ip | 0 | -| test.c:514:16:514:17 | ip | 0 | -| test.c:515:17:515:18 | ip | 0 | -| test.c:516:22:516:23 | ip | 0 | -| test.c:516:33:516:34 | ip | 0 | -| test.c:516:48:516:49 | ip | 0 | -| test.c:516:59:516:60 | ip | 0 | -| test.c:517:20:517:21 | ip | 0 | -| test.c:518:25:518:26 | ip | 0 | -| test.c:518:36:518:37 | ip | 0 | -| test.c:519:27:519:28 | ip | 0 | -| test.c:520:22:520:23 | ip | 0 | -| test.c:521:13:521:14 | ip | 0 | -| test.c:521:28:521:29 | ip | 0 | -| test.c:522:18:522:19 | ip | 0 | -| test.c:523:18:523:19 | ip | 0 | -| test.c:524:18:524:19 | ip | 0 | -| test.c:525:19:525:20 | ip | 0 | -| test.c:526:24:526:25 | ip | 0 | -| test.c:526:35:526:36 | ip | 0 | -| test.c:526:50:526:51 | ip | 0 | -| test.c:526:61:526:62 | ip | 0 | -| test.c:527:22:527:23 | ip | 0 | -| test.c:528:27:528:28 | ip | 0 | -| test.c:528:38:528:39 | ip | 0 | -| test.c:529:29:529:30 | ip | 0 | -| test.c:530:24:530:25 | ip | 0 | -| test.c:531:17:531:18 | ip | 0 | -| test.c:531:32:531:33 | ip | 0 | -| test.c:532:14:532:15 | ip | 0 | -| test.c:533:18:533:19 | ip | 0 | -| test.c:534:18:534:19 | ip | 0 | -| test.c:535:19:535:20 | ip | 0 | -| test.c:536:24:536:25 | ip | 0 | -| test.c:536:35:536:36 | ip | 0 | -| test.c:536:50:536:51 | ip | 0 | -| test.c:536:61:536:62 | ip | 0 | +| test.c:511:13:511:14 | ip | 0 | +| test.c:511:39:511:40 | ip | 0 | +| test.c:511:50:511:51 | ip | 0 | +| test.c:511:65:511:66 | ip | 0 | +| test.c:511:76:511:77 | ip | 0 | +| test.c:512:16:512:17 | ip | 0 | +| test.c:513:21:513:22 | ip | 0 | +| test.c:513:32:513:33 | ip | 0 | +| test.c:514:23:514:24 | ip | 0 | +| test.c:515:18:515:19 | ip | 0 | +| test.c:516:11:516:12 | ip | 0 | +| test.c:516:17:516:18 | ip | 0 | +| test.c:516:37:516:38 | ip | 0 | +| test.c:516:43:516:44 | ip | 0 | +| test.c:517:14:517:15 | ip | 0 | +| test.c:518:14:518:15 | ip | 0 | +| test.c:519:14:519:15 | ip | 0 | +| test.c:520:15:520:16 | ip | 0 | +| test.c:520:41:520:42 | ip | 0 | +| test.c:520:52:520:53 | ip | 0 | +| test.c:520:67:520:68 | ip | 0 | +| test.c:520:78:520:79 | ip | 0 | +| test.c:521:18:521:19 | ip | 0 | +| test.c:522:23:522:24 | ip | 0 | +| test.c:522:34:522:35 | ip | 0 | +| test.c:523:25:523:26 | ip | 0 | +| test.c:524:20:524:21 | ip | 0 | +| test.c:525:14:525:15 | ip | 0 | +| test.c:525:20:525:21 | ip | 0 | +| test.c:526:16:526:17 | ip | 0 | +| test.c:527:12:527:13 | ip | 0 | +| test.c:528:14:528:15 | ip | 0 | +| test.c:529:15:529:16 | ip | 0 | +| test.c:530:16:530:17 | ip | 0 | +| test.c:531:16:531:17 | ip | 0 | +| test.c:532:17:532:18 | ip | 0 | +| test.c:533:22:533:23 | ip | 0 | +| test.c:533:33:533:34 | ip | 0 | +| test.c:533:48:533:49 | ip | 0 | +| test.c:533:59:533:60 | ip | 0 | +| test.c:534:20:534:21 | ip | 0 | +| test.c:535:25:535:26 | ip | 0 | +| test.c:535:36:535:37 | ip | 0 | +| test.c:536:27:536:28 | ip | 0 | | test.c:537:22:537:23 | ip | 0 | -| test.c:538:27:538:28 | ip | 0 | -| test.c:538:38:538:39 | ip | 0 | -| test.c:539:29:539:30 | ip | 0 | -| test.c:540:24:540:25 | ip | 0 | -| test.c:541:17:541:18 | ip | 0 | -| test.c:541:23:541:24 | ip | 0 | -| test.c:541:43:541:44 | ip | 0 | -| test.c:541:49:541:50 | ip | 0 | -| test.c:542:16:542:17 | ip | 0 | -| test.c:543:16:543:17 | ip | 0 | -| test.c:544:16:544:17 | ip | 0 | -| test.c:545:17:545:18 | ip | 0 | -| test.c:546:22:546:23 | ip | 0 | -| test.c:546:33:546:34 | ip | 0 | -| test.c:546:48:546:49 | ip | 0 | -| test.c:546:59:546:60 | ip | 0 | -| test.c:547:20:547:21 | ip | 0 | -| test.c:548:25:548:26 | ip | 0 | -| test.c:548:36:548:37 | ip | 0 | -| test.c:549:27:549:28 | ip | 0 | -| test.c:550:22:550:23 | ip | 0 | -| test.c:551:16:551:17 | ip | 0 | -| test.c:551:22:551:23 | ip | 0 | -| test.c:552:18:552:19 | ip | 0 | -| test.c:553:14:553:15 | ip | 0 | -| test.c:554:14:554:15 | ip | 0 | -| test.c:554:24:554:25 | ip | 0 | -| test.c:554:44:554:45 | ip | 0 | -| test.c:555:16:555:17 | ip | 1 | -| test.c:556:16:556:17 | ip | 0 | -| test.c:556:36:556:37 | ip | 0 | -| test.c:557:14:557:15 | ip | 0 | -| test.c:558:19:558:20 | ip | 0 | -| test.c:559:20:559:21 | ip | 0 | -| test.c:560:20:560:21 | ip | 0 | -| test.c:561:21:561:22 | ip | 0 | -| test.c:562:26:562:27 | ip | 0 | -| test.c:562:37:562:38 | ip | 0 | -| test.c:562:52:562:53 | ip | 0 | -| test.c:562:63:562:64 | ip | 0 | -| test.c:563:24:563:25 | ip | 0 | -| test.c:564:29:564:30 | ip | 0 | -| test.c:564:40:564:41 | ip | 0 | -| test.c:565:31:565:32 | ip | 0 | -| test.c:566:26:566:27 | ip | 0 | -| test.c:567:17:567:18 | ip | 0 | -| test.c:567:32:567:33 | ip | 0 | +| test.c:538:13:538:14 | ip | 0 | +| test.c:538:28:538:29 | ip | 0 | +| test.c:539:18:539:19 | ip | 0 | +| test.c:540:18:540:19 | ip | 0 | +| test.c:541:18:541:19 | ip | 0 | +| test.c:542:19:542:20 | ip | 0 | +| test.c:543:24:543:25 | ip | 0 | +| test.c:543:35:543:36 | ip | 0 | +| test.c:543:50:543:51 | ip | 0 | +| test.c:543:61:543:62 | ip | 0 | +| test.c:544:22:544:23 | ip | 0 | +| test.c:545:27:545:28 | ip | 0 | +| test.c:545:38:545:39 | ip | 0 | +| test.c:546:29:546:30 | ip | 0 | +| test.c:547:24:547:25 | ip | 0 | +| test.c:548:17:548:18 | ip | 0 | +| test.c:548:32:548:33 | ip | 0 | +| test.c:549:14:549:15 | ip | 0 | +| test.c:550:18:550:19 | ip | 0 | +| test.c:551:18:551:19 | ip | 0 | +| test.c:552:19:552:20 | ip | 0 | +| test.c:553:24:553:25 | ip | 0 | +| test.c:553:35:553:36 | ip | 0 | +| test.c:553:50:553:51 | ip | 0 | +| test.c:553:61:553:62 | ip | 0 | +| test.c:554:22:554:23 | ip | 0 | +| test.c:555:27:555:28 | ip | 0 | +| test.c:555:38:555:39 | ip | 0 | +| test.c:556:29:556:30 | ip | 0 | +| test.c:557:24:557:25 | ip | 0 | +| test.c:558:17:558:18 | ip | 0 | +| test.c:558:23:558:24 | ip | 0 | +| test.c:558:43:558:44 | ip | 0 | +| test.c:558:49:558:50 | ip | 0 | +| test.c:559:16:559:17 | ip | 0 | +| test.c:560:16:560:17 | ip | 0 | +| test.c:561:16:561:17 | ip | 0 | +| test.c:562:17:562:18 | ip | 0 | +| test.c:563:22:563:23 | ip | 0 | +| test.c:563:33:563:34 | ip | 0 | +| test.c:563:48:563:49 | ip | 0 | +| test.c:563:59:563:60 | ip | 0 | +| test.c:564:20:564:21 | ip | 0 | +| test.c:565:25:565:26 | ip | 0 | +| test.c:565:36:565:37 | ip | 0 | +| test.c:566:27:566:28 | ip | 0 | +| test.c:567:22:567:23 | ip | 0 | +| test.c:568:16:568:17 | ip | 0 | | test.c:568:22:568:23 | ip | 0 | -| test.c:569:22:569:23 | ip | 0 | -| test.c:570:22:570:23 | ip | 0 | -| test.c:571:23:571:24 | ip | 0 | -| test.c:572:28:572:29 | ip | 0 | -| test.c:572:39:572:40 | ip | 0 | -| test.c:572:54:572:55 | ip | 0 | -| test.c:572:65:572:66 | ip | 0 | -| test.c:573:26:573:27 | ip | 0 | -| test.c:574:31:574:32 | ip | 0 | -| test.c:574:42:574:43 | ip | 0 | -| test.c:575:33:575:34 | ip | 0 | -| test.c:576:28:576:29 | ip | 0 | -| test.c:577:21:577:22 | ip | 0 | -| test.c:577:36:577:37 | ip | 0 | -| test.c:578:17:578:18 | ip | 0 | -| test.c:579:18:579:19 | ip | 0 | -| test.c:580:18:580:19 | ip | 0 | -| test.c:581:19:581:20 | ip | 0 | -| test.c:582:24:582:25 | ip | 0 | -| test.c:582:35:582:36 | ip | 0 | -| test.c:582:50:582:51 | ip | 0 | -| test.c:582:61:582:62 | ip | 0 | -| test.c:583:22:583:23 | ip | 0 | -| test.c:584:27:584:28 | ip | 0 | -| test.c:584:38:584:39 | ip | 0 | -| test.c:585:29:585:30 | ip | 0 | -| test.c:586:24:586:25 | ip | 0 | -| test.c:587:17:587:18 | ip | 0 | -| test.c:587:23:587:24 | ip | 0 | -| test.c:587:43:587:44 | ip | 0 | -| test.c:587:49:587:50 | ip | 0 | -| test.c:588:20:588:21 | ip | 0 | -| test.c:589:20:589:21 | ip | 0 | -| test.c:590:20:590:21 | ip | 0 | -| test.c:591:21:591:22 | ip | 0 | -| test.c:592:26:592:27 | ip | 0 | -| test.c:592:37:592:38 | ip | 0 | -| test.c:592:52:592:53 | ip | 0 | -| test.c:592:63:592:64 | ip | 0 | -| test.c:593:24:593:25 | ip | 0 | -| test.c:594:29:594:30 | ip | 0 | -| test.c:594:40:594:41 | ip | 0 | -| test.c:595:31:595:32 | ip | 0 | -| test.c:596:26:596:27 | ip | 0 | -| test.c:597:20:597:21 | ip | 0 | -| test.c:597:26:597:27 | ip | 0 | -| test.c:598:22:598:23 | ip | 0 | -| test.c:599:18:599:19 | ip | 0 | -| test.c:600:16:600:17 | ip | 0 | -| test.c:601:17:601:18 | ip | 0 | -| test.c:602:18:602:19 | ip | 0 | -| test.c:603:18:603:19 | ip | 0 | -| test.c:604:19:604:20 | ip | 0 | -| test.c:605:24:605:25 | ip | 0 | -| test.c:605:35:605:36 | ip | 0 | -| test.c:605:50:605:51 | ip | 0 | -| test.c:605:61:605:62 | ip | 0 | -| test.c:606:22:606:23 | ip | 0 | -| test.c:607:27:607:28 | ip | 0 | -| test.c:607:38:607:39 | ip | 0 | -| test.c:608:29:608:30 | ip | 0 | -| test.c:609:24:609:25 | ip | 0 | -| test.c:610:15:610:16 | ip | 0 | -| test.c:610:30:610:31 | ip | 0 | -| test.c:611:20:611:21 | ip | 0 | -| test.c:612:20:612:21 | ip | 0 | -| test.c:613:20:613:21 | ip | 0 | -| test.c:614:21:614:22 | ip | 0 | -| test.c:615:26:615:27 | ip | 0 | -| test.c:615:37:615:38 | ip | 0 | -| test.c:615:52:615:53 | ip | 0 | -| test.c:615:63:615:64 | ip | 0 | -| test.c:616:24:616:25 | ip | 0 | -| test.c:617:29:617:30 | ip | 0 | -| test.c:617:40:617:41 | ip | 0 | -| test.c:618:31:618:32 | ip | 0 | -| test.c:619:26:619:27 | ip | 0 | -| test.c:620:19:620:20 | ip | 0 | -| test.c:620:34:620:35 | ip | 0 | -| test.c:621:16:621:17 | ip | 0 | -| test.c:622:20:622:21 | ip | 0 | -| test.c:623:20:623:21 | ip | 0 | -| test.c:624:21:624:22 | ip | 0 | -| test.c:625:26:625:27 | ip | 0 | -| test.c:625:37:625:38 | ip | 0 | -| test.c:625:52:625:53 | ip | 0 | -| test.c:625:63:625:64 | ip | 0 | +| test.c:569:18:569:19 | ip | 0 | +| test.c:570:14:570:15 | ip | 0 | +| test.c:571:14:571:15 | ip | 0 | +| test.c:571:24:571:25 | ip | 0 | +| test.c:571:44:571:45 | ip | 0 | +| test.c:572:16:572:17 | ip | 1 | +| test.c:573:16:573:17 | ip | 0 | +| test.c:573:36:573:37 | ip | 0 | +| test.c:574:14:574:15 | ip | 0 | +| test.c:575:19:575:20 | ip | 0 | +| test.c:576:20:576:21 | ip | 0 | +| test.c:577:20:577:21 | ip | 0 | +| test.c:578:21:578:22 | ip | 0 | +| test.c:579:26:579:27 | ip | 0 | +| test.c:579:37:579:38 | ip | 0 | +| test.c:579:52:579:53 | ip | 0 | +| test.c:579:63:579:64 | ip | 0 | +| test.c:580:24:580:25 | ip | 0 | +| test.c:581:29:581:30 | ip | 0 | +| test.c:581:40:581:41 | ip | 0 | +| test.c:582:31:582:32 | ip | 0 | +| test.c:583:26:583:27 | ip | 0 | +| test.c:584:17:584:18 | ip | 0 | +| test.c:584:32:584:33 | ip | 0 | +| test.c:585:22:585:23 | ip | 0 | +| test.c:586:22:586:23 | ip | 0 | +| test.c:587:22:587:23 | ip | 0 | +| test.c:588:23:588:24 | ip | 0 | +| test.c:589:28:589:29 | ip | 0 | +| test.c:589:39:589:40 | ip | 0 | +| test.c:589:54:589:55 | ip | 0 | +| test.c:589:65:589:66 | ip | 0 | +| test.c:590:26:590:27 | ip | 0 | +| test.c:591:31:591:32 | ip | 0 | +| test.c:591:42:591:43 | ip | 0 | +| test.c:592:33:592:34 | ip | 0 | +| test.c:593:28:593:29 | ip | 0 | +| test.c:594:21:594:22 | ip | 0 | +| test.c:594:36:594:37 | ip | 0 | +| test.c:595:17:595:18 | ip | 0 | +| test.c:596:18:596:19 | ip | 0 | +| test.c:597:18:597:19 | ip | 0 | +| test.c:598:19:598:20 | ip | 0 | +| test.c:599:24:599:25 | ip | 0 | +| test.c:599:35:599:36 | ip | 0 | +| test.c:599:50:599:51 | ip | 0 | +| test.c:599:61:599:62 | ip | 0 | +| test.c:600:22:600:23 | ip | 0 | +| test.c:601:27:601:28 | ip | 0 | +| test.c:601:38:601:39 | ip | 0 | +| test.c:602:29:602:30 | ip | 0 | +| test.c:603:24:603:25 | ip | 0 | +| test.c:604:17:604:18 | ip | 0 | +| test.c:604:23:604:24 | ip | 0 | +| test.c:604:43:604:44 | ip | 0 | +| test.c:604:49:604:50 | ip | 0 | +| test.c:605:20:605:21 | ip | 0 | +| test.c:606:20:606:21 | ip | 0 | +| test.c:607:20:607:21 | ip | 0 | +| test.c:608:21:608:22 | ip | 0 | +| test.c:609:26:609:27 | ip | 0 | +| test.c:609:37:609:38 | ip | 0 | +| test.c:609:52:609:53 | ip | 0 | +| test.c:609:63:609:64 | ip | 0 | +| test.c:610:24:610:25 | ip | 0 | +| test.c:611:29:611:30 | ip | 0 | +| test.c:611:40:611:41 | ip | 0 | +| test.c:612:31:612:32 | ip | 0 | +| test.c:613:26:613:27 | ip | 0 | +| test.c:614:20:614:21 | ip | 0 | +| test.c:614:26:614:27 | ip | 0 | +| test.c:615:22:615:23 | ip | 0 | +| test.c:616:18:616:19 | ip | 0 | +| test.c:617:16:617:17 | ip | 0 | +| test.c:618:17:618:18 | ip | 0 | +| test.c:619:18:619:19 | ip | 0 | +| test.c:620:18:620:19 | ip | 0 | +| test.c:621:19:621:20 | ip | 0 | +| test.c:622:24:622:25 | ip | 0 | +| test.c:622:35:622:36 | ip | 0 | +| test.c:622:50:622:51 | ip | 0 | +| test.c:622:61:622:62 | ip | 0 | +| test.c:623:22:623:23 | ip | 0 | +| test.c:624:27:624:28 | ip | 0 | +| test.c:624:38:624:39 | ip | 0 | +| test.c:625:29:625:30 | ip | 0 | | test.c:626:24:626:25 | ip | 0 | -| test.c:627:29:627:30 | ip | 0 | -| test.c:627:40:627:41 | ip | 0 | -| test.c:628:31:628:32 | ip | 0 | -| test.c:629:26:629:27 | ip | 0 | -| test.c:630:19:630:20 | ip | 0 | -| test.c:630:25:630:26 | ip | 0 | -| test.c:630:45:630:46 | ip | 0 | -| test.c:630:51:630:52 | ip | 0 | -| test.c:631:18:631:19 | ip | 0 | -| test.c:632:18:632:19 | ip | 0 | -| test.c:633:18:633:19 | ip | 0 | -| test.c:634:19:634:20 | ip | 0 | -| test.c:635:24:635:25 | ip | 0 | -| test.c:635:35:635:36 | ip | 0 | -| test.c:635:50:635:51 | ip | 0 | -| test.c:635:61:635:62 | ip | 0 | -| test.c:636:22:636:23 | ip | 0 | -| test.c:637:27:637:28 | ip | 0 | -| test.c:637:38:637:39 | ip | 0 | -| test.c:638:29:638:30 | ip | 0 | -| test.c:639:24:639:25 | ip | 0 | -| test.c:640:18:640:19 | ip | 0 | -| test.c:640:24:640:25 | ip | 0 | -| test.c:641:20:641:21 | ip | 0 | -| test.c:642:16:642:17 | ip | 0 | -| test.c:643:10:643:23 | special_number | 0 | -| test.c:651:7:651:8 | c1 | -2147483648 | -| test.c:651:13:651:13 | x | 0 | -| test.c:652:7:652:8 | c2 | -2147483648 | -| test.c:652:13:652:13 | x | 0 | -| test.c:653:7:653:8 | c3 | -2147483648 | -| test.c:653:13:653:13 | x | 0 | -| test.c:654:7:654:8 | c4 | -2147483648 | -| test.c:654:13:654:13 | x | 0 | -| test.c:655:7:655:8 | c5 | -2147483648 | -| test.c:655:13:655:13 | x | 0 | -| test.c:656:7:656:8 | c1 | -2147483648 | -| test.c:656:13:656:14 | c2 | -2147483648 | -| test.c:656:19:656:19 | x | 0 | -| test.c:657:7:657:8 | c1 | -2147483648 | -| test.c:657:13:657:14 | c3 | -2147483648 | -| test.c:657:19:657:19 | x | 0 | -| test.c:658:7:658:8 | c1 | -2147483648 | -| test.c:658:13:658:14 | c4 | -2147483648 | -| test.c:658:19:658:19 | x | 0 | -| test.c:659:7:659:8 | c1 | -2147483648 | -| test.c:659:13:659:14 | c5 | -2147483648 | -| test.c:659:19:659:19 | x | 0 | -| test.c:660:7:660:8 | c2 | -2147483648 | -| test.c:660:13:660:14 | c3 | -2147483648 | -| test.c:660:19:660:19 | x | 0 | -| test.c:662:11:662:11 | x | 0 | -| test.c:662:15:662:15 | x | 0 | -| test.c:662:19:662:19 | x | 0 | -| test.c:662:23:662:23 | x | 0 | -| test.c:662:27:662:27 | x | 0 | -| test.c:662:31:662:31 | x | 0 | -| test.c:662:35:662:35 | x | 0 | -| test.c:662:39:662:39 | x | 0 | -| test.c:662:43:662:43 | x | 0 | -| test.c:662:47:662:47 | x | 0 | -| test.c:662:51:662:51 | x | 0 | -| test.c:662:55:662:55 | x | 0 | -| test.c:663:10:663:10 | y | -2147483648 | -| test.c:668:20:668:20 | x | 0 | -| test.c:668:30:668:30 | x | 0 | -| test.c:671:3:671:4 | y1 | 0 | -| test.c:671:11:671:11 | y | 0 | -| test.c:671:14:671:14 | y | 1 | -| test.c:672:3:672:4 | y2 | 0 | -| test.c:672:9:672:9 | y | 1 | -| test.c:672:14:672:14 | y | 2 | -| test.c:672:22:672:22 | y | 5 | -| test.c:673:10:673:11 | y1 | 1 | -| test.c:673:15:673:16 | y2 | 5 | -| test.c:681:3:681:3 | i | -2147483648 | -| test.c:682:7:682:7 | i | 10 | -| test.c:684:3:684:3 | i | -2147483648 | -| test.c:685:3:685:3 | i | 10 | -| test.c:686:7:686:7 | i | 20 | -| test.c:688:3:688:3 | i | -2147483648 | -| test.c:689:3:689:3 | i | 40 | -| test.c:690:7:690:7 | i | 30 | -| test.c:692:3:692:3 | i | -2147483648 | -| test.c:692:7:692:7 | j | -2147483648 | -| test.c:693:7:693:7 | i | 40 | -| test.c:695:3:695:3 | i | -2147483648 | -| test.c:695:8:695:8 | j | 40 | -| test.c:696:7:696:7 | i | 50 | +| test.c:627:15:627:16 | ip | 0 | +| test.c:627:30:627:31 | ip | 0 | +| test.c:628:20:628:21 | ip | 0 | +| test.c:629:20:629:21 | ip | 0 | +| test.c:630:20:630:21 | ip | 0 | +| test.c:631:21:631:22 | ip | 0 | +| test.c:632:26:632:27 | ip | 0 | +| test.c:632:37:632:38 | ip | 0 | +| test.c:632:52:632:53 | ip | 0 | +| test.c:632:63:632:64 | ip | 0 | +| test.c:633:24:633:25 | ip | 0 | +| test.c:634:29:634:30 | ip | 0 | +| test.c:634:40:634:41 | ip | 0 | +| test.c:635:31:635:32 | ip | 0 | +| test.c:636:26:636:27 | ip | 0 | +| test.c:637:19:637:20 | ip | 0 | +| test.c:637:34:637:35 | ip | 0 | +| test.c:638:16:638:17 | ip | 0 | +| test.c:639:20:639:21 | ip | 0 | +| test.c:640:20:640:21 | ip | 0 | +| test.c:641:21:641:22 | ip | 0 | +| test.c:642:26:642:27 | ip | 0 | +| test.c:642:37:642:38 | ip | 0 | +| test.c:642:52:642:53 | ip | 0 | +| test.c:642:63:642:64 | ip | 0 | +| test.c:643:24:643:25 | ip | 0 | +| test.c:644:29:644:30 | ip | 0 | +| test.c:644:40:644:41 | ip | 0 | +| test.c:645:31:645:32 | ip | 0 | +| test.c:646:26:646:27 | ip | 0 | +| test.c:647:19:647:20 | ip | 0 | +| test.c:647:25:647:26 | ip | 0 | +| test.c:647:45:647:46 | ip | 0 | +| test.c:647:51:647:52 | ip | 0 | +| test.c:648:18:648:19 | ip | 0 | +| test.c:649:18:649:19 | ip | 0 | +| test.c:650:18:650:19 | ip | 0 | +| test.c:651:19:651:20 | ip | 0 | +| test.c:652:24:652:25 | ip | 0 | +| test.c:652:35:652:36 | ip | 0 | +| test.c:652:50:652:51 | ip | 0 | +| test.c:652:61:652:62 | ip | 0 | +| test.c:653:22:653:23 | ip | 0 | +| test.c:654:27:654:28 | ip | 0 | +| test.c:654:38:654:39 | ip | 0 | +| test.c:655:29:655:30 | ip | 0 | +| test.c:656:24:656:25 | ip | 0 | +| test.c:657:18:657:19 | ip | 0 | +| test.c:657:24:657:25 | ip | 0 | +| test.c:658:20:658:21 | ip | 0 | +| test.c:659:16:659:17 | ip | 0 | +| test.c:660:10:660:23 | special_number | 0 | +| test.c:668:7:668:8 | c1 | -2147483648 | +| test.c:668:13:668:13 | x | 0 | +| test.c:669:7:669:8 | c2 | -2147483648 | +| test.c:669:13:669:13 | x | 0 | +| test.c:670:7:670:8 | c3 | -2147483648 | +| test.c:670:13:670:13 | x | 0 | +| test.c:671:7:671:8 | c4 | -2147483648 | +| test.c:671:13:671:13 | x | 0 | +| test.c:672:7:672:8 | c5 | -2147483648 | +| test.c:672:13:672:13 | x | 0 | +| test.c:673:7:673:8 | c1 | -2147483648 | +| test.c:673:13:673:14 | c2 | -2147483648 | +| test.c:673:19:673:19 | x | 0 | +| test.c:674:7:674:8 | c1 | -2147483648 | +| test.c:674:13:674:14 | c3 | -2147483648 | +| test.c:674:19:674:19 | x | 0 | +| test.c:675:7:675:8 | c1 | -2147483648 | +| test.c:675:13:675:14 | c4 | -2147483648 | +| test.c:675:19:675:19 | x | 0 | +| test.c:676:7:676:8 | c1 | -2147483648 | +| test.c:676:13:676:14 | c5 | -2147483648 | +| test.c:676:19:676:19 | x | 0 | +| test.c:677:7:677:8 | c2 | -2147483648 | +| test.c:677:13:677:14 | c3 | -2147483648 | +| test.c:677:19:677:19 | x | 0 | +| test.c:679:11:679:11 | x | 0 | +| test.c:679:15:679:15 | x | 0 | +| test.c:679:19:679:19 | x | 0 | +| test.c:679:23:679:23 | x | 0 | +| test.c:679:27:679:27 | x | 0 | +| test.c:679:31:679:31 | x | 0 | +| test.c:679:35:679:35 | x | 0 | +| test.c:679:39:679:39 | x | 0 | +| test.c:679:43:679:43 | x | 0 | +| test.c:679:47:679:47 | x | 0 | +| test.c:679:51:679:51 | x | 0 | +| test.c:679:55:679:55 | x | 0 | +| test.c:680:10:680:10 | y | -2147483648 | +| test.c:685:20:685:20 | x | 0 | +| test.c:685:30:685:30 | x | 0 | +| test.c:688:3:688:4 | y1 | 0 | +| test.c:688:11:688:11 | y | 0 | +| test.c:688:14:688:14 | y | 1 | +| test.c:689:3:689:4 | y2 | 0 | +| test.c:689:9:689:9 | y | 1 | +| test.c:689:14:689:14 | y | 2 | +| test.c:689:22:689:22 | y | 5 | +| test.c:690:10:690:11 | y1 | 1 | +| test.c:690:15:690:16 | y2 | 5 | | test.c:698:3:698:3 | i | -2147483648 | -| test.c:698:13:698:13 | j | 50 | -| test.c:699:7:699:7 | i | 60 | -| test.c:706:12:706:12 | a | 0 | -| test.c:706:17:706:17 | a | 3 | -| test.c:706:33:706:33 | b | 0 | -| test.c:706:38:706:38 | b | 5 | -| test.c:707:13:707:13 | a | 3 | -| test.c:707:15:707:15 | b | 5 | -| test.c:708:5:708:9 | total | 0 | -| test.c:708:14:708:14 | r | 15 | -| test.c:710:12:710:12 | a | 0 | -| test.c:710:17:710:17 | a | 3 | -| test.c:710:33:710:33 | b | 0 | -| test.c:710:38:710:38 | b | 0 | -| test.c:711:13:711:13 | a | 3 | -| test.c:711:15:711:15 | b | 0 | -| test.c:712:5:712:9 | total | 0 | -| test.c:712:14:712:14 | r | 0 | -| test.c:714:12:714:12 | a | 0 | -| test.c:714:17:714:17 | a | 3 | -| test.c:714:34:714:34 | b | 0 | -| test.c:714:39:714:39 | b | 13 | -| test.c:715:13:715:13 | a | 3 | -| test.c:715:15:715:15 | b | 13 | -| test.c:716:5:716:9 | total | 0 | -| test.c:716:14:716:14 | r | 39 | -| test.c:719:10:719:14 | total | 0 | -| test.c:725:12:725:12 | b | 0 | -| test.c:725:17:725:17 | b | 5 | -| test.c:726:16:726:16 | b | 5 | -| test.c:727:5:727:9 | total | 0 | -| test.c:727:14:727:14 | r | 55 | -| test.c:729:12:729:12 | b | 0 | -| test.c:729:17:729:17 | b | 0 | -| test.c:730:16:730:16 | b | 0 | -| test.c:731:5:731:9 | total | 0 | -| test.c:731:14:731:14 | r | 0 | -| test.c:733:13:733:13 | b | 0 | -| test.c:733:18:733:18 | b | 13 | -| test.c:734:16:734:16 | b | 13 | -| test.c:735:5:735:9 | total | 0 | -| test.c:735:14:735:14 | r | 143 | -| test.c:738:10:738:14 | total | 0 | -| test.c:743:3:743:3 | x | 0 | -| test.c:743:7:743:7 | y | 0 | -| test.c:744:3:744:4 | xy | 0 | -| test.c:744:8:744:8 | x | 1000000003 | -| test.c:744:12:744:12 | y | 1000000003 | -| test.c:745:10:745:11 | xy | 1000000006000000000 | -| test.c:750:3:750:3 | x | 0 | -| test.c:751:3:751:3 | y | 0 | -| test.c:752:3:752:4 | xy | 0 | -| test.c:752:8:752:8 | x | 274177 | -| test.c:752:12:752:12 | y | 67280421310721 | -| test.c:753:10:753:11 | xy | 18446744073709551616 | -| test.c:757:7:757:8 | ui | 0 | -| test.c:758:43:758:44 | ui | 10 | -| test.c:758:48:758:49 | ui | 10 | -| test.c:759:12:759:17 | result | 100 | -| test.c:761:7:761:8 | ul | 0 | -| test.c:762:28:762:29 | ul | 10 | -| test.c:762:33:762:34 | ul | 10 | -| test.c:763:12:763:17 | result | 0 | -| test.c:769:7:769:8 | ui | 0 | -| test.c:769:19:769:20 | ui | 0 | -| test.c:770:5:770:6 | ui | 2 | -| test.c:770:11:770:12 | ui | 2 | -| test.c:771:12:771:13 | ui | 4 | -| test.c:775:3:775:9 | uiconst | 10 | -| test.c:778:3:778:9 | ulconst | 10 | -| test.c:779:10:779:16 | uiconst | 40 | -| test.c:779:20:779:26 | ulconst | 40 | -| test.c:783:7:783:7 | i | -2147483648 | -| test.c:783:18:783:18 | i | -1 | -| test.c:784:5:784:5 | i | -2147483648 | -| test.c:784:13:784:13 | i | -1 | -| test.c:785:9:785:9 | i | -5 | -| test.c:787:5:787:5 | i | -2147483648 | -| test.c:787:9:787:9 | i | -5 | -| test.c:788:9:788:9 | i | -30 | -| test.c:790:5:790:5 | i | -30 | -| test.c:791:9:791:9 | i | -210 | -| test.c:793:5:793:5 | i | -210 | -| test.c:794:9:794:9 | i | -1155 | -| test.c:796:7:796:7 | i | -2147483648 | -| test.c:797:5:797:5 | i | -2147483648 | -| test.c:797:9:797:9 | i | -1 | -| test.c:798:9:798:9 | i | 1 | -| test.c:800:3:800:3 | i | -2147483648 | +| test.c:699:7:699:7 | i | 10 | +| test.c:701:3:701:3 | i | -2147483648 | +| test.c:702:3:702:3 | i | 10 | +| test.c:703:7:703:7 | i | 20 | +| test.c:705:3:705:3 | i | -2147483648 | +| test.c:706:3:706:3 | i | 40 | +| test.c:707:7:707:7 | i | 30 | +| test.c:709:3:709:3 | i | -2147483648 | +| test.c:709:7:709:7 | j | -2147483648 | +| test.c:710:7:710:7 | i | 40 | +| test.c:712:3:712:3 | i | -2147483648 | +| test.c:712:8:712:8 | j | 40 | +| test.c:713:7:713:7 | i | 50 | +| test.c:715:3:715:3 | i | -2147483648 | +| test.c:715:13:715:13 | j | 50 | +| test.c:716:7:716:7 | i | 60 | +| test.c:723:12:723:12 | a | 0 | +| test.c:723:17:723:17 | a | 3 | +| test.c:723:33:723:33 | b | 0 | +| test.c:723:38:723:38 | b | 5 | +| test.c:724:13:724:13 | a | 3 | +| test.c:724:15:724:15 | b | 5 | +| test.c:725:5:725:9 | total | 0 | +| test.c:725:14:725:14 | r | 15 | +| test.c:727:12:727:12 | a | 0 | +| test.c:727:17:727:17 | a | 3 | +| test.c:727:33:727:33 | b | 0 | +| test.c:727:38:727:38 | b | 0 | +| test.c:728:13:728:13 | a | 3 | +| test.c:728:15:728:15 | b | 0 | +| test.c:729:5:729:9 | total | 0 | +| test.c:729:14:729:14 | r | 0 | +| test.c:731:12:731:12 | a | 0 | +| test.c:731:17:731:17 | a | 3 | +| test.c:731:34:731:34 | b | 0 | +| test.c:731:39:731:39 | b | 13 | +| test.c:732:13:732:13 | a | 3 | +| test.c:732:15:732:15 | b | 13 | +| test.c:733:5:733:9 | total | 0 | +| test.c:733:14:733:14 | r | 39 | +| test.c:736:10:736:14 | total | 0 | +| test.c:742:12:742:12 | b | 0 | +| test.c:742:17:742:17 | b | 5 | +| test.c:743:16:743:16 | b | 5 | +| test.c:744:5:744:9 | total | 0 | +| test.c:744:14:744:14 | r | 55 | +| test.c:746:12:746:12 | b | 0 | +| test.c:746:17:746:17 | b | 0 | +| test.c:747:16:747:16 | b | 0 | +| test.c:748:5:748:9 | total | 0 | +| test.c:748:14:748:14 | r | 0 | +| test.c:750:13:750:13 | b | 0 | +| test.c:750:18:750:18 | b | 13 | +| test.c:751:16:751:16 | b | 13 | +| test.c:752:5:752:9 | total | 0 | +| test.c:752:14:752:14 | r | 143 | +| test.c:755:10:755:14 | total | 0 | +| test.c:760:3:760:3 | x | 0 | +| test.c:760:7:760:7 | y | 0 | +| test.c:761:3:761:4 | xy | 0 | +| test.c:761:8:761:8 | x | 1000000003 | +| test.c:761:12:761:12 | y | 1000000003 | +| test.c:762:10:762:11 | xy | 1000000006000000000 | +| test.c:767:3:767:3 | x | 0 | +| test.c:768:3:768:3 | y | 0 | +| test.c:769:3:769:4 | xy | 0 | +| test.c:769:8:769:8 | x | 274177 | +| test.c:769:12:769:12 | y | 67280421310721 | +| test.c:770:10:770:11 | xy | 18446744073709551616 | +| test.c:774:7:774:8 | ui | 0 | +| test.c:775:43:775:44 | ui | 10 | +| test.c:775:48:775:49 | ui | 10 | +| test.c:776:12:776:17 | result | 100 | +| test.c:778:7:778:8 | ul | 0 | +| test.c:779:28:779:29 | ul | 10 | +| test.c:779:33:779:34 | ul | 10 | +| test.c:780:12:780:17 | result | 0 | +| test.c:786:7:786:8 | ui | 0 | +| test.c:786:19:786:20 | ui | 0 | +| test.c:787:5:787:6 | ui | 2 | +| test.c:787:11:787:12 | ui | 2 | +| test.c:788:12:788:13 | ui | 4 | +| test.c:792:3:792:9 | uiconst | 10 | +| test.c:795:3:795:9 | ulconst | 10 | +| test.c:796:10:796:16 | uiconst | 40 | +| test.c:796:20:796:26 | ulconst | 40 | | test.c:800:7:800:7 | i | -2147483648 | -| test.c:801:10:801:10 | i | -2147483648 | -| test.c:804:3:804:3 | i | -2147483648 | -| test.c:804:10:804:11 | sc | 1 | -| test.c:806:7:806:7 | i | -128 | -| test.c:813:7:813:7 | n | 0 | -| test.c:815:7:815:7 | n | 0 | -| test.c:816:9:816:9 | n | 1 | -| test.c:819:7:819:7 | n | 0 | -| test.c:820:9:820:9 | n | 1 | -| test.c:822:9:822:9 | n | 0 | -| test.c:825:8:825:8 | n | 0 | -| test.c:826:9:826:9 | n | 0 | -| test.c:828:9:828:9 | n | 1 | -| test.c:831:10:831:10 | n | 0 | -| test.c:832:5:832:5 | n | 1 | -| test.c:835:7:835:7 | n | 0 | -| test.c:839:7:839:7 | n | -32768 | -| test.c:842:7:842:7 | n | 0 | +| test.c:800:18:800:18 | i | -1 | +| test.c:801:5:801:5 | i | -2147483648 | +| test.c:801:13:801:13 | i | -1 | +| test.c:802:9:802:9 | i | -5 | +| test.c:804:5:804:5 | i | -2147483648 | +| test.c:804:9:804:9 | i | -5 | +| test.c:805:9:805:9 | i | -30 | +| test.c:807:5:807:5 | i | -30 | +| test.c:808:9:808:9 | i | -210 | +| test.c:810:5:810:5 | i | -210 | +| test.c:811:9:811:9 | i | -1155 | +| test.c:813:7:813:7 | i | -2147483648 | +| test.c:814:5:814:5 | i | -2147483648 | +| test.c:814:9:814:9 | i | -1 | +| test.c:815:9:815:9 | i | 1 | +| test.c:817:3:817:3 | i | -2147483648 | +| test.c:817:7:817:7 | i | -2147483648 | +| test.c:818:10:818:10 | i | -2147483648 | +| test.c:821:3:821:3 | i | -2147483648 | +| test.c:821:10:821:11 | sc | 1 | +| test.c:823:7:823:7 | i | -128 | +| test.c:830:7:830:7 | n | 0 | +| test.c:832:7:832:7 | n | 0 | +| test.c:833:9:833:9 | n | 1 | +| test.c:836:7:836:7 | n | 0 | +| test.c:837:9:837:9 | n | 1 | +| test.c:839:9:839:9 | n | 0 | +| test.c:842:8:842:8 | n | 0 | | test.c:843:9:843:9 | n | 0 | | test.c:845:9:845:9 | n | 1 | -| test.c:848:7:848:7 | n | 0 | -| test.c:849:9:849:9 | n | 1 | -| test.c:851:9:851:9 | n | 0 | -| test.c:854:10:854:10 | n | 0 | -| test.c:855:5:855:5 | n | 1 | -| test.c:858:7:858:7 | n | 0 | -| test.c:862:7:862:7 | n | -32768 | -| test.c:863:9:863:9 | n | -32768 | -| test.c:864:11:864:11 | n | 0 | -| test.c:868:7:868:7 | n | -32768 | -| test.c:869:13:869:13 | n | 5 | -| test.c:872:9:872:9 | n | 6 | -| test.c:875:7:875:7 | n | -32768 | -| test.c:875:22:875:22 | n | -32767 | -| test.c:876:9:876:9 | n | -32766 | +| test.c:848:10:848:10 | n | 0 | +| test.c:849:5:849:5 | n | 1 | +| test.c:852:7:852:7 | n | 0 | +| test.c:856:7:856:7 | n | -32768 | +| test.c:859:7:859:7 | n | 0 | +| test.c:860:9:860:9 | n | 0 | +| test.c:862:9:862:9 | n | 1 | +| test.c:865:7:865:7 | n | 0 | +| test.c:866:9:866:9 | n | 1 | +| test.c:868:9:868:9 | n | 0 | +| test.c:871:10:871:10 | n | 0 | +| test.c:872:5:872:5 | n | 1 | +| test.c:875:7:875:7 | n | 0 | | test.c:879:7:879:7 | n | -32768 | -| test.c:880:5:880:5 | n | 0 | -| test.c:880:10:880:10 | n | 1 | -| test.c:880:14:880:14 | n | 0 | -| test.c:881:6:881:6 | n | 0 | -| test.c:881:10:881:10 | n | 0 | -| test.c:881:14:881:14 | n | 1 | -| test.c:892:7:892:8 | ss | -32768 | -| test.c:893:9:893:10 | ss | 0 | -| test.c:896:7:896:8 | ss | -32768 | -| test.c:897:9:897:10 | ss | -32768 | -| test.c:900:14:900:15 | us | 0 | -| test.c:901:9:901:10 | us | 0 | -| test.c:904:14:904:15 | us | 0 | -| test.c:905:9:905:10 | us | 0 | -| test.c:908:7:908:8 | ss | -32768 | -| test.c:909:9:909:10 | ss | -32768 | -| test.c:912:7:912:8 | ss | -32768 | -| test.c:913:9:913:10 | ss | -1 | -| test.c:919:8:919:8 | s | -2147483648 | -| test.c:919:15:919:15 | s | 0 | -| test.c:919:23:919:23 | s | 0 | -| test.c:920:18:920:18 | s | 0 | -| test.c:920:22:920:22 | s | 0 | -| test.c:921:9:921:14 | result | 0 | -| test.c:927:7:927:7 | i | 0 | -| test.c:928:9:928:9 | i | -2147483648 | -| test.c:932:7:932:7 | u | 0 | -| test.c:933:9:933:9 | u | 0 | -| test.c:938:12:938:12 | s | -2147483648 | -| test.c:939:7:939:8 | s2 | -4 | -| test.c:944:7:944:7 | x | -2147483648 | -| test.c:945:9:945:9 | y | -2147483648 | -| test.c:949:7:949:7 | y | -2147483648 | -| test.c:958:7:958:7 | x | -2147483648 | -| test.c:963:7:963:7 | x | -2147483648 | -| test.c:970:8:970:8 | x | 2147483647 | -| 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.c:880:9:880:9 | n | -32768 | +| test.c:881:11:881:11 | n | 0 | +| test.c:885:7:885:7 | n | -32768 | +| test.c:886:13:886:13 | n | 5 | +| test.c:889:9:889:9 | n | 6 | +| test.c:892:7:892:7 | n | -32768 | +| test.c:892:22:892:22 | n | -32767 | +| test.c:893:9:893:9 | n | -32766 | +| test.c:896:7:896:7 | n | -32768 | +| test.c:897:5:897:5 | n | 0 | +| test.c:897:10:897:10 | n | 1 | +| test.c:897:14:897:14 | n | 0 | +| test.c:898:6:898:6 | n | 0 | +| test.c:898:10:898:10 | n | 0 | +| test.c:898:14:898:14 | n | 1 | +| test.c:909:7:909:8 | ss | -32768 | +| test.c:910:9:910:10 | ss | 0 | +| test.c:913:7:913:8 | ss | -32768 | +| test.c:914:9:914:10 | ss | -32768 | +| test.c:917:14:917:15 | us | 0 | +| test.c:918:9:918:10 | us | 0 | +| test.c:921:14:921:15 | us | 0 | +| test.c:922:9:922:10 | us | 0 | +| test.c:925:7:925:8 | ss | -32768 | +| test.c:926:9:926:10 | ss | -32768 | +| test.c:929:7:929:8 | ss | -32768 | +| test.c:930:9:930:10 | ss | -1 | +| test.c:936:8:936:8 | s | -2147483648 | +| test.c:936:15:936:15 | s | 0 | +| test.c:936:23:936:23 | s | 0 | +| test.c:937:18:937:18 | s | 0 | +| test.c:937:22:937:22 | s | 0 | +| test.c:938:9:938:14 | result | 0 | +| test.c:944:7:944:7 | i | 0 | +| test.c:945:9:945:9 | i | -2147483648 | +| test.c:949:7:949:7 | u | 0 | +| test.c:950:9:950:9 | u | 0 | +| test.c:955:12:955:12 | s | -2147483648 | +| test.c:956:7:956:8 | s2 | -4 | +| test.c:961:7:961:7 | x | -2147483648 | +| test.c:962:9:962:9 | y | -2147483648 | +| test.c:966:7:966:7 | y | -2147483648 | +| test.c:975:7:975:7 | x | -2147483648 | +| test.c:980:7:980:7 | x | -2147483648 | +| test.c:987:8:987:8 | x | 2147483647 | +| test.c:987:12:987:12 | y | 256 | +| test.c:988:9:988:9 | x | 2147483647 | +| test.c:989:9:989:9 | y | 256 | +| test.c:1002:7:1002: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 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected index b46aebbbf64..7d441d6293a 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected @@ -1,5121 +1,5233 @@ testFailures estimateNrOfBounds -| inline_assembly.c:9:20:9:20 | 0 | 1.0 | -| inline_assembly.c:9:20:9:20 | (unsigned int)... | 1.0 | -| inline_assembly.c:10:3:10:3 | y | 1.0 | -| inline_assembly.c:10:3:10:7 | ... = ... | 1.0 | -| inline_assembly.c:10:7:10:7 | 1 | 1.0 | -| inline_assembly.c:10:7:10:7 | (unsigned int)... | 1.0 | -| inline_assembly.c:12:3:12:8 | call to printf | 1.0 | -| inline_assembly.c:12:29:12:29 | x | 1.0 | -| inline_assembly.c:12:32:12:32 | y | 1.0 | -| inline_assembly.c:16:25:16:25 | x | 1.0 | -| inline_assembly.c:16:35:16:35 | y | 1.0 | -| inline_assembly.c:21:3:21:8 | call to printf | 1.0 | -| inline_assembly.c:21:29:21:29 | x | 1.0 | -| inline_assembly.c:21:32:21:32 | y | 1.0 | -| inline_assembly.c:23:10:23:10 | 0 | 1.0 | -| minmax.c:16:9:16:10 | 1 | 1.0 | -| minmax.c:16:16:16:17 | 2 | 1.0 | -| minmax.c:16:23:16:24 | 3 | 1.0 | -| minmax.c:18:2:18:7 | call to printf | 1.0 | -| minmax.c:18:37:18:37 | x | 1.0 | -| minmax.c:18:40:18:40 | y | 1.0 | -| minmax.c:18:43:18:43 | z | 1.0 | -| minmax.c:20:2:20:2 | z | 1.0 | -| minmax.c:20:2:24:3 | ... = ... | 2.0 | -| minmax.c:20:6:24:3 | (statement expression) | 2.0 | -| minmax.c:21:10:21:11 | 0 | 1.0 | -| minmax.c:22:7:22:14 | ... != ... | 1.0 | -| minmax.c:22:8:22:8 | x | 1.0 | -| minmax.c:22:14:22:14 | y | 1.0 | -| minmax.c:22:18:22:18 | t | 1.0 | -| minmax.c:22:18:22:22 | ... = ... | 1.0 | -| minmax.c:22:22:22:22 | x | 1.0 | -| minmax.c:23:3:23:3 | t | 2.0 | -| minmax.c:26:2:26:7 | call to printf | 1.0 | -| minmax.c:26:37:26:37 | x | 1.0 | -| minmax.c:26:40:26:40 | y | 1.0 | -| minmax.c:26:43:26:43 | z | 2.0 | -| test.c:6:14:6:15 | 0 | 1.0 | -| test.c:8:5:8:9 | count | 1.0 | -| test.c:8:5:8:19 | ... = ... | 13.0 | -| test.c:8:13:8:17 | count | 13.0 | -| test.c:8:13:8:19 | ... + ... | 13.0 | -| test.c:8:19:8:19 | 1 | 1.0 | -| test.c:10:10:10:14 | count | 13.0 | -| test.c:14:14:14:15 | 0 | 1.0 | -| test.c:16:5:16:9 | count | 1.0 | -| test.c:16:5:16:26 | ... = ... | 13.0 | -| test.c:16:13:16:21 | (...) | 13.0 | -| test.c:16:13:16:26 | ... % ... | 13.0 | -| test.c:16:14:16:18 | count | 13.0 | -| test.c:16:14:16:20 | ... + ... | 13.0 | -| test.c:16:20:16:20 | 1 | 1.0 | -| test.c:16:25:16:26 | 10 | 1.0 | -| test.c:18:10:18:14 | count | 13.0 | -| test.c:22:14:22:15 | 0 | 1.0 | -| test.c:24:5:24:9 | count | 13.0 | -| test.c:24:5:24:11 | ... ++ | 13.0 | -| test.c:25:5:25:9 | count | 1.0 | -| test.c:25:5:25:22 | ... = ... | 13.0 | -| test.c:25:13:25:17 | count | 13.0 | -| test.c:25:13:25:22 | ... % ... | 13.0 | -| test.c:25:21:25:22 | 10 | 1.0 | -| test.c:27:10:27:14 | count | 13.0 | -| test.c:31:10:31:11 | 0 | 1.0 | -| test.c:32:14:32:15 | 0 | 1.0 | -| test.c:33:8:33:8 | i | 1.0 | -| test.c:33:8:33:12 | ... = ... | 1.0 | -| test.c:33:12:33:12 | 0 | 1.0 | -| test.c:33:15:33:15 | i | 13.0 | -| test.c:33:15:33:19 | ... < ... | 1.0 | -| test.c:33:19:33:19 | 2 | 1.0 | -| test.c:33:22:33:22 | i | 1.0 | -| test.c:33:22:33:28 | ... = ... | 13.0 | -| test.c:33:26:33:26 | i | 13.0 | -| test.c:33:26:33:28 | ... + ... | 13.0 | -| test.c:33:28:33:28 | 1 | 1.0 | -| test.c:34:5:34:9 | total | 13.0 | -| test.c:34:5:34:14 | ... += ... | 13.0 | -| test.c:34:14:34:14 | i | 13.0 | -| test.c:36:10:36:14 | total | 13.0 | -| test.c:36:10:36:18 | ... + ... | 13.0 | -| test.c:36:18:36:18 | i | 13.0 | -| test.c:40:10:40:11 | 0 | 1.0 | -| test.c:41:14:41:15 | 0 | 1.0 | -| test.c:42:8:42:8 | i | 1.0 | -| test.c:42:8:42:12 | ... = ... | 1.0 | -| test.c:42:12:42:12 | 0 | 1.0 | -| test.c:42:15:42:15 | i | 13.0 | -| test.c:42:15:42:19 | ... < ... | 1.0 | -| test.c:42:19:42:19 | 2 | 1.0 | -| test.c:42:22:42:22 | i | 13.0 | -| test.c:42:22:42:24 | ... ++ | 13.0 | -| test.c:43:5:43:9 | total | 13.0 | -| test.c:43:5:43:14 | ... += ... | 13.0 | -| test.c:43:14:43:14 | i | 13.0 | -| test.c:45:10:45:14 | total | 13.0 | -| test.c:45:10:45:18 | ... + ... | 13.0 | -| test.c:45:18:45:18 | i | 13.0 | -| test.c:49:10:49:11 | 0 | 1.0 | -| test.c:50:14:50:15 | 0 | 1.0 | -| test.c:51:8:51:8 | i | 1.0 | -| test.c:51:8:51:12 | ... = ... | 1.0 | -| test.c:51:12:51:12 | 0 | 1.0 | -| test.c:51:15:51:15 | i | 13.0 | -| test.c:51:15:51:17 | ... + ... | 13.0 | -| test.c:51:15:51:21 | ... < ... | 1.0 | -| test.c:51:17:51:17 | 2 | 1.0 | -| test.c:51:21:51:21 | 4 | 1.0 | -| test.c:51:24:51:24 | i | 1.0 | -| test.c:51:24:51:30 | ... = ... | 13.0 | -| test.c:51:28:51:28 | i | 13.0 | -| test.c:51:28:51:30 | ... + ... | 13.0 | -| test.c:51:30:51:30 | 1 | 1.0 | -| test.c:52:5:52:9 | total | 13.0 | -| test.c:52:5:52:14 | ... += ... | 13.0 | -| test.c:52:14:52:14 | i | 13.0 | -| test.c:54:10:54:14 | total | 13.0 | -| test.c:54:10:54:18 | ... + ... | 13.0 | -| test.c:54:18:54:18 | i | 13.0 | -| test.c:58:7:58:7 | i | 1.0 | -| test.c:58:7:58:11 | ... < ... | 1.0 | -| test.c:58:11:58:11 | 4 | 1.0 | -| test.c:59:9:59:9 | i | 1.0 | -| test.c:59:9:59:13 | ... < ... | 1.0 | -| test.c:59:13:59:13 | 5 | 1.0 | -| test.c:60:14:60:14 | i | 1.0 | -| test.c:63:10:63:10 | 1 | 1.0 | -| test.c:67:7:67:11 | - ... | 1.0 | -| test.c:67:7:67:15 | ... < ... | 1.0 | -| test.c:67:7:67:25 | ... && ... | 1.0 | -| test.c:67:8:67:11 | 1000 | 1.0 | -| test.c:67:15:67:15 | y | 1.0 | -| test.c:67:20:67:20 | y | 1.0 | -| test.c:67:20:67:25 | ... < ... | 1.0 | -| test.c:67:24:67:25 | 10 | 1.0 | -| test.c:68:9:68:9 | x | 1.0 | -| test.c:68:9:68:15 | ... < ... | 1.0 | -| test.c:68:13:68:13 | y | 1.0 | -| test.c:68:13:68:15 | ... - ... | 1.0 | -| test.c:68:15:68:15 | 2 | 1.0 | -| test.c:69:14:69:14 | x | 1.0 | -| test.c:72:10:72:10 | y | 1.0 | -| test.c:76:7:76:7 | y | 1.0 | -| test.c:76:7:76:12 | ... == ... | 1.0 | -| test.c:76:12:76:12 | 0 | 1.0 | -| test.c:77:9:77:9 | x | 1.0 | -| test.c:77:9:77:13 | ... < ... | 1.0 | -| test.c:77:13:77:13 | 4 | 1.0 | -| test.c:78:14:78:14 | 0 | 1.0 | -| test.c:81:9:81:9 | x | 1.0 | -| test.c:81:9:81:13 | ... < ... | 1.0 | -| test.c:81:13:81:13 | 4 | 1.0 | -| test.c:82:14:82:14 | 1 | 1.0 | -| test.c:85:10:85:10 | x | 1.0 | -| test.c:89:7:89:7 | y | 1.0 | -| test.c:89:7:89:11 | ... > ... | 1.0 | -| test.c:89:11:89:11 | 7 | 1.0 | -| test.c:90:9:90:9 | x | 1.0 | -| test.c:90:9:90:13 | ... < ... | 1.0 | -| test.c:90:13:90:13 | y | 1.0 | -| test.c:91:14:91:14 | 0 | 1.0 | -| test.c:93:12:93:12 | x | 1.0 | -| test.c:95:10:95:10 | 1 | 1.0 | -| test.c:100:3:100:3 | c | 1.0 | -| test.c:100:3:100:8 | ... = ... | 1.0 | -| test.c:100:7:100:8 | * ... | 1.0 | -| test.c:101:7:101:7 | (int)... | 1.0 | -| test.c:101:7:101:7 | c | 1.0 | -| test.c:101:7:101:15 | ... != ... | 1.0 | -| test.c:101:12:101:15 | 0 | 1.0 | -| test.c:102:5:102:8 | * ... | 1.0 | -| test.c:102:5:102:15 | ... = ... | 1.0 | -| test.c:102:12:102:15 | 0 | 1.0 | -| test.c:102:12:102:15 | (char)... | 1.0 | -| test.c:104:7:104:7 | (int)... | 2.0 | -| test.c:104:7:104:7 | c | 2.0 | -| test.c:104:7:104:14 | ... == ... | 1.0 | -| test.c:104:12:104:14 | 58 | 1.0 | -| test.c:105:5:105:5 | c | 1.0 | -| test.c:105:5:105:10 | ... = ... | 1.0 | -| test.c:105:9:105:10 | * ... | 1.0 | -| test.c:106:9:106:9 | (int)... | 1.0 | -| test.c:106:9:106:9 | c | 1.0 | -| test.c:106:9:106:17 | ... != ... | 1.0 | -| test.c:106:14:106:17 | 0 | 1.0 | -| test.c:107:7:107:10 | * ... | 1.0 | -| test.c:107:7:107:17 | ... = ... | 1.0 | -| test.c:107:14:107:17 | 0 | 1.0 | -| test.c:107:14:107:17 | (char)... | 1.0 | -| test.c:109:9:109:9 | (int)... | 2.0 | -| test.c:109:9:109:9 | c | 2.0 | -| test.c:109:9:109:16 | ... != ... | 1.0 | -| test.c:109:14:109:16 | 44 | 1.0 | -| test.c:110:14:110:14 | 1 | 1.0 | -| test.c:112:10:112:10 | 0 | 1.0 | -| test.c:118:24:118:24 | 0 | 1.0 | -| test.c:118:24:118:24 | (size_type)... | 1.0 | -| test.c:119:10:119:10 | n | 1.0 | -| test.c:119:10:119:12 | ... ++ | 1.0 | -| test.c:123:22:123:22 | 0 | 1.0 | -| test.c:123:22:123:22 | (size_type)... | 1.0 | -| test.c:124:11:124:15 | Start | 13.0 | -| test.c:124:11:124:36 | ... <= ... | 1.0 | -| test.c:124:20:124:32 | call to test12_helper | 1.0 | -| test.c:124:20:124:36 | ... - ... | 1.0 | -| test.c:124:36:124:36 | 1 | 1.0 | -| test.c:124:36:124:36 | (unsigned long long)... | 1.0 | -| test.c:126:31:126:43 | call to test12_helper | 1.0 | -| test.c:127:6:127:10 | Start | 13.0 | -| test.c:127:6:127:24 | ... += ... | 13.0 | -| test.c:127:15:127:20 | Length | 1.0 | -| test.c:127:15:127:24 | ... + ... | 1.0 | -| test.c:127:24:127:24 | 1 | 1.0 | -| test.c:127:24:127:24 | (unsigned long long)... | 1.0 | -| test.c:130:11:130:11 | 1 | 1.0 | -| test.c:135:22:135:22 | (unsigned char)... | 1.0 | -| test.c:135:22:135:22 | c | 1.0 | -| test.c:136:20:136:20 | 0 | 1.0 | -| test.c:136:20:136:20 | (unsigned int)... | 1.0 | -| test.c:137:20:137:20 | x | 1.0 | -| test.c:137:20:137:22 | ... - ... | 1.0 | -| test.c:137:22:137:22 | 1 | 1.0 | -| test.c:137:22:137:22 | (unsigned int)... | 1.0 | -| test.c:138:11:138:11 | i | 1.0 | -| test.c:138:11:138:13 | ... + ... | 1.0 | -| test.c:138:13:138:13 | 1 | 1.0 | -| test.c:139:10:139:41 | (double)... | 1.0 | -| test.c:139:10:139:41 | (int)... | 1.0 | -| test.c:139:18:139:41 | (...) | 1.0 | -| test.c:139:19:139:19 | (int)... | 1.0 | -| test.c:139:19:139:19 | c | 1.0 | -| test.c:139:19:139:23 | ... + ... | 1.0 | -| test.c:139:19:139:28 | (unsigned int)... | 1.0 | -| test.c:139:19:139:28 | ... + ... | 1.0 | -| test.c:139:19:139:32 | ... + ... | 1.0 | -| test.c:139:19:139:36 | ... + ... | 1.0 | -| test.c:139:19:139:40 | ... + ... | 1.0 | -| test.c:139:23:139:23 | i | 1.0 | -| test.c:139:27:139:28 | (int)... | 1.0 | -| test.c:139:27:139:28 | uc | 1.0 | -| test.c:139:32:139:32 | x | 1.0 | -| test.c:139:36:139:36 | y | 1.0 | -| test.c:139:40:139:40 | (unsigned int)... | 1.0 | -| test.c:139:40:139:40 | z | 1.0 | -| test.c:144:12:144:23 | (int)... | 1.0 | -| test.c:144:17:144:23 | (char)... | 1.0 | -| test.c:144:23:144:23 | x | 1.0 | -| test.c:145:12:145:32 | (int)... | 1.0 | -| test.c:145:17:145:32 | (unsigned char)... | 1.0 | -| test.c:145:32:145:32 | x | 1.0 | -| test.c:146:12:146:33 | (int)... | 1.0 | -| test.c:146:17:146:33 | (unsigned short)... | 1.0 | -| test.c:146:33:146:33 | x | 1.0 | -| test.c:147:12:147:31 | (int)... | 1.0 | -| test.c:147:17:147:31 | (unsigned int)... | 1.0 | -| test.c:147:31:147:31 | x | 1.0 | -| test.c:148:13:148:13 | (char)... | 1.0 | -| test.c:148:13:148:13 | x | 1.0 | -| test.c:149:23:149:23 | (unsigned short)... | 1.0 | -| test.c:149:23:149:23 | x | 1.0 | -| test.c:150:10:150:11 | x0 | 1.0 | -| test.c:150:10:150:16 | ... + ... | 1.0 | -| test.c:150:10:150:21 | ... + ... | 1.0 | -| test.c:150:10:150:26 | ... + ... | 1.0 | -| test.c:150:10:150:31 | ... + ... | 1.0 | -| test.c:150:10:150:36 | ... + ... | 1.0 | -| test.c:150:15:150:16 | x1 | 1.0 | -| test.c:150:20:150:21 | x2 | 1.0 | -| test.c:150:25:150:26 | x3 | 1.0 | -| test.c:150:30:150:31 | (int)... | 1.0 | -| test.c:150:30:150:31 | c0 | 1.0 | -| test.c:150:35:150:36 | (int)... | 1.0 | -| test.c:150:35:150:36 | s0 | 1.0 | -| test.c:154:10:154:31 | (...) | 1.0 | -| test.c:154:10:154:40 | ... ? ... : ... | 1.0 | -| test.c:154:11:154:11 | x | 1.0 | -| test.c:154:11:154:15 | ... > ... | 1.0 | -| test.c:154:11:154:30 | ... && ... | 1.0 | -| test.c:154:15:154:15 | 0 | 1.0 | -| test.c:154:15:154:15 | (long long)... | 1.0 | -| test.c:154:20:154:20 | x | 1.0 | -| test.c:154:20:154:30 | ... == ... | 1.0 | -| test.c:154:25:154:30 | (int)... | 1.0 | -| test.c:154:25:154:30 | (long long)... | 1.0 | -| test.c:154:30:154:30 | x | 1.0 | -| test.c:154:35:154:35 | x | 1.0 | -| test.c:154:39:154:40 | (long long)... | 1.0 | -| test.c:154:39:154:40 | - ... | 1.0 | -| test.c:154:40:154:40 | 1 | 1.0 | -| test.c:159:14:159:15 | 0 | 1.0 | -| test.c:161:7:161:7 | 3 | 1.0 | -| test.c:161:7:161:12 | ... <= ... | 1.0 | -| test.c:161:7:161:23 | ... && ... | 1.0 | -| test.c:161:12:161:12 | a | 1.0 | -| test.c:161:17:161:17 | a | 1.0 | -| test.c:161:17:161:23 | ... <= ... | 1.0 | -| test.c:161:22:161:23 | 11 | 1.0 | -| test.c:162:13:162:14 | + ... | 1.0 | -| test.c:162:14:162:14 | a | 1.0 | -| test.c:163:13:163:14 | - ... | 1.0 | -| test.c:163:14:163:14 | a | 1.0 | -| test.c:164:5:164:9 | total | 1.0 | -| test.c:164:5:164:16 | ... += ... | 1.0 | -| test.c:164:14:164:14 | b | 1.0 | -| test.c:164:14:164:16 | ... + ... | 1.0 | -| test.c:164:16:164:16 | c | 1.0 | -| test.c:166:7:166:7 | 0 | 1.0 | -| test.c:166:7:166:12 | ... <= ... | 1.0 | -| test.c:166:7:166:23 | ... && ... | 1.0 | -| test.c:166:12:166:12 | a | 2.0 | -| test.c:166:17:166:17 | a | 2.0 | -| test.c:166:17:166:23 | ... <= ... | 1.0 | -| test.c:166:22:166:23 | 11 | 1.0 | -| test.c:167:13:167:14 | + ... | 2.0 | -| test.c:167:14:167:14 | a | 2.0 | -| test.c:168:13:168:14 | - ... | 2.0 | -| test.c:168:14:168:14 | a | 2.0 | -| test.c:169:5:169:9 | total | 2.0 | -| test.c:169:5:169:16 | ... += ... | 8.0 | -| test.c:169:14:169:14 | b | 2.0 | -| test.c:169:14:169:16 | ... + ... | 4.0 | -| test.c:169:16:169:16 | c | 2.0 | -| test.c:171:7:171:8 | - ... | 1.0 | -| test.c:171:7:171:13 | ... <= ... | 1.0 | -| test.c:171:7:171:24 | ... && ... | 1.0 | -| test.c:171:8:171:8 | 7 | 1.0 | -| test.c:171:13:171:13 | a | 3.0 | -| test.c:171:18:171:18 | a | 3.0 | -| test.c:171:18:171:24 | ... <= ... | 1.0 | -| test.c:171:23:171:24 | 11 | 1.0 | -| test.c:172:13:172:14 | + ... | 3.0 | -| test.c:172:14:172:14 | a | 3.0 | -| test.c:173:13:173:14 | - ... | 3.0 | -| test.c:173:14:173:14 | a | 3.0 | -| test.c:174:5:174:9 | total | 10.0 | -| test.c:174:5:174:16 | ... += ... | 90.0 | -| test.c:174:14:174:14 | b | 3.0 | -| test.c:174:14:174:16 | ... + ... | 9.0 | -| test.c:174:16:174:16 | c | 3.0 | -| test.c:176:7:176:8 | - ... | 1.0 | -| test.c:176:7:176:13 | ... <= ... | 1.0 | -| test.c:176:7:176:23 | ... && ... | 1.0 | -| test.c:176:8:176:8 | 7 | 1.0 | -| test.c:176:13:176:13 | a | 4.0 | -| test.c:176:18:176:18 | a | 4.0 | -| test.c:176:18:176:23 | ... <= ... | 1.0 | -| test.c:176:23:176:23 | 1 | 1.0 | -| test.c:177:13:177:14 | + ... | 4.0 | -| test.c:177:14:177:14 | a | 4.0 | -| test.c:178:13:178:14 | - ... | 4.0 | -| test.c:178:14:178:14 | a | 4.0 | -| test.c:179:5:179:9 | total | 100.0 | -| test.c:179:5:179:16 | ... += ... | 1600.0 | -| test.c:179:14:179:14 | b | 4.0 | -| test.c:179:14:179:16 | ... + ... | 16.0 | -| test.c:179:16:179:16 | c | 4.0 | -| test.c:181:7:181:8 | - ... | 1.0 | -| test.c:181:7:181:13 | ... <= ... | 1.0 | -| test.c:181:7:181:23 | ... && ... | 1.0 | -| test.c:181:8:181:8 | 7 | 1.0 | -| test.c:181:13:181:13 | a | 5.0 | -| test.c:181:18:181:18 | a | 5.0 | -| test.c:181:18:181:23 | ... <= ... | 1.0 | -| test.c:181:23:181:23 | 0 | 1.0 | -| test.c:182:13:182:14 | + ... | 5.0 | -| test.c:182:14:182:14 | a | 5.0 | -| test.c:183:13:183:14 | - ... | 5.0 | -| test.c:183:14:183:14 | a | 5.0 | -| test.c:184:5:184:9 | total | 1700.0 | -| test.c:184:5:184:16 | ... += ... | 42500.0 | -| test.c:184:14:184:14 | b | 5.0 | -| test.c:184:14:184:16 | ... + ... | 25.0 | -| test.c:184:16:184:16 | c | 5.0 | -| test.c:186:7:186:8 | - ... | 1.0 | -| test.c:186:7:186:13 | ... <= ... | 1.0 | -| test.c:186:7:186:24 | ... && ... | 1.0 | -| test.c:186:8:186:8 | 7 | 1.0 | -| test.c:186:13:186:13 | a | 6.0 | -| test.c:186:18:186:18 | a | 6.0 | -| test.c:186:18:186:24 | ... <= ... | 1.0 | -| test.c:186:23:186:24 | - ... | 1.0 | -| test.c:186:24:186:24 | 2 | 1.0 | -| test.c:187:13:187:14 | + ... | 6.0 | -| test.c:187:14:187:14 | a | 6.0 | -| test.c:188:13:188:14 | - ... | 6.0 | -| test.c:188:14:188:14 | a | 6.0 | -| test.c:189:5:189:9 | total | 44200.0 | -| test.c:189:5:189:16 | ... += ... | 1591200.0 | -| test.c:189:14:189:14 | b | 6.0 | -| test.c:189:14:189:16 | ... + ... | 36.0 | -| test.c:189:16:189:16 | c | 6.0 | -| test.c:192:10:192:14 | total | 1635400.0 | -| test.c:198:14:198:15 | 0 | 1.0 | -| test.c:200:7:200:7 | 3 | 1.0 | -| test.c:200:7:200:12 | ... <= ... | 1.0 | -| test.c:200:7:200:23 | ... && ... | 1.0 | -| test.c:200:7:200:33 | ... && ... | 1.0 | -| test.c:200:7:200:44 | ... && ... | 1.0 | -| test.c:200:12:200:12 | a | 1.0 | -| test.c:200:17:200:17 | a | 1.0 | -| test.c:200:17:200:23 | ... <= ... | 1.0 | -| test.c:200:22:200:23 | 11 | 1.0 | -| test.c:200:28:200:28 | 5 | 1.0 | -| test.c:200:28:200:33 | ... <= ... | 1.0 | -| test.c:200:33:200:33 | b | 1.0 | -| test.c:200:38:200:38 | b | 1.0 | -| test.c:200:38:200:44 | ... <= ... | 1.0 | -| test.c:200:43:200:44 | 23 | 1.0 | -| test.c:201:13:201:13 | a | 1.0 | -| test.c:201:13:201:15 | ... * ... | 1.0 | -| test.c:201:15:201:15 | b | 1.0 | -| test.c:202:5:202:9 | total | 1.0 | -| test.c:202:5:202:14 | ... += ... | 1.0 | -| test.c:202:14:202:14 | r | 1.0 | -| test.c:204:7:204:7 | 3 | 1.0 | -| test.c:204:7:204:12 | ... <= ... | 1.0 | -| test.c:204:7:204:23 | ... && ... | 1.0 | -| test.c:204:7:204:33 | ... && ... | 1.0 | -| test.c:204:7:204:44 | ... && ... | 1.0 | -| test.c:204:12:204:12 | a | 2.0 | -| test.c:204:17:204:17 | a | 2.0 | -| test.c:204:17:204:23 | ... <= ... | 1.0 | -| test.c:204:22:204:23 | 11 | 1.0 | -| test.c:204:28:204:28 | 0 | 1.0 | -| test.c:204:28:204:33 | ... <= ... | 1.0 | -| test.c:204:33:204:33 | b | 3.0 | -| test.c:204:38:204:38 | b | 3.0 | -| test.c:204:38:204:44 | ... <= ... | 1.0 | -| test.c:204:43:204:44 | 23 | 1.0 | -| test.c:205:13:205:13 | a | 2.0 | -| test.c:205:13:205:15 | ... * ... | 1.0 | -| test.c:205:15:205:15 | b | 3.0 | -| test.c:206:5:206:9 | total | 2.0 | -| test.c:206:5:206:14 | ... += ... | 2.0 | -| test.c:206:14:206:14 | r | 1.0 | -| test.c:208:7:208:7 | 3 | 1.0 | -| test.c:208:7:208:12 | ... <= ... | 1.0 | -| test.c:208:7:208:23 | ... && ... | 1.0 | -| test.c:208:7:208:35 | ... && ... | 1.0 | -| test.c:208:7:208:46 | ... && ... | 1.0 | -| test.c:208:12:208:12 | a | 3.0 | -| test.c:208:17:208:17 | a | 3.0 | -| test.c:208:17:208:23 | ... <= ... | 1.0 | -| test.c:208:22:208:23 | 11 | 1.0 | -| test.c:208:28:208:30 | - ... | 1.0 | -| test.c:208:28:208:35 | ... <= ... | 1.0 | -| test.c:208:29:208:30 | 13 | 1.0 | -| test.c:208:35:208:35 | b | 7.0 | -| test.c:208:40:208:40 | b | 7.0 | -| test.c:208:40:208:46 | ... <= ... | 1.0 | -| test.c:208:45:208:46 | 23 | 1.0 | -| test.c:209:13:209:13 | a | 3.0 | -| test.c:209:13:209:15 | ... * ... | 1.0 | -| test.c:209:15:209:15 | b | 7.0 | -| test.c:210:5:210:9 | total | 4.0 | -| test.c:210:5:210:14 | ... += ... | 4.0 | -| test.c:210:14:210:14 | r | 1.0 | -| test.c:212:7:212:7 | 3 | 1.0 | -| test.c:212:7:212:12 | ... <= ... | 1.0 | -| test.c:212:7:212:23 | ... && ... | 1.0 | -| test.c:212:7:212:35 | ... && ... | 1.0 | -| test.c:212:7:212:45 | ... && ... | 1.0 | -| test.c:212:12:212:12 | a | 4.0 | -| test.c:212:17:212:17 | a | 4.0 | -| test.c:212:17:212:23 | ... <= ... | 1.0 | -| test.c:212:22:212:23 | 11 | 1.0 | -| test.c:212:28:212:30 | - ... | 1.0 | -| test.c:212:28:212:35 | ... <= ... | 1.0 | -| test.c:212:29:212:30 | 13 | 1.0 | -| test.c:212:35:212:35 | b | 15.0 | -| test.c:212:40:212:40 | b | 15.0 | -| test.c:212:40:212:45 | ... <= ... | 1.0 | -| test.c:212:45:212:45 | 0 | 1.0 | -| test.c:213:13:213:13 | a | 4.0 | -| test.c:213:13:213:15 | ... * ... | 1.0 | -| test.c:213:15:213:15 | b | 15.0 | -| test.c:214:5:214:9 | total | 8.0 | -| test.c:214:5:214:14 | ... += ... | 8.0 | -| test.c:214:14:214:14 | r | 1.0 | -| test.c:216:7:216:7 | 3 | 1.0 | -| test.c:216:7:216:12 | ... <= ... | 1.0 | -| test.c:216:7:216:23 | ... && ... | 1.0 | -| test.c:216:7:216:35 | ... && ... | 1.0 | -| test.c:216:7:216:46 | ... && ... | 1.0 | -| test.c:216:12:216:12 | a | 5.0 | -| test.c:216:17:216:17 | a | 5.0 | -| test.c:216:17:216:23 | ... <= ... | 1.0 | -| test.c:216:22:216:23 | 11 | 1.0 | -| test.c:216:28:216:30 | - ... | 1.0 | -| test.c:216:28:216:35 | ... <= ... | 1.0 | -| test.c:216:29:216:30 | 13 | 1.0 | -| test.c:216:35:216:35 | b | 31.0 | -| test.c:216:40:216:40 | b | 31.0 | -| test.c:216:40:216:46 | ... <= ... | 1.0 | -| test.c:216:45:216:46 | - ... | 1.0 | -| test.c:216:46:216:46 | 7 | 1.0 | -| test.c:217:13:217:13 | a | 5.0 | -| test.c:217:13:217:15 | ... * ... | 1.0 | -| test.c:217:15:217:15 | b | 31.0 | -| test.c:218:5:218:9 | total | 16.0 | -| test.c:218:5:218:14 | ... += ... | 16.0 | -| test.c:218:14:218:14 | r | 1.0 | -| test.c:221:10:221:14 | total | 32.0 | -| test.c:226:14:226:15 | 0 | 1.0 | -| test.c:228:7:228:7 | 0 | 1.0 | -| test.c:228:7:228:12 | ... <= ... | 1.0 | -| test.c:228:7:228:23 | ... && ... | 1.0 | -| test.c:228:7:228:33 | ... && ... | 1.0 | -| test.c:228:7:228:44 | ... && ... | 1.0 | -| test.c:228:12:228:12 | a | 1.0 | -| test.c:228:17:228:17 | a | 1.0 | -| test.c:228:17:228:23 | ... <= ... | 1.0 | -| test.c:228:22:228:23 | 11 | 1.0 | -| test.c:228:28:228:28 | 5 | 1.0 | -| test.c:228:28:228:33 | ... <= ... | 1.0 | -| test.c:228:33:228:33 | b | 1.0 | -| test.c:228:38:228:38 | b | 1.0 | -| test.c:228:38:228:44 | ... <= ... | 1.0 | -| test.c:228:43:228:44 | 23 | 1.0 | -| test.c:229:13:229:13 | a | 1.0 | -| test.c:229:13:229:15 | ... * ... | 1.0 | -| test.c:229:15:229:15 | b | 1.0 | -| test.c:230:5:230:9 | total | 1.0 | -| test.c:230:5:230:14 | ... += ... | 1.0 | -| test.c:230:14:230:14 | r | 1.0 | -| test.c:232:7:232:7 | 0 | 1.0 | -| test.c:232:7:232:12 | ... <= ... | 1.0 | -| test.c:232:7:232:23 | ... && ... | 1.0 | -| test.c:232:7:232:33 | ... && ... | 1.0 | -| test.c:232:7:232:44 | ... && ... | 1.0 | -| test.c:232:12:232:12 | a | 2.0 | -| test.c:232:17:232:17 | a | 2.0 | -| test.c:232:17:232:23 | ... <= ... | 1.0 | -| test.c:232:22:232:23 | 11 | 1.0 | -| test.c:232:28:232:28 | 0 | 1.0 | -| test.c:232:28:232:33 | ... <= ... | 1.0 | -| test.c:232:33:232:33 | b | 3.0 | -| test.c:232:38:232:38 | b | 3.0 | -| test.c:232:38:232:44 | ... <= ... | 1.0 | -| test.c:232:43:232:44 | 23 | 1.0 | -| test.c:233:13:233:13 | a | 2.0 | -| test.c:233:13:233:15 | ... * ... | 1.0 | -| test.c:233:15:233:15 | b | 3.0 | -| test.c:234:5:234:9 | total | 2.0 | -| test.c:234:5:234:14 | ... += ... | 2.0 | -| test.c:234:14:234:14 | r | 1.0 | -| test.c:236:7:236:7 | 0 | 1.0 | -| test.c:236:7:236:12 | ... <= ... | 1.0 | -| test.c:236:7:236:23 | ... && ... | 1.0 | -| test.c:236:7:236:35 | ... && ... | 1.0 | -| test.c:236:7:236:46 | ... && ... | 1.0 | -| test.c:236:12:236:12 | a | 3.0 | -| test.c:236:17:236:17 | a | 3.0 | -| test.c:236:17:236:23 | ... <= ... | 1.0 | -| test.c:236:22:236:23 | 11 | 1.0 | -| test.c:236:28:236:30 | - ... | 1.0 | -| test.c:236:28:236:35 | ... <= ... | 1.0 | -| test.c:236:29:236:30 | 13 | 1.0 | -| test.c:236:35:236:35 | b | 7.0 | -| test.c:236:40:236:40 | b | 7.0 | -| test.c:236:40:236:46 | ... <= ... | 1.0 | -| test.c:236:45:236:46 | 23 | 1.0 | -| test.c:237:13:237:13 | a | 3.0 | -| test.c:237:13:237:15 | ... * ... | 1.0 | -| test.c:237:15:237:15 | b | 7.0 | -| test.c:238:5:238:9 | total | 4.0 | -| test.c:238:5:238:14 | ... += ... | 4.0 | -| test.c:238:14:238:14 | r | 1.0 | -| test.c:240:7:240:7 | 0 | 1.0 | -| test.c:240:7:240:12 | ... <= ... | 1.0 | -| test.c:240:7:240:23 | ... && ... | 1.0 | -| test.c:240:7:240:35 | ... && ... | 1.0 | -| test.c:240:7:240:45 | ... && ... | 1.0 | -| test.c:240:12:240:12 | a | 4.0 | -| test.c:240:17:240:17 | a | 4.0 | -| test.c:240:17:240:23 | ... <= ... | 1.0 | -| test.c:240:22:240:23 | 11 | 1.0 | -| test.c:240:28:240:30 | - ... | 1.0 | -| test.c:240:28:240:35 | ... <= ... | 1.0 | -| test.c:240:29:240:30 | 13 | 1.0 | -| test.c:240:35:240:35 | b | 15.0 | -| test.c:240:40:240:40 | b | 15.0 | -| test.c:240:40:240:45 | ... <= ... | 1.0 | -| test.c:240:45:240:45 | 0 | 1.0 | -| test.c:241:13:241:13 | a | 4.0 | -| test.c:241:13:241:15 | ... * ... | 1.0 | -| test.c:241:15:241:15 | b | 15.0 | -| test.c:242:5:242:9 | total | 8.0 | -| test.c:242:5:242:14 | ... += ... | 8.0 | -| test.c:242:14:242:14 | r | 1.0 | -| test.c:244:7:244:7 | 0 | 1.0 | -| test.c:244:7:244:12 | ... <= ... | 1.0 | -| test.c:244:7:244:23 | ... && ... | 1.0 | -| test.c:244:7:244:35 | ... && ... | 1.0 | -| test.c:244:7:244:46 | ... && ... | 1.0 | -| test.c:244:12:244:12 | a | 5.0 | -| test.c:244:17:244:17 | a | 5.0 | -| test.c:244:17:244:23 | ... <= ... | 1.0 | -| test.c:244:22:244:23 | 11 | 1.0 | -| test.c:244:28:244:30 | - ... | 1.0 | -| test.c:244:28:244:35 | ... <= ... | 1.0 | -| test.c:244:29:244:30 | 13 | 1.0 | -| test.c:244:35:244:35 | b | 31.0 | -| test.c:244:40:244:40 | b | 31.0 | -| test.c:244:40:244:46 | ... <= ... | 1.0 | -| test.c:244:45:244:46 | - ... | 1.0 | -| test.c:244:46:244:46 | 7 | 1.0 | -| test.c:245:13:245:13 | a | 5.0 | -| test.c:245:13:245:15 | ... * ... | 1.0 | -| test.c:245:15:245:15 | b | 31.0 | -| test.c:246:5:246:9 | total | 16.0 | -| test.c:246:5:246:14 | ... += ... | 16.0 | -| test.c:246:14:246:14 | r | 1.0 | -| test.c:249:10:249:14 | total | 32.0 | -| test.c:254:14:254:15 | 0 | 1.0 | -| test.c:256:7:256:9 | - ... | 1.0 | -| test.c:256:7:256:14 | ... <= ... | 1.0 | -| test.c:256:7:256:25 | ... && ... | 1.0 | -| test.c:256:7:256:35 | ... && ... | 1.0 | -| test.c:256:7:256:46 | ... && ... | 1.0 | -| test.c:256:8:256:9 | 17 | 1.0 | -| test.c:256:14:256:14 | a | 1.0 | -| test.c:256:19:256:19 | a | 1.0 | -| test.c:256:19:256:25 | ... <= ... | 1.0 | -| test.c:256:24:256:25 | 11 | 1.0 | -| test.c:256:30:256:30 | 5 | 1.0 | -| test.c:256:30:256:35 | ... <= ... | 1.0 | -| test.c:256:35:256:35 | b | 1.0 | -| test.c:256:40:256:40 | b | 1.0 | -| test.c:256:40:256:46 | ... <= ... | 1.0 | -| test.c:256:45:256:46 | 23 | 1.0 | -| test.c:257:13:257:13 | a | 1.0 | -| test.c:257:13:257:15 | ... * ... | 1.0 | -| test.c:257:15:257:15 | b | 1.0 | -| test.c:258:5:258:9 | total | 1.0 | -| test.c:258:5:258:14 | ... += ... | 1.0 | -| test.c:258:14:258:14 | r | 1.0 | -| test.c:260:7:260:9 | - ... | 1.0 | -| test.c:260:7:260:14 | ... <= ... | 1.0 | -| test.c:260:7:260:25 | ... && ... | 1.0 | -| test.c:260:7:260:35 | ... && ... | 1.0 | -| test.c:260:7:260:46 | ... && ... | 1.0 | -| test.c:260:8:260:9 | 17 | 1.0 | -| test.c:260:14:260:14 | a | 2.0 | -| test.c:260:19:260:19 | a | 2.0 | -| test.c:260:19:260:25 | ... <= ... | 1.0 | -| test.c:260:24:260:25 | 11 | 1.0 | -| test.c:260:30:260:30 | 0 | 1.0 | -| test.c:260:30:260:35 | ... <= ... | 1.0 | -| test.c:260:35:260:35 | b | 3.0 | -| test.c:260:40:260:40 | b | 3.0 | -| test.c:260:40:260:46 | ... <= ... | 1.0 | -| test.c:260:45:260:46 | 23 | 1.0 | -| test.c:261:13:261:13 | a | 2.0 | -| test.c:261:13:261:15 | ... * ... | 1.0 | -| test.c:261:15:261:15 | b | 3.0 | -| test.c:262:5:262:9 | total | 2.0 | -| test.c:262:5:262:14 | ... += ... | 2.0 | -| test.c:262:14:262:14 | r | 1.0 | -| test.c:264:7:264:9 | - ... | 1.0 | -| test.c:264:7:264:14 | ... <= ... | 1.0 | -| test.c:264:7:264:25 | ... && ... | 1.0 | -| test.c:264:7:264:37 | ... && ... | 1.0 | -| test.c:264:7:264:48 | ... && ... | 1.0 | -| test.c:264:8:264:9 | 17 | 1.0 | -| test.c:264:14:264:14 | a | 3.0 | -| test.c:264:19:264:19 | a | 3.0 | -| test.c:264:19:264:25 | ... <= ... | 1.0 | -| test.c:264:24:264:25 | 11 | 1.0 | -| test.c:264:30:264:32 | - ... | 1.0 | -| test.c:264:30:264:37 | ... <= ... | 1.0 | -| test.c:264:31:264:32 | 13 | 1.0 | -| test.c:264:37:264:37 | b | 7.0 | -| test.c:264:42:264:42 | b | 7.0 | -| test.c:264:42:264:48 | ... <= ... | 1.0 | -| test.c:264:47:264:48 | 23 | 1.0 | -| test.c:265:13:265:13 | a | 3.0 | -| test.c:265:13:265:15 | ... * ... | 1.0 | -| test.c:265:15:265:15 | b | 7.0 | -| test.c:266:5:266:9 | total | 4.0 | -| test.c:266:5:266:14 | ... += ... | 4.0 | -| test.c:266:14:266:14 | r | 1.0 | -| test.c:268:7:268:9 | - ... | 1.0 | -| test.c:268:7:268:14 | ... <= ... | 1.0 | -| test.c:268:7:268:25 | ... && ... | 1.0 | -| test.c:268:7:268:37 | ... && ... | 1.0 | -| test.c:268:7:268:47 | ... && ... | 1.0 | -| test.c:268:8:268:9 | 17 | 1.0 | -| test.c:268:14:268:14 | a | 4.0 | -| test.c:268:19:268:19 | a | 4.0 | -| test.c:268:19:268:25 | ... <= ... | 1.0 | -| test.c:268:24:268:25 | 11 | 1.0 | -| test.c:268:30:268:32 | - ... | 1.0 | -| test.c:268:30:268:37 | ... <= ... | 1.0 | -| test.c:268:31:268:32 | 13 | 1.0 | -| test.c:268:37:268:37 | b | 15.0 | -| test.c:268:42:268:42 | b | 15.0 | -| test.c:268:42:268:47 | ... <= ... | 1.0 | -| test.c:268:47:268:47 | 0 | 1.0 | -| test.c:269:13:269:13 | a | 4.0 | -| test.c:269:13:269:15 | ... * ... | 1.0 | -| test.c:269:15:269:15 | b | 15.0 | -| test.c:270:5:270:9 | total | 8.0 | -| test.c:270:5:270:14 | ... += ... | 8.0 | -| test.c:270:14:270:14 | r | 1.0 | -| test.c:272:7:272:9 | - ... | 1.0 | -| test.c:272:7:272:14 | ... <= ... | 1.0 | -| test.c:272:7:272:25 | ... && ... | 1.0 | -| test.c:272:7:272:37 | ... && ... | 1.0 | -| test.c:272:7:272:48 | ... && ... | 1.0 | -| test.c:272:8:272:9 | 17 | 1.0 | -| test.c:272:14:272:14 | a | 5.0 | -| test.c:272:19:272:19 | a | 5.0 | -| test.c:272:19:272:25 | ... <= ... | 1.0 | -| test.c:272:24:272:25 | 11 | 1.0 | -| test.c:272:30:272:32 | - ... | 1.0 | -| test.c:272:30:272:37 | ... <= ... | 1.0 | -| test.c:272:31:272:32 | 13 | 1.0 | -| test.c:272:37:272:37 | b | 31.0 | -| test.c:272:42:272:42 | b | 31.0 | -| test.c:272:42:272:48 | ... <= ... | 1.0 | -| test.c:272:47:272:48 | - ... | 1.0 | -| test.c:272:48:272:48 | 7 | 1.0 | -| test.c:273:13:273:13 | a | 5.0 | -| test.c:273:13:273:15 | ... * ... | 1.0 | -| test.c:273:15:273:15 | b | 31.0 | -| test.c:274:5:274:9 | total | 16.0 | -| test.c:274:5:274:14 | ... += ... | 16.0 | -| test.c:274:14:274:14 | r | 1.0 | -| test.c:277:10:277:14 | total | 32.0 | -| test.c:282:14:282:15 | 0 | 1.0 | -| test.c:284:7:284:9 | - ... | 1.0 | -| test.c:284:7:284:14 | ... <= ... | 1.0 | -| test.c:284:7:284:24 | ... && ... | 1.0 | -| test.c:284:7:284:34 | ... && ... | 1.0 | -| test.c:284:7:284:45 | ... && ... | 1.0 | -| test.c:284:8:284:9 | 17 | 1.0 | -| test.c:284:14:284:14 | a | 1.0 | -| test.c:284:19:284:19 | a | 1.0 | -| test.c:284:19:284:24 | ... <= ... | 1.0 | -| test.c:284:24:284:24 | 0 | 1.0 | -| test.c:284:29:284:29 | 5 | 1.0 | -| test.c:284:29:284:34 | ... <= ... | 1.0 | -| test.c:284:34:284:34 | b | 1.0 | -| test.c:284:39:284:39 | b | 1.0 | -| test.c:284:39:284:45 | ... <= ... | 1.0 | -| test.c:284:44:284:45 | 23 | 1.0 | -| test.c:285:13:285:13 | a | 1.0 | -| test.c:285:13:285:15 | ... * ... | 1.0 | -| test.c:285:15:285:15 | b | 1.0 | -| test.c:286:5:286:9 | total | 1.0 | -| test.c:286:5:286:14 | ... += ... | 1.0 | -| test.c:286:14:286:14 | r | 1.0 | -| test.c:288:7:288:9 | - ... | 1.0 | -| test.c:288:7:288:14 | ... <= ... | 1.0 | -| test.c:288:7:288:24 | ... && ... | 1.0 | -| test.c:288:7:288:34 | ... && ... | 1.0 | -| test.c:288:7:288:45 | ... && ... | 1.0 | -| test.c:288:8:288:9 | 17 | 1.0 | -| test.c:288:14:288:14 | a | 2.0 | -| test.c:288:19:288:19 | a | 2.0 | -| test.c:288:19:288:24 | ... <= ... | 1.0 | -| test.c:288:24:288:24 | 0 | 1.0 | -| test.c:288:29:288:29 | 0 | 1.0 | -| test.c:288:29:288:34 | ... <= ... | 1.0 | -| test.c:288:34:288:34 | b | 3.0 | -| test.c:288:39:288:39 | b | 3.0 | -| test.c:288:39:288:45 | ... <= ... | 1.0 | -| test.c:288:44:288:45 | 23 | 1.0 | -| test.c:289:13:289:13 | a | 2.0 | -| test.c:289:13:289:15 | ... * ... | 1.0 | -| test.c:289:15:289:15 | b | 3.0 | -| test.c:290:5:290:9 | total | 2.0 | -| test.c:290:5:290:14 | ... += ... | 2.0 | -| test.c:290:14:290:14 | r | 1.0 | -| test.c:292:7:292:9 | - ... | 1.0 | -| test.c:292:7:292:14 | ... <= ... | 1.0 | -| test.c:292:7:292:24 | ... && ... | 1.0 | -| test.c:292:7:292:36 | ... && ... | 1.0 | -| test.c:292:7:292:47 | ... && ... | 1.0 | -| test.c:292:8:292:9 | 17 | 1.0 | -| test.c:292:14:292:14 | a | 3.0 | -| test.c:292:19:292:19 | a | 3.0 | -| test.c:292:19:292:24 | ... <= ... | 1.0 | -| test.c:292:24:292:24 | 0 | 1.0 | -| test.c:292:29:292:31 | - ... | 1.0 | -| test.c:292:29:292:36 | ... <= ... | 1.0 | -| test.c:292:30:292:31 | 13 | 1.0 | -| test.c:292:36:292:36 | b | 7.0 | -| test.c:292:41:292:41 | b | 7.0 | -| test.c:292:41:292:47 | ... <= ... | 1.0 | -| test.c:292:46:292:47 | 23 | 1.0 | -| test.c:293:13:293:13 | a | 3.0 | -| test.c:293:13:293:15 | ... * ... | 1.0 | -| test.c:293:15:293:15 | b | 7.0 | -| test.c:294:5:294:9 | total | 4.0 | -| test.c:294:5:294:14 | ... += ... | 4.0 | -| test.c:294:14:294:14 | r | 1.0 | -| test.c:296:7:296:9 | - ... | 1.0 | -| test.c:296:7:296:14 | ... <= ... | 1.0 | -| test.c:296:7:296:24 | ... && ... | 1.0 | -| test.c:296:7:296:36 | ... && ... | 1.0 | -| test.c:296:7:296:46 | ... && ... | 1.0 | -| test.c:296:8:296:9 | 17 | 1.0 | -| test.c:296:14:296:14 | a | 4.0 | -| test.c:296:19:296:19 | a | 4.0 | -| test.c:296:19:296:24 | ... <= ... | 1.0 | -| test.c:296:24:296:24 | 0 | 1.0 | -| test.c:296:29:296:31 | - ... | 1.0 | -| test.c:296:29:296:36 | ... <= ... | 1.0 | -| test.c:296:30:296:31 | 13 | 1.0 | -| test.c:296:36:296:36 | b | 15.0 | -| test.c:296:41:296:41 | b | 15.0 | -| test.c:296:41:296:46 | ... <= ... | 1.0 | -| test.c:296:46:296:46 | 0 | 1.0 | -| test.c:297:13:297:13 | a | 4.0 | -| test.c:297:13:297:15 | ... * ... | 1.0 | -| test.c:297:15:297:15 | b | 15.0 | -| test.c:298:5:298:9 | total | 8.0 | -| test.c:298:5:298:14 | ... += ... | 8.0 | -| test.c:298:14:298:14 | r | 1.0 | -| test.c:300:7:300:9 | - ... | 1.0 | -| test.c:300:7:300:14 | ... <= ... | 1.0 | -| test.c:300:7:300:24 | ... && ... | 1.0 | -| test.c:300:7:300:36 | ... && ... | 1.0 | -| test.c:300:7:300:47 | ... && ... | 1.0 | -| test.c:300:8:300:9 | 17 | 1.0 | -| test.c:300:14:300:14 | a | 5.0 | -| test.c:300:19:300:19 | a | 5.0 | -| test.c:300:19:300:24 | ... <= ... | 1.0 | -| test.c:300:24:300:24 | 0 | 1.0 | -| test.c:300:29:300:31 | - ... | 1.0 | -| test.c:300:29:300:36 | ... <= ... | 1.0 | -| test.c:300:30:300:31 | 13 | 1.0 | -| test.c:300:36:300:36 | b | 31.0 | -| test.c:300:41:300:41 | b | 31.0 | -| test.c:300:41:300:47 | ... <= ... | 1.0 | -| test.c:300:46:300:47 | - ... | 1.0 | -| test.c:300:47:300:47 | 7 | 1.0 | -| test.c:301:13:301:13 | a | 5.0 | -| test.c:301:13:301:15 | ... * ... | 1.0 | -| test.c:301:15:301:15 | b | 31.0 | -| test.c:302:5:302:9 | total | 16.0 | -| test.c:302:5:302:14 | ... += ... | 16.0 | -| test.c:302:14:302:14 | r | 1.0 | -| test.c:305:10:305:14 | total | 32.0 | -| test.c:310:14:310:15 | 0 | 1.0 | -| test.c:312:7:312:9 | - ... | 1.0 | -| test.c:312:7:312:14 | ... <= ... | 1.0 | -| test.c:312:7:312:25 | ... && ... | 1.0 | -| test.c:312:7:312:35 | ... && ... | 1.0 | -| test.c:312:7:312:46 | ... && ... | 1.0 | -| test.c:312:8:312:9 | 17 | 1.0 | -| test.c:312:14:312:14 | a | 1.0 | -| test.c:312:19:312:19 | a | 1.0 | -| test.c:312:19:312:25 | ... <= ... | 1.0 | -| test.c:312:24:312:25 | - ... | 1.0 | -| test.c:312:25:312:25 | 2 | 1.0 | -| test.c:312:30:312:30 | 5 | 1.0 | -| test.c:312:30:312:35 | ... <= ... | 1.0 | -| test.c:312:35:312:35 | b | 1.0 | -| test.c:312:40:312:40 | b | 1.0 | -| test.c:312:40:312:46 | ... <= ... | 1.0 | -| test.c:312:45:312:46 | 23 | 1.0 | -| test.c:313:13:313:13 | a | 1.0 | -| test.c:313:13:313:15 | ... * ... | 1.0 | -| test.c:313:15:313:15 | b | 1.0 | -| test.c:314:5:314:9 | total | 1.0 | -| test.c:314:5:314:14 | ... += ... | 1.0 | -| test.c:314:14:314:14 | r | 1.0 | -| test.c:316:7:316:9 | - ... | 1.0 | -| test.c:316:7:316:14 | ... <= ... | 1.0 | -| test.c:316:7:316:25 | ... && ... | 1.0 | -| test.c:316:7:316:35 | ... && ... | 1.0 | -| test.c:316:7:316:46 | ... && ... | 1.0 | -| test.c:316:8:316:9 | 17 | 1.0 | -| test.c:316:14:316:14 | a | 2.0 | -| test.c:316:19:316:19 | a | 2.0 | -| test.c:316:19:316:25 | ... <= ... | 1.0 | -| test.c:316:24:316:25 | - ... | 1.0 | -| test.c:316:25:316:25 | 2 | 1.0 | -| test.c:316:30:316:30 | 0 | 1.0 | -| test.c:316:30:316:35 | ... <= ... | 1.0 | -| test.c:316:35:316:35 | b | 3.0 | -| test.c:316:40:316:40 | b | 3.0 | -| test.c:316:40:316:46 | ... <= ... | 1.0 | -| test.c:316:45:316:46 | 23 | 1.0 | -| test.c:317:13:317:13 | a | 2.0 | -| test.c:317:13:317:15 | ... * ... | 1.0 | -| test.c:317:15:317:15 | b | 3.0 | -| test.c:318:5:318:9 | total | 2.0 | -| test.c:318:5:318:14 | ... += ... | 2.0 | -| test.c:318:14:318:14 | r | 1.0 | -| test.c:320:7:320:9 | - ... | 1.0 | -| test.c:320:7:320:14 | ... <= ... | 1.0 | -| test.c:320:7:320:25 | ... && ... | 1.0 | -| test.c:320:7:320:37 | ... && ... | 1.0 | -| test.c:320:7:320:48 | ... && ... | 1.0 | -| test.c:320:8:320:9 | 17 | 1.0 | -| test.c:320:14:320:14 | a | 3.0 | -| test.c:320:19:320:19 | a | 3.0 | -| test.c:320:19:320:25 | ... <= ... | 1.0 | -| test.c:320:24:320:25 | - ... | 1.0 | -| test.c:320:25:320:25 | 2 | 1.0 | -| test.c:320:30:320:32 | - ... | 1.0 | -| test.c:320:30:320:37 | ... <= ... | 1.0 | -| test.c:320:31:320:32 | 13 | 1.0 | -| test.c:320:37:320:37 | b | 7.0 | -| test.c:320:42:320:42 | b | 7.0 | -| test.c:320:42:320:48 | ... <= ... | 1.0 | -| test.c:320:47:320:48 | 23 | 1.0 | -| test.c:321:13:321:13 | a | 3.0 | -| test.c:321:13:321:15 | ... * ... | 1.0 | -| test.c:321:15:321:15 | b | 7.0 | -| test.c:322:5:322:9 | total | 4.0 | -| test.c:322:5:322:14 | ... += ... | 4.0 | -| test.c:322:14:322:14 | r | 1.0 | -| test.c:324:7:324:9 | - ... | 1.0 | -| test.c:324:7:324:14 | ... <= ... | 1.0 | -| test.c:324:7:324:25 | ... && ... | 1.0 | -| test.c:324:7:324:37 | ... && ... | 1.0 | -| test.c:324:7:324:47 | ... && ... | 1.0 | -| test.c:324:8:324:9 | 17 | 1.0 | -| test.c:324:14:324:14 | a | 4.0 | -| test.c:324:19:324:19 | a | 4.0 | -| test.c:324:19:324:25 | ... <= ... | 1.0 | -| test.c:324:24:324:25 | - ... | 1.0 | -| test.c:324:25:324:25 | 2 | 1.0 | -| test.c:324:30:324:32 | - ... | 1.0 | -| test.c:324:30:324:37 | ... <= ... | 1.0 | -| test.c:324:31:324:32 | 13 | 1.0 | -| test.c:324:37:324:37 | b | 15.0 | -| test.c:324:42:324:42 | b | 15.0 | -| test.c:324:42:324:47 | ... <= ... | 1.0 | -| test.c:324:47:324:47 | 0 | 1.0 | -| test.c:325:13:325:13 | a | 4.0 | -| test.c:325:13:325:15 | ... * ... | 1.0 | -| test.c:325:15:325:15 | b | 15.0 | -| test.c:326:5:326:9 | total | 8.0 | -| test.c:326:5:326:14 | ... += ... | 8.0 | -| test.c:326:14:326:14 | r | 1.0 | -| test.c:328:7:328:9 | - ... | 1.0 | -| test.c:328:7:328:14 | ... <= ... | 1.0 | -| test.c:328:7:328:25 | ... && ... | 1.0 | -| test.c:328:7:328:37 | ... && ... | 1.0 | -| test.c:328:7:328:48 | ... && ... | 1.0 | -| test.c:328:8:328:9 | 17 | 1.0 | -| test.c:328:14:328:14 | a | 5.0 | -| test.c:328:19:328:19 | a | 5.0 | -| test.c:328:19:328:25 | ... <= ... | 1.0 | -| test.c:328:24:328:25 | - ... | 1.0 | -| test.c:328:25:328:25 | 2 | 1.0 | -| test.c:328:30:328:32 | - ... | 1.0 | -| test.c:328:30:328:37 | ... <= ... | 1.0 | -| test.c:328:31:328:32 | 13 | 1.0 | -| test.c:328:37:328:37 | b | 31.0 | -| test.c:328:42:328:42 | b | 31.0 | -| test.c:328:42:328:48 | ... <= ... | 1.0 | -| test.c:328:47:328:48 | - ... | 1.0 | -| test.c:328:48:328:48 | 7 | 1.0 | -| test.c:329:13:329:13 | a | 5.0 | -| test.c:329:13:329:15 | ... * ... | 1.0 | -| test.c:329:15:329:15 | b | 31.0 | -| test.c:330:5:330:9 | total | 16.0 | -| test.c:330:5:330:14 | ... += ... | 16.0 | -| test.c:330:14:330:14 | r | 1.0 | -| test.c:333:10:333:14 | total | 32.0 | -| test.c:339:28:339:43 | 9007199254740992 | 1.0 | -| test.c:339:28:339:47 | (unsigned long long)... | 1.0 | -| test.c:339:28:339:47 | ... - ... | 1.0 | -| test.c:339:47:339:47 | 1 | 1.0 | -| test.c:339:47:339:47 | (long)... | 1.0 | -| test.c:341:32:341:34 | odd | 1.0 | -| test.c:341:32:341:39 | ... >> ... | 1.0 | -| test.c:341:39:341:39 | 1 | 1.0 | -| test.c:343:10:343:16 | shifted | 1.0 | -| test.c:348:22:348:32 | (...) | 1.0 | -| test.c:348:22:348:36 | ... > ... | 1.0 | -| test.c:348:22:348:44 | ... ? ... : ... | 1.0 | -| test.c:348:23:348:23 | 2 | 1.0 | -| test.c:348:23:348:23 | (unsigned int)... | 1.0 | -| test.c:348:23:348:27 | ... * ... | 1.0 | -| test.c:348:23:348:31 | ... + ... | 1.0 | -| test.c:348:27:348:27 | e | 1.0 | -| test.c:348:31:348:31 | 1 | 1.0 | -| test.c:348:31:348:31 | (unsigned int)... | 1.0 | -| test.c:348:36:348:36 | 0 | 1.0 | -| test.c:348:36:348:36 | (unsigned int)... | 1.0 | -| test.c:348:40:348:40 | e | 1.0 | -| test.c:348:44:348:44 | 2 | 1.0 | -| test.c:348:44:348:44 | (unsigned int)... | 1.0 | -| test.c:349:20:349:30 | (...) | 2.0 | -| test.c:349:20:349:35 | ... >= ... | 1.0 | -| test.c:349:20:349:43 | (signed int)... | 2.0 | -| test.c:349:20:349:43 | ... ? ... : ... | 2.0 | -| test.c:349:21:349:21 | 2 | 1.0 | -| test.c:349:21:349:21 | (unsigned int)... | 1.0 | -| test.c:349:21:349:25 | ... * ... | 2.0 | -| test.c:349:21:349:29 | ... + ... | 2.0 | -| test.c:349:25:349:25 | e | 2.0 | -| test.c:349:29:349:29 | 1 | 1.0 | -| test.c:349:29:349:29 | (unsigned int)... | 1.0 | -| test.c:349:35:349:35 | 0 | 1.0 | -| test.c:349:35:349:35 | (unsigned int)... | 1.0 | -| test.c:349:39:349:39 | e | 2.0 | -| test.c:349:43:349:43 | 2 | 1.0 | -| test.c:349:43:349:43 | (unsigned int)... | 1.0 | -| test.c:350:22:350:32 | (...) | 4.0 | -| test.c:350:22:350:36 | ... > ... | 1.0 | -| test.c:350:22:350:44 | ... ? ... : ... | 4.0 | -| test.c:350:23:350:23 | 3 | 1.0 | -| test.c:350:23:350:23 | (unsigned int)... | 1.0 | -| test.c:350:23:350:27 | ... * ... | 4.0 | -| test.c:350:23:350:31 | ... + ... | 4.0 | -| test.c:350:27:350:27 | e | 4.0 | -| test.c:350:31:350:31 | 2 | 1.0 | -| test.c:350:31:350:31 | (unsigned int)... | 1.0 | -| test.c:350:36:350:36 | 0 | 1.0 | -| test.c:350:36:350:36 | (unsigned int)... | 1.0 | -| test.c:350:40:350:40 | e | 4.0 | -| test.c:350:44:350:44 | 2 | 1.0 | -| test.c:350:44:350:44 | (unsigned int)... | 1.0 | -| test.c:351:22:351:32 | (...) | 8.0 | -| test.c:351:22:351:36 | ... > ... | 1.0 | -| test.c:351:22:351:44 | ... ? ... : ... | 8.0 | -| test.c:351:23:351:23 | 2 | 1.0 | -| test.c:351:23:351:23 | (unsigned int)... | 1.0 | -| test.c:351:23:351:27 | ... * ... | 8.0 | -| test.c:351:23:351:31 | ... + ... | 8.0 | -| test.c:351:27:351:27 | e | 8.0 | -| test.c:351:31:351:31 | 1 | 1.0 | -| test.c:351:31:351:31 | (unsigned int)... | 1.0 | -| test.c:351:36:351:36 | 0 | 1.0 | -| test.c:351:36:351:36 | (unsigned int)... | 1.0 | -| test.c:351:40:351:40 | e | 8.0 | -| test.c:351:44:351:44 | 2 | 1.0 | -| test.c:351:44:351:44 | (unsigned int)... | 1.0 | -| test.c:352:22:352:32 | (...) | 16.0 | -| test.c:352:22:352:37 | ... > ... | 1.0 | -| test.c:352:22:352:45 | ... ? ... : ... | 16.0 | -| test.c:352:23:352:23 | 2 | 1.0 | -| test.c:352:23:352:23 | (unsigned int)... | 1.0 | -| test.c:352:23:352:27 | ... * ... | 16.0 | -| test.c:352:23:352:31 | ... + ... | 16.0 | -| test.c:352:27:352:27 | e | 16.0 | -| test.c:352:31:352:31 | 1 | 1.0 | -| test.c:352:31:352:31 | (unsigned int)... | 1.0 | -| test.c:352:36:352:37 | 16 | 1.0 | -| test.c:352:36:352:37 | (unsigned int)... | 1.0 | -| test.c:352:41:352:41 | e | 16.0 | -| test.c:352:45:352:45 | 2 | 1.0 | -| test.c:352:45:352:45 | (unsigned int)... | 1.0 | -| test.c:354:10:354:12 | bi1 | 1.0 | -| test.c:354:10:354:18 | ... + ... | 2.0 | -| test.c:354:10:354:24 | ... + ... | 8.0 | -| test.c:354:10:354:30 | ... + ... | 64.0 | -| test.c:354:10:354:36 | ... + ... | 1024.0 | -| test.c:354:16:354:18 | (unsigned int)... | 2.0 | -| test.c:354:16:354:18 | bi2 | 2.0 | -| test.c:354:22:354:24 | bi3 | 4.0 | -| test.c:354:28:354:30 | bi4 | 8.0 | -| test.c:354:34:354:36 | bi5 | 16.0 | -| test.c:358:13:358:14 | 0 | 1.0 | -| test.c:359:7:359:7 | x | 1.0 | -| test.c:359:7:359:11 | ... < ... | 1.0 | -| test.c:359:11:359:11 | 0 | 1.0 | -| test.c:360:12:360:13 | - ... | 1.0 | -| test.c:360:13:360:13 | 1 | 1.0 | -| test.c:363:10:363:10 | i | 13.0 | -| test.c:363:10:363:14 | ... < ... | 1.0 | -| test.c:363:14:363:14 | 3 | 1.0 | -| test.c:364:5:364:5 | i | 13.0 | -| test.c:364:5:364:7 | ... ++ | 13.0 | -| test.c:366:3:366:3 | d | 1.0 | -| test.c:366:3:366:7 | ... = ... | 13.0 | -| test.c:366:7:366:7 | i | 13.0 | -| test.c:367:7:367:7 | x | 1.0 | -| test.c:367:7:367:11 | ... < ... | 1.0 | -| test.c:367:11:367:11 | 0 | 1.0 | -| test.c:368:9:368:9 | d | 13.0 | -| test.c:368:9:368:14 | ... > ... | 1.0 | -| test.c:368:13:368:14 | - ... | 1.0 | -| test.c:368:14:368:14 | x | 1.0 | -| test.c:369:14:369:14 | 1 | 1.0 | -| test.c:372:10:372:10 | 0 | 1.0 | -| test.c:378:3:378:4 | y1 | 1.0 | -| test.c:378:3:378:23 | ... = ... | 1.0 | -| test.c:378:8:378:8 | x | 1.0 | -| test.c:378:8:378:14 | ... < ... | 1.0 | -| test.c:378:8:378:23 | ... ? ... : ... | 1.0 | -| test.c:378:12:378:14 | 100 | 1.0 | -| test.c:378:12:378:14 | (unsigned int)... | 1.0 | -| test.c:378:18:378:18 | x | 1.0 | -| test.c:378:22:378:23 | 10 | 1.0 | -| test.c:378:22:378:23 | (unsigned int)... | 1.0 | -| test.c:379:3:379:4 | y2 | 1.0 | -| test.c:379:3:379:24 | ... = ... | 2.0 | -| test.c:379:8:379:8 | x | 2.0 | -| test.c:379:8:379:15 | ... >= ... | 1.0 | -| test.c:379:8:379:24 | ... ? ... : ... | 2.0 | -| test.c:379:13:379:15 | 100 | 1.0 | -| test.c:379:13:379:15 | (unsigned int)... | 1.0 | -| test.c:379:19:379:20 | 10 | 1.0 | -| test.c:379:19:379:20 | (unsigned int)... | 1.0 | -| test.c:379:24:379:24 | x | 2.0 | -| test.c:380:3:380:4 | y3 | 1.0 | -| test.c:380:3:380:8 | ... = ... | 1.0 | -| test.c:380:8:380:8 | 0 | 1.0 | -| test.c:380:8:380:8 | (unsigned int)... | 1.0 | -| test.c:381:3:381:4 | y4 | 1.0 | -| test.c:381:3:381:8 | ... = ... | 1.0 | -| test.c:381:8:381:8 | 0 | 1.0 | -| test.c:381:8:381:8 | (unsigned int)... | 1.0 | -| test.c:382:3:382:4 | y5 | 1.0 | -| test.c:382:3:382:8 | ... = ... | 1.0 | -| test.c:382:8:382:8 | 0 | 1.0 | -| test.c:382:8:382:8 | (unsigned int)... | 1.0 | -| test.c:383:3:383:4 | y6 | 1.0 | -| test.c:383:3:383:8 | ... = ... | 1.0 | -| test.c:383:8:383:8 | 0 | 1.0 | -| test.c:383:8:383:8 | (unsigned int)... | 1.0 | -| test.c:384:3:384:4 | y7 | 1.0 | -| test.c:384:3:384:8 | ... = ... | 1.0 | -| test.c:384:8:384:8 | 0 | 1.0 | -| test.c:384:8:384:8 | (unsigned int)... | 1.0 | -| test.c:385:3:385:4 | y8 | 1.0 | -| test.c:385:3:385:8 | ... = ... | 1.0 | -| test.c:385:8:385:8 | 0 | 1.0 | -| test.c:385:8:385:8 | (unsigned int)... | 1.0 | -| test.c:386:7:386:7 | x | 4.0 | -| test.c:386:7:386:13 | ... < ... | 1.0 | -| test.c:386:11:386:13 | 300 | 1.0 | -| test.c:386:11:386:13 | (unsigned int)... | 1.0 | -| test.c:387:5:387:6 | y3 | 1.0 | -| test.c:387:5:387:15 | ... = ... | 4.0 | -| test.c:387:10:387:10 | x | 4.0 | -| test.c:387:10:387:15 | ... ? ... : ... | 4.0 | -| test.c:387:15:387:15 | 5 | 1.0 | -| test.c:387:15:387:15 | (unsigned int)... | 1.0 | -| test.c:388:5:388:6 | y4 | 1.0 | -| test.c:388:5:388:17 | ... = ... | 4.0 | -| test.c:388:10:388:10 | x | 4.0 | -| test.c:388:10:388:17 | ... ? ... : ... | 4.0 | -| test.c:388:15:388:17 | 500 | 1.0 | -| test.c:388:15:388:17 | (unsigned int)... | 1.0 | -| test.c:389:5:389:6 | y5 | 1.0 | -| test.c:389:5:389:21 | ... = ... | 4.0 | -| test.c:389:10:389:14 | (...) | 4.0 | -| test.c:389:10:389:21 | ... ? ... : ... | 4.0 | -| test.c:389:11:389:11 | x | 4.0 | -| test.c:389:11:389:13 | ... + ... | 4.0 | -| test.c:389:13:389:13 | 1 | 1.0 | -| test.c:389:13:389:13 | (unsigned int)... | 1.0 | -| test.c:389:19:389:21 | 500 | 1.0 | -| test.c:389:19:389:21 | (unsigned int)... | 1.0 | -| test.c:390:5:390:6 | y6 | 1.0 | -| test.c:390:5:390:36 | ... = ... | 4.0 | -| test.c:390:10:390:31 | (...) | 4.0 | -| test.c:390:10:390:36 | (unsigned int)... | 4.0 | -| test.c:390:10:390:36 | ... ? ... : ... | 4.0 | -| test.c:390:11:390:30 | (unsigned char)... | 4.0 | -| test.c:390:26:390:30 | (...) | 4.0 | -| test.c:390:27:390:27 | x | 4.0 | -| test.c:390:27:390:29 | ... + ... | 4.0 | -| test.c:390:29:390:29 | 1 | 1.0 | -| test.c:390:29:390:29 | (unsigned int)... | 1.0 | -| test.c:390:36:390:36 | 5 | 1.0 | -| test.c:391:5:391:6 | y7 | 1.0 | -| test.c:391:5:391:38 | ... = ... | 4.0 | -| test.c:391:10:391:31 | (...) | 4.0 | -| test.c:391:10:391:38 | (unsigned int)... | 4.0 | -| test.c:391:10:391:38 | ... ? ... : ... | 4.0 | -| test.c:391:11:391:30 | (unsigned char)... | 4.0 | -| test.c:391:26:391:30 | (...) | 4.0 | -| test.c:391:27:391:27 | x | 4.0 | -| test.c:391:27:391:29 | ... + ... | 4.0 | -| test.c:391:29:391:29 | 1 | 1.0 | -| test.c:391:29:391:29 | (unsigned int)... | 1.0 | -| test.c:391:36:391:38 | 500 | 1.0 | -| test.c:392:5:392:6 | y8 | 1.0 | -| test.c:392:5:392:39 | ... = ... | 4.0 | -| test.c:392:10:392:32 | (...) | 4.0 | -| test.c:392:10:392:39 | (unsigned int)... | 4.0 | -| test.c:392:10:392:39 | ... ? ... : ... | 4.0 | -| test.c:392:11:392:31 | (unsigned short)... | 4.0 | -| test.c:392:27:392:31 | (...) | 4.0 | -| test.c:392:28:392:28 | x | 4.0 | -| test.c:392:28:392:30 | ... + ... | 4.0 | -| test.c:392:30:392:30 | 1 | 1.0 | -| test.c:392:30:392:30 | (unsigned int)... | 1.0 | -| test.c:392:37:392:39 | 500 | 1.0 | -| test.c:394:10:394:11 | y1 | 1.0 | -| test.c:394:10:394:16 | ... + ... | 2.0 | -| test.c:394:10:394:21 | ... + ... | 10.0 | -| test.c:394:10:394:26 | ... + ... | 50.0 | -| test.c:394:10:394:31 | ... + ... | 250.0 | -| test.c:394:10:394:36 | ... + ... | 1250.0 | -| test.c:394:10:394:41 | ... + ... | 6250.0 | -| test.c:394:10:394:46 | ... + ... | 31250.0 | -| test.c:394:15:394:16 | y2 | 2.0 | -| test.c:394:20:394:21 | y3 | 5.0 | -| test.c:394:25:394:26 | y4 | 5.0 | -| test.c:394:30:394:31 | y5 | 5.0 | -| test.c:394:35:394:36 | y6 | 5.0 | -| test.c:394:40:394:41 | y7 | 5.0 | -| test.c:394:45:394:46 | y8 | 5.0 | -| test.c:400:3:400:4 | y1 | 1.0 | -| test.c:400:3:400:24 | ... = ... | 1.0 | -| test.c:400:8:400:8 | x | 1.0 | -| test.c:400:8:400:14 | ... > ... | 1.0 | -| test.c:400:8:400:24 | ... ? ... : ... | 1.0 | -| test.c:400:12:400:14 | 100 | 1.0 | -| test.c:400:12:400:14 | (unsigned int)... | 1.0 | -| test.c:400:18:400:18 | x | 1.0 | -| test.c:400:22:400:24 | 110 | 1.0 | -| test.c:400:22:400:24 | (unsigned int)... | 1.0 | -| test.c:401:3:401:4 | y2 | 1.0 | -| test.c:401:3:401:25 | ... = ... | 2.0 | -| test.c:401:8:401:8 | x | 2.0 | -| test.c:401:8:401:15 | ... <= ... | 1.0 | -| test.c:401:8:401:25 | ... ? ... : ... | 2.0 | -| test.c:401:13:401:15 | 100 | 1.0 | -| test.c:401:13:401:15 | (unsigned int)... | 1.0 | -| test.c:401:19:401:21 | 110 | 1.0 | -| test.c:401:19:401:21 | (unsigned int)... | 1.0 | -| test.c:401:25:401:25 | x | 2.0 | -| test.c:402:3:402:4 | y3 | 1.0 | -| test.c:402:3:402:11 | ... = ... | 1.0 | -| test.c:402:8:402:11 | 1000 | 1.0 | -| test.c:402:8:402:11 | (unsigned int)... | 1.0 | -| test.c:403:3:403:4 | y4 | 1.0 | -| test.c:403:3:403:11 | ... = ... | 1.0 | -| test.c:403:8:403:11 | 1000 | 1.0 | -| test.c:403:8:403:11 | (unsigned int)... | 1.0 | -| test.c:404:3:404:4 | y5 | 1.0 | -| test.c:404:3:404:11 | ... = ... | 1.0 | -| test.c:404:8:404:11 | 1000 | 1.0 | -| test.c:404:8:404:11 | (unsigned int)... | 1.0 | -| test.c:405:7:405:7 | x | 4.0 | -| test.c:405:7:405:14 | ... >= ... | 1.0 | -| test.c:405:12:405:14 | 300 | 1.0 | -| test.c:405:12:405:14 | (unsigned int)... | 1.0 | -| test.c:406:5:406:6 | y3 | 1.0 | -| test.c:406:5:406:21 | ... = ... | 4.0 | -| test.c:406:10:406:16 | (...) | 4.0 | -| test.c:406:10:406:21 | ... ? ... : ... | 4.0 | -| test.c:406:11:406:11 | x | 4.0 | -| test.c:406:11:406:15 | ... - ... | 4.0 | -| test.c:406:13:406:15 | 300 | 1.0 | -| test.c:406:13:406:15 | (unsigned int)... | 1.0 | -| test.c:406:21:406:21 | 5 | 1.0 | -| test.c:406:21:406:21 | (unsigned int)... | 1.0 | -| test.c:407:5:407:6 | y4 | 1.0 | -| test.c:407:5:407:21 | ... = ... | 4.0 | -| test.c:407:10:407:16 | (...) | 4.0 | -| test.c:407:10:407:21 | ... ? ... : ... | 4.0 | -| test.c:407:11:407:11 | x | 4.0 | -| test.c:407:11:407:15 | ... - ... | 4.0 | -| test.c:407:13:407:15 | 200 | 1.0 | -| test.c:407:13:407:15 | (unsigned int)... | 1.0 | -| test.c:407:21:407:21 | 5 | 1.0 | -| test.c:407:21:407:21 | (unsigned int)... | 1.0 | -| test.c:408:5:408:6 | y5 | 1.0 | -| test.c:408:5:408:38 | ... = ... | 4.0 | -| test.c:408:10:408:33 | (...) | 4.0 | -| test.c:408:10:408:38 | (unsigned int)... | 4.0 | -| test.c:408:10:408:38 | ... ? ... : ... | 4.0 | -| test.c:408:11:408:32 | (unsigned char)... | 4.0 | -| test.c:408:26:408:32 | (...) | 4.0 | -| test.c:408:27:408:27 | x | 4.0 | -| test.c:408:27:408:31 | ... - ... | 4.0 | -| test.c:408:29:408:31 | 200 | 1.0 | -| test.c:408:29:408:31 | (unsigned int)... | 1.0 | -| test.c:408:38:408:38 | 5 | 1.0 | -| test.c:410:10:410:11 | y1 | 1.0 | -| test.c:410:10:410:16 | ... + ... | 2.0 | -| test.c:410:10:410:21 | ... + ... | 10.0 | -| test.c:410:10:410:26 | ... + ... | 50.0 | -| test.c:410:10:410:31 | ... + ... | 250.0 | -| test.c:410:15:410:16 | y2 | 2.0 | -| test.c:410:20:410:21 | y3 | 5.0 | -| test.c:410:25:410:26 | y4 | 5.0 | -| test.c:410:30:410:31 | y5 | 5.0 | -| test.c:415:14:415:14 | m | 1.0 | -| test.c:415:14:415:108 | ... ? ... : ... | 1.0 | -| test.c:415:18:415:18 | n | 1.0 | -| test.c:415:18:415:95 | ... ? ... : ... | 1.0 | -| test.c:415:22:415:22 | o | 1.0 | -| test.c:415:22:415:82 | ... ? ... : ... | 1.0 | -| test.c:415:26:415:26 | p | 1.0 | -| test.c:415:26:415:69 | ... ? ... : ... | 1.0 | -| test.c:415:30:415:30 | q | 1.0 | -| test.c:415:30:415:56 | ... ? ... : ... | 1.0 | -| test.c:415:34:415:43 | 0.4743882700000000008 | 1.0 | -| test.c:415:47:415:56 | 0.1433388700000000071 | 1.0 | -| test.c:415:60:415:69 | 0.3527920299999999787 | 1.0 | -| test.c:415:73:415:82 | 0.3920645799999999959 | 1.0 | -| test.c:415:86:415:95 | 0.2154022499999999896 | 1.0 | -| test.c:415:99:415:108 | 0.4049680500000000238 | 1.0 | -| test.c:416:14:416:14 | m | 2.0 | -| test.c:416:14:416:108 | ... ? ... : ... | 1.0 | -| test.c:416:18:416:18 | n | 3.0 | -| test.c:416:18:416:95 | ... ? ... : ... | 1.0 | -| test.c:416:22:416:22 | o | 3.0 | -| test.c:416:22:416:82 | ... ? ... : ... | 1.0 | -| test.c:416:26:416:26 | p | 3.0 | -| test.c:416:26:416:69 | ... ? ... : ... | 1.0 | -| test.c:416:30:416:30 | q | 3.0 | -| test.c:416:30:416:56 | ... ? ... : ... | 1.0 | -| test.c:416:34:416:43 | 0.3418334800000000229 | 1.0 | -| test.c:416:47:416:56 | 0.3533464000000000049 | 1.0 | -| test.c:416:60:416:69 | 0.2224785300000000077 | 1.0 | -| test.c:416:73:416:82 | 0.326618929999999974 | 1.0 | -| test.c:416:86:416:95 | 0.5927046500000000551 | 1.0 | -| test.c:416:99:416:108 | 0.5297741000000000255 | 1.0 | -| test.c:417:14:417:14 | m | 4.0 | -| test.c:417:14:417:108 | ... ? ... : ... | 1.0 | -| test.c:417:18:417:18 | n | 9.0 | -| test.c:417:18:417:95 | ... ? ... : ... | 1.0 | -| test.c:417:22:417:22 | o | 9.0 | -| test.c:417:22:417:82 | ... ? ... : ... | 1.0 | -| test.c:417:26:417:26 | p | 9.0 | -| test.c:417:26:417:69 | ... ? ... : ... | 1.0 | -| test.c:417:30:417:30 | q | 9.0 | -| test.c:417:30:417:56 | ... ? ... : ... | 1.0 | -| test.c:417:34:417:43 | 0.774296030000000024 | 1.0 | -| test.c:417:47:417:56 | 0.3147808400000000062 | 1.0 | -| test.c:417:60:417:69 | 0.3123551399999999756 | 1.0 | -| test.c:417:73:417:82 | 0.05121255999999999725 | 1.0 | -| test.c:417:86:417:95 | 0.7931074500000000471 | 1.0 | -| test.c:417:99:417:108 | 0.6798145100000000385 | 1.0 | -| test.c:418:14:418:14 | m | 8.0 | -| test.c:418:14:418:108 | ... ? ... : ... | 1.0 | -| test.c:418:18:418:18 | n | 27.0 | -| test.c:418:18:418:95 | ... ? ... : ... | 1.0 | -| test.c:418:22:418:22 | o | 27.0 | -| test.c:418:22:418:82 | ... ? ... : ... | 1.0 | -| test.c:418:26:418:26 | p | 27.0 | -| test.c:418:26:418:69 | ... ? ... : ... | 1.0 | -| test.c:418:30:418:30 | q | 27.0 | -| test.c:418:30:418:56 | ... ? ... : ... | 1.0 | -| test.c:418:34:418:43 | 0.4472955599999999809 | 1.0 | -| test.c:418:47:418:56 | 0.8059920200000000312 | 1.0 | -| test.c:418:60:418:69 | 0.9899726199999999698 | 1.0 | -| test.c:418:73:418:82 | 0.5995273199999999747 | 1.0 | -| test.c:418:86:418:95 | 0.3697694799999999837 | 1.0 | -| test.c:418:99:418:108 | 0.8386683499999999514 | 1.0 | -| test.c:419:14:419:14 | m | 16.0 | -| test.c:419:14:419:108 | ... ? ... : ... | 1.0 | -| test.c:419:18:419:18 | n | 81.0 | -| test.c:419:18:419:95 | ... ? ... : ... | 1.0 | -| test.c:419:22:419:22 | o | 81.0 | -| test.c:419:22:419:82 | ... ? ... : ... | 1.0 | -| test.c:419:26:419:26 | p | 81.0 | -| test.c:419:26:419:69 | ... ? ... : ... | 1.0 | -| test.c:419:30:419:30 | q | 81.0 | -| test.c:419:30:419:56 | ... ? ... : ... | 1.0 | -| test.c:419:34:419:43 | 0.4931182800000000199 | 1.0 | -| test.c:419:47:419:56 | 0.9038991100000000056 | 1.0 | -| test.c:419:60:419:69 | 0.1059771199999999941 | 1.0 | -| test.c:419:73:419:82 | 0.2177842600000000073 | 1.0 | -| test.c:419:86:419:95 | 0.7248596600000000167 | 1.0 | -| test.c:419:99:419:108 | 0.6873487400000000136 | 1.0 | -| test.c:420:14:420:14 | m | 32.0 | -| test.c:420:14:420:108 | ... ? ... : ... | 1.0 | -| test.c:420:18:420:18 | n | 243.0 | -| test.c:420:18:420:95 | ... ? ... : ... | 1.0 | -| test.c:420:22:420:22 | o | 243.0 | -| test.c:420:22:420:82 | ... ? ... : ... | 1.0 | -| test.c:420:26:420:26 | p | 243.0 | -| test.c:420:26:420:69 | ... ? ... : ... | 1.0 | -| test.c:420:30:420:30 | q | 243.0 | -| test.c:420:30:420:56 | ... ? ... : ... | 1.0 | -| test.c:420:34:420:43 | 0.4745284799999999747 | 1.0 | -| test.c:420:47:420:56 | 0.107866500000000004 | 1.0 | -| test.c:420:60:420:69 | 0.1188457599999999947 | 1.0 | -| test.c:420:73:420:82 | 0.7616405200000000431 | 1.0 | -| test.c:420:86:420:95 | 0.3480889200000000239 | 1.0 | -| test.c:420:99:420:108 | 0.584408649999999974 | 1.0 | -| test.c:421:14:421:14 | m | 64.0 | -| test.c:421:14:421:108 | ... ? ... : ... | 1.0 | -| test.c:421:18:421:18 | n | 729.0 | -| test.c:421:18:421:95 | ... ? ... : ... | 1.0 | -| test.c:421:22:421:22 | o | 729.0 | -| test.c:421:22:421:82 | ... ? ... : ... | 1.0 | -| test.c:421:26:421:26 | p | 729.0 | -| test.c:421:26:421:69 | ... ? ... : ... | 1.0 | -| test.c:421:30:421:30 | q | 729.0 | -| test.c:421:30:421:56 | ... ? ... : ... | 1.0 | -| test.c:421:34:421:43 | 0.02524326 | 1.0 | -| test.c:421:47:421:56 | 0.8290504600000000446 | 1.0 | -| test.c:421:60:421:69 | 0.95823075000000002 | 1.0 | -| test.c:421:73:421:82 | 0.1251655799999999985 | 1.0 | -| test.c:421:86:421:95 | 0.8523517900000000536 | 1.0 | -| test.c:421:99:421:108 | 0.3623238400000000081 | 1.0 | -| test.c:422:14:422:14 | m | 128.0 | -| test.c:422:14:422:108 | ... ? ... : ... | 1.0 | -| test.c:422:18:422:18 | n | 2187.0 | -| test.c:422:18:422:95 | ... ? ... : ... | 1.0 | -| test.c:422:22:422:22 | o | 2187.0 | -| test.c:422:22:422:82 | ... ? ... : ... | 1.0 | -| test.c:422:26:422:26 | p | 2187.0 | -| test.c:422:26:422:69 | ... ? ... : ... | 1.0 | -| test.c:422:30:422:30 | q | 2187.0 | -| test.c:422:30:422:56 | ... ? ... : ... | 1.0 | -| test.c:422:34:422:43 | 0.3870862600000000153 | 1.0 | -| test.c:422:47:422:56 | 0.3287604399999999871 | 1.0 | -| test.c:422:60:422:69 | 0.1496348500000000137 | 1.0 | -| test.c:422:73:422:82 | 0.4504110800000000192 | 1.0 | -| test.c:422:86:422:95 | 0.4864090899999999884 | 1.0 | -| test.c:422:99:422:108 | 0.8433127200000000157 | 1.0 | -| test.c:423:14:423:14 | m | 256.0 | -| test.c:423:14:423:108 | ... ? ... : ... | 1.0 | -| test.c:423:18:423:18 | n | 6561.0 | -| test.c:423:18:423:95 | ... ? ... : ... | 1.0 | -| test.c:423:22:423:22 | o | 6561.0 | -| test.c:423:22:423:82 | ... ? ... : ... | 1.0 | -| test.c:423:26:423:26 | p | 6561.0 | -| test.c:423:26:423:69 | ... ? ... : ... | 1.0 | -| test.c:423:30:423:30 | q | 6561.0 | -| test.c:423:30:423:56 | ... ? ... : ... | 1.0 | -| test.c:423:34:423:43 | 0.1575506299999999971 | 1.0 | -| test.c:423:47:423:56 | 0.7708683299999999905 | 1.0 | -| test.c:423:60:423:69 | 0.2642848099999999811 | 1.0 | -| test.c:423:73:423:82 | 0.1480050800000000111 | 1.0 | -| test.c:423:86:423:95 | 0.374281430000000026 | 1.0 | -| test.c:423:99:423:108 | 0.05328182000000000057 | 1.0 | -| test.c:424:14:424:14 | m | 512.0 | -| test.c:424:14:424:108 | ... ? ... : ... | 1.0 | -| test.c:424:18:424:18 | n | 19683.0 | -| test.c:424:18:424:95 | ... ? ... : ... | 1.0 | -| test.c:424:22:424:22 | o | 19683.0 | -| test.c:424:22:424:82 | ... ? ... : ... | 1.0 | -| test.c:424:26:424:26 | p | 19683.0 | -| test.c:424:26:424:69 | ... ? ... : ... | 1.0 | -| test.c:424:30:424:30 | q | 19683.0 | -| test.c:424:30:424:56 | ... ? ... : ... | 1.0 | -| test.c:424:34:424:43 | 0.4173653600000000186 | 1.0 | -| test.c:424:47:424:56 | 0.7682662799999999681 | 1.0 | -| test.c:424:60:424:69 | 0.2764323799999999776 | 1.0 | -| test.c:424:73:424:82 | 0.5567927400000000082 | 1.0 | -| test.c:424:86:424:95 | 0.3946885700000000163 | 1.0 | -| test.c:424:99:424:108 | 0.6907214400000000198 | 1.0 | -| test.c:425:14:425:14 | m | 1024.0 | -| test.c:425:14:425:108 | ... ? ... : ... | 1.0 | -| test.c:425:18:425:18 | n | 59049.0 | -| test.c:425:18:425:95 | ... ? ... : ... | 1.0 | -| test.c:425:22:425:22 | o | 59049.0 | -| test.c:425:22:425:82 | ... ? ... : ... | 1.0 | -| test.c:425:26:425:26 | p | 59049.0 | -| test.c:425:26:425:69 | ... ? ... : ... | 1.0 | -| test.c:425:30:425:30 | q | 59049.0 | -| test.c:425:30:425:56 | ... ? ... : ... | 1.0 | -| test.c:425:34:425:43 | 0.8895534499999999678 | 1.0 | -| test.c:425:47:425:56 | 0.2990482400000000207 | 1.0 | -| test.c:425:60:425:69 | 0.7624258299999999711 | 1.0 | -| test.c:425:73:425:82 | 0.2051910999999999874 | 1.0 | -| test.c:425:86:425:95 | 0.8874555899999999609 | 1.0 | -| test.c:425:99:425:108 | 0.8137279800000000174 | 1.0 | -| test.c:426:14:426:14 | m | 2048.0 | -| test.c:426:14:426:108 | ... ? ... : ... | 1.0 | -| test.c:426:18:426:18 | n | 177147.0 | -| test.c:426:18:426:95 | ... ? ... : ... | 1.0 | -| test.c:426:22:426:22 | o | 177147.0 | -| test.c:426:22:426:82 | ... ? ... : ... | 1.0 | -| test.c:426:26:426:26 | p | 177147.0 | -| test.c:426:26:426:69 | ... ? ... : ... | 1.0 | -| test.c:426:30:426:30 | q | 177147.0 | -| test.c:426:30:426:56 | ... ? ... : ... | 1.0 | -| test.c:426:34:426:43 | 0.4218627600000000033 | 1.0 | -| test.c:426:47:426:56 | 0.5384335799999999672 | 1.0 | -| test.c:426:60:426:69 | 0.4499667900000000054 | 1.0 | -| test.c:426:73:426:82 | 0.1320411400000000013 | 1.0 | -| test.c:426:86:426:95 | 0.5203124099999999475 | 1.0 | -| test.c:426:99:426:108 | 0.4276264699999999808 | 1.0 | -| test.c:432:19:432:19 | a | 1.0 | -| test.c:432:19:432:23 | ... + ... | 1.0 | -| test.c:432:19:432:27 | ... + ... | 1.0 | -| test.c:432:19:432:31 | ... + ... | 1.0 | -| test.c:432:19:432:35 | ... + ... | 1.0 | -| test.c:432:19:432:39 | ... + ... | 1.0 | -| test.c:432:19:432:43 | ... + ... | 1.0 | -| test.c:432:19:432:47 | ... + ... | 1.0 | -| test.c:432:19:432:51 | ... + ... | 1.0 | -| test.c:432:19:432:55 | ... + ... | 1.0 | -| test.c:432:19:432:59 | ... + ... | 1.0 | -| test.c:432:19:432:63 | ... + ... | 1.0 | -| test.c:432:23:432:23 | b | 1.0 | -| test.c:432:27:432:27 | c | 1.0 | -| test.c:432:31:432:31 | d | 1.0 | -| test.c:432:35:432:35 | e | 1.0 | -| test.c:432:39:432:39 | f | 1.0 | -| test.c:432:43:432:43 | g | 1.0 | -| test.c:432:47:432:47 | h | 1.0 | -| test.c:432:51:432:51 | i | 1.0 | -| test.c:432:55:432:55 | j | 1.0 | -| test.c:432:59:432:59 | k | 1.0 | -| test.c:432:63:432:63 | l | 1.0 | -| test.c:434:10:434:15 | output | 1.0 | -| test.c:441:7:441:9 | rhs | 1.0 | -| test.c:441:7:441:14 | ... < ... | 1.0 | -| test.c:441:13:441:14 | 12 | 1.0 | -| test.c:441:13:441:14 | (unsigned int)... | 1.0 | -| test.c:441:19:441:21 | rhs | 1.0 | -| test.c:441:19:441:26 | ... << ... | 1.0 | -| test.c:441:26:441:26 | 1 | 1.0 | -| test.c:442:7:442:9 | rhs | 2.0 | -| test.c:442:7:442:14 | ... < ... | 1.0 | -| test.c:442:13:442:14 | 13 | 1.0 | -| test.c:442:13:442:14 | (unsigned int)... | 1.0 | -| test.c:442:19:442:21 | rhs | 2.0 | -| test.c:442:19:442:26 | ... << ... | 1.0 | -| test.c:442:26:442:26 | 1 | 1.0 | -| test.c:443:7:443:9 | rhs | 3.0 | -| test.c:443:7:443:14 | ... < ... | 1.0 | -| test.c:443:13:443:14 | 14 | 1.0 | -| test.c:443:13:443:14 | (unsigned int)... | 1.0 | -| test.c:443:19:443:21 | rhs | 3.0 | -| test.c:443:19:443:26 | ... << ... | 1.0 | -| test.c:443:26:443:26 | 1 | 1.0 | -| test.c:444:7:444:9 | rhs | 4.0 | -| test.c:444:7:444:14 | ... < ... | 1.0 | -| test.c:444:13:444:14 | 15 | 1.0 | -| test.c:444:13:444:14 | (unsigned int)... | 1.0 | -| test.c:444:19:444:21 | rhs | 4.0 | -| test.c:444:19:444:26 | ... << ... | 1.0 | -| test.c:444:26:444:26 | 1 | 1.0 | -| test.c:445:7:445:9 | rhs | 5.0 | -| test.c:445:7:445:14 | ... < ... | 1.0 | -| test.c:445:13:445:14 | 16 | 1.0 | -| test.c:445:13:445:14 | (unsigned int)... | 1.0 | -| test.c:445:19:445:21 | rhs | 5.0 | -| test.c:445:19:445:26 | ... << ... | 1.0 | -| test.c:445:26:445:26 | 1 | 1.0 | -| test.c:446:10:446:12 | (int)... | 6.0 | -| test.c:446:10:446:12 | rhs | 6.0 | -| test.c:450:7:450:7 | a | 1.0 | -| test.c:450:7:450:13 | ... == ... | 1.0 | -| test.c:450:12:450:13 | 17 | 1.0 | -| test.c:451:9:451:9 | b | 1.0 | -| test.c:451:9:451:15 | ... == ... | 1.0 | -| test.c:451:14:451:15 | 23 | 1.0 | -| test.c:452:7:452:7 | a | 1.0 | -| test.c:452:7:452:12 | ... += ... | 1.0 | -| test.c:452:12:452:12 | b | 1.0 | -| test.c:454:9:454:9 | a | 2.0 | -| test.c:454:9:454:15 | ... == ... | 1.0 | -| test.c:454:14:454:15 | 18 | 1.0 | -| test.c:455:7:455:7 | b | 1.0 | -| test.c:455:7:455:12 | ... = ... | 1.0 | -| test.c:455:11:455:12 | 10 | 1.0 | -| test.c:460:11:460:11 | a | 4.0 | -| test.c:460:11:460:15 | ... + ... | 16.0 | -| test.c:460:15:460:15 | b | 4.0 | -| test.c:461:10:461:10 | a | 4.0 | -| test.c:461:10:461:14 | ... + ... | 16.0 | -| test.c:461:14:461:14 | b | 4.0 | -| test.c:468:4:470:50 | (...) | 1.0 | -| test.c:468:4:553:26 | ... > ... | 1.0 | -| test.c:468:4:642:27 | ... ? ... : ... | 1.297918419127476E201 | -| test.c:468:5:468:6 | 14 | 1.0 | -| test.c:468:5:468:6 | (unsigned int)... | 1.0 | -| test.c:468:5:468:11 | ... * ... | 1.0 | -| test.c:468:5:468:55 | ... > ... | 1.0 | -| test.c:468:5:470:49 | ... ? ... : ... | 1.0 | -| test.c:468:10:468:11 | ip | 1.0 | -| test.c:468:15:468:26 | (...) | 1.0 | -| test.c:468:15:468:31 | ... * ... | 1.0 | -| test.c:468:15:468:55 | ... + ... | 1.0 | -| test.c:468:16:468:16 | 2 | 1.0 | -| test.c:468:16:468:16 | (unsigned int)... | 1.0 | -| test.c:468:16:468:21 | ... * ... | 1.0 | -| test.c:468:16:468:25 | ... + ... | 1.0 | -| test.c:468:20:468:21 | ip | 1.0 | -| test.c:468:25:468:25 | 1 | 1.0 | -| test.c:468:25:468:25 | (unsigned int)... | 1.0 | -| test.c:468:30:468:31 | 17 | 1.0 | -| test.c:468:30:468:31 | (unsigned int)... | 1.0 | -| test.c:468:35:468:50 | (...) | 1.0 | -| test.c:468:35:468:55 | ... * ... | 1.0 | -| test.c:468:36:468:36 | 2 | 1.0 | -| test.c:468:36:468:36 | (unsigned int)... | 1.0 | -| test.c:468:36:468:41 | ... * ... | 1.0 | -| test.c:468:36:468:45 | ... + ... | 1.0 | -| test.c:468:36:468:49 | ... + ... | 1.0 | -| test.c:468:40:468:41 | ip | 1.0 | -| test.c:468:45:468:45 | 1 | 1.0 | -| test.c:468:45:468:45 | (unsigned int)... | 1.0 | -| test.c:468:49:468:49 | 1 | 1.0 | -| test.c:468:49:468:49 | (unsigned int)... | 1.0 | -| test.c:468:54:468:55 | 17 | 1.0 | -| test.c:468:54:468:55 | (unsigned int)... | 1.0 | -| test.c:469:9:469:10 | 14 | 1.0 | -| test.c:469:9:469:10 | (unsigned int)... | 1.0 | -| test.c:469:9:469:15 | ... * ... | 1.0 | -| test.c:469:14:469:15 | ip | 1.0 | -| test.c:470:9:470:20 | (...) | 1.0 | -| test.c:470:9:470:25 | ... * ... | 1.0 | -| test.c:470:9:470:49 | ... + ... | 1.0 | -| test.c:470:10:470:10 | 2 | 1.0 | -| test.c:470:10:470:10 | (unsigned int)... | 1.0 | -| test.c:470:10:470:15 | ... * ... | 1.0 | -| test.c:470:10:470:19 | ... + ... | 1.0 | -| test.c:470:14:470:15 | ip | 1.0 | -| test.c:470:19:470:19 | 1 | 1.0 | -| test.c:470:19:470:19 | (unsigned int)... | 1.0 | -| test.c:470:24:470:25 | 14 | 1.0 | -| test.c:470:24:470:25 | (unsigned int)... | 1.0 | -| test.c:470:29:470:44 | (...) | 1.0 | -| test.c:470:29:470:49 | ... * ... | 1.0 | -| test.c:470:30:470:30 | 2 | 1.0 | -| test.c:470:30:470:30 | (unsigned int)... | 1.0 | -| test.c:470:30:470:35 | ... * ... | 1.0 | -| test.c:470:30:470:39 | ... + ... | 1.0 | -| test.c:470:30:470:43 | ... + ... | 1.0 | -| test.c:470:34:470:35 | ip | 1.0 | -| test.c:470:39:470:39 | 1 | 1.0 | -| test.c:470:39:470:39 | (unsigned int)... | 1.0 | -| test.c:470:43:470:43 | 1 | 1.0 | -| test.c:470:43:470:43 | (unsigned int)... | 1.0 | -| test.c:470:48:470:49 | 17 | 1.0 | -| test.c:470:48:470:49 | (unsigned int)... | 1.0 | -| test.c:471:5:553:26 | (...) | 9.29462083211502E84 | -| test.c:471:6:471:6 | 2 | 1.0 | -| test.c:471:6:471:6 | (unsigned int)... | 1.0 | -| test.c:471:6:471:23 | ... * ... | 2.0 | -| test.c:471:6:490:42 | ... + ... | 4.524508125E10 | -| test.c:471:6:510:24 | ... > ... | 1.0 | -| test.c:471:6:553:25 | ... ? ... : ... | 9.29462083211502E84 | -| test.c:471:10:471:23 | (...) | 2.0 | -| test.c:471:11:471:12 | ip | 2.0 | -| test.c:471:11:471:17 | ... * ... | 2.0 | -| test.c:471:11:471:22 | ... + ... | 2.0 | -| test.c:471:16:471:17 | 14 | 1.0 | -| test.c:471:16:471:17 | (unsigned int)... | 1.0 | -| test.c:471:21:471:22 | 32 | 1.0 | -| test.c:471:21:471:22 | (unsigned int)... | 1.0 | -| test.c:472:7:490:42 | (...) | 2.2622540625E10 | -| test.c:472:8:472:8 | 4 | 1.0 | -| test.c:472:8:472:8 | (unsigned int)... | 1.0 | -| test.c:472:8:472:25 | ... * ... | 2.0 | -| test.c:472:8:473:26 | ... + ... | 4.0 | -| test.c:472:8:474:26 | ... + ... | 8.0 | -| test.c:472:8:479:22 | ... + ... | 1000.0 | -| test.c:472:8:480:37 | ... > ... | 1.0 | -| test.c:472:8:490:41 | ... ? ... : ... | 2.2622540625E10 | -| test.c:472:12:472:25 | (...) | 2.0 | -| test.c:472:13:472:14 | ip | 2.0 | -| test.c:472:13:472:19 | ... * ... | 2.0 | -| test.c:472:13:472:24 | ... + ... | 2.0 | -| test.c:472:18:472:19 | 14 | 1.0 | -| test.c:472:18:472:19 | (unsigned int)... | 1.0 | -| test.c:472:23:472:24 | 32 | 1.0 | -| test.c:472:23:472:24 | (unsigned int)... | 1.0 | -| test.c:473:9:473:26 | (...) | 2.0 | -| test.c:473:10:473:10 | 2 | 1.0 | -| test.c:473:10:473:10 | (unsigned int)... | 1.0 | -| test.c:473:10:473:15 | ... * ... | 2.0 | -| test.c:473:10:473:20 | ... * ... | 2.0 | -| test.c:473:10:473:25 | ... + ... | 2.0 | -| test.c:473:14:473:15 | ip | 2.0 | -| test.c:473:19:473:20 | 14 | 1.0 | -| test.c:473:19:473:20 | (unsigned int)... | 1.0 | -| test.c:473:24:473:25 | 32 | 1.0 | -| test.c:473:24:473:25 | (unsigned int)... | 1.0 | -| test.c:474:9:474:9 | 2 | 1.0 | -| test.c:474:9:474:9 | (unsigned int)... | 1.0 | -| test.c:474:9:474:26 | ... * ... | 2.0 | -| test.c:474:13:474:26 | (...) | 2.0 | -| test.c:474:14:474:15 | ip | 2.0 | -| test.c:474:14:474:20 | ... * ... | 2.0 | -| test.c:474:14:474:25 | ... + ... | 2.0 | -| test.c:474:19:474:20 | 14 | 1.0 | -| test.c:474:19:474:20 | (unsigned int)... | 1.0 | -| test.c:474:24:474:25 | 64 | 1.0 | -| test.c:474:24:474:25 | (unsigned int)... | 1.0 | -| test.c:475:9:479:22 | (...) | 125.0 | -| test.c:475:10:475:21 | (...) | 2.0 | -| test.c:475:10:475:26 | ... * ... | 2.0 | -| test.c:475:10:475:80 | ... > ... | 1.0 | -| test.c:475:10:479:21 | ... ? ... : ... | 125.0 | -| test.c:475:11:475:11 | 2 | 1.0 | -| test.c:475:11:475:11 | (unsigned int)... | 1.0 | -| test.c:475:11:475:16 | ... * ... | 2.0 | -| test.c:475:11:475:20 | ... + ... | 2.0 | -| test.c:475:15:475:16 | ip | 2.0 | -| test.c:475:20:475:20 | 1 | 1.0 | -| test.c:475:20:475:20 | (unsigned int)... | 1.0 | -| test.c:475:25:475:26 | 14 | 1.0 | -| test.c:475:25:475:26 | (unsigned int)... | 1.0 | -| test.c:475:30:475:80 | (...) | 4.0 | -| test.c:475:31:475:32 | 17 | 1.0 | -| test.c:475:31:475:32 | (unsigned int)... | 1.0 | -| test.c:475:31:475:43 | ... * ... | 2.0 | -| test.c:475:31:475:53 | ... > ... | 1.0 | -| test.c:475:31:475:79 | ... ? ... : ... | 4.0 | -| test.c:475:36:475:43 | (...) | 2.0 | -| test.c:475:37:475:37 | 2 | 1.0 | -| test.c:475:37:475:37 | (unsigned int)... | 1.0 | -| test.c:475:37:475:42 | ... * ... | 2.0 | -| test.c:475:41:475:42 | ip | 2.0 | -| test.c:475:47:475:48 | 17 | 1.0 | -| test.c:475:47:475:48 | (unsigned int)... | 1.0 | -| test.c:475:47:475:53 | ... * ... | 2.0 | -| test.c:475:52:475:53 | ip | 2.0 | -| test.c:475:57:475:58 | 17 | 1.0 | -| test.c:475:57:475:58 | (unsigned int)... | 1.0 | -| test.c:475:57:475:69 | ... * ... | 2.0 | -| test.c:475:62:475:69 | (...) | 2.0 | -| test.c:475:63:475:63 | 2 | 1.0 | -| test.c:475:63:475:63 | (unsigned int)... | 1.0 | -| test.c:475:63:475:68 | ... * ... | 2.0 | -| test.c:475:67:475:68 | ip | 2.0 | -| test.c:475:73:475:74 | 17 | 1.0 | -| test.c:475:73:475:74 | (unsigned int)... | 1.0 | -| test.c:475:73:475:79 | ... * ... | 2.0 | -| test.c:475:78:475:79 | ip | 2.0 | -| test.c:476:13:476:24 | (...) | 5.0 | -| test.c:476:13:476:29 | ... * ... | 5.0 | -| test.c:476:14:476:14 | 2 | 1.0 | -| test.c:476:14:476:14 | (unsigned int)... | 1.0 | -| test.c:476:14:476:19 | ... * ... | 5.0 | -| test.c:476:14:476:23 | ... + ... | 5.0 | -| test.c:476:18:476:19 | ip | 5.0 | -| test.c:476:23:476:23 | 1 | 1.0 | -| test.c:476:23:476:23 | (unsigned int)... | 1.0 | -| test.c:476:28:476:29 | 14 | 1.0 | -| test.c:476:28:476:29 | (unsigned int)... | 1.0 | -| test.c:477:13:477:14 | 14 | 1.0 | -| test.c:477:13:477:14 | (unsigned int)... | 1.0 | -| test.c:477:13:477:25 | ... * ... | 5.0 | -| test.c:477:13:477:35 | ... > ... | 1.0 | -| test.c:477:13:479:21 | ... ? ... : ... | 25.0 | -| test.c:477:18:477:25 | (...) | 5.0 | -| test.c:477:19:477:19 | 2 | 1.0 | -| test.c:477:19:477:19 | (unsigned int)... | 1.0 | -| test.c:477:19:477:24 | ... * ... | 5.0 | -| test.c:477:23:477:24 | ip | 5.0 | -| test.c:477:29:477:30 | 17 | 1.0 | -| test.c:477:29:477:30 | (unsigned int)... | 1.0 | -| test.c:477:29:477:35 | ... * ... | 5.0 | -| test.c:477:34:477:35 | ip | 5.0 | -| test.c:478:15:478:16 | 14 | 1.0 | -| test.c:478:15:478:16 | (unsigned int)... | 1.0 | -| test.c:478:15:478:27 | ... * ... | 5.0 | -| test.c:478:20:478:27 | (...) | 5.0 | -| test.c:478:21:478:21 | 2 | 1.0 | -| test.c:478:21:478:21 | (unsigned int)... | 1.0 | -| test.c:478:21:478:26 | ... * ... | 5.0 | -| test.c:478:25:478:26 | ip | 5.0 | -| test.c:479:15:479:16 | 14 | 1.0 | -| test.c:479:15:479:16 | (unsigned int)... | 1.0 | -| test.c:479:15:479:21 | ... * ... | 5.0 | -| test.c:479:20:479:21 | ip | 5.0 | -| test.c:480:7:480:7 | 2 | 1.0 | -| test.c:480:7:480:7 | (unsigned int)... | 1.0 | -| test.c:480:7:480:12 | ... * ... | 15.0 | -| test.c:480:7:480:17 | ... * ... | 15.0 | -| test.c:480:7:480:37 | ... + ... | 225.0 | -| test.c:480:11:480:12 | ip | 15.0 | -| test.c:480:16:480:17 | 14 | 1.0 | -| test.c:480:16:480:17 | (unsigned int)... | 1.0 | -| test.c:480:21:480:32 | (...) | 15.0 | -| test.c:480:21:480:37 | ... * ... | 15.0 | -| test.c:480:22:480:22 | 2 | 1.0 | -| test.c:480:22:480:22 | (unsigned int)... | 1.0 | -| test.c:480:22:480:27 | ... * ... | 15.0 | -| test.c:480:22:480:31 | ... + ... | 15.0 | -| test.c:480:26:480:27 | ip | 15.0 | -| test.c:480:31:480:31 | 1 | 1.0 | -| test.c:480:31:480:31 | (unsigned int)... | 1.0 | -| test.c:480:36:480:37 | 17 | 1.0 | -| test.c:480:36:480:37 | (unsigned int)... | 1.0 | -| test.c:481:11:481:11 | 4 | 1.0 | -| test.c:481:11:481:11 | (unsigned int)... | 1.0 | -| test.c:481:11:481:28 | ... * ... | 15.0 | -| test.c:481:11:482:28 | ... + ... | 225.0 | -| test.c:481:11:483:28 | ... + ... | 3375.0 | -| test.c:481:11:489:24 | ... + ... | 1.00544625E8 | -| test.c:481:15:481:28 | (...) | 15.0 | -| test.c:481:16:481:17 | ip | 15.0 | -| test.c:481:16:481:22 | ... * ... | 15.0 | -| test.c:481:16:481:27 | ... + ... | 15.0 | -| test.c:481:21:481:22 | 14 | 1.0 | -| test.c:481:21:481:22 | (unsigned int)... | 1.0 | -| test.c:481:26:481:27 | 32 | 1.0 | -| test.c:481:26:481:27 | (unsigned int)... | 1.0 | -| test.c:482:11:482:28 | (...) | 15.0 | -| test.c:482:12:482:12 | 2 | 1.0 | -| test.c:482:12:482:12 | (unsigned int)... | 1.0 | -| test.c:482:12:482:17 | ... * ... | 15.0 | -| test.c:482:12:482:22 | ... * ... | 15.0 | -| test.c:482:12:482:27 | ... + ... | 15.0 | -| test.c:482:16:482:17 | ip | 15.0 | -| test.c:482:21:482:22 | 14 | 1.0 | -| test.c:482:21:482:22 | (unsigned int)... | 1.0 | -| test.c:482:26:482:27 | 32 | 1.0 | -| test.c:482:26:482:27 | (unsigned int)... | 1.0 | -| test.c:483:11:483:11 | 2 | 1.0 | -| test.c:483:11:483:11 | (unsigned int)... | 1.0 | -| test.c:483:11:483:28 | ... * ... | 15.0 | -| test.c:483:15:483:28 | (...) | 15.0 | -| test.c:483:16:483:17 | ip | 15.0 | -| test.c:483:16:483:22 | ... * ... | 15.0 | -| test.c:483:16:483:27 | ... + ... | 15.0 | -| test.c:483:21:483:22 | 14 | 1.0 | -| test.c:483:21:483:22 | (unsigned int)... | 1.0 | -| test.c:483:26:483:27 | 64 | 1.0 | -| test.c:483:26:483:27 | (unsigned int)... | 1.0 | -| test.c:484:11:489:24 | (...) | 29791.0 | -| test.c:484:12:484:23 | (...) | 15.0 | -| test.c:484:12:484:28 | ... * ... | 15.0 | -| test.c:484:12:485:61 | ... > ... | 1.0 | -| test.c:484:12:489:23 | ... ? ... : ... | 29791.0 | -| test.c:484:13:484:13 | 2 | 1.0 | -| test.c:484:13:484:13 | (unsigned int)... | 1.0 | -| test.c:484:13:484:18 | ... * ... | 15.0 | -| test.c:484:13:484:22 | ... + ... | 15.0 | -| test.c:484:17:484:18 | ip | 15.0 | -| test.c:484:22:484:22 | 1 | 1.0 | -| test.c:484:22:484:22 | (unsigned int)... | 1.0 | -| test.c:484:27:484:28 | 14 | 1.0 | -| test.c:484:27:484:28 | (unsigned int)... | 1.0 | -| test.c:485:11:485:61 | (...) | 225.0 | -| test.c:485:12:485:13 | 14 | 1.0 | -| test.c:485:12:485:13 | (unsigned int)... | 1.0 | -| test.c:485:12:485:24 | ... * ... | 15.0 | -| test.c:485:12:485:34 | ... > ... | 1.0 | -| test.c:485:12:485:60 | ... ? ... : ... | 225.0 | -| test.c:485:17:485:24 | (...) | 15.0 | -| test.c:485:18:485:18 | 2 | 1.0 | -| test.c:485:18:485:18 | (unsigned int)... | 1.0 | -| test.c:485:18:485:23 | ... * ... | 15.0 | -| test.c:485:22:485:23 | ip | 15.0 | -| test.c:485:28:485:29 | 17 | 1.0 | -| test.c:485:28:485:29 | (unsigned int)... | 1.0 | -| test.c:485:28:485:34 | ... * ... | 15.0 | -| test.c:485:33:485:34 | ip | 15.0 | -| test.c:485:38:485:39 | 17 | 1.0 | -| test.c:485:38:485:39 | (unsigned int)... | 1.0 | -| test.c:485:38:485:50 | ... * ... | 15.0 | -| test.c:485:43:485:50 | (...) | 15.0 | -| test.c:485:44:485:44 | 2 | 1.0 | -| test.c:485:44:485:44 | (unsigned int)... | 1.0 | -| test.c:485:44:485:49 | ... * ... | 15.0 | -| test.c:485:48:485:49 | ip | 15.0 | -| test.c:485:54:485:55 | 17 | 1.0 | -| test.c:485:54:485:55 | (unsigned int)... | 1.0 | -| test.c:485:54:485:60 | ... * ... | 15.0 | -| test.c:485:59:485:60 | ip | 15.0 | -| test.c:486:15:486:26 | (...) | 31.0 | -| test.c:486:15:486:31 | ... * ... | 31.0 | -| test.c:486:16:486:16 | 2 | 1.0 | -| test.c:486:16:486:16 | (unsigned int)... | 1.0 | -| test.c:486:16:486:21 | ... * ... | 31.0 | -| test.c:486:16:486:25 | ... + ... | 31.0 | -| test.c:486:20:486:21 | ip | 31.0 | -| test.c:486:25:486:25 | 1 | 1.0 | -| test.c:486:25:486:25 | (unsigned int)... | 1.0 | -| test.c:486:30:486:31 | 14 | 1.0 | -| test.c:486:30:486:31 | (unsigned int)... | 1.0 | -| test.c:487:15:487:16 | 14 | 1.0 | -| test.c:487:15:487:16 | (unsigned int)... | 1.0 | -| test.c:487:15:487:27 | ... * ... | 31.0 | -| test.c:487:15:487:37 | ... > ... | 1.0 | -| test.c:487:15:489:23 | ... ? ... : ... | 961.0 | -| test.c:487:20:487:27 | (...) | 31.0 | -| test.c:487:21:487:21 | 2 | 1.0 | -| test.c:487:21:487:21 | (unsigned int)... | 1.0 | -| test.c:487:21:487:26 | ... * ... | 31.0 | -| test.c:487:25:487:26 | ip | 31.0 | -| test.c:487:31:487:32 | 17 | 1.0 | -| test.c:487:31:487:32 | (unsigned int)... | 1.0 | -| test.c:487:31:487:37 | ... * ... | 31.0 | -| test.c:487:36:487:37 | ip | 31.0 | -| test.c:488:17:488:18 | 14 | 1.0 | -| test.c:488:17:488:18 | (unsigned int)... | 1.0 | -| test.c:488:17:488:29 | ... * ... | 31.0 | -| test.c:488:22:488:29 | (...) | 31.0 | -| test.c:488:23:488:23 | 2 | 1.0 | -| test.c:488:23:488:23 | (unsigned int)... | 1.0 | -| test.c:488:23:488:28 | ... * ... | 31.0 | -| test.c:488:27:488:28 | ip | 31.0 | -| test.c:489:17:489:18 | 14 | 1.0 | -| test.c:489:17:489:18 | (unsigned int)... | 1.0 | -| test.c:489:17:489:23 | ... * ... | 31.0 | -| test.c:489:22:489:23 | ip | 31.0 | -| test.c:490:11:490:11 | 2 | 1.0 | -| test.c:490:11:490:11 | (unsigned int)... | 1.0 | -| test.c:490:11:490:16 | ... * ... | 15.0 | -| test.c:490:11:490:21 | ... * ... | 15.0 | -| test.c:490:11:490:41 | ... + ... | 225.0 | -| test.c:490:15:490:16 | ip | 15.0 | -| test.c:490:20:490:21 | 14 | 1.0 | -| test.c:490:20:490:21 | (unsigned int)... | 1.0 | -| test.c:490:25:490:36 | (...) | 15.0 | -| test.c:490:25:490:41 | ... * ... | 15.0 | -| test.c:490:26:490:26 | 2 | 1.0 | -| test.c:490:26:490:26 | (unsigned int)... | 1.0 | -| test.c:490:26:490:31 | ... * ... | 15.0 | -| test.c:490:26:490:35 | ... + ... | 15.0 | -| test.c:490:30:490:31 | ip | 15.0 | -| test.c:490:35:490:35 | 1 | 1.0 | -| test.c:490:35:490:35 | (unsigned int)... | 1.0 | -| test.c:490:40:490:41 | 17 | 1.0 | -| test.c:490:40:490:41 | (unsigned int)... | 1.0 | -| test.c:491:5:510:24 | (...) | 6.6142118960740864E25 | -| test.c:491:6:491:6 | 4 | 1.0 | -| test.c:491:6:491:6 | (unsigned int)... | 1.0 | -| test.c:491:6:491:23 | ... * ... | 108.0 | -| test.c:491:6:492:24 | ... + ... | 11664.0 | -| test.c:491:6:493:24 | ... + ... | 1259712.0 | -| test.c:491:6:498:20 | ... + ... | 1.2872131505856E13 | -| test.c:491:6:499:55 | ... > ... | 1.0 | -| test.c:491:6:510:23 | ... ? ... : ... | 6.6142118960740864E25 | -| test.c:491:10:491:23 | (...) | 108.0 | -| test.c:491:11:491:12 | ip | 108.0 | -| test.c:491:11:491:17 | ... * ... | 108.0 | -| test.c:491:11:491:22 | ... + ... | 108.0 | -| test.c:491:16:491:17 | 14 | 1.0 | -| test.c:491:16:491:17 | (unsigned int)... | 1.0 | -| test.c:491:21:491:22 | 32 | 1.0 | -| test.c:491:21:491:22 | (unsigned int)... | 1.0 | -| test.c:492:7:492:24 | (...) | 108.0 | -| test.c:492:8:492:8 | 2 | 1.0 | -| test.c:492:8:492:8 | (unsigned int)... | 1.0 | -| test.c:492:8:492:13 | ... * ... | 108.0 | -| test.c:492:8:492:18 | ... * ... | 108.0 | -| test.c:492:8:492:23 | ... + ... | 108.0 | -| test.c:492:12:492:13 | ip | 108.0 | -| test.c:492:17:492:18 | 14 | 1.0 | -| test.c:492:17:492:18 | (unsigned int)... | 1.0 | -| test.c:492:22:492:23 | 32 | 1.0 | -| test.c:492:22:492:23 | (unsigned int)... | 1.0 | -| test.c:493:7:493:7 | 2 | 1.0 | -| test.c:493:7:493:7 | (unsigned int)... | 1.0 | -| test.c:493:7:493:24 | ... * ... | 108.0 | -| test.c:493:11:493:24 | (...) | 108.0 | -| test.c:493:12:493:13 | ip | 108.0 | -| test.c:493:12:493:18 | ... * ... | 108.0 | -| test.c:493:12:493:23 | ... + ... | 108.0 | -| test.c:493:17:493:18 | 14 | 1.0 | -| test.c:493:17:493:18 | (unsigned int)... | 1.0 | -| test.c:493:22:493:23 | 64 | 1.0 | -| test.c:493:22:493:23 | (unsigned int)... | 1.0 | -| test.c:494:7:498:20 | (...) | 1.0218313E7 | -| test.c:494:8:494:19 | (...) | 108.0 | -| test.c:494:8:494:24 | ... * ... | 108.0 | -| test.c:494:8:494:78 | ... > ... | 1.0 | -| test.c:494:8:498:19 | ... ? ... : ... | 1.0218313E7 | -| test.c:494:9:494:9 | 2 | 1.0 | -| test.c:494:9:494:9 | (unsigned int)... | 1.0 | -| test.c:494:9:494:14 | ... * ... | 108.0 | -| test.c:494:9:494:18 | ... + ... | 108.0 | -| test.c:494:13:494:14 | ip | 108.0 | -| test.c:494:18:494:18 | 1 | 1.0 | -| test.c:494:18:494:18 | (unsigned int)... | 1.0 | -| test.c:494:23:494:24 | 14 | 1.0 | -| test.c:494:23:494:24 | (unsigned int)... | 1.0 | -| test.c:494:28:494:78 | (...) | 11664.0 | -| test.c:494:29:494:30 | 17 | 1.0 | -| test.c:494:29:494:30 | (unsigned int)... | 1.0 | -| test.c:494:29:494:41 | ... * ... | 108.0 | -| test.c:494:29:494:51 | ... > ... | 1.0 | -| test.c:494:29:494:77 | ... ? ... : ... | 11664.0 | -| test.c:494:34:494:41 | (...) | 108.0 | -| test.c:494:35:494:35 | 2 | 1.0 | -| test.c:494:35:494:35 | (unsigned int)... | 1.0 | -| test.c:494:35:494:40 | ... * ... | 108.0 | -| test.c:494:39:494:40 | ip | 108.0 | -| test.c:494:45:494:46 | 17 | 1.0 | -| test.c:494:45:494:46 | (unsigned int)... | 1.0 | -| test.c:494:45:494:51 | ... * ... | 108.0 | -| test.c:494:50:494:51 | ip | 108.0 | -| test.c:494:55:494:56 | 17 | 1.0 | -| test.c:494:55:494:56 | (unsigned int)... | 1.0 | -| test.c:494:55:494:67 | ... * ... | 108.0 | -| test.c:494:60:494:67 | (...) | 108.0 | -| test.c:494:61:494:61 | 2 | 1.0 | -| test.c:494:61:494:61 | (unsigned int)... | 1.0 | -| test.c:494:61:494:66 | ... * ... | 108.0 | -| test.c:494:65:494:66 | ip | 108.0 | -| test.c:494:71:494:72 | 17 | 1.0 | -| test.c:494:71:494:72 | (unsigned int)... | 1.0 | -| test.c:494:71:494:77 | ... * ... | 108.0 | -| test.c:494:76:494:77 | ip | 108.0 | -| test.c:495:11:495:22 | (...) | 217.0 | -| test.c:495:11:495:27 | ... * ... | 217.0 | -| test.c:495:12:495:12 | 2 | 1.0 | -| test.c:495:12:495:12 | (unsigned int)... | 1.0 | -| test.c:495:12:495:17 | ... * ... | 217.0 | -| test.c:495:12:495:21 | ... + ... | 217.0 | -| test.c:495:16:495:17 | ip | 217.0 | -| test.c:495:21:495:21 | 1 | 1.0 | -| test.c:495:21:495:21 | (unsigned int)... | 1.0 | -| test.c:495:26:495:27 | 14 | 1.0 | -| test.c:495:26:495:27 | (unsigned int)... | 1.0 | -| test.c:496:11:496:12 | 14 | 1.0 | -| test.c:496:11:496:12 | (unsigned int)... | 1.0 | -| test.c:496:11:496:23 | ... * ... | 217.0 | -| test.c:496:11:496:33 | ... > ... | 1.0 | -| test.c:496:11:498:19 | ... ? ... : ... | 47089.0 | -| test.c:496:16:496:23 | (...) | 217.0 | -| test.c:496:17:496:17 | 2 | 1.0 | -| test.c:496:17:496:17 | (unsigned int)... | 1.0 | -| test.c:496:17:496:22 | ... * ... | 217.0 | -| test.c:496:21:496:22 | ip | 217.0 | -| test.c:496:27:496:28 | 17 | 1.0 | -| test.c:496:27:496:28 | (unsigned int)... | 1.0 | -| test.c:496:27:496:33 | ... * ... | 217.0 | -| test.c:496:32:496:33 | ip | 217.0 | -| test.c:497:13:497:14 | 14 | 1.0 | -| test.c:497:13:497:14 | (unsigned int)... | 1.0 | -| test.c:497:13:497:25 | ... * ... | 217.0 | -| test.c:497:18:497:25 | (...) | 217.0 | -| test.c:497:19:497:19 | 2 | 1.0 | -| test.c:497:19:497:19 | (unsigned int)... | 1.0 | -| test.c:497:19:497:24 | ... * ... | 217.0 | -| test.c:497:23:497:24 | ip | 217.0 | -| test.c:498:13:498:14 | 14 | 1.0 | -| test.c:498:13:498:14 | (unsigned int)... | 1.0 | -| test.c:498:13:498:19 | ... * ... | 217.0 | -| test.c:498:18:498:19 | ip | 217.0 | -| test.c:499:5:499:55 | (...) | 423801.0 | -| test.c:499:6:499:7 | 14 | 1.0 | -| test.c:499:6:499:7 | (unsigned int)... | 1.0 | -| test.c:499:6:499:12 | ... * ... | 651.0 | -| test.c:499:6:499:28 | ... > ... | 1.0 | -| test.c:499:6:499:54 | ... ? ... : ... | 423801.0 | -| test.c:499:11:499:12 | ip | 651.0 | -| test.c:499:16:499:23 | (...) | 651.0 | -| test.c:499:16:499:28 | ... * ... | 651.0 | -| test.c:499:17:499:18 | ip | 651.0 | -| test.c:499:17:499:22 | ... + ... | 651.0 | -| test.c:499:22:499:22 | 1 | 1.0 | -| test.c:499:22:499:22 | (unsigned int)... | 1.0 | -| test.c:499:27:499:28 | 17 | 1.0 | -| test.c:499:27:499:28 | (unsigned int)... | 1.0 | -| test.c:499:32:499:33 | 17 | 1.0 | -| test.c:499:32:499:33 | (unsigned int)... | 1.0 | -| test.c:499:32:499:38 | ... * ... | 651.0 | -| test.c:499:37:499:38 | ip | 651.0 | -| test.c:499:42:499:49 | (...) | 651.0 | -| test.c:499:42:499:54 | ... * ... | 651.0 | -| test.c:499:43:499:44 | ip | 651.0 | -| test.c:499:43:499:48 | ... + ... | 651.0 | -| test.c:499:48:499:48 | 1 | 1.0 | -| test.c:499:48:499:48 | (unsigned int)... | 1.0 | -| test.c:499:53:499:54 | 17 | 1.0 | -| test.c:499:53:499:54 | (unsigned int)... | 1.0 | -| test.c:500:9:500:9 | 4 | 1.0 | -| test.c:500:9:500:9 | (unsigned int)... | 1.0 | -| test.c:500:9:500:26 | ... * ... | 1302.0 | -| test.c:500:9:501:26 | ... + ... | 1695204.0 | -| test.c:500:9:502:26 | ... + ... | 2.207155608E9 | -| test.c:500:9:507:22 | ... + ... | 3.9017203216097214E19 | -| test.c:500:13:500:26 | (...) | 1302.0 | -| test.c:500:14:500:15 | ip | 1302.0 | -| test.c:500:14:500:20 | ... * ... | 1302.0 | -| test.c:500:14:500:25 | ... + ... | 1302.0 | -| test.c:500:19:500:20 | 14 | 1.0 | -| test.c:500:19:500:20 | (unsigned int)... | 1.0 | -| test.c:500:24:500:25 | 32 | 1.0 | -| test.c:500:24:500:25 | (unsigned int)... | 1.0 | -| test.c:501:9:501:26 | (...) | 1302.0 | -| test.c:501:10:501:10 | 2 | 1.0 | -| test.c:501:10:501:10 | (unsigned int)... | 1.0 | -| test.c:501:10:501:15 | ... * ... | 1302.0 | -| test.c:501:10:501:20 | ... * ... | 1302.0 | -| test.c:501:10:501:25 | ... + ... | 1302.0 | -| test.c:501:14:501:15 | ip | 1302.0 | -| test.c:501:19:501:20 | 14 | 1.0 | -| test.c:501:19:501:20 | (unsigned int)... | 1.0 | -| test.c:501:24:501:25 | 32 | 1.0 | -| test.c:501:24:501:25 | (unsigned int)... | 1.0 | -| test.c:502:9:502:9 | 2 | 1.0 | -| test.c:502:9:502:9 | (unsigned int)... | 1.0 | -| test.c:502:9:502:26 | ... * ... | 1302.0 | -| test.c:502:13:502:26 | (...) | 1302.0 | -| test.c:502:14:502:15 | ip | 1302.0 | -| test.c:502:14:502:20 | ... * ... | 1302.0 | -| test.c:502:14:502:25 | ... + ... | 1302.0 | -| test.c:502:19:502:20 | 14 | 1.0 | -| test.c:502:19:502:20 | (unsigned int)... | 1.0 | -| test.c:502:24:502:25 | 64 | 1.0 | -| test.c:502:24:502:25 | (unsigned int)... | 1.0 | -| test.c:503:9:507:22 | (...) | 1.7677595125E10 | -| test.c:503:10:503:21 | (...) | 1302.0 | -| test.c:503:10:503:26 | ... * ... | 1302.0 | -| test.c:503:10:503:80 | ... > ... | 1.0 | -| test.c:503:10:507:21 | ... ? ... : ... | 1.7677595125E10 | -| test.c:503:11:503:11 | 2 | 1.0 | -| test.c:503:11:503:11 | (unsigned int)... | 1.0 | -| test.c:503:11:503:16 | ... * ... | 1302.0 | -| test.c:503:11:503:20 | ... + ... | 1302.0 | -| test.c:503:15:503:16 | ip | 1302.0 | -| test.c:503:20:503:20 | 1 | 1.0 | -| test.c:503:20:503:20 | (unsigned int)... | 1.0 | -| test.c:503:25:503:26 | 14 | 1.0 | -| test.c:503:25:503:26 | (unsigned int)... | 1.0 | -| test.c:503:30:503:80 | (...) | 1695204.0 | -| test.c:503:31:503:32 | 17 | 1.0 | -| test.c:503:31:503:32 | (unsigned int)... | 1.0 | -| test.c:503:31:503:43 | ... * ... | 1302.0 | -| test.c:503:31:503:53 | ... > ... | 1.0 | -| test.c:503:31:503:79 | ... ? ... : ... | 1695204.0 | -| test.c:503:36:503:43 | (...) | 1302.0 | -| test.c:503:37:503:37 | 2 | 1.0 | -| test.c:503:37:503:37 | (unsigned int)... | 1.0 | -| test.c:503:37:503:42 | ... * ... | 1302.0 | -| test.c:503:41:503:42 | ip | 1302.0 | -| test.c:503:47:503:48 | 17 | 1.0 | -| test.c:503:47:503:48 | (unsigned int)... | 1.0 | -| test.c:503:47:503:53 | ... * ... | 1302.0 | -| test.c:503:52:503:53 | ip | 1302.0 | -| test.c:503:57:503:58 | 17 | 1.0 | -| test.c:503:57:503:58 | (unsigned int)... | 1.0 | -| test.c:503:57:503:69 | ... * ... | 1302.0 | -| test.c:503:62:503:69 | (...) | 1302.0 | -| test.c:503:63:503:63 | 2 | 1.0 | -| test.c:503:63:503:63 | (unsigned int)... | 1.0 | -| test.c:503:63:503:68 | ... * ... | 1302.0 | -| test.c:503:67:503:68 | ip | 1302.0 | -| test.c:503:73:503:74 | 17 | 1.0 | -| test.c:503:73:503:74 | (unsigned int)... | 1.0 | -| test.c:503:73:503:79 | ... * ... | 1302.0 | -| test.c:503:78:503:79 | ip | 1302.0 | -| test.c:504:13:504:24 | (...) | 2605.0 | -| test.c:504:13:504:29 | ... * ... | 2605.0 | -| test.c:504:14:504:14 | 2 | 1.0 | -| test.c:504:14:504:14 | (unsigned int)... | 1.0 | -| test.c:504:14:504:19 | ... * ... | 2605.0 | -| test.c:504:14:504:23 | ... + ... | 2605.0 | -| test.c:504:18:504:19 | ip | 2605.0 | -| test.c:504:23:504:23 | 1 | 1.0 | -| test.c:504:23:504:23 | (unsigned int)... | 1.0 | -| test.c:504:28:504:29 | 14 | 1.0 | -| test.c:504:28:504:29 | (unsigned int)... | 1.0 | -| test.c:505:13:505:14 | 14 | 1.0 | -| test.c:505:13:505:14 | (unsigned int)... | 1.0 | -| test.c:505:13:505:25 | ... * ... | 2605.0 | -| test.c:505:13:505:35 | ... > ... | 1.0 | -| test.c:505:13:507:21 | ... ? ... : ... | 6786025.0 | -| test.c:505:18:505:25 | (...) | 2605.0 | -| test.c:505:19:505:19 | 2 | 1.0 | -| test.c:505:19:505:19 | (unsigned int)... | 1.0 | -| test.c:505:19:505:24 | ... * ... | 2605.0 | -| test.c:505:23:505:24 | ip | 2605.0 | -| test.c:505:29:505:30 | 17 | 1.0 | -| test.c:505:29:505:30 | (unsigned int)... | 1.0 | -| test.c:505:29:505:35 | ... * ... | 2605.0 | -| test.c:505:34:505:35 | ip | 2605.0 | -| test.c:506:15:506:16 | 14 | 1.0 | -| test.c:506:15:506:16 | (unsigned int)... | 1.0 | -| test.c:506:15:506:27 | ... * ... | 2605.0 | -| test.c:506:20:506:27 | (...) | 2605.0 | -| test.c:506:21:506:21 | 2 | 1.0 | -| test.c:506:21:506:21 | (unsigned int)... | 1.0 | -| test.c:506:21:506:26 | ... * ... | 2605.0 | -| test.c:506:25:506:26 | ip | 2605.0 | -| test.c:507:15:507:16 | 14 | 1.0 | -| test.c:507:15:507:16 | (unsigned int)... | 1.0 | -| test.c:507:15:507:21 | ... * ... | 2605.0 | -| test.c:507:20:507:21 | ip | 2605.0 | -| test.c:508:9:508:10 | 14 | 1.0 | -| test.c:508:9:508:10 | (unsigned int)... | 1.0 | -| test.c:508:9:508:15 | ... * ... | 1302.0 | -| test.c:508:9:508:31 | ... > ... | 1.0 | -| test.c:508:9:510:23 | ... ? ... : ... | 1695204.0 | -| test.c:508:14:508:15 | ip | 1302.0 | -| test.c:508:19:508:26 | (...) | 1302.0 | -| test.c:508:19:508:31 | ... * ... | 1302.0 | -| test.c:508:20:508:21 | ip | 1302.0 | -| test.c:508:20:508:25 | ... + ... | 1302.0 | -| test.c:508:25:508:25 | 1 | 1.0 | -| test.c:508:25:508:25 | (unsigned int)... | 1.0 | -| test.c:508:30:508:31 | 17 | 1.0 | -| test.c:508:30:508:31 | (unsigned int)... | 1.0 | -| test.c:509:11:509:12 | 14 | 1.0 | -| test.c:509:11:509:12 | (unsigned int)... | 1.0 | -| test.c:509:11:509:17 | ... * ... | 1302.0 | -| test.c:509:16:509:17 | ip | 1302.0 | -| test.c:510:11:510:18 | (...) | 1302.0 | -| test.c:510:11:510:23 | ... * ... | 1302.0 | -| test.c:510:12:510:13 | ip | 1302.0 | -| test.c:510:12:510:17 | ... + ... | 1302.0 | -| test.c:510:17:510:17 | 1 | 1.0 | -| test.c:510:17:510:17 | (unsigned int)... | 1.0 | -| test.c:510:22:510:23 | 14 | 1.0 | -| test.c:510:22:510:23 | (unsigned int)... | 1.0 | -| test.c:511:9:511:9 | 2 | 1.0 | -| test.c:511:9:511:9 | (unsigned int)... | 1.0 | -| test.c:511:9:511:26 | ... * ... | 10419.0 | -| test.c:511:9:531:44 | ... + ... | 1.9449636104972528E43 | -| test.c:511:13:511:26 | (...) | 10419.0 | -| test.c:511:14:511:15 | ip | 10419.0 | -| test.c:511:14:511:20 | ... * ... | 10419.0 | -| test.c:511:14:511:25 | ... + ... | 10419.0 | -| test.c:511:19:511:20 | 14 | 1.0 | -| test.c:511:19:511:20 | (unsigned int)... | 1.0 | -| test.c:511:24:511:25 | 32 | 1.0 | -| test.c:511:24:511:25 | (unsigned int)... | 1.0 | -| test.c:512:9:531:44 | (...) | 1.8667469147684545E39 | -| test.c:512:10:512:10 | 4 | 1.0 | -| test.c:512:10:512:10 | (unsigned int)... | 1.0 | -| test.c:512:10:512:27 | ... * ... | 10419.0 | -| test.c:512:10:513:28 | ... + ... | 1.08555561E8 | -| test.c:512:10:514:28 | ... + ... | 1.131040390059E12 | -| test.c:512:10:520:24 | ... + ... | 1.0235492350954187E25 | -| test.c:512:10:521:39 | ... > ... | 1.0 | -| test.c:512:10:531:43 | ... ? ... : ... | 1.8667469147684545E39 | -| test.c:512:14:512:27 | (...) | 10419.0 | -| test.c:512:15:512:16 | ip | 10419.0 | -| test.c:512:15:512:21 | ... * ... | 10419.0 | -| test.c:512:15:512:26 | ... + ... | 10419.0 | -| test.c:512:20:512:21 | 14 | 1.0 | -| test.c:512:20:512:21 | (unsigned int)... | 1.0 | -| test.c:512:25:512:26 | 32 | 1.0 | -| test.c:512:25:512:26 | (unsigned int)... | 1.0 | -| test.c:513:11:513:28 | (...) | 10419.0 | -| test.c:513:12:513:12 | 2 | 1.0 | -| test.c:513:12:513:12 | (unsigned int)... | 1.0 | -| test.c:513:12:513:17 | ... * ... | 10419.0 | -| test.c:513:12:513:22 | ... * ... | 10419.0 | -| test.c:513:12:513:27 | ... + ... | 10419.0 | -| test.c:513:16:513:17 | ip | 10419.0 | -| test.c:513:21:513:22 | 14 | 1.0 | -| test.c:513:21:513:22 | (unsigned int)... | 1.0 | -| test.c:513:26:513:27 | 32 | 1.0 | -| test.c:513:26:513:27 | (unsigned int)... | 1.0 | -| test.c:514:11:514:11 | 2 | 1.0 | -| test.c:514:11:514:11 | (unsigned int)... | 1.0 | -| test.c:514:11:514:28 | ... * ... | 10419.0 | -| test.c:514:15:514:28 | (...) | 10419.0 | -| test.c:514:16:514:17 | ip | 10419.0 | -| test.c:514:16:514:22 | ... * ... | 10419.0 | -| test.c:514:16:514:27 | ... + ... | 10419.0 | -| test.c:514:21:514:22 | 14 | 1.0 | -| test.c:514:21:514:22 | (unsigned int)... | 1.0 | -| test.c:514:26:514:27 | 64 | 1.0 | -| test.c:514:26:514:27 | (unsigned int)... | 1.0 | -| test.c:515:11:520:24 | (...) | 9.049625849719E12 | -| test.c:515:12:515:23 | (...) | 10419.0 | -| test.c:515:12:515:28 | ... * ... | 10419.0 | -| test.c:515:12:516:61 | ... > ... | 1.0 | -| test.c:515:12:520:23 | ... ? ... : ... | 9.049625849719E12 | -| test.c:515:13:515:13 | 2 | 1.0 | -| test.c:515:13:515:13 | (unsigned int)... | 1.0 | -| test.c:515:13:515:18 | ... * ... | 10419.0 | -| test.c:515:13:515:22 | ... + ... | 10419.0 | -| test.c:515:17:515:18 | ip | 10419.0 | -| test.c:515:22:515:22 | 1 | 1.0 | -| test.c:515:22:515:22 | (unsigned int)... | 1.0 | -| test.c:515:27:515:28 | 14 | 1.0 | -| test.c:515:27:515:28 | (unsigned int)... | 1.0 | -| test.c:516:11:516:61 | (...) | 1.08555561E8 | -| test.c:516:12:516:13 | 14 | 1.0 | -| test.c:516:12:516:13 | (unsigned int)... | 1.0 | -| test.c:516:12:516:24 | ... * ... | 10419.0 | -| test.c:516:12:516:34 | ... > ... | 1.0 | -| test.c:516:12:516:60 | ... ? ... : ... | 1.08555561E8 | -| test.c:516:17:516:24 | (...) | 10419.0 | -| test.c:516:18:516:18 | 2 | 1.0 | -| test.c:516:18:516:18 | (unsigned int)... | 1.0 | -| test.c:516:18:516:23 | ... * ... | 10419.0 | -| test.c:516:22:516:23 | ip | 10419.0 | -| test.c:516:28:516:29 | 17 | 1.0 | -| test.c:516:28:516:29 | (unsigned int)... | 1.0 | -| test.c:516:28:516:34 | ... * ... | 10419.0 | -| test.c:516:33:516:34 | ip | 10419.0 | -| test.c:516:38:516:39 | 17 | 1.0 | -| test.c:516:38:516:39 | (unsigned int)... | 1.0 | -| test.c:516:38:516:50 | ... * ... | 10419.0 | -| test.c:516:43:516:50 | (...) | 10419.0 | -| test.c:516:44:516:44 | 2 | 1.0 | -| test.c:516:44:516:44 | (unsigned int)... | 1.0 | -| test.c:516:44:516:49 | ... * ... | 10419.0 | -| test.c:516:48:516:49 | ip | 10419.0 | -| test.c:516:54:516:55 | 17 | 1.0 | -| test.c:516:54:516:55 | (unsigned int)... | 1.0 | -| test.c:516:54:516:60 | ... * ... | 10419.0 | -| test.c:516:59:516:60 | ip | 10419.0 | -| test.c:517:15:517:26 | (...) | 20839.0 | -| test.c:517:15:517:31 | ... * ... | 20839.0 | -| test.c:517:16:517:16 | 2 | 1.0 | -| test.c:517:16:517:16 | (unsigned int)... | 1.0 | -| test.c:517:16:517:21 | ... * ... | 20839.0 | -| test.c:517:16:517:25 | ... + ... | 20839.0 | -| test.c:517:20:517:21 | ip | 20839.0 | -| test.c:517:25:517:25 | 1 | 1.0 | -| test.c:517:25:517:25 | (unsigned int)... | 1.0 | -| test.c:517:30:517:31 | 14 | 1.0 | -| test.c:517:30:517:31 | (unsigned int)... | 1.0 | -| test.c:518:15:518:16 | 14 | 1.0 | -| test.c:518:15:518:16 | (unsigned int)... | 1.0 | -| test.c:518:15:518:27 | ... * ... | 20839.0 | -| test.c:518:15:518:37 | ... > ... | 1.0 | -| test.c:518:15:520:23 | ... ? ... : ... | 4.34263921E8 | -| test.c:518:20:518:27 | (...) | 20839.0 | -| test.c:518:21:518:21 | 2 | 1.0 | -| test.c:518:21:518:21 | (unsigned int)... | 1.0 | -| test.c:518:21:518:26 | ... * ... | 20839.0 | -| test.c:518:25:518:26 | ip | 20839.0 | -| test.c:518:31:518:32 | 17 | 1.0 | -| test.c:518:31:518:32 | (unsigned int)... | 1.0 | -| test.c:518:31:518:37 | ... * ... | 20839.0 | -| test.c:518:36:518:37 | ip | 20839.0 | -| test.c:519:17:519:18 | 14 | 1.0 | -| test.c:519:17:519:18 | (unsigned int)... | 1.0 | -| test.c:519:17:519:29 | ... * ... | 20839.0 | -| test.c:519:22:519:29 | (...) | 20839.0 | -| test.c:519:23:519:23 | 2 | 1.0 | -| test.c:519:23:519:23 | (unsigned int)... | 1.0 | -| test.c:519:23:519:28 | ... * ... | 20839.0 | -| test.c:519:27:519:28 | ip | 20839.0 | -| test.c:520:17:520:18 | 14 | 1.0 | -| test.c:520:17:520:18 | (unsigned int)... | 1.0 | -| test.c:520:17:520:23 | ... * ... | 20839.0 | -| test.c:520:22:520:23 | ip | 20839.0 | -| test.c:521:9:521:9 | 2 | 1.0 | -| test.c:521:9:521:9 | (unsigned int)... | 1.0 | -| test.c:521:9:521:14 | ... * ... | 62517.0 | -| test.c:521:9:521:19 | ... * ... | 62517.0 | -| test.c:521:9:521:39 | ... + ... | 3.908375289E9 | -| test.c:521:13:521:14 | ip | 62517.0 | -| test.c:521:18:521:19 | 14 | 1.0 | -| test.c:521:18:521:19 | (unsigned int)... | 1.0 | -| test.c:521:23:521:34 | (...) | 62517.0 | -| test.c:521:23:521:39 | ... * ... | 62517.0 | -| test.c:521:24:521:24 | 2 | 1.0 | -| test.c:521:24:521:24 | (unsigned int)... | 1.0 | -| test.c:521:24:521:29 | ... * ... | 62517.0 | -| test.c:521:24:521:33 | ... + ... | 62517.0 | -| test.c:521:28:521:29 | ip | 62517.0 | -| test.c:521:33:521:33 | 1 | 1.0 | -| test.c:521:33:521:33 | (unsigned int)... | 1.0 | -| test.c:521:38:521:39 | 17 | 1.0 | -| test.c:521:38:521:39 | (unsigned int)... | 1.0 | -| test.c:522:13:522:13 | 4 | 1.0 | -| test.c:522:13:522:13 | (unsigned int)... | 1.0 | -| test.c:522:13:522:30 | ... * ... | 62517.0 | -| test.c:522:13:523:30 | ... + ... | 3.908375289E9 | -| test.c:522:13:524:30 | ... + ... | 2.44339897942413E14 | -| test.c:522:13:530:26 | ... + ... | 4.7762734556795386E29 | -| test.c:522:17:522:30 | (...) | 62517.0 | -| test.c:522:18:522:19 | ip | 62517.0 | -| test.c:522:18:522:24 | ... * ... | 62517.0 | -| test.c:522:18:522:29 | ... + ... | 62517.0 | -| test.c:522:23:522:24 | 14 | 1.0 | -| test.c:522:23:522:24 | (unsigned int)... | 1.0 | -| test.c:522:28:522:29 | 32 | 1.0 | -| test.c:522:28:522:29 | (unsigned int)... | 1.0 | -| test.c:523:13:523:30 | (...) | 62517.0 | -| test.c:523:14:523:14 | 2 | 1.0 | -| test.c:523:14:523:14 | (unsigned int)... | 1.0 | -| test.c:523:14:523:19 | ... * ... | 62517.0 | -| test.c:523:14:523:24 | ... * ... | 62517.0 | -| test.c:523:14:523:29 | ... + ... | 62517.0 | -| test.c:523:18:523:19 | ip | 62517.0 | -| test.c:523:23:523:24 | 14 | 1.0 | -| test.c:523:23:523:24 | (unsigned int)... | 1.0 | -| test.c:523:28:523:29 | 32 | 1.0 | -| test.c:523:28:523:29 | (unsigned int)... | 1.0 | -| test.c:524:13:524:13 | 2 | 1.0 | -| test.c:524:13:524:13 | (unsigned int)... | 1.0 | -| test.c:524:13:524:30 | ... * ... | 62517.0 | -| test.c:524:17:524:30 | (...) | 62517.0 | -| test.c:524:18:524:19 | ip | 62517.0 | -| test.c:524:18:524:24 | ... * ... | 62517.0 | -| test.c:524:18:524:29 | ... + ... | 62517.0 | -| test.c:524:23:524:24 | 14 | 1.0 | -| test.c:524:23:524:24 | (unsigned int)... | 1.0 | -| test.c:524:28:524:29 | 64 | 1.0 | -| test.c:524:28:524:29 | (unsigned int)... | 1.0 | -| test.c:525:13:530:26 | (...) | 1.954766084417875E15 | -| test.c:525:14:525:25 | (...) | 62517.0 | -| test.c:525:14:525:30 | ... * ... | 62517.0 | -| test.c:525:14:526:63 | ... > ... | 1.0 | -| test.c:525:14:530:25 | ... ? ... : ... | 1.954766084417875E15 | -| test.c:525:15:525:15 | 2 | 1.0 | -| test.c:525:15:525:15 | (unsigned int)... | 1.0 | -| test.c:525:15:525:20 | ... * ... | 62517.0 | -| test.c:525:15:525:24 | ... + ... | 62517.0 | -| test.c:525:19:525:20 | ip | 62517.0 | -| test.c:525:24:525:24 | 1 | 1.0 | -| test.c:525:24:525:24 | (unsigned int)... | 1.0 | -| test.c:525:29:525:30 | 14 | 1.0 | -| test.c:525:29:525:30 | (unsigned int)... | 1.0 | -| test.c:526:13:526:63 | (...) | 3.908375289E9 | -| test.c:526:14:526:15 | 14 | 1.0 | -| test.c:526:14:526:15 | (unsigned int)... | 1.0 | -| test.c:526:14:526:26 | ... * ... | 62517.0 | -| test.c:526:14:526:36 | ... > ... | 1.0 | -| test.c:526:14:526:62 | ... ? ... : ... | 3.908375289E9 | -| test.c:526:19:526:26 | (...) | 62517.0 | -| test.c:526:20:526:20 | 2 | 1.0 | -| test.c:526:20:526:20 | (unsigned int)... | 1.0 | -| test.c:526:20:526:25 | ... * ... | 62517.0 | -| test.c:526:24:526:25 | ip | 62517.0 | -| test.c:526:30:526:31 | 17 | 1.0 | -| test.c:526:30:526:31 | (unsigned int)... | 1.0 | -| test.c:526:30:526:36 | ... * ... | 62517.0 | -| test.c:526:35:526:36 | ip | 62517.0 | -| test.c:526:40:526:41 | 17 | 1.0 | -| test.c:526:40:526:41 | (unsigned int)... | 1.0 | -| test.c:526:40:526:52 | ... * ... | 62517.0 | -| test.c:526:45:526:52 | (...) | 62517.0 | -| test.c:526:46:526:46 | 2 | 1.0 | -| test.c:526:46:526:46 | (unsigned int)... | 1.0 | -| test.c:526:46:526:51 | ... * ... | 62517.0 | -| test.c:526:50:526:51 | ip | 62517.0 | -| test.c:526:56:526:57 | 17 | 1.0 | -| test.c:526:56:526:57 | (unsigned int)... | 1.0 | -| test.c:526:56:526:62 | ... * ... | 62517.0 | -| test.c:526:61:526:62 | ip | 62517.0 | -| test.c:527:17:527:28 | (...) | 125035.0 | -| test.c:527:17:527:33 | ... * ... | 125035.0 | -| test.c:527:18:527:18 | 2 | 1.0 | -| test.c:527:18:527:18 | (unsigned int)... | 1.0 | -| test.c:527:18:527:23 | ... * ... | 125035.0 | -| test.c:527:18:527:27 | ... + ... | 125035.0 | -| test.c:527:22:527:23 | ip | 125035.0 | -| test.c:527:27:527:27 | 1 | 1.0 | -| test.c:527:27:527:27 | (unsigned int)... | 1.0 | -| test.c:527:32:527:33 | 14 | 1.0 | -| test.c:527:32:527:33 | (unsigned int)... | 1.0 | -| test.c:528:17:528:18 | 14 | 1.0 | -| test.c:528:17:528:18 | (unsigned int)... | 1.0 | -| test.c:528:17:528:29 | ... * ... | 125035.0 | -| test.c:528:17:528:39 | ... > ... | 1.0 | -| test.c:528:17:530:25 | ... ? ... : ... | 1.5633751225E10 | -| test.c:528:22:528:29 | (...) | 125035.0 | -| test.c:528:23:528:23 | 2 | 1.0 | -| test.c:528:23:528:23 | (unsigned int)... | 1.0 | -| test.c:528:23:528:28 | ... * ... | 125035.0 | -| test.c:528:27:528:28 | ip | 125035.0 | -| test.c:528:33:528:34 | 17 | 1.0 | -| test.c:528:33:528:34 | (unsigned int)... | 1.0 | -| test.c:528:33:528:39 | ... * ... | 125035.0 | -| test.c:528:38:528:39 | ip | 125035.0 | -| test.c:529:19:529:20 | 14 | 1.0 | -| test.c:529:19:529:20 | (unsigned int)... | 1.0 | -| test.c:529:19:529:31 | ... * ... | 125035.0 | -| test.c:529:24:529:31 | (...) | 125035.0 | -| test.c:529:25:529:25 | 2 | 1.0 | -| test.c:529:25:529:25 | (unsigned int)... | 1.0 | -| test.c:529:25:529:30 | ... * ... | 125035.0 | -| test.c:529:29:529:30 | ip | 125035.0 | -| test.c:530:19:530:20 | 14 | 1.0 | -| test.c:530:19:530:20 | (unsigned int)... | 1.0 | -| test.c:530:19:530:25 | ... * ... | 125035.0 | -| test.c:530:24:530:25 | ip | 125035.0 | -| test.c:531:13:531:13 | 2 | 1.0 | -| test.c:531:13:531:13 | (unsigned int)... | 1.0 | -| test.c:531:13:531:18 | ... * ... | 62517.0 | -| test.c:531:13:531:23 | ... * ... | 62517.0 | -| test.c:531:13:531:43 | ... + ... | 3.908375289E9 | -| test.c:531:17:531:18 | ip | 62517.0 | -| test.c:531:22:531:23 | 14 | 1.0 | -| test.c:531:22:531:23 | (unsigned int)... | 1.0 | -| test.c:531:27:531:38 | (...) | 62517.0 | -| test.c:531:27:531:43 | ... * ... | 62517.0 | -| test.c:531:28:531:28 | 2 | 1.0 | -| test.c:531:28:531:28 | (unsigned int)... | 1.0 | -| test.c:531:28:531:33 | ... * ... | 62517.0 | -| test.c:531:28:531:37 | ... + ... | 62517.0 | -| test.c:531:32:531:33 | ip | 62517.0 | -| test.c:531:37:531:37 | 1 | 1.0 | -| test.c:531:37:531:37 | (unsigned int)... | 1.0 | -| test.c:531:42:531:43 | 17 | 1.0 | -| test.c:531:42:531:43 | (unsigned int)... | 1.0 | -| test.c:532:9:532:9 | 4 | 1.0 | -| test.c:532:9:532:9 | (unsigned int)... | 1.0 | -| test.c:532:9:532:26 | ... * ... | 10419.0 | -| test.c:532:9:533:30 | ... + ... | 1.08555561E8 | -| test.c:532:9:534:30 | ... + ... | 1.131040390059E12 | -| test.c:532:9:540:26 | ... + ... | 1.0235492350954187E25 | -| test.c:532:9:541:61 | ... > ... | 1.0 | -| test.c:532:9:553:25 | ... ? ... : ... | 4.778814771623795E41 | -| test.c:532:13:532:26 | (...) | 10419.0 | -| test.c:532:14:532:15 | ip | 10419.0 | -| test.c:532:14:532:20 | ... * ... | 10419.0 | -| test.c:532:14:532:25 | ... + ... | 10419.0 | -| test.c:532:19:532:20 | 14 | 1.0 | -| test.c:532:19:532:20 | (unsigned int)... | 1.0 | -| test.c:532:24:532:25 | 32 | 1.0 | -| test.c:532:24:532:25 | (unsigned int)... | 1.0 | -| test.c:533:13:533:30 | (...) | 10419.0 | -| test.c:533:14:533:14 | 2 | 1.0 | -| test.c:533:14:533:14 | (unsigned int)... | 1.0 | -| test.c:533:14:533:19 | ... * ... | 10419.0 | -| test.c:533:14:533:24 | ... * ... | 10419.0 | -| test.c:533:14:533:29 | ... + ... | 10419.0 | -| test.c:533:18:533:19 | ip | 10419.0 | -| test.c:533:23:533:24 | 14 | 1.0 | -| test.c:533:23:533:24 | (unsigned int)... | 1.0 | -| test.c:533:28:533:29 | 32 | 1.0 | -| test.c:533:28:533:29 | (unsigned int)... | 1.0 | -| test.c:534:13:534:13 | 2 | 1.0 | -| test.c:534:13:534:13 | (unsigned int)... | 1.0 | -| test.c:534:13:534:30 | ... * ... | 10419.0 | -| test.c:534:17:534:30 | (...) | 10419.0 | -| test.c:534:18:534:19 | ip | 10419.0 | -| test.c:534:18:534:24 | ... * ... | 10419.0 | -| test.c:534:18:534:29 | ... + ... | 10419.0 | -| test.c:534:23:534:24 | 14 | 1.0 | -| test.c:534:23:534:24 | (unsigned int)... | 1.0 | -| test.c:534:28:534:29 | 64 | 1.0 | -| test.c:534:28:534:29 | (unsigned int)... | 1.0 | -| test.c:535:13:540:26 | (...) | 9.049625849719E12 | -| test.c:535:14:535:25 | (...) | 10419.0 | -| test.c:535:14:535:30 | ... * ... | 10419.0 | -| test.c:535:14:536:63 | ... > ... | 1.0 | -| test.c:535:14:540:25 | ... ? ... : ... | 9.049625849719E12 | -| test.c:535:15:535:15 | 2 | 1.0 | -| test.c:535:15:535:15 | (unsigned int)... | 1.0 | -| test.c:535:15:535:20 | ... * ... | 10419.0 | -| test.c:535:15:535:24 | ... + ... | 10419.0 | -| test.c:535:19:535:20 | ip | 10419.0 | -| test.c:535:24:535:24 | 1 | 1.0 | -| test.c:535:24:535:24 | (unsigned int)... | 1.0 | -| test.c:535:29:535:30 | 14 | 1.0 | -| test.c:535:29:535:30 | (unsigned int)... | 1.0 | -| test.c:536:13:536:63 | (...) | 1.08555561E8 | -| test.c:536:14:536:15 | 14 | 1.0 | -| test.c:536:14:536:15 | (unsigned int)... | 1.0 | -| test.c:536:14:536:26 | ... * ... | 10419.0 | -| test.c:536:14:536:36 | ... > ... | 1.0 | -| test.c:536:14:536:62 | ... ? ... : ... | 1.08555561E8 | -| test.c:536:19:536:26 | (...) | 10419.0 | -| test.c:536:20:536:20 | 2 | 1.0 | -| test.c:536:20:536:20 | (unsigned int)... | 1.0 | -| test.c:536:20:536:25 | ... * ... | 10419.0 | -| test.c:536:24:536:25 | ip | 10419.0 | -| test.c:536:30:536:31 | 17 | 1.0 | -| test.c:536:30:536:31 | (unsigned int)... | 1.0 | -| test.c:536:30:536:36 | ... * ... | 10419.0 | -| test.c:536:35:536:36 | ip | 10419.0 | -| test.c:536:40:536:41 | 17 | 1.0 | -| test.c:536:40:536:41 | (unsigned int)... | 1.0 | -| test.c:536:40:536:52 | ... * ... | 10419.0 | -| test.c:536:45:536:52 | (...) | 10419.0 | -| test.c:536:46:536:46 | 2 | 1.0 | -| test.c:536:46:536:46 | (unsigned int)... | 1.0 | -| test.c:536:46:536:51 | ... * ... | 10419.0 | -| test.c:536:50:536:51 | ip | 10419.0 | -| test.c:536:56:536:57 | 17 | 1.0 | -| test.c:536:56:536:57 | (unsigned int)... | 1.0 | -| test.c:536:56:536:62 | ... * ... | 10419.0 | -| test.c:536:61:536:62 | ip | 10419.0 | -| test.c:537:17:537:28 | (...) | 20839.0 | -| test.c:537:17:537:33 | ... * ... | 20839.0 | -| test.c:537:18:537:18 | 2 | 1.0 | -| test.c:537:18:537:18 | (unsigned int)... | 1.0 | -| test.c:537:18:537:23 | ... * ... | 20839.0 | -| test.c:537:18:537:27 | ... + ... | 20839.0 | -| test.c:537:22:537:23 | ip | 20839.0 | -| test.c:537:27:537:27 | 1 | 1.0 | -| test.c:537:27:537:27 | (unsigned int)... | 1.0 | -| test.c:537:32:537:33 | 14 | 1.0 | -| test.c:537:32:537:33 | (unsigned int)... | 1.0 | -| test.c:538:17:538:18 | 14 | 1.0 | -| test.c:538:17:538:18 | (unsigned int)... | 1.0 | -| test.c:538:17:538:29 | ... * ... | 20839.0 | -| test.c:538:17:538:39 | ... > ... | 1.0 | -| test.c:538:17:540:25 | ... ? ... : ... | 4.34263921E8 | -| test.c:538:22:538:29 | (...) | 20839.0 | -| test.c:538:23:538:23 | 2 | 1.0 | -| test.c:538:23:538:23 | (unsigned int)... | 1.0 | -| test.c:538:23:538:28 | ... * ... | 20839.0 | -| test.c:538:27:538:28 | ip | 20839.0 | -| test.c:538:33:538:34 | 17 | 1.0 | -| test.c:538:33:538:34 | (unsigned int)... | 1.0 | -| test.c:538:33:538:39 | ... * ... | 20839.0 | -| test.c:538:38:538:39 | ip | 20839.0 | -| test.c:539:19:539:20 | 14 | 1.0 | -| test.c:539:19:539:20 | (unsigned int)... | 1.0 | -| test.c:539:19:539:31 | ... * ... | 20839.0 | -| test.c:539:24:539:31 | (...) | 20839.0 | -| test.c:539:25:539:25 | 2 | 1.0 | -| test.c:539:25:539:25 | (unsigned int)... | 1.0 | -| test.c:539:25:539:30 | ... * ... | 20839.0 | -| test.c:539:29:539:30 | ip | 20839.0 | -| test.c:540:19:540:20 | 14 | 1.0 | -| test.c:540:19:540:20 | (unsigned int)... | 1.0 | -| test.c:540:19:540:25 | ... * ... | 20839.0 | -| test.c:540:24:540:25 | ip | 20839.0 | -| test.c:541:11:541:61 | (...) | 3.908375289E9 | -| test.c:541:12:541:13 | 14 | 1.0 | -| test.c:541:12:541:13 | (unsigned int)... | 1.0 | -| test.c:541:12:541:18 | ... * ... | 62517.0 | -| test.c:541:12:541:34 | ... > ... | 1.0 | -| test.c:541:12:541:60 | ... ? ... : ... | 3.908375289E9 | -| test.c:541:17:541:18 | ip | 62517.0 | -| test.c:541:22:541:29 | (...) | 62517.0 | -| test.c:541:22:541:34 | ... * ... | 62517.0 | -| test.c:541:23:541:24 | ip | 62517.0 | -| test.c:541:23:541:28 | ... + ... | 62517.0 | -| test.c:541:28:541:28 | 1 | 1.0 | -| test.c:541:28:541:28 | (unsigned int)... | 1.0 | -| test.c:541:33:541:34 | 17 | 1.0 | -| test.c:541:33:541:34 | (unsigned int)... | 1.0 | -| test.c:541:38:541:39 | 17 | 1.0 | -| test.c:541:38:541:39 | (unsigned int)... | 1.0 | -| test.c:541:38:541:44 | ... * ... | 62517.0 | -| test.c:541:43:541:44 | ip | 62517.0 | -| test.c:541:48:541:55 | (...) | 62517.0 | -| test.c:541:48:541:60 | ... * ... | 62517.0 | -| test.c:541:49:541:50 | ip | 62517.0 | -| test.c:541:49:541:54 | ... + ... | 62517.0 | -| test.c:541:54:541:54 | 1 | 1.0 | -| test.c:541:54:541:54 | (unsigned int)... | 1.0 | -| test.c:541:59:541:60 | 17 | 1.0 | -| test.c:541:59:541:60 | (unsigned int)... | 1.0 | -| test.c:542:11:542:11 | 4 | 1.0 | -| test.c:542:11:542:11 | (unsigned int)... | 1.0 | -| test.c:542:11:542:28 | ... * ... | 125034.0 | -| test.c:542:11:543:28 | ... + ... | 1.5633501156E10 | -| test.c:542:11:544:28 | ... + ... | 1.954719183539304E15 | -| test.c:542:11:550:24 | ... + ... | 3.056778340269433E31 | -| test.c:542:15:542:28 | (...) | 125034.0 | -| test.c:542:16:542:17 | ip | 125034.0 | -| test.c:542:16:542:22 | ... * ... | 125034.0 | -| test.c:542:16:542:27 | ... + ... | 125034.0 | -| test.c:542:21:542:22 | 14 | 1.0 | -| test.c:542:21:542:22 | (unsigned int)... | 1.0 | -| test.c:542:26:542:27 | 32 | 1.0 | -| test.c:542:26:542:27 | (unsigned int)... | 1.0 | -| test.c:543:11:543:28 | (...) | 125034.0 | -| test.c:543:12:543:12 | 2 | 1.0 | -| test.c:543:12:543:12 | (unsigned int)... | 1.0 | -| test.c:543:12:543:17 | ... * ... | 125034.0 | -| test.c:543:12:543:22 | ... * ... | 125034.0 | -| test.c:543:12:543:27 | ... + ... | 125034.0 | -| test.c:543:16:543:17 | ip | 125034.0 | -| test.c:543:21:543:22 | 14 | 1.0 | -| test.c:543:21:543:22 | (unsigned int)... | 1.0 | -| test.c:543:26:543:27 | 32 | 1.0 | -| test.c:543:26:543:27 | (unsigned int)... | 1.0 | -| test.c:544:11:544:11 | 2 | 1.0 | -| test.c:544:11:544:11 | (unsigned int)... | 1.0 | -| test.c:544:11:544:28 | ... * ... | 125034.0 | -| test.c:544:15:544:28 | (...) | 125034.0 | -| test.c:544:16:544:17 | ip | 125034.0 | -| test.c:544:16:544:22 | ... * ... | 125034.0 | -| test.c:544:16:544:27 | ... + ... | 125034.0 | -| test.c:544:21:544:22 | 14 | 1.0 | -| test.c:544:21:544:22 | (unsigned int)... | 1.0 | -| test.c:544:26:544:27 | 64 | 1.0 | -| test.c:544:26:544:27 | (unsigned int)... | 1.0 | -| test.c:545:11:550:24 | (...) | 1.5637941071078508E16 | -| test.c:545:12:545:23 | (...) | 125034.0 | -| test.c:545:12:545:28 | ... * ... | 125034.0 | -| test.c:545:12:546:61 | ... > ... | 1.0 | -| test.c:545:12:550:23 | ... ? ... : ... | 1.5637941071078508E16 | -| test.c:545:13:545:13 | 2 | 1.0 | -| test.c:545:13:545:13 | (unsigned int)... | 1.0 | -| test.c:545:13:545:18 | ... * ... | 125034.0 | -| test.c:545:13:545:22 | ... + ... | 125034.0 | -| test.c:545:17:545:18 | ip | 125034.0 | -| test.c:545:22:545:22 | 1 | 1.0 | -| test.c:545:22:545:22 | (unsigned int)... | 1.0 | -| test.c:545:27:545:28 | 14 | 1.0 | -| test.c:545:27:545:28 | (unsigned int)... | 1.0 | -| test.c:546:11:546:61 | (...) | 1.5633501156E10 | -| test.c:546:12:546:13 | 14 | 1.0 | -| test.c:546:12:546:13 | (unsigned int)... | 1.0 | -| test.c:546:12:546:24 | ... * ... | 125034.0 | -| test.c:546:12:546:34 | ... > ... | 1.0 | -| test.c:546:12:546:60 | ... ? ... : ... | 1.5633501156E10 | -| test.c:546:17:546:24 | (...) | 125034.0 | -| test.c:546:18:546:18 | 2 | 1.0 | -| test.c:546:18:546:18 | (unsigned int)... | 1.0 | -| test.c:546:18:546:23 | ... * ... | 125034.0 | -| test.c:546:22:546:23 | ip | 125034.0 | -| test.c:546:28:546:29 | 17 | 1.0 | -| test.c:546:28:546:29 | (unsigned int)... | 1.0 | -| test.c:546:28:546:34 | ... * ... | 125034.0 | -| test.c:546:33:546:34 | ip | 125034.0 | -| test.c:546:38:546:39 | 17 | 1.0 | -| test.c:546:38:546:39 | (unsigned int)... | 1.0 | -| test.c:546:38:546:50 | ... * ... | 125034.0 | -| test.c:546:43:546:50 | (...) | 125034.0 | -| test.c:546:44:546:44 | 2 | 1.0 | -| test.c:546:44:546:44 | (unsigned int)... | 1.0 | -| test.c:546:44:546:49 | ... * ... | 125034.0 | -| test.c:546:48:546:49 | ip | 125034.0 | -| test.c:546:54:546:55 | 17 | 1.0 | -| test.c:546:54:546:55 | (unsigned int)... | 1.0 | -| test.c:546:54:546:60 | ... * ... | 125034.0 | -| test.c:546:59:546:60 | ip | 125034.0 | -| test.c:547:15:547:26 | (...) | 250069.0 | -| test.c:547:15:547:31 | ... * ... | 250069.0 | -| test.c:547:16:547:16 | 2 | 1.0 | -| test.c:547:16:547:16 | (unsigned int)... | 1.0 | -| test.c:547:16:547:21 | ... * ... | 250069.0 | -| test.c:547:16:547:25 | ... + ... | 250069.0 | -| test.c:547:20:547:21 | ip | 250069.0 | -| test.c:547:25:547:25 | 1 | 1.0 | -| test.c:547:25:547:25 | (unsigned int)... | 1.0 | -| test.c:547:30:547:31 | 14 | 1.0 | -| test.c:547:30:547:31 | (unsigned int)... | 1.0 | -| test.c:548:15:548:16 | 14 | 1.0 | -| test.c:548:15:548:16 | (unsigned int)... | 1.0 | -| test.c:548:15:548:27 | ... * ... | 250069.0 | -| test.c:548:15:548:37 | ... > ... | 1.0 | -| test.c:548:15:550:23 | ... ? ... : ... | 6.2534504761E10 | -| test.c:548:20:548:27 | (...) | 250069.0 | -| test.c:548:21:548:21 | 2 | 1.0 | -| test.c:548:21:548:21 | (unsigned int)... | 1.0 | -| test.c:548:21:548:26 | ... * ... | 250069.0 | -| test.c:548:25:548:26 | ip | 250069.0 | -| test.c:548:31:548:32 | 17 | 1.0 | -| test.c:548:31:548:32 | (unsigned int)... | 1.0 | -| test.c:548:31:548:37 | ... * ... | 250069.0 | -| test.c:548:36:548:37 | ip | 250069.0 | -| test.c:549:17:549:18 | 14 | 1.0 | -| test.c:549:17:549:18 | (unsigned int)... | 1.0 | -| test.c:549:17:549:29 | ... * ... | 250069.0 | -| test.c:549:22:549:29 | (...) | 250069.0 | -| test.c:549:23:549:23 | 2 | 1.0 | -| test.c:549:23:549:23 | (unsigned int)... | 1.0 | -| test.c:549:23:549:28 | ... * ... | 250069.0 | -| test.c:549:27:549:28 | ip | 250069.0 | -| test.c:550:17:550:18 | 14 | 1.0 | -| test.c:550:17:550:18 | (unsigned int)... | 1.0 | -| test.c:550:17:550:23 | ... * ... | 250069.0 | -| test.c:550:22:550:23 | ip | 250069.0 | -| test.c:551:11:551:12 | 14 | 1.0 | -| test.c:551:11:551:12 | (unsigned int)... | 1.0 | -| test.c:551:11:551:17 | ... * ... | 125034.0 | -| test.c:551:11:551:33 | ... > ... | 1.0 | -| test.c:551:11:553:25 | ... ? ... : ... | 1.5633501156E10 | -| test.c:551:16:551:17 | ip | 125034.0 | -| test.c:551:21:551:28 | (...) | 125034.0 | -| test.c:551:21:551:33 | ... * ... | 125034.0 | -| test.c:551:22:551:23 | ip | 125034.0 | -| test.c:551:22:551:27 | ... + ... | 125034.0 | -| test.c:551:27:551:27 | 1 | 1.0 | -| test.c:551:27:551:27 | (unsigned int)... | 1.0 | -| test.c:551:32:551:33 | 17 | 1.0 | -| test.c:551:32:551:33 | (unsigned int)... | 1.0 | -| test.c:552:13:552:14 | 14 | 1.0 | -| test.c:552:13:552:14 | (unsigned int)... | 1.0 | -| test.c:552:13:552:19 | ... * ... | 125034.0 | -| test.c:552:18:552:19 | ip | 125034.0 | -| test.c:553:13:553:20 | (...) | 125034.0 | -| test.c:553:13:553:25 | ... * ... | 125034.0 | -| test.c:553:14:553:15 | ip | 125034.0 | -| test.c:553:14:553:19 | ... + ... | 125034.0 | -| test.c:553:19:553:19 | 1 | 1.0 | -| test.c:553:19:553:19 | (unsigned int)... | 1.0 | -| test.c:553:24:553:25 | 14 | 1.0 | -| test.c:553:24:553:25 | (unsigned int)... | 1.0 | -| test.c:554:9:554:10 | 14 | 1.0 | -| test.c:554:9:554:10 | (unsigned int)... | 1.0 | -| test.c:554:9:554:15 | ... * ... | 1437897.0 | -| test.c:554:9:554:59 | ... > ... | 1.0 | -| test.c:554:9:556:51 | ... ? ... : ... | 2.9729207539701335E18 | -| test.c:554:14:554:15 | ip | 1437897.0 | -| test.c:554:19:554:30 | (...) | 1437897.0 | -| test.c:554:19:554:35 | ... * ... | 1437897.0 | -| test.c:554:19:554:59 | ... + ... | 2.067547782609E12 | -| test.c:554:20:554:20 | 2 | 1.0 | -| test.c:554:20:554:20 | (unsigned int)... | 1.0 | -| test.c:554:20:554:25 | ... * ... | 1437897.0 | -| test.c:554:20:554:29 | ... + ... | 1437897.0 | -| test.c:554:24:554:25 | ip | 1437897.0 | -| test.c:554:29:554:29 | 1 | 1.0 | -| test.c:554:29:554:29 | (unsigned int)... | 1.0 | -| test.c:554:34:554:35 | 17 | 1.0 | -| test.c:554:34:554:35 | (unsigned int)... | 1.0 | -| test.c:554:39:554:54 | (...) | 1437897.0 | -| test.c:554:39:554:59 | ... * ... | 1437897.0 | -| test.c:554:40:554:40 | 2 | 1.0 | -| test.c:554:40:554:40 | (unsigned int)... | 1.0 | -| test.c:554:40:554:45 | ... * ... | 1437897.0 | -| test.c:554:40:554:49 | ... + ... | 1437897.0 | -| test.c:554:40:554:53 | ... + ... | 1437897.0 | -| test.c:554:44:554:45 | ip | 1437897.0 | -| test.c:554:49:554:49 | 1 | 1.0 | -| test.c:554:49:554:49 | (unsigned int)... | 1.0 | -| test.c:554:53:554:53 | 1 | 1.0 | -| test.c:554:53:554:53 | (unsigned int)... | 1.0 | -| test.c:554:58:554:59 | 17 | 1.0 | -| test.c:554:58:554:59 | (unsigned int)... | 1.0 | -| test.c:555:11:555:12 | 14 | 1.0 | -| test.c:555:11:555:12 | (unsigned int)... | 1.0 | -| test.c:555:11:555:17 | ... * ... | 1437897.0 | -| test.c:555:16:555:17 | ip | 1437897.0 | -| test.c:556:11:556:22 | (...) | 1437897.0 | -| test.c:556:11:556:27 | ... * ... | 1437897.0 | -| test.c:556:11:556:51 | ... + ... | 2.067547782609E12 | -| test.c:556:12:556:12 | 2 | 1.0 | -| test.c:556:12:556:12 | (unsigned int)... | 1.0 | -| test.c:556:12:556:17 | ... * ... | 1437897.0 | -| test.c:556:12:556:21 | ... + ... | 1437897.0 | -| test.c:556:16:556:17 | ip | 1437897.0 | -| test.c:556:21:556:21 | 1 | 1.0 | -| test.c:556:21:556:21 | (unsigned int)... | 1.0 | -| test.c:556:26:556:27 | 14 | 1.0 | -| test.c:556:26:556:27 | (unsigned int)... | 1.0 | -| test.c:556:31:556:46 | (...) | 1437897.0 | -| test.c:556:31:556:51 | ... * ... | 1437897.0 | -| test.c:556:32:556:32 | 2 | 1.0 | -| test.c:556:32:556:32 | (unsigned int)... | 1.0 | -| test.c:556:32:556:37 | ... * ... | 1437897.0 | -| test.c:556:32:556:41 | ... + ... | 1437897.0 | -| test.c:556:32:556:45 | ... + ... | 1437897.0 | -| test.c:556:36:556:37 | ip | 1437897.0 | -| test.c:556:41:556:41 | 1 | 1.0 | -| test.c:556:41:556:41 | (unsigned int)... | 1.0 | -| test.c:556:45:556:45 | 1 | 1.0 | -| test.c:556:45:556:45 | (unsigned int)... | 1.0 | -| test.c:556:50:556:51 | 17 | 1.0 | -| test.c:556:50:556:51 | (unsigned int)... | 1.0 | -| test.c:557:9:557:9 | 2 | 1.0 | -| test.c:557:9:557:9 | (unsigned int)... | 1.0 | -| test.c:557:9:557:26 | ... * ... | 1437897.0 | -| test.c:557:9:577:48 | ... + ... | 3.5306223994138077E62 | -| test.c:557:9:599:30 | ... > ... | 1.0 | -| test.c:557:9:642:27 | ... ? ... : ... | 4.3658022750663434E182 | -| test.c:557:13:557:26 | (...) | 1437897.0 | -| test.c:557:14:557:15 | ip | 1437897.0 | -| test.c:557:14:557:20 | ... * ... | 1437897.0 | -| test.c:557:14:557:25 | ... + ... | 1437897.0 | -| test.c:557:19:557:20 | 14 | 1.0 | -| test.c:557:19:557:20 | (unsigned int)... | 1.0 | -| test.c:557:24:557:25 | 32 | 1.0 | -| test.c:557:24:557:25 | (unsigned int)... | 1.0 | -| test.c:558:13:577:48 | (...) | 2.4554070280512497E56 | -| test.c:558:14:558:14 | 4 | 1.0 | -| test.c:558:14:558:14 | (unsigned int)... | 1.0 | -| test.c:558:14:558:31 | ... * ... | 1437897.0 | -| test.c:558:14:559:32 | ... + ... | 2.067547782609E12 | -| test.c:558:14:560:32 | ... + ... | 2.9729207539701335E18 | -| test.c:558:14:566:28 | ... + ... | 7.070613623498497E37 | -| test.c:558:14:567:43 | ... > ... | 1.0 | -| test.c:558:14:577:47 | ... ? ... : ... | 2.4554070280512497E56 | -| test.c:558:18:558:31 | (...) | 1437897.0 | -| test.c:558:19:558:20 | ip | 1437897.0 | -| test.c:558:19:558:25 | ... * ... | 1437897.0 | -| test.c:558:19:558:30 | ... + ... | 1437897.0 | -| test.c:558:24:558:25 | 14 | 1.0 | -| test.c:558:24:558:25 | (unsigned int)... | 1.0 | -| test.c:558:29:558:30 | 32 | 1.0 | -| test.c:558:29:558:30 | (unsigned int)... | 1.0 | -| test.c:559:15:559:32 | (...) | 1437897.0 | -| test.c:559:16:559:16 | 2 | 1.0 | -| test.c:559:16:559:16 | (unsigned int)... | 1.0 | -| test.c:559:16:559:21 | ... * ... | 1437897.0 | -| test.c:559:16:559:26 | ... * ... | 1437897.0 | -| test.c:559:16:559:31 | ... + ... | 1437897.0 | -| test.c:559:20:559:21 | ip | 1437897.0 | -| test.c:559:25:559:26 | 14 | 1.0 | -| test.c:559:25:559:26 | (unsigned int)... | 1.0 | -| test.c:559:30:559:31 | 32 | 1.0 | -| test.c:559:30:559:31 | (unsigned int)... | 1.0 | -| test.c:560:15:560:15 | 2 | 1.0 | -| test.c:560:15:560:15 | (unsigned int)... | 1.0 | -| test.c:560:15:560:32 | ... * ... | 1437897.0 | -| test.c:560:19:560:32 | (...) | 1437897.0 | -| test.c:560:20:560:21 | ip | 1437897.0 | -| test.c:560:20:560:26 | ... * ... | 1437897.0 | -| test.c:560:20:560:31 | ... + ... | 1437897.0 | -| test.c:560:25:560:26 | 14 | 1.0 | -| test.c:560:25:560:26 | (unsigned int)... | 1.0 | -| test.c:560:30:560:31 | 64 | 1.0 | -| test.c:560:30:560:31 | (unsigned int)... | 1.0 | -| test.c:561:15:566:28 | (...) | 2.3783390842343084E19 | -| test.c:561:16:561:27 | (...) | 1437897.0 | -| test.c:561:16:561:32 | ... * ... | 1437897.0 | -| test.c:561:16:562:65 | ... > ... | 1.0 | -| test.c:561:16:566:27 | ... ? ... : ... | 2.3783390842343084E19 | -| test.c:561:17:561:17 | 2 | 1.0 | -| test.c:561:17:561:17 | (unsigned int)... | 1.0 | -| test.c:561:17:561:22 | ... * ... | 1437897.0 | -| test.c:561:17:561:26 | ... + ... | 1437897.0 | -| test.c:561:21:561:22 | ip | 1437897.0 | -| test.c:561:26:561:26 | 1 | 1.0 | -| test.c:561:26:561:26 | (unsigned int)... | 1.0 | -| test.c:561:31:561:32 | 14 | 1.0 | -| test.c:561:31:561:32 | (unsigned int)... | 1.0 | -| test.c:562:15:562:65 | (...) | 2.067547782609E12 | -| test.c:562:16:562:17 | 14 | 1.0 | -| test.c:562:16:562:17 | (unsigned int)... | 1.0 | -| test.c:562:16:562:28 | ... * ... | 1437897.0 | -| test.c:562:16:562:38 | ... > ... | 1.0 | -| test.c:562:16:562:64 | ... ? ... : ... | 2.067547782609E12 | -| test.c:562:21:562:28 | (...) | 1437897.0 | -| test.c:562:22:562:22 | 2 | 1.0 | -| test.c:562:22:562:22 | (unsigned int)... | 1.0 | -| test.c:562:22:562:27 | ... * ... | 1437897.0 | -| test.c:562:26:562:27 | ip | 1437897.0 | -| test.c:562:32:562:33 | 17 | 1.0 | -| test.c:562:32:562:33 | (unsigned int)... | 1.0 | -| test.c:562:32:562:38 | ... * ... | 1437897.0 | -| test.c:562:37:562:38 | ip | 1437897.0 | -| test.c:562:42:562:43 | 17 | 1.0 | -| test.c:562:42:562:43 | (unsigned int)... | 1.0 | -| test.c:562:42:562:54 | ... * ... | 1437897.0 | -| test.c:562:47:562:54 | (...) | 1437897.0 | -| test.c:562:48:562:48 | 2 | 1.0 | -| test.c:562:48:562:48 | (unsigned int)... | 1.0 | -| test.c:562:48:562:53 | ... * ... | 1437897.0 | -| test.c:562:52:562:53 | ip | 1437897.0 | -| test.c:562:58:562:59 | 17 | 1.0 | -| test.c:562:58:562:59 | (unsigned int)... | 1.0 | -| test.c:562:58:562:64 | ... * ... | 1437897.0 | -| test.c:562:63:562:64 | ip | 1437897.0 | -| test.c:563:19:563:30 | (...) | 2875795.0 | -| test.c:563:19:563:35 | ... * ... | 2875795.0 | -| test.c:563:20:563:20 | 2 | 1.0 | -| test.c:563:20:563:20 | (unsigned int)... | 1.0 | -| test.c:563:20:563:25 | ... * ... | 2875795.0 | -| test.c:563:20:563:29 | ... + ... | 2875795.0 | -| test.c:563:24:563:25 | ip | 2875795.0 | -| test.c:563:29:563:29 | 1 | 1.0 | -| test.c:563:29:563:29 | (unsigned int)... | 1.0 | -| test.c:563:34:563:35 | 14 | 1.0 | -| test.c:563:34:563:35 | (unsigned int)... | 1.0 | -| test.c:564:19:564:20 | 14 | 1.0 | -| test.c:564:19:564:20 | (unsigned int)... | 1.0 | -| test.c:564:19:564:31 | ... * ... | 2875795.0 | -| test.c:564:19:564:41 | ... > ... | 1.0 | -| test.c:564:19:566:27 | ... ? ... : ... | 8.270196882025E12 | -| test.c:564:24:564:31 | (...) | 2875795.0 | -| test.c:564:25:564:25 | 2 | 1.0 | -| test.c:564:25:564:25 | (unsigned int)... | 1.0 | -| test.c:564:25:564:30 | ... * ... | 2875795.0 | -| test.c:564:29:564:30 | ip | 2875795.0 | -| test.c:564:35:564:36 | 17 | 1.0 | -| test.c:564:35:564:36 | (unsigned int)... | 1.0 | -| test.c:564:35:564:41 | ... * ... | 2875795.0 | -| test.c:564:40:564:41 | ip | 2875795.0 | -| test.c:565:21:565:22 | 14 | 1.0 | -| test.c:565:21:565:22 | (unsigned int)... | 1.0 | -| test.c:565:21:565:33 | ... * ... | 2875795.0 | -| test.c:565:26:565:33 | (...) | 2875795.0 | -| test.c:565:27:565:27 | 2 | 1.0 | -| test.c:565:27:565:27 | (unsigned int)... | 1.0 | -| test.c:565:27:565:32 | ... * ... | 2875795.0 | -| test.c:565:31:565:32 | ip | 2875795.0 | -| test.c:566:21:566:22 | 14 | 1.0 | -| test.c:566:21:566:22 | (unsigned int)... | 1.0 | -| test.c:566:21:566:27 | ... * ... | 2875795.0 | -| test.c:566:26:566:27 | ip | 2875795.0 | -| test.c:567:13:567:13 | 2 | 1.0 | -| test.c:567:13:567:13 | (unsigned int)... | 1.0 | -| test.c:567:13:567:18 | ... * ... | 8627385.0 | -| test.c:567:13:567:23 | ... * ... | 8627385.0 | -| test.c:567:13:567:43 | ... + ... | 7.4431771938225E13 | -| test.c:567:17:567:18 | ip | 8627385.0 | -| test.c:567:22:567:23 | 14 | 1.0 | -| test.c:567:22:567:23 | (unsigned int)... | 1.0 | -| test.c:567:27:567:38 | (...) | 8627385.0 | -| test.c:567:27:567:43 | ... * ... | 8627385.0 | -| test.c:567:28:567:28 | 2 | 1.0 | -| test.c:567:28:567:28 | (unsigned int)... | 1.0 | -| test.c:567:28:567:33 | ... * ... | 8627385.0 | -| test.c:567:28:567:37 | ... + ... | 8627385.0 | -| test.c:567:32:567:33 | ip | 8627385.0 | -| test.c:567:37:567:37 | 1 | 1.0 | -| test.c:567:37:567:37 | (unsigned int)... | 1.0 | -| test.c:567:42:567:43 | 17 | 1.0 | -| test.c:567:42:567:43 | (unsigned int)... | 1.0 | -| test.c:568:17:568:17 | 4 | 1.0 | -| test.c:568:17:568:17 | (unsigned int)... | 1.0 | -| test.c:568:17:568:34 | ... * ... | 8627385.0 | -| test.c:568:17:569:34 | ... + ... | 7.4431771938225E13 | -| test.c:568:17:570:34 | ... + ... | 6.421515527432633E20 | -| test.c:568:17:576:30 | ... + ... | 3.298869507082441E42 | -| test.c:568:21:568:34 | (...) | 8627385.0 | -| test.c:568:22:568:23 | ip | 8627385.0 | -| test.c:568:22:568:28 | ... * ... | 8627385.0 | -| test.c:568:22:568:33 | ... + ... | 8627385.0 | -| test.c:568:27:568:28 | 14 | 1.0 | -| test.c:568:27:568:28 | (unsigned int)... | 1.0 | -| test.c:568:32:568:33 | 32 | 1.0 | -| test.c:568:32:568:33 | (unsigned int)... | 1.0 | -| test.c:569:17:569:34 | (...) | 8627385.0 | -| test.c:569:18:569:18 | 2 | 1.0 | -| test.c:569:18:569:18 | (unsigned int)... | 1.0 | -| test.c:569:18:569:23 | ... * ... | 8627385.0 | -| test.c:569:18:569:28 | ... * ... | 8627385.0 | -| test.c:569:18:569:33 | ... + ... | 8627385.0 | -| test.c:569:22:569:23 | ip | 8627385.0 | -| test.c:569:27:569:28 | 14 | 1.0 | -| test.c:569:27:569:28 | (unsigned int)... | 1.0 | -| test.c:569:32:569:33 | 32 | 1.0 | -| test.c:569:32:569:33 | (unsigned int)... | 1.0 | -| test.c:570:17:570:17 | 2 | 1.0 | -| test.c:570:17:570:17 | (unsigned int)... | 1.0 | -| test.c:570:17:570:34 | ... * ... | 8627385.0 | -| test.c:570:21:570:34 | (...) | 8627385.0 | -| test.c:570:22:570:23 | ip | 8627385.0 | -| test.c:570:22:570:28 | ... * ... | 8627385.0 | -| test.c:570:22:570:33 | ... + ... | 8627385.0 | -| test.c:570:27:570:28 | 14 | 1.0 | -| test.c:570:27:570:28 | (unsigned int)... | 1.0 | -| test.c:570:32:570:33 | 64 | 1.0 | -| test.c:570:32:570:33 | (unsigned int)... | 1.0 | -| test.c:571:17:576:30 | (...) | 5.137213315127421E21 | -| test.c:571:18:571:29 | (...) | 8627385.0 | -| test.c:571:18:571:34 | ... * ... | 8627385.0 | -| test.c:571:18:572:67 | ... > ... | 1.0 | -| test.c:571:18:576:29 | ... ? ... : ... | 5.137213315127421E21 | -| test.c:571:19:571:19 | 2 | 1.0 | -| test.c:571:19:571:19 | (unsigned int)... | 1.0 | -| test.c:571:19:571:24 | ... * ... | 8627385.0 | -| test.c:571:19:571:28 | ... + ... | 8627385.0 | -| test.c:571:23:571:24 | ip | 8627385.0 | -| test.c:571:28:571:28 | 1 | 1.0 | -| test.c:571:28:571:28 | (unsigned int)... | 1.0 | -| test.c:571:33:571:34 | 14 | 1.0 | -| test.c:571:33:571:34 | (unsigned int)... | 1.0 | -| test.c:572:17:572:67 | (...) | 7.4431771938225E13 | -| test.c:572:18:572:19 | 14 | 1.0 | -| test.c:572:18:572:19 | (unsigned int)... | 1.0 | -| test.c:572:18:572:30 | ... * ... | 8627385.0 | -| test.c:572:18:572:40 | ... > ... | 1.0 | -| test.c:572:18:572:66 | ... ? ... : ... | 7.4431771938225E13 | -| test.c:572:23:572:30 | (...) | 8627385.0 | -| test.c:572:24:572:24 | 2 | 1.0 | -| test.c:572:24:572:24 | (unsigned int)... | 1.0 | -| test.c:572:24:572:29 | ... * ... | 8627385.0 | -| test.c:572:28:572:29 | ip | 8627385.0 | -| test.c:572:34:572:35 | 17 | 1.0 | -| test.c:572:34:572:35 | (unsigned int)... | 1.0 | -| test.c:572:34:572:40 | ... * ... | 8627385.0 | -| test.c:572:39:572:40 | ip | 8627385.0 | -| test.c:572:44:572:45 | 17 | 1.0 | -| test.c:572:44:572:45 | (unsigned int)... | 1.0 | -| test.c:572:44:572:56 | ... * ... | 8627385.0 | -| test.c:572:49:572:56 | (...) | 8627385.0 | -| test.c:572:50:572:50 | 2 | 1.0 | -| test.c:572:50:572:50 | (unsigned int)... | 1.0 | -| test.c:572:50:572:55 | ... * ... | 8627385.0 | -| test.c:572:54:572:55 | ip | 8627385.0 | -| test.c:572:60:572:61 | 17 | 1.0 | -| test.c:572:60:572:61 | (unsigned int)... | 1.0 | -| test.c:572:60:572:66 | ... * ... | 8627385.0 | -| test.c:572:65:572:66 | ip | 8627385.0 | -| test.c:573:21:573:32 | (...) | 1.7254771E7 | -| test.c:573:21:573:37 | ... * ... | 1.7254771E7 | -| test.c:573:22:573:22 | 2 | 1.0 | -| test.c:573:22:573:22 | (unsigned int)... | 1.0 | -| test.c:573:22:573:27 | ... * ... | 1.7254771E7 | -| test.c:573:22:573:31 | ... + ... | 1.7254771E7 | -| test.c:573:26:573:27 | ip | 1.7254771E7 | -| test.c:573:31:573:31 | 1 | 1.0 | -| test.c:573:31:573:31 | (unsigned int)... | 1.0 | -| test.c:573:36:573:37 | 14 | 1.0 | -| test.c:573:36:573:37 | (unsigned int)... | 1.0 | -| test.c:574:21:574:22 | 14 | 1.0 | -| test.c:574:21:574:22 | (unsigned int)... | 1.0 | -| test.c:574:21:574:33 | ... * ... | 1.7254771E7 | -| test.c:574:21:574:43 | ... > ... | 1.0 | -| test.c:574:21:576:29 | ... ? ... : ... | 2.97727122262441E14 | -| test.c:574:26:574:33 | (...) | 1.7254771E7 | -| test.c:574:27:574:27 | 2 | 1.0 | -| test.c:574:27:574:27 | (unsigned int)... | 1.0 | -| test.c:574:27:574:32 | ... * ... | 1.7254771E7 | -| test.c:574:31:574:32 | ip | 1.7254771E7 | -| test.c:574:37:574:38 | 17 | 1.0 | -| test.c:574:37:574:38 | (unsigned int)... | 1.0 | -| test.c:574:37:574:43 | ... * ... | 1.7254771E7 | -| test.c:574:42:574:43 | ip | 1.7254771E7 | -| test.c:575:23:575:24 | 14 | 1.0 | -| test.c:575:23:575:24 | (unsigned int)... | 1.0 | -| test.c:575:23:575:35 | ... * ... | 1.7254771E7 | -| test.c:575:28:575:35 | (...) | 1.7254771E7 | -| test.c:575:29:575:29 | 2 | 1.0 | -| test.c:575:29:575:29 | (unsigned int)... | 1.0 | -| test.c:575:29:575:34 | ... * ... | 1.7254771E7 | -| test.c:575:33:575:34 | ip | 1.7254771E7 | -| test.c:576:23:576:24 | 14 | 1.0 | -| test.c:576:23:576:24 | (unsigned int)... | 1.0 | -| test.c:576:23:576:29 | ... * ... | 1.7254771E7 | -| test.c:576:28:576:29 | ip | 1.7254771E7 | -| test.c:577:17:577:17 | 2 | 1.0 | -| test.c:577:17:577:17 | (unsigned int)... | 1.0 | -| test.c:577:17:577:22 | ... * ... | 8627385.0 | -| test.c:577:17:577:27 | ... * ... | 8627385.0 | -| test.c:577:17:577:47 | ... + ... | 7.4431771938225E13 | -| test.c:577:21:577:22 | ip | 8627385.0 | -| test.c:577:26:577:27 | 14 | 1.0 | -| test.c:577:26:577:27 | (unsigned int)... | 1.0 | -| test.c:577:31:577:42 | (...) | 8627385.0 | -| test.c:577:31:577:47 | ... * ... | 8627385.0 | -| test.c:577:32:577:32 | 2 | 1.0 | -| test.c:577:32:577:32 | (unsigned int)... | 1.0 | -| test.c:577:32:577:37 | ... * ... | 8627385.0 | -| test.c:577:32:577:41 | ... + ... | 8627385.0 | -| test.c:577:36:577:37 | ip | 8627385.0 | -| test.c:577:41:577:41 | 1 | 1.0 | -| test.c:577:41:577:41 | (unsigned int)... | 1.0 | -| test.c:577:46:577:47 | 17 | 1.0 | -| test.c:577:46:577:47 | (unsigned int)... | 1.0 | -| test.c:578:11:599:30 | (...) | 6.08636382738973E71 | -| test.c:578:12:578:12 | 4 | 1.0 | -| test.c:578:12:578:12 | (unsigned int)... | 1.0 | -| test.c:578:12:578:29 | ... * ... | 6.0391698E7 | -| test.c:578:12:579:30 | ... + ... | 3.647157187323204E15 | -| test.c:578:12:580:30 | ... + ... | 2.2025801541535236E23 | -| test.c:578:12:586:26 | ... + ... | 3.881087564774641E47 | -| test.c:578:12:587:61 | ... > ... | 1.0 | -| test.c:578:12:599:29 | ... ? ... : ... | 6.08636382738973E71 | -| test.c:578:16:578:29 | (...) | 6.0391698E7 | -| test.c:578:17:578:18 | ip | 6.0391698E7 | -| test.c:578:17:578:23 | ... * ... | 6.0391698E7 | -| test.c:578:17:578:28 | ... + ... | 6.0391698E7 | -| test.c:578:22:578:23 | 14 | 1.0 | -| test.c:578:22:578:23 | (unsigned int)... | 1.0 | -| test.c:578:27:578:28 | 32 | 1.0 | -| test.c:578:27:578:28 | (unsigned int)... | 1.0 | -| test.c:579:13:579:30 | (...) | 6.0391698E7 | -| test.c:579:14:579:14 | 2 | 1.0 | -| test.c:579:14:579:14 | (unsigned int)... | 1.0 | -| test.c:579:14:579:19 | ... * ... | 6.0391698E7 | -| test.c:579:14:579:24 | ... * ... | 6.0391698E7 | -| test.c:579:14:579:29 | ... + ... | 6.0391698E7 | -| test.c:579:18:579:19 | ip | 6.0391698E7 | -| test.c:579:23:579:24 | 14 | 1.0 | -| test.c:579:23:579:24 | (unsigned int)... | 1.0 | -| test.c:579:28:579:29 | 32 | 1.0 | -| test.c:579:28:579:29 | (unsigned int)... | 1.0 | -| test.c:580:13:580:13 | 2 | 1.0 | -| test.c:580:13:580:13 | (unsigned int)... | 1.0 | -| test.c:580:13:580:30 | ... * ... | 6.0391698E7 | -| test.c:580:17:580:30 | (...) | 6.0391698E7 | -| test.c:580:18:580:19 | ip | 6.0391698E7 | -| test.c:580:18:580:24 | ... * ... | 6.0391698E7 | -| test.c:580:18:580:29 | ... + ... | 6.0391698E7 | -| test.c:580:23:580:24 | 14 | 1.0 | -| test.c:580:23:580:24 | (unsigned int)... | 1.0 | -| test.c:580:28:580:29 | 64 | 1.0 | -| test.c:580:28:580:29 | (unsigned int)... | 1.0 | -| test.c:581:13:586:26 | (...) | 1.7620641670887053E24 | -| test.c:581:14:581:25 | (...) | 6.0391698E7 | -| test.c:581:14:581:30 | ... * ... | 6.0391698E7 | -| test.c:581:14:582:63 | ... > ... | 1.0 | -| test.c:581:14:586:25 | ... ? ... : ... | 1.7620641670887053E24 | -| test.c:581:15:581:15 | 2 | 1.0 | -| test.c:581:15:581:15 | (unsigned int)... | 1.0 | -| test.c:581:15:581:20 | ... * ... | 6.0391698E7 | -| test.c:581:15:581:24 | ... + ... | 6.0391698E7 | -| test.c:581:19:581:20 | ip | 6.0391698E7 | -| test.c:581:24:581:24 | 1 | 1.0 | -| test.c:581:24:581:24 | (unsigned int)... | 1.0 | -| test.c:581:29:581:30 | 14 | 1.0 | -| test.c:581:29:581:30 | (unsigned int)... | 1.0 | -| test.c:582:13:582:63 | (...) | 3.647157187323204E15 | -| test.c:582:14:582:15 | 14 | 1.0 | -| test.c:582:14:582:15 | (unsigned int)... | 1.0 | -| test.c:582:14:582:26 | ... * ... | 6.0391698E7 | -| test.c:582:14:582:36 | ... > ... | 1.0 | -| test.c:582:14:582:62 | ... ? ... : ... | 3.647157187323204E15 | -| test.c:582:19:582:26 | (...) | 6.0391698E7 | -| test.c:582:20:582:20 | 2 | 1.0 | -| test.c:582:20:582:20 | (unsigned int)... | 1.0 | -| test.c:582:20:582:25 | ... * ... | 6.0391698E7 | -| test.c:582:24:582:25 | ip | 6.0391698E7 | -| test.c:582:30:582:31 | 17 | 1.0 | -| test.c:582:30:582:31 | (unsigned int)... | 1.0 | -| test.c:582:30:582:36 | ... * ... | 6.0391698E7 | -| test.c:582:35:582:36 | ip | 6.0391698E7 | -| test.c:582:40:582:41 | 17 | 1.0 | -| test.c:582:40:582:41 | (unsigned int)... | 1.0 | -| test.c:582:40:582:52 | ... * ... | 6.0391698E7 | -| test.c:582:45:582:52 | (...) | 6.0391698E7 | -| test.c:582:46:582:46 | 2 | 1.0 | -| test.c:582:46:582:46 | (unsigned int)... | 1.0 | -| test.c:582:46:582:51 | ... * ... | 6.0391698E7 | -| test.c:582:50:582:51 | ip | 6.0391698E7 | -| test.c:582:56:582:57 | 17 | 1.0 | -| test.c:582:56:582:57 | (unsigned int)... | 1.0 | -| test.c:582:56:582:62 | ... * ... | 6.0391698E7 | -| test.c:582:61:582:62 | ip | 6.0391698E7 | -| test.c:583:17:583:28 | (...) | 1.20783397E8 | -| test.c:583:17:583:33 | ... * ... | 1.20783397E8 | -| test.c:583:18:583:18 | 2 | 1.0 | -| test.c:583:18:583:18 | (unsigned int)... | 1.0 | -| test.c:583:18:583:23 | ... * ... | 1.20783397E8 | -| test.c:583:18:583:27 | ... + ... | 1.20783397E8 | -| test.c:583:22:583:23 | ip | 1.20783397E8 | -| test.c:583:27:583:27 | 1 | 1.0 | -| test.c:583:27:583:27 | (unsigned int)... | 1.0 | -| test.c:583:32:583:33 | 14 | 1.0 | -| test.c:583:32:583:33 | (unsigned int)... | 1.0 | -| test.c:584:17:584:18 | 14 | 1.0 | -| test.c:584:17:584:18 | (unsigned int)... | 1.0 | -| test.c:584:17:584:29 | ... * ... | 1.20783397E8 | -| test.c:584:17:584:39 | ... > ... | 1.0 | -| test.c:584:17:586:25 | ... ? ... : ... | 1.4588628990859608E16 | -| test.c:584:22:584:29 | (...) | 1.20783397E8 | -| test.c:584:23:584:23 | 2 | 1.0 | -| test.c:584:23:584:23 | (unsigned int)... | 1.0 | -| test.c:584:23:584:28 | ... * ... | 1.20783397E8 | -| test.c:584:27:584:28 | ip | 1.20783397E8 | -| test.c:584:33:584:34 | 17 | 1.0 | -| test.c:584:33:584:34 | (unsigned int)... | 1.0 | -| test.c:584:33:584:39 | ... * ... | 1.20783397E8 | -| test.c:584:38:584:39 | ip | 1.20783397E8 | -| test.c:585:19:585:20 | 14 | 1.0 | -| test.c:585:19:585:20 | (unsigned int)... | 1.0 | -| test.c:585:19:585:31 | ... * ... | 1.20783397E8 | -| test.c:585:24:585:31 | (...) | 1.20783397E8 | -| test.c:585:25:585:25 | 2 | 1.0 | -| test.c:585:25:585:25 | (unsigned int)... | 1.0 | -| test.c:585:25:585:30 | ... * ... | 1.20783397E8 | -| test.c:585:29:585:30 | ip | 1.20783397E8 | -| test.c:586:19:586:20 | 14 | 1.0 | -| test.c:586:19:586:20 | (unsigned int)... | 1.0 | -| test.c:586:19:586:25 | ... * ... | 1.20783397E8 | -| test.c:586:24:586:25 | ip | 1.20783397E8 | -| test.c:587:11:587:61 | (...) | 1.3129766091773648E17 | -| test.c:587:12:587:13 | 14 | 1.0 | -| test.c:587:12:587:13 | (unsigned int)... | 1.0 | -| test.c:587:12:587:18 | ... * ... | 3.62350191E8 | -| test.c:587:12:587:34 | ... > ... | 1.0 | -| test.c:587:12:587:60 | ... ? ... : ... | 1.3129766091773648E17 | -| test.c:587:17:587:18 | ip | 3.62350191E8 | -| test.c:587:22:587:29 | (...) | 3.62350191E8 | -| test.c:587:22:587:34 | ... * ... | 3.62350191E8 | -| test.c:587:23:587:24 | ip | 3.62350191E8 | -| test.c:587:23:587:28 | ... + ... | 3.62350191E8 | -| test.c:587:28:587:28 | 1 | 1.0 | -| test.c:587:28:587:28 | (unsigned int)... | 1.0 | -| test.c:587:33:587:34 | 17 | 1.0 | -| test.c:587:33:587:34 | (unsigned int)... | 1.0 | -| test.c:587:38:587:39 | 17 | 1.0 | -| test.c:587:38:587:39 | (unsigned int)... | 1.0 | -| test.c:587:38:587:44 | ... * ... | 3.62350191E8 | -| test.c:587:43:587:44 | ip | 3.62350191E8 | -| test.c:587:48:587:55 | (...) | 3.62350191E8 | -| test.c:587:48:587:60 | ... * ... | 3.62350191E8 | -| test.c:587:49:587:50 | ip | 3.62350191E8 | -| test.c:587:49:587:54 | ... + ... | 3.62350191E8 | -| test.c:587:54:587:54 | 1 | 1.0 | -| test.c:587:54:587:54 | (unsigned int)... | 1.0 | -| test.c:587:59:587:60 | 17 | 1.0 | -| test.c:587:59:587:60 | (unsigned int)... | 1.0 | -| test.c:588:15:588:15 | 4 | 1.0 | -| test.c:588:15:588:15 | (unsigned int)... | 1.0 | -| test.c:588:15:588:32 | ... * ... | 7.24700382E8 | -| test.c:588:15:589:32 | ... + ... | 5.251906436709459E17 | -| test.c:588:15:590:32 | ... + ... | 3.806058600911604E26 | -| test.c:588:15:596:28 | ... + ... | 1.1588865682845433E54 | -| test.c:588:19:588:32 | (...) | 7.24700382E8 | -| test.c:588:20:588:21 | ip | 7.24700382E8 | -| test.c:588:20:588:26 | ... * ... | 7.24700382E8 | -| test.c:588:20:588:31 | ... + ... | 7.24700382E8 | -| test.c:588:25:588:26 | 14 | 1.0 | -| test.c:588:25:588:26 | (unsigned int)... | 1.0 | -| test.c:588:30:588:31 | 32 | 1.0 | -| test.c:588:30:588:31 | (unsigned int)... | 1.0 | -| test.c:589:15:589:32 | (...) | 7.24700382E8 | -| test.c:589:16:589:16 | 2 | 1.0 | -| test.c:589:16:589:16 | (unsigned int)... | 1.0 | -| test.c:589:16:589:21 | ... * ... | 7.24700382E8 | -| test.c:589:16:589:26 | ... * ... | 7.24700382E8 | -| test.c:589:16:589:31 | ... + ... | 7.24700382E8 | -| test.c:589:20:589:21 | ip | 7.24700382E8 | -| test.c:589:25:589:26 | 14 | 1.0 | -| test.c:589:25:589:26 | (unsigned int)... | 1.0 | -| test.c:589:30:589:31 | 32 | 1.0 | -| test.c:589:30:589:31 | (unsigned int)... | 1.0 | -| test.c:590:15:590:15 | 2 | 1.0 | -| test.c:590:15:590:15 | (unsigned int)... | 1.0 | -| test.c:590:15:590:32 | ... * ... | 7.24700382E8 | -| test.c:590:19:590:32 | (...) | 7.24700382E8 | -| test.c:590:20:590:21 | ip | 7.24700382E8 | -| test.c:590:20:590:26 | ... * ... | 7.24700382E8 | -| test.c:590:20:590:31 | ... + ... | 7.24700382E8 | -| test.c:590:25:590:26 | 14 | 1.0 | -| test.c:590:25:590:26 | (unsigned int)... | 1.0 | -| test.c:590:30:590:31 | 64 | 1.0 | -| test.c:590:30:590:31 | (unsigned int)... | 1.0 | -| test.c:591:15:596:28 | (...) | 3.044846887031571E27 | -| test.c:591:16:591:27 | (...) | 7.24700382E8 | -| test.c:591:16:591:32 | ... * ... | 7.24700382E8 | -| test.c:591:16:592:65 | ... > ... | 1.0 | -| test.c:591:16:596:27 | ... ? ... : ... | 3.044846887031571E27 | -| test.c:591:17:591:17 | 2 | 1.0 | -| test.c:591:17:591:17 | (unsigned int)... | 1.0 | -| test.c:591:17:591:22 | ... * ... | 7.24700382E8 | -| test.c:591:17:591:26 | ... + ... | 7.24700382E8 | -| test.c:591:21:591:22 | ip | 7.24700382E8 | -| test.c:591:26:591:26 | 1 | 1.0 | -| test.c:591:26:591:26 | (unsigned int)... | 1.0 | -| test.c:591:31:591:32 | 14 | 1.0 | -| test.c:591:31:591:32 | (unsigned int)... | 1.0 | -| test.c:592:15:592:65 | (...) | 5.251906436709459E17 | -| test.c:592:16:592:17 | 14 | 1.0 | -| test.c:592:16:592:17 | (unsigned int)... | 1.0 | -| test.c:592:16:592:28 | ... * ... | 7.24700382E8 | -| test.c:592:16:592:38 | ... > ... | 1.0 | -| test.c:592:16:592:64 | ... ? ... : ... | 5.251906436709459E17 | -| test.c:592:21:592:28 | (...) | 7.24700382E8 | -| test.c:592:22:592:22 | 2 | 1.0 | -| test.c:592:22:592:22 | (unsigned int)... | 1.0 | -| test.c:592:22:592:27 | ... * ... | 7.24700382E8 | -| test.c:592:26:592:27 | ip | 7.24700382E8 | -| test.c:592:32:592:33 | 17 | 1.0 | -| test.c:592:32:592:33 | (unsigned int)... | 1.0 | -| test.c:592:32:592:38 | ... * ... | 7.24700382E8 | -| test.c:592:37:592:38 | ip | 7.24700382E8 | -| test.c:592:42:592:43 | 17 | 1.0 | -| test.c:592:42:592:43 | (unsigned int)... | 1.0 | -| test.c:592:42:592:54 | ... * ... | 7.24700382E8 | -| test.c:592:47:592:54 | (...) | 7.24700382E8 | -| test.c:592:48:592:48 | 2 | 1.0 | -| test.c:592:48:592:48 | (unsigned int)... | 1.0 | -| test.c:592:48:592:53 | ... * ... | 7.24700382E8 | -| test.c:592:52:592:53 | ip | 7.24700382E8 | -| test.c:592:58:592:59 | 17 | 1.0 | -| test.c:592:58:592:59 | (unsigned int)... | 1.0 | -| test.c:592:58:592:64 | ... * ... | 7.24700382E8 | -| test.c:592:63:592:64 | ip | 7.24700382E8 | -| test.c:593:19:593:30 | (...) | 1.449400765E9 | -| test.c:593:19:593:35 | ... * ... | 1.449400765E9 | -| test.c:593:20:593:20 | 2 | 1.0 | -| test.c:593:20:593:20 | (unsigned int)... | 1.0 | -| test.c:593:20:593:25 | ... * ... | 1.449400765E9 | -| test.c:593:20:593:29 | ... + ... | 1.449400765E9 | -| test.c:593:24:593:25 | ip | 1.449400765E9 | -| test.c:593:29:593:29 | 1 | 1.0 | -| test.c:593:29:593:29 | (unsigned int)... | 1.0 | -| test.c:593:34:593:35 | 14 | 1.0 | -| test.c:593:34:593:35 | (unsigned int)... | 1.0 | -| test.c:594:19:594:20 | 14 | 1.0 | -| test.c:594:19:594:20 | (unsigned int)... | 1.0 | -| test.c:594:19:594:31 | ... * ... | 1.449400765E9 | -| test.c:594:19:594:41 | ... > ... | 1.0 | -| test.c:594:19:596:27 | ... ? ... : ... | 2.1007625775825853E18 | -| test.c:594:24:594:31 | (...) | 1.449400765E9 | -| test.c:594:25:594:25 | 2 | 1.0 | -| test.c:594:25:594:25 | (unsigned int)... | 1.0 | -| test.c:594:25:594:30 | ... * ... | 1.449400765E9 | -| test.c:594:29:594:30 | ip | 1.449400765E9 | -| test.c:594:35:594:36 | 17 | 1.0 | -| test.c:594:35:594:36 | (unsigned int)... | 1.0 | -| test.c:594:35:594:41 | ... * ... | 1.449400765E9 | -| test.c:594:40:594:41 | ip | 1.449400765E9 | -| test.c:595:21:595:22 | 14 | 1.0 | -| test.c:595:21:595:22 | (unsigned int)... | 1.0 | -| test.c:595:21:595:33 | ... * ... | 1.449400765E9 | -| test.c:595:26:595:33 | (...) | 1.449400765E9 | -| test.c:595:27:595:27 | 2 | 1.0 | -| test.c:595:27:595:27 | (unsigned int)... | 1.0 | -| test.c:595:27:595:32 | ... * ... | 1.449400765E9 | -| test.c:595:31:595:32 | ip | 1.449400765E9 | -| test.c:596:21:596:22 | 14 | 1.0 | -| test.c:596:21:596:22 | (unsigned int)... | 1.0 | -| test.c:596:21:596:27 | ... * ... | 1.449400765E9 | -| test.c:596:26:596:27 | ip | 1.449400765E9 | -| test.c:597:15:597:16 | 14 | 1.0 | -| test.c:597:15:597:16 | (unsigned int)... | 1.0 | -| test.c:597:15:597:21 | ... * ... | 7.24700382E8 | -| test.c:597:15:597:37 | ... > ... | 1.0 | -| test.c:597:15:599:29 | ... ? ... : ... | 5.251906436709459E17 | -| test.c:597:20:597:21 | ip | 7.24700382E8 | -| test.c:597:25:597:32 | (...) | 7.24700382E8 | -| test.c:597:25:597:37 | ... * ... | 7.24700382E8 | -| test.c:597:26:597:27 | ip | 7.24700382E8 | -| test.c:597:26:597:31 | ... + ... | 7.24700382E8 | -| test.c:597:31:597:31 | 1 | 1.0 | -| test.c:597:31:597:31 | (unsigned int)... | 1.0 | -| test.c:597:36:597:37 | 17 | 1.0 | -| test.c:597:36:597:37 | (unsigned int)... | 1.0 | -| test.c:598:17:598:18 | 14 | 1.0 | -| test.c:598:17:598:18 | (unsigned int)... | 1.0 | -| test.c:598:17:598:23 | ... * ... | 7.24700382E8 | -| test.c:598:22:598:23 | ip | 7.24700382E8 | -| test.c:599:17:599:24 | (...) | 7.24700382E8 | -| test.c:599:17:599:29 | ... * ... | 7.24700382E8 | -| test.c:599:18:599:19 | ip | 7.24700382E8 | -| test.c:599:18:599:23 | ... + ... | 7.24700382E8 | -| test.c:599:23:599:23 | 1 | 1.0 | -| test.c:599:23:599:23 | (unsigned int)... | 1.0 | -| test.c:599:28:599:29 | 14 | 1.0 | -| test.c:599:28:599:29 | (unsigned int)... | 1.0 | -| test.c:600:11:600:11 | 2 | 1.0 | -| test.c:600:11:600:11 | (unsigned int)... | 1.0 | -| test.c:600:11:600:28 | ... * ... | 5.797603059E9 | -| test.c:600:11:620:46 | ... + ... | 9.943431528813442E94 | -| test.c:600:15:600:28 | (...) | 5.797603059E9 | -| test.c:600:16:600:17 | ip | 5.797603059E9 | -| test.c:600:16:600:22 | ... * ... | 5.797603059E9 | -| test.c:600:16:600:27 | ... + ... | 5.797603059E9 | -| test.c:600:21:600:22 | 14 | 1.0 | -| test.c:600:21:600:22 | (unsigned int)... | 1.0 | -| test.c:600:26:600:27 | 32 | 1.0 | -| test.c:600:26:600:27 | (unsigned int)... | 1.0 | -| test.c:601:11:620:46 | (...) | 1.715093535659983E85 | -| test.c:601:12:601:12 | 4 | 1.0 | -| test.c:601:12:601:12 | (unsigned int)... | 1.0 | -| test.c:601:12:601:29 | ... * ... | 5.797603059E9 | -| test.c:601:12:602:30 | ... + ... | 3.361220122972616E19 | -| test.c:601:12:603:30 | ... + ... | 1.9487020066918396E29 | -| test.c:601:12:609:26 | ... + ... | 3.0379516094938436E59 | -| test.c:601:12:610:41 | ... > ... | 1.0 | -| test.c:601:12:620:45 | ... ? ... : ... | 1.715093535659983E85 | -| test.c:601:16:601:29 | (...) | 5.797603059E9 | -| test.c:601:17:601:18 | ip | 5.797603059E9 | -| test.c:601:17:601:23 | ... * ... | 5.797603059E9 | -| test.c:601:17:601:28 | ... + ... | 5.797603059E9 | -| test.c:601:22:601:23 | 14 | 1.0 | -| test.c:601:22:601:23 | (unsigned int)... | 1.0 | -| test.c:601:27:601:28 | 32 | 1.0 | -| test.c:601:27:601:28 | (unsigned int)... | 1.0 | -| test.c:602:13:602:30 | (...) | 5.797603059E9 | -| test.c:602:14:602:14 | 2 | 1.0 | -| test.c:602:14:602:14 | (unsigned int)... | 1.0 | -| test.c:602:14:602:19 | ... * ... | 5.797603059E9 | -| test.c:602:14:602:24 | ... * ... | 5.797603059E9 | -| test.c:602:14:602:29 | ... + ... | 5.797603059E9 | -| test.c:602:18:602:19 | ip | 5.797603059E9 | -| test.c:602:23:602:24 | 14 | 1.0 | -| test.c:602:23:602:24 | (unsigned int)... | 1.0 | -| test.c:602:28:602:29 | 32 | 1.0 | -| test.c:602:28:602:29 | (unsigned int)... | 1.0 | -| test.c:603:13:603:13 | 2 | 1.0 | -| test.c:603:13:603:13 | (unsigned int)... | 1.0 | -| test.c:603:13:603:30 | ... * ... | 5.797603059E9 | -| test.c:603:17:603:30 | (...) | 5.797603059E9 | -| test.c:603:18:603:19 | ip | 5.797603059E9 | -| test.c:603:18:603:24 | ... * ... | 5.797603059E9 | -| test.c:603:18:603:29 | ... + ... | 5.797603059E9 | -| test.c:603:23:603:24 | 14 | 1.0 | -| test.c:603:23:603:24 | (unsigned int)... | 1.0 | -| test.c:603:28:603:29 | 64 | 1.0 | -| test.c:603:28:603:29 | (unsigned int)... | 1.0 | -| test.c:604:13:609:26 | (...) | 1.558961605756818E30 | -| test.c:604:14:604:25 | (...) | 5.797603059E9 | -| test.c:604:14:604:30 | ... * ... | 5.797603059E9 | -| test.c:604:14:605:63 | ... > ... | 1.0 | -| test.c:604:14:609:25 | ... ? ... : ... | 1.558961605756818E30 | -| test.c:604:15:604:15 | 2 | 1.0 | -| test.c:604:15:604:15 | (unsigned int)... | 1.0 | -| test.c:604:15:604:20 | ... * ... | 5.797603059E9 | -| test.c:604:15:604:24 | ... + ... | 5.797603059E9 | -| test.c:604:19:604:20 | ip | 5.797603059E9 | -| test.c:604:24:604:24 | 1 | 1.0 | -| test.c:604:24:604:24 | (unsigned int)... | 1.0 | -| test.c:604:29:604:30 | 14 | 1.0 | -| test.c:604:29:604:30 | (unsigned int)... | 1.0 | -| test.c:605:13:605:63 | (...) | 3.361220122972616E19 | -| test.c:605:14:605:15 | 14 | 1.0 | -| test.c:605:14:605:15 | (unsigned int)... | 1.0 | -| test.c:605:14:605:26 | ... * ... | 5.797603059E9 | -| test.c:605:14:605:36 | ... > ... | 1.0 | -| test.c:605:14:605:62 | ... ? ... : ... | 3.361220122972616E19 | -| test.c:605:19:605:26 | (...) | 5.797603059E9 | -| test.c:605:20:605:20 | 2 | 1.0 | -| test.c:605:20:605:20 | (unsigned int)... | 1.0 | -| test.c:605:20:605:25 | ... * ... | 5.797603059E9 | -| test.c:605:24:605:25 | ip | 5.797603059E9 | -| test.c:605:30:605:31 | 17 | 1.0 | -| test.c:605:30:605:31 | (unsigned int)... | 1.0 | -| test.c:605:30:605:36 | ... * ... | 5.797603059E9 | -| test.c:605:35:605:36 | ip | 5.797603059E9 | -| test.c:605:40:605:41 | 17 | 1.0 | -| test.c:605:40:605:41 | (unsigned int)... | 1.0 | -| test.c:605:40:605:52 | ... * ... | 5.797603059E9 | -| test.c:605:45:605:52 | (...) | 5.797603059E9 | -| test.c:605:46:605:46 | 2 | 1.0 | -| test.c:605:46:605:46 | (unsigned int)... | 1.0 | -| test.c:605:46:605:51 | ... * ... | 5.797603059E9 | -| test.c:605:50:605:51 | ip | 5.797603059E9 | -| test.c:605:56:605:57 | 17 | 1.0 | -| test.c:605:56:605:57 | (unsigned int)... | 1.0 | -| test.c:605:56:605:62 | ... * ... | 5.797603059E9 | -| test.c:605:61:605:62 | ip | 5.797603059E9 | -| test.c:606:17:606:28 | (...) | 1.1595206119E10 | -| test.c:606:17:606:33 | ... * ... | 1.1595206119E10 | -| test.c:606:18:606:18 | 2 | 1.0 | -| test.c:606:18:606:18 | (unsigned int)... | 1.0 | -| test.c:606:18:606:23 | ... * ... | 1.1595206119E10 | -| test.c:606:18:606:27 | ... + ... | 1.1595206119E10 | -| test.c:606:22:606:23 | ip | 1.1595206119E10 | -| test.c:606:27:606:27 | 1 | 1.0 | -| test.c:606:27:606:27 | (unsigned int)... | 1.0 | -| test.c:606:32:606:33 | 14 | 1.0 | -| test.c:606:32:606:33 | (unsigned int)... | 1.0 | -| test.c:607:17:607:18 | 14 | 1.0 | -| test.c:607:17:607:18 | (unsigned int)... | 1.0 | -| test.c:607:17:607:29 | ... * ... | 1.1595206119E10 | -| test.c:607:17:607:39 | ... > ... | 1.0 | -| test.c:607:17:609:25 | ... ? ... : ... | 1.3444880494209504E20 | -| test.c:607:22:607:29 | (...) | 1.1595206119E10 | -| test.c:607:23:607:23 | 2 | 1.0 | -| test.c:607:23:607:23 | (unsigned int)... | 1.0 | -| test.c:607:23:607:28 | ... * ... | 1.1595206119E10 | -| test.c:607:27:607:28 | ip | 1.1595206119E10 | -| test.c:607:33:607:34 | 17 | 1.0 | -| test.c:607:33:607:34 | (unsigned int)... | 1.0 | -| test.c:607:33:607:39 | ... * ... | 1.1595206119E10 | -| test.c:607:38:607:39 | ip | 1.1595206119E10 | -| test.c:608:19:608:20 | 14 | 1.0 | -| test.c:608:19:608:20 | (unsigned int)... | 1.0 | -| test.c:608:19:608:31 | ... * ... | 1.1595206119E10 | -| test.c:608:24:608:31 | (...) | 1.1595206119E10 | -| test.c:608:25:608:25 | 2 | 1.0 | -| test.c:608:25:608:25 | (unsigned int)... | 1.0 | -| test.c:608:25:608:30 | ... * ... | 1.1595206119E10 | -| test.c:608:29:608:30 | ip | 1.1595206119E10 | -| test.c:609:19:609:20 | 14 | 1.0 | -| test.c:609:19:609:20 | (unsigned int)... | 1.0 | -| test.c:609:19:609:25 | ... * ... | 1.1595206119E10 | -| test.c:609:24:609:25 | ip | 1.1595206119E10 | -| test.c:610:11:610:11 | 2 | 1.0 | -| test.c:610:11:610:11 | (unsigned int)... | 1.0 | -| test.c:610:11:610:16 | ... * ... | 3.4785618357E10 | -| test.c:610:11:610:21 | ... * ... | 3.4785618357E10 | -| test.c:610:11:610:41 | ... + ... | 1.2100392444788552E21 | -| test.c:610:15:610:16 | ip | 3.4785618357E10 | -| test.c:610:20:610:21 | 14 | 1.0 | -| test.c:610:20:610:21 | (unsigned int)... | 1.0 | -| test.c:610:25:610:36 | (...) | 3.4785618357E10 | -| test.c:610:25:610:41 | ... * ... | 3.4785618357E10 | -| test.c:610:26:610:26 | 2 | 1.0 | -| test.c:610:26:610:26 | (unsigned int)... | 1.0 | -| test.c:610:26:610:31 | ... * ... | 3.4785618357E10 | -| test.c:610:26:610:35 | ... + ... | 3.4785618357E10 | -| test.c:610:30:610:31 | ip | 3.4785618357E10 | -| test.c:610:35:610:35 | 1 | 1.0 | -| test.c:610:35:610:35 | (unsigned int)... | 1.0 | -| test.c:610:40:610:41 | 17 | 1.0 | -| test.c:610:40:610:41 | (unsigned int)... | 1.0 | -| test.c:611:15:611:15 | 4 | 1.0 | -| test.c:611:15:611:15 | (unsigned int)... | 1.0 | -| test.c:611:15:611:32 | ... * ... | 3.4785618357E10 | -| test.c:611:15:612:32 | ... + ... | 1.2100392444788552E21 | -| test.c:611:15:613:32 | ... + ... | 4.209196335543408E31 | -| test.c:611:15:619:28 | ... + ... | 1.417386703353284E64 | -| test.c:611:19:611:32 | (...) | 3.4785618357E10 | -| test.c:611:20:611:21 | ip | 3.4785618357E10 | -| test.c:611:20:611:26 | ... * ... | 3.4785618357E10 | -| test.c:611:20:611:31 | ... + ... | 3.4785618357E10 | -| test.c:611:25:611:26 | 14 | 1.0 | -| test.c:611:25:611:26 | (unsigned int)... | 1.0 | -| test.c:611:30:611:31 | 32 | 1.0 | -| test.c:611:30:611:31 | (unsigned int)... | 1.0 | -| test.c:612:15:612:32 | (...) | 3.4785618357E10 | -| test.c:612:16:612:16 | 2 | 1.0 | -| test.c:612:16:612:16 | (unsigned int)... | 1.0 | -| test.c:612:16:612:21 | ... * ... | 3.4785618357E10 | -| test.c:612:16:612:26 | ... * ... | 3.4785618357E10 | -| test.c:612:16:612:31 | ... + ... | 3.4785618357E10 | -| test.c:612:20:612:21 | ip | 3.4785618357E10 | -| test.c:612:25:612:26 | 14 | 1.0 | -| test.c:612:25:612:26 | (unsigned int)... | 1.0 | -| test.c:612:30:612:31 | 32 | 1.0 | -| test.c:612:30:612:31 | (unsigned int)... | 1.0 | -| test.c:613:15:613:15 | 2 | 1.0 | -| test.c:613:15:613:15 | (unsigned int)... | 1.0 | -| test.c:613:15:613:32 | ... * ... | 3.4785618357E10 | -| test.c:613:19:613:32 | (...) | 3.4785618357E10 | -| test.c:613:20:613:21 | ip | 3.4785618357E10 | -| test.c:613:20:613:26 | ... * ... | 3.4785618357E10 | -| test.c:613:20:613:31 | ... + ... | 3.4785618357E10 | -| test.c:613:25:613:26 | 14 | 1.0 | -| test.c:613:25:613:26 | (unsigned int)... | 1.0 | -| test.c:613:30:613:31 | 64 | 1.0 | -| test.c:613:30:613:31 | (unsigned int)... | 1.0 | -| test.c:614:15:619:28 | (...) | 3.367357068579931E32 | -| test.c:614:16:614:27 | (...) | 3.4785618357E10 | -| test.c:614:16:614:32 | ... * ... | 3.4785618357E10 | -| test.c:614:16:615:65 | ... > ... | 1.0 | -| test.c:614:16:619:27 | ... ? ... : ... | 3.367357068579931E32 | -| test.c:614:17:614:17 | 2 | 1.0 | -| test.c:614:17:614:17 | (unsigned int)... | 1.0 | -| test.c:614:17:614:22 | ... * ... | 3.4785618357E10 | -| test.c:614:17:614:26 | ... + ... | 3.4785618357E10 | -| test.c:614:21:614:22 | ip | 3.4785618357E10 | -| test.c:614:26:614:26 | 1 | 1.0 | -| test.c:614:26:614:26 | (unsigned int)... | 1.0 | -| test.c:614:31:614:32 | 14 | 1.0 | -| test.c:614:31:614:32 | (unsigned int)... | 1.0 | -| test.c:615:15:615:65 | (...) | 1.2100392444788552E21 | -| test.c:615:16:615:17 | 14 | 1.0 | -| test.c:615:16:615:17 | (unsigned int)... | 1.0 | -| test.c:615:16:615:28 | ... * ... | 3.4785618357E10 | -| test.c:615:16:615:38 | ... > ... | 1.0 | -| test.c:615:16:615:64 | ... ? ... : ... | 1.2100392444788552E21 | -| test.c:615:21:615:28 | (...) | 3.4785618357E10 | -| test.c:615:22:615:22 | 2 | 1.0 | -| test.c:615:22:615:22 | (unsigned int)... | 1.0 | -| test.c:615:22:615:27 | ... * ... | 3.4785618357E10 | -| test.c:615:26:615:27 | ip | 3.4785618357E10 | -| test.c:615:32:615:33 | 17 | 1.0 | -| test.c:615:32:615:33 | (unsigned int)... | 1.0 | -| test.c:615:32:615:38 | ... * ... | 3.4785618357E10 | -| test.c:615:37:615:38 | ip | 3.4785618357E10 | -| test.c:615:42:615:43 | 17 | 1.0 | -| test.c:615:42:615:43 | (unsigned int)... | 1.0 | -| test.c:615:42:615:54 | ... * ... | 3.4785618357E10 | -| test.c:615:47:615:54 | (...) | 3.4785618357E10 | -| test.c:615:48:615:48 | 2 | 1.0 | -| test.c:615:48:615:48 | (unsigned int)... | 1.0 | -| test.c:615:48:615:53 | ... * ... | 3.4785618357E10 | -| test.c:615:52:615:53 | ip | 3.4785618357E10 | -| test.c:615:58:615:59 | 17 | 1.0 | -| test.c:615:58:615:59 | (unsigned int)... | 1.0 | -| test.c:615:58:615:64 | ... * ... | 3.4785618357E10 | -| test.c:615:63:615:64 | ip | 3.4785618357E10 | -| test.c:616:19:616:30 | (...) | 6.9571236715E10 | -| test.c:616:19:616:35 | ... * ... | 6.9571236715E10 | -| test.c:616:20:616:20 | 2 | 1.0 | -| test.c:616:20:616:20 | (unsigned int)... | 1.0 | -| test.c:616:20:616:25 | ... * ... | 6.9571236715E10 | -| test.c:616:20:616:29 | ... + ... | 6.9571236715E10 | -| test.c:616:24:616:25 | ip | 6.9571236715E10 | -| test.c:616:29:616:29 | 1 | 1.0 | -| test.c:616:29:616:29 | (unsigned int)... | 1.0 | -| test.c:616:34:616:35 | 14 | 1.0 | -| test.c:616:34:616:35 | (unsigned int)... | 1.0 | -| test.c:617:19:617:20 | 14 | 1.0 | -| test.c:617:19:617:20 | (unsigned int)... | 1.0 | -| test.c:617:19:617:31 | ... * ... | 6.9571236715E10 | -| test.c:617:19:617:41 | ... > ... | 1.0 | -| test.c:617:19:619:27 | ... ? ... : ... | 4.840156978054564E21 | -| test.c:617:24:617:31 | (...) | 6.9571236715E10 | -| test.c:617:25:617:25 | 2 | 1.0 | -| test.c:617:25:617:25 | (unsigned int)... | 1.0 | -| test.c:617:25:617:30 | ... * ... | 6.9571236715E10 | -| test.c:617:29:617:30 | ip | 6.9571236715E10 | -| test.c:617:35:617:36 | 17 | 1.0 | -| test.c:617:35:617:36 | (unsigned int)... | 1.0 | -| test.c:617:35:617:41 | ... * ... | 6.9571236715E10 | -| test.c:617:40:617:41 | ip | 6.9571236715E10 | -| test.c:618:21:618:22 | 14 | 1.0 | -| test.c:618:21:618:22 | (unsigned int)... | 1.0 | -| test.c:618:21:618:33 | ... * ... | 6.9571236715E10 | -| test.c:618:26:618:33 | (...) | 6.9571236715E10 | -| test.c:618:27:618:27 | 2 | 1.0 | -| test.c:618:27:618:27 | (unsigned int)... | 1.0 | -| test.c:618:27:618:32 | ... * ... | 6.9571236715E10 | -| test.c:618:31:618:32 | ip | 6.9571236715E10 | -| test.c:619:21:619:22 | 14 | 1.0 | -| test.c:619:21:619:22 | (unsigned int)... | 1.0 | -| test.c:619:21:619:27 | ... * ... | 6.9571236715E10 | -| test.c:619:26:619:27 | ip | 6.9571236715E10 | -| test.c:620:15:620:15 | 2 | 1.0 | -| test.c:620:15:620:15 | (unsigned int)... | 1.0 | -| test.c:620:15:620:20 | ... * ... | 3.4785618357E10 | -| test.c:620:15:620:25 | ... * ... | 3.4785618357E10 | -| test.c:620:15:620:45 | ... + ... | 1.2100392444788552E21 | -| test.c:620:19:620:20 | ip | 3.4785618357E10 | -| test.c:620:24:620:25 | 14 | 1.0 | -| test.c:620:24:620:25 | (unsigned int)... | 1.0 | -| test.c:620:29:620:40 | (...) | 3.4785618357E10 | -| test.c:620:29:620:45 | ... * ... | 3.4785618357E10 | -| test.c:620:30:620:30 | 2 | 1.0 | -| test.c:620:30:620:30 | (unsigned int)... | 1.0 | -| test.c:620:30:620:35 | ... * ... | 3.4785618357E10 | -| test.c:620:30:620:39 | ... + ... | 3.4785618357E10 | -| test.c:620:34:620:35 | ip | 3.4785618357E10 | -| test.c:620:39:620:39 | 1 | 1.0 | -| test.c:620:39:620:39 | (unsigned int)... | 1.0 | -| test.c:620:44:620:45 | 17 | 1.0 | -| test.c:620:44:620:45 | (unsigned int)... | 1.0 | -| test.c:621:11:621:11 | 4 | 1.0 | -| test.c:621:11:621:11 | (unsigned int)... | 1.0 | -| test.c:621:11:621:28 | ... * ... | 5.797603059E9 | -| test.c:621:11:622:32 | ... + ... | 3.361220122972616E19 | -| test.c:621:11:623:32 | ... + ... | 1.9487020066918396E29 | -| test.c:621:11:629:28 | ... + ... | 3.0379516094938436E59 | -| test.c:621:11:630:63 | ... > ... | 1.0 | -| test.c:621:11:642:27 | ... ? ... : ... | 4.390639451194891E87 | -| test.c:621:15:621:28 | (...) | 5.797603059E9 | -| test.c:621:16:621:17 | ip | 5.797603059E9 | -| test.c:621:16:621:22 | ... * ... | 5.797603059E9 | -| test.c:621:16:621:27 | ... + ... | 5.797603059E9 | -| test.c:621:21:621:22 | 14 | 1.0 | -| test.c:621:21:621:22 | (unsigned int)... | 1.0 | -| test.c:621:26:621:27 | 32 | 1.0 | -| test.c:621:26:621:27 | (unsigned int)... | 1.0 | -| test.c:622:15:622:32 | (...) | 5.797603059E9 | -| test.c:622:16:622:16 | 2 | 1.0 | -| test.c:622:16:622:16 | (unsigned int)... | 1.0 | -| test.c:622:16:622:21 | ... * ... | 5.797603059E9 | -| test.c:622:16:622:26 | ... * ... | 5.797603059E9 | -| test.c:622:16:622:31 | ... + ... | 5.797603059E9 | -| test.c:622:20:622:21 | ip | 5.797603059E9 | -| test.c:622:25:622:26 | 14 | 1.0 | -| test.c:622:25:622:26 | (unsigned int)... | 1.0 | -| test.c:622:30:622:31 | 32 | 1.0 | -| test.c:622:30:622:31 | (unsigned int)... | 1.0 | -| test.c:623:15:623:15 | 2 | 1.0 | -| test.c:623:15:623:15 | (unsigned int)... | 1.0 | -| test.c:623:15:623:32 | ... * ... | 5.797603059E9 | -| test.c:623:19:623:32 | (...) | 5.797603059E9 | -| test.c:623:20:623:21 | ip | 5.797603059E9 | -| test.c:623:20:623:26 | ... * ... | 5.797603059E9 | -| test.c:623:20:623:31 | ... + ... | 5.797603059E9 | -| test.c:623:25:623:26 | 14 | 1.0 | -| test.c:623:25:623:26 | (unsigned int)... | 1.0 | -| test.c:623:30:623:31 | 64 | 1.0 | -| test.c:623:30:623:31 | (unsigned int)... | 1.0 | -| test.c:624:15:629:28 | (...) | 1.558961605756818E30 | -| test.c:624:16:624:27 | (...) | 5.797603059E9 | -| test.c:624:16:624:32 | ... * ... | 5.797603059E9 | -| test.c:624:16:625:65 | ... > ... | 1.0 | -| test.c:624:16:629:27 | ... ? ... : ... | 1.558961605756818E30 | -| test.c:624:17:624:17 | 2 | 1.0 | -| test.c:624:17:624:17 | (unsigned int)... | 1.0 | -| test.c:624:17:624:22 | ... * ... | 5.797603059E9 | -| test.c:624:17:624:26 | ... + ... | 5.797603059E9 | -| test.c:624:21:624:22 | ip | 5.797603059E9 | -| test.c:624:26:624:26 | 1 | 1.0 | -| test.c:624:26:624:26 | (unsigned int)... | 1.0 | -| test.c:624:31:624:32 | 14 | 1.0 | -| test.c:624:31:624:32 | (unsigned int)... | 1.0 | -| test.c:625:15:625:65 | (...) | 3.361220122972616E19 | -| test.c:625:16:625:17 | 14 | 1.0 | -| test.c:625:16:625:17 | (unsigned int)... | 1.0 | -| test.c:625:16:625:28 | ... * ... | 5.797603059E9 | -| test.c:625:16:625:38 | ... > ... | 1.0 | -| test.c:625:16:625:64 | ... ? ... : ... | 3.361220122972616E19 | -| test.c:625:21:625:28 | (...) | 5.797603059E9 | -| test.c:625:22:625:22 | 2 | 1.0 | -| test.c:625:22:625:22 | (unsigned int)... | 1.0 | -| test.c:625:22:625:27 | ... * ... | 5.797603059E9 | -| test.c:625:26:625:27 | ip | 5.797603059E9 | -| test.c:625:32:625:33 | 17 | 1.0 | -| test.c:625:32:625:33 | (unsigned int)... | 1.0 | -| test.c:625:32:625:38 | ... * ... | 5.797603059E9 | -| test.c:625:37:625:38 | ip | 5.797603059E9 | -| test.c:625:42:625:43 | 17 | 1.0 | -| test.c:625:42:625:43 | (unsigned int)... | 1.0 | -| test.c:625:42:625:54 | ... * ... | 5.797603059E9 | -| test.c:625:47:625:54 | (...) | 5.797603059E9 | -| test.c:625:48:625:48 | 2 | 1.0 | -| test.c:625:48:625:48 | (unsigned int)... | 1.0 | -| test.c:625:48:625:53 | ... * ... | 5.797603059E9 | -| test.c:625:52:625:53 | ip | 5.797603059E9 | -| test.c:625:58:625:59 | 17 | 1.0 | -| test.c:625:58:625:59 | (unsigned int)... | 1.0 | -| test.c:625:58:625:64 | ... * ... | 5.797603059E9 | -| test.c:625:63:625:64 | ip | 5.797603059E9 | -| test.c:626:19:626:30 | (...) | 1.1595206119E10 | -| test.c:626:19:626:35 | ... * ... | 1.1595206119E10 | -| test.c:626:20:626:20 | 2 | 1.0 | -| test.c:626:20:626:20 | (unsigned int)... | 1.0 | -| test.c:626:20:626:25 | ... * ... | 1.1595206119E10 | -| test.c:626:20:626:29 | ... + ... | 1.1595206119E10 | -| test.c:626:24:626:25 | ip | 1.1595206119E10 | -| test.c:626:29:626:29 | 1 | 1.0 | -| test.c:626:29:626:29 | (unsigned int)... | 1.0 | -| test.c:626:34:626:35 | 14 | 1.0 | -| test.c:626:34:626:35 | (unsigned int)... | 1.0 | -| test.c:627:19:627:20 | 14 | 1.0 | -| test.c:627:19:627:20 | (unsigned int)... | 1.0 | -| test.c:627:19:627:31 | ... * ... | 1.1595206119E10 | -| test.c:627:19:627:41 | ... > ... | 1.0 | -| test.c:627:19:629:27 | ... ? ... : ... | 1.3444880494209504E20 | -| test.c:627:24:627:31 | (...) | 1.1595206119E10 | -| test.c:627:25:627:25 | 2 | 1.0 | -| test.c:627:25:627:25 | (unsigned int)... | 1.0 | -| test.c:627:25:627:30 | ... * ... | 1.1595206119E10 | -| test.c:627:29:627:30 | ip | 1.1595206119E10 | -| test.c:627:35:627:36 | 17 | 1.0 | -| test.c:627:35:627:36 | (unsigned int)... | 1.0 | -| test.c:627:35:627:41 | ... * ... | 1.1595206119E10 | -| test.c:627:40:627:41 | ip | 1.1595206119E10 | -| test.c:628:21:628:22 | 14 | 1.0 | -| test.c:628:21:628:22 | (unsigned int)... | 1.0 | -| test.c:628:21:628:33 | ... * ... | 1.1595206119E10 | -| test.c:628:26:628:33 | (...) | 1.1595206119E10 | -| test.c:628:27:628:27 | 2 | 1.0 | -| test.c:628:27:628:27 | (unsigned int)... | 1.0 | -| test.c:628:27:628:32 | ... * ... | 1.1595206119E10 | -| test.c:628:31:628:32 | ip | 1.1595206119E10 | -| test.c:629:21:629:22 | 14 | 1.0 | -| test.c:629:21:629:22 | (unsigned int)... | 1.0 | -| test.c:629:21:629:27 | ... * ... | 1.1595206119E10 | -| test.c:629:26:629:27 | ip | 1.1595206119E10 | -| test.c:630:13:630:63 | (...) | 1.2100392444788552E21 | -| test.c:630:14:630:15 | 14 | 1.0 | -| test.c:630:14:630:15 | (unsigned int)... | 1.0 | -| test.c:630:14:630:20 | ... * ... | 3.4785618357E10 | -| test.c:630:14:630:36 | ... > ... | 1.0 | -| test.c:630:14:630:62 | ... ? ... : ... | 1.2100392444788552E21 | -| test.c:630:19:630:20 | ip | 3.4785618357E10 | -| test.c:630:24:630:31 | (...) | 3.4785618357E10 | -| test.c:630:24:630:36 | ... * ... | 3.4785618357E10 | -| test.c:630:25:630:26 | ip | 3.4785618357E10 | -| test.c:630:25:630:30 | ... + ... | 3.4785618357E10 | -| test.c:630:30:630:30 | 1 | 1.0 | -| test.c:630:30:630:30 | (unsigned int)... | 1.0 | -| test.c:630:35:630:36 | 17 | 1.0 | -| test.c:630:35:630:36 | (unsigned int)... | 1.0 | -| test.c:630:40:630:41 | 17 | 1.0 | -| test.c:630:40:630:41 | (unsigned int)... | 1.0 | -| test.c:630:40:630:46 | ... * ... | 3.4785618357E10 | -| test.c:630:45:630:46 | ip | 3.4785618357E10 | -| test.c:630:50:630:57 | (...) | 3.4785618357E10 | -| test.c:630:50:630:62 | ... * ... | 3.4785618357E10 | -| test.c:630:51:630:52 | ip | 3.4785618357E10 | -| test.c:630:51:630:56 | ... + ... | 3.4785618357E10 | -| test.c:630:56:630:56 | 1 | 1.0 | -| test.c:630:56:630:56 | (unsigned int)... | 1.0 | -| test.c:630:61:630:62 | 17 | 1.0 | -| test.c:630:61:630:62 | (unsigned int)... | 1.0 | -| test.c:631:13:631:13 | 4 | 1.0 | -| test.c:631:13:631:13 | (unsigned int)... | 1.0 | -| test.c:631:13:631:30 | ... * ... | 6.9571236714E10 | -| test.c:631:13:632:30 | ... + ... | 4.840156977915421E21 | -| test.c:631:13:633:30 | ... + ... | 3.3673570684347266E32 | -| test.c:631:13:639:26 | ... + ... | 9.071274901265435E65 | -| test.c:631:17:631:30 | (...) | 6.9571236714E10 | -| test.c:631:18:631:19 | ip | 6.9571236714E10 | -| test.c:631:18:631:24 | ... * ... | 6.9571236714E10 | -| test.c:631:18:631:29 | ... + ... | 6.9571236714E10 | -| test.c:631:23:631:24 | 14 | 1.0 | -| test.c:631:23:631:24 | (unsigned int)... | 1.0 | -| test.c:631:28:631:29 | 32 | 1.0 | -| test.c:631:28:631:29 | (unsigned int)... | 1.0 | -| test.c:632:13:632:30 | (...) | 6.9571236714E10 | -| test.c:632:14:632:14 | 2 | 1.0 | -| test.c:632:14:632:14 | (unsigned int)... | 1.0 | -| test.c:632:14:632:19 | ... * ... | 6.9571236714E10 | -| test.c:632:14:632:24 | ... * ... | 6.9571236714E10 | -| test.c:632:14:632:29 | ... + ... | 6.9571236714E10 | -| test.c:632:18:632:19 | ip | 6.9571236714E10 | -| test.c:632:23:632:24 | 14 | 1.0 | -| test.c:632:23:632:24 | (unsigned int)... | 1.0 | -| test.c:632:28:632:29 | 32 | 1.0 | -| test.c:632:28:632:29 | (unsigned int)... | 1.0 | -| test.c:633:13:633:13 | 2 | 1.0 | -| test.c:633:13:633:13 | (unsigned int)... | 1.0 | -| test.c:633:13:633:30 | ... * ... | 6.9571236714E10 | -| test.c:633:17:633:30 | (...) | 6.9571236714E10 | -| test.c:633:18:633:19 | ip | 6.9571236714E10 | -| test.c:633:18:633:24 | ... * ... | 6.9571236714E10 | -| test.c:633:18:633:29 | ... + ... | 6.9571236714E10 | -| test.c:633:23:633:24 | 14 | 1.0 | -| test.c:633:23:633:24 | (unsigned int)... | 1.0 | -| test.c:633:28:633:29 | 64 | 1.0 | -| test.c:633:28:633:29 | (unsigned int)... | 1.0 | -| test.c:634:13:639:26 | (...) | 2.693885654805863E33 | -| test.c:634:14:634:25 | (...) | 6.9571236714E10 | -| test.c:634:14:634:30 | ... * ... | 6.9571236714E10 | -| test.c:634:14:635:63 | ... > ... | 1.0 | -| test.c:634:14:639:25 | ... ? ... : ... | 2.693885654805863E33 | -| test.c:634:15:634:15 | 2 | 1.0 | -| test.c:634:15:634:15 | (unsigned int)... | 1.0 | -| test.c:634:15:634:20 | ... * ... | 6.9571236714E10 | -| test.c:634:15:634:24 | ... + ... | 6.9571236714E10 | -| test.c:634:19:634:20 | ip | 6.9571236714E10 | -| test.c:634:24:634:24 | 1 | 1.0 | -| test.c:634:24:634:24 | (unsigned int)... | 1.0 | -| test.c:634:29:634:30 | 14 | 1.0 | -| test.c:634:29:634:30 | (unsigned int)... | 1.0 | -| test.c:635:13:635:63 | (...) | 4.840156977915421E21 | -| test.c:635:14:635:15 | 14 | 1.0 | -| test.c:635:14:635:15 | (unsigned int)... | 1.0 | -| test.c:635:14:635:26 | ... * ... | 6.9571236714E10 | -| test.c:635:14:635:36 | ... > ... | 1.0 | -| test.c:635:14:635:62 | ... ? ... : ... | 4.840156977915421E21 | -| test.c:635:19:635:26 | (...) | 6.9571236714E10 | -| test.c:635:20:635:20 | 2 | 1.0 | -| test.c:635:20:635:20 | (unsigned int)... | 1.0 | -| test.c:635:20:635:25 | ... * ... | 6.9571236714E10 | -| test.c:635:24:635:25 | ip | 6.9571236714E10 | -| test.c:635:30:635:31 | 17 | 1.0 | -| test.c:635:30:635:31 | (unsigned int)... | 1.0 | -| test.c:635:30:635:36 | ... * ... | 6.9571236714E10 | -| test.c:635:35:635:36 | ip | 6.9571236714E10 | -| test.c:635:40:635:41 | 17 | 1.0 | -| test.c:635:40:635:41 | (unsigned int)... | 1.0 | -| test.c:635:40:635:52 | ... * ... | 6.9571236714E10 | -| test.c:635:45:635:52 | (...) | 6.9571236714E10 | -| test.c:635:46:635:46 | 2 | 1.0 | -| test.c:635:46:635:46 | (unsigned int)... | 1.0 | -| test.c:635:46:635:51 | ... * ... | 6.9571236714E10 | -| test.c:635:50:635:51 | ip | 6.9571236714E10 | -| test.c:635:56:635:57 | 17 | 1.0 | -| test.c:635:56:635:57 | (unsigned int)... | 1.0 | -| test.c:635:56:635:62 | ... * ... | 6.9571236714E10 | -| test.c:635:61:635:62 | ip | 6.9571236714E10 | -| test.c:636:17:636:28 | (...) | 1.39142473429E11 | -| test.c:636:17:636:33 | ... * ... | 1.39142473429E11 | -| test.c:636:18:636:18 | 2 | 1.0 | -| test.c:636:18:636:18 | (unsigned int)... | 1.0 | -| test.c:636:18:636:23 | ... * ... | 1.39142473429E11 | -| test.c:636:18:636:27 | ... + ... | 1.39142473429E11 | -| test.c:636:22:636:23 | ip | 1.39142473429E11 | -| test.c:636:27:636:27 | 1 | 1.0 | -| test.c:636:27:636:27 | (unsigned int)... | 1.0 | -| test.c:636:32:636:33 | 14 | 1.0 | -| test.c:636:32:636:33 | (unsigned int)... | 1.0 | -| test.c:637:17:637:18 | 14 | 1.0 | -| test.c:637:17:637:18 | (unsigned int)... | 1.0 | -| test.c:637:17:637:29 | ... * ... | 1.39142473429E11 | -| test.c:637:17:637:39 | ... > ... | 1.0 | -| test.c:637:17:639:25 | ... ? ... : ... | 1.936062791193997E22 | -| test.c:637:22:637:29 | (...) | 1.39142473429E11 | -| test.c:637:23:637:23 | 2 | 1.0 | -| test.c:637:23:637:23 | (unsigned int)... | 1.0 | -| test.c:637:23:637:28 | ... * ... | 1.39142473429E11 | -| test.c:637:27:637:28 | ip | 1.39142473429E11 | -| test.c:637:33:637:34 | 17 | 1.0 | -| test.c:637:33:637:34 | (unsigned int)... | 1.0 | -| test.c:637:33:637:39 | ... * ... | 1.39142473429E11 | -| test.c:637:38:637:39 | ip | 1.39142473429E11 | -| test.c:638:19:638:20 | 14 | 1.0 | -| test.c:638:19:638:20 | (unsigned int)... | 1.0 | -| test.c:638:19:638:31 | ... * ... | 1.39142473429E11 | -| test.c:638:24:638:31 | (...) | 1.39142473429E11 | -| test.c:638:25:638:25 | 2 | 1.0 | -| test.c:638:25:638:25 | (unsigned int)... | 1.0 | -| test.c:638:25:638:30 | ... * ... | 1.39142473429E11 | -| test.c:638:29:638:30 | ip | 1.39142473429E11 | -| test.c:639:19:639:20 | 14 | 1.0 | -| test.c:639:19:639:20 | (unsigned int)... | 1.0 | -| test.c:639:19:639:25 | ... * ... | 1.39142473429E11 | -| test.c:639:24:639:25 | ip | 1.39142473429E11 | -| test.c:640:13:640:14 | 14 | 1.0 | -| test.c:640:13:640:14 | (unsigned int)... | 1.0 | -| test.c:640:13:640:19 | ... * ... | 6.9571236714E10 | -| test.c:640:13:640:35 | ... > ... | 1.0 | -| test.c:640:13:642:27 | ... ? ... : ... | 4.840156977915421E21 | -| test.c:640:18:640:19 | ip | 6.9571236714E10 | -| test.c:640:23:640:30 | (...) | 6.9571236714E10 | -| test.c:640:23:640:35 | ... * ... | 6.9571236714E10 | -| test.c:640:24:640:25 | ip | 6.9571236714E10 | -| test.c:640:24:640:29 | ... + ... | 6.9571236714E10 | -| test.c:640:29:640:29 | 1 | 1.0 | -| test.c:640:29:640:29 | (unsigned int)... | 1.0 | -| test.c:640:34:640:35 | 17 | 1.0 | -| test.c:640:34:640:35 | (unsigned int)... | 1.0 | -| test.c:641:15:641:16 | 14 | 1.0 | -| test.c:641:15:641:16 | (unsigned int)... | 1.0 | -| test.c:641:15:641:21 | ... * ... | 6.9571236714E10 | -| test.c:641:20:641:21 | ip | 6.9571236714E10 | -| test.c:642:15:642:22 | (...) | 6.9571236714E10 | -| test.c:642:15:642:27 | ... * ... | 6.9571236714E10 | -| test.c:642:16:642:17 | ip | 6.9571236714E10 | -| test.c:642:16:642:21 | ... + ... | 6.9571236714E10 | -| test.c:642:21:642:21 | 1 | 1.0 | -| test.c:642:21:642:21 | (unsigned int)... | 1.0 | -| test.c:642:26:642:27 | 14 | 1.0 | -| test.c:642:26:642:27 | (unsigned int)... | 1.0 | -| test.c:643:10:643:23 | special_number | 1.297918419127476E201 | -| test.c:650:10:650:11 | 0 | 1.0 | -| test.c:651:7:651:8 | c1 | 1.0 | -| test.c:651:13:651:13 | x | 1.0 | -| test.c:651:13:651:23 | ... += ... | 1.0 | -| test.c:651:18:651:23 | 748596 | 1.0 | -| test.c:652:7:652:8 | c2 | 1.0 | -| test.c:652:13:652:13 | x | 2.0 | -| test.c:652:13:652:25 | ... += ... | 2.0 | -| test.c:652:18:652:25 | 84652395 | 1.0 | -| test.c:653:7:653:8 | c3 | 1.0 | -| test.c:653:13:653:13 | x | 4.0 | -| test.c:653:13:653:24 | ... += ... | 4.0 | -| test.c:653:18:653:24 | 3675895 | 1.0 | -| test.c:654:7:654:8 | c4 | 1.0 | -| test.c:654:13:654:13 | x | 8.0 | -| test.c:654:13:654:22 | ... += ... | 8.0 | -| test.c:654:18:654:22 | 98634 | 1.0 | -| test.c:655:7:655:8 | c5 | 1.0 | -| test.c:655:13:655:13 | x | 16.0 | -| test.c:655:13:655:24 | ... += ... | 16.0 | -| test.c:655:18:655:24 | 7834985 | 1.0 | -| test.c:656:7:656:8 | c1 | 2.0 | -| test.c:656:7:656:14 | ... && ... | 1.0 | -| test.c:656:13:656:14 | c2 | 2.0 | -| test.c:656:19:656:19 | x | 32.0 | -| test.c:656:19:656:32 | ... += ... | 32.0 | -| test.c:656:24:656:32 | 938457398 | 1.0 | -| test.c:657:7:657:8 | c1 | 3.0 | -| test.c:657:7:657:14 | ... && ... | 1.0 | -| test.c:657:13:657:14 | c3 | 2.0 | -| test.c:657:19:657:19 | x | 64.0 | -| test.c:657:19:657:31 | ... += ... | 64.0 | -| test.c:657:24:657:31 | 73895648 | 1.0 | -| test.c:658:7:658:8 | c1 | 4.0 | -| test.c:658:7:658:14 | ... && ... | 1.0 | -| test.c:658:13:658:14 | c4 | 2.0 | -| test.c:658:19:658:19 | x | 128.0 | -| test.c:658:19:658:31 | ... += ... | 128.0 | -| test.c:658:24:658:31 | 12345432 | 1.0 | -| test.c:659:7:659:8 | c1 | 5.0 | -| test.c:659:7:659:14 | ... && ... | 1.0 | -| test.c:659:13:659:14 | c5 | 2.0 | -| test.c:659:19:659:19 | x | 256.0 | -| test.c:659:19:659:28 | ... += ... | 256.0 | -| test.c:659:24:659:28 | 38847 | 1.0 | -| test.c:660:7:660:8 | c2 | 5.0 | -| test.c:660:7:660:14 | ... && ... | 1.0 | -| test.c:660:13:660:14 | c3 | 5.0 | -| test.c:660:19:660:19 | x | 512.0 | -| test.c:660:19:660:26 | ... += ... | 512.0 | -| test.c:660:24:660:26 | 234 | 1.0 | -| test.c:662:11:662:11 | x | 1024.0 | -| test.c:662:11:662:15 | ... + ... | 1048576.0 | -| test.c:662:11:662:19 | ... + ... | 1.073741824E9 | -| test.c:662:11:662:23 | ... + ... | 1.099511627776E12 | -| test.c:662:11:662:27 | ... + ... | 1.125899906842624E15 | -| test.c:662:11:662:31 | ... + ... | 1.152921504606847E18 | -| test.c:662:11:662:35 | ... + ... | 1.1805916207174113E21 | -| test.c:662:11:662:39 | ... + ... | 1.2089258196146292E24 | -| test.c:662:11:662:43 | ... + ... | 1.2379400392853803E27 | -| test.c:662:11:662:47 | ... + ... | 1.2676506002282294E30 | -| test.c:662:11:662:51 | ... + ... | 1.298074214633707E33 | -| test.c:662:11:662:55 | ... + ... | 1.329227995784916E36 | -| test.c:662:15:662:15 | x | 1024.0 | -| test.c:662:19:662:19 | x | 1024.0 | -| test.c:662:23:662:23 | x | 1024.0 | -| test.c:662:27:662:27 | x | 1024.0 | -| test.c:662:31:662:31 | x | 1024.0 | -| test.c:662:35:662:35 | x | 1024.0 | -| test.c:662:39:662:39 | x | 1024.0 | -| test.c:662:43:662:43 | x | 1024.0 | -| test.c:662:47:662:47 | x | 1024.0 | -| test.c:662:51:662:51 | x | 1024.0 | -| test.c:662:55:662:55 | x | 1024.0 | -| test.c:663:10:663:10 | y | 1.329227995784916E36 | -| test.c:668:20:668:20 | x | 1.0 | -| test.c:668:20:668:26 | ... < ... | 1.0 | -| test.c:668:20:668:36 | ... ? ... : ... | 1.0 | -| test.c:668:24:668:26 | 100 | 1.0 | -| test.c:668:24:668:26 | (unsigned int)... | 1.0 | -| test.c:668:30:668:30 | x | 1.0 | -| test.c:668:34:668:36 | 100 | 1.0 | -| test.c:668:34:668:36 | (unsigned int)... | 1.0 | -| test.c:671:3:671:4 | y1 | 1.0 | -| test.c:671:9:671:11 | ++ ... | 1.0 | -| test.c:671:11:671:11 | y | 1.0 | -| test.c:672:3:672:4 | y2 | 1.0 | -| test.c:672:19:672:19 | 3 | 1.0 | -| test.c:672:19:672:19 | (unsigned int)... | 1.0 | -| test.c:681:3:681:3 | i | 1.0 | -| test.c:681:3:681:8 | ... = ... | 1.0 | -| test.c:681:7:681:8 | 10 | 1.0 | -| test.c:682:7:682:7 | i | 1.0 | -| test.c:684:3:684:3 | i | 1.0 | -| test.c:684:3:684:8 | ... = ... | 1.0 | -| test.c:684:7:684:8 | 10 | 1.0 | -| test.c:685:3:685:3 | i | 1.0 | -| test.c:685:3:685:9 | ... += ... | 1.0 | -| test.c:685:8:685:9 | 10 | 1.0 | -| test.c:686:7:686:7 | i | 1.0 | -| test.c:688:3:688:3 | i | 1.0 | -| test.c:688:3:688:8 | ... = ... | 1.0 | -| test.c:688:7:688:8 | 40 | 1.0 | -| test.c:689:3:689:3 | i | 1.0 | -| test.c:689:3:689:9 | ... -= ... | 1.0 | -| test.c:689:8:689:9 | 10 | 1.0 | -| test.c:690:7:690:7 | i | 1.0 | -| test.c:692:3:692:3 | i | 1.0 | -| test.c:692:3:692:12 | ... = ... | 1.0 | -| test.c:692:7:692:7 | j | 1.0 | -| test.c:692:7:692:12 | ... = ... | 1.0 | -| test.c:692:11:692:12 | 40 | 1.0 | -| test.c:693:7:693:7 | i | 1.0 | -| test.c:695:3:695:3 | i | 1.0 | -| test.c:695:3:695:15 | ... = ... | 1.0 | -| test.c:695:7:695:15 | (...) | 1.0 | -| test.c:695:8:695:8 | j | 1.0 | -| test.c:695:8:695:14 | ... += ... | 1.0 | -| test.c:695:13:695:14 | 10 | 1.0 | -| test.c:696:7:696:7 | i | 1.0 | -| test.c:698:3:698:3 | i | 1.0 | -| test.c:698:3:698:20 | ... = ... | 1.0 | -| test.c:698:7:698:8 | 20 | 1.0 | -| test.c:698:7:698:20 | ... + ... | 1.0 | -| test.c:698:12:698:20 | (...) | 1.0 | -| test.c:698:13:698:13 | j | 1.0 | -| test.c:698:13:698:19 | ... -= ... | 1.0 | -| test.c:698:18:698:19 | 10 | 1.0 | -| test.c:699:7:699:7 | i | 1.0 | -| test.c:704:14:704:15 | 0 | 1.0 | -| test.c:706:7:706:7 | 3 | 1.0 | -| test.c:706:7:706:7 | (unsigned int)... | 1.0 | -| test.c:706:7:706:12 | ... <= ... | 1.0 | -| test.c:706:7:706:23 | ... && ... | 1.0 | -| test.c:706:7:706:33 | ... && ... | 1.0 | -| test.c:706:7:706:44 | ... && ... | 1.0 | -| test.c:706:12:706:12 | a | 1.0 | -| test.c:706:17:706:17 | a | 1.0 | -| test.c:706:17:706:23 | ... <= ... | 1.0 | -| test.c:706:22:706:23 | 11 | 1.0 | -| test.c:706:22:706:23 | (unsigned int)... | 1.0 | -| test.c:706:28:706:28 | 5 | 1.0 | -| test.c:706:28:706:28 | (unsigned int)... | 1.0 | -| test.c:706:28:706:33 | ... <= ... | 1.0 | -| test.c:706:33:706:33 | b | 1.0 | -| test.c:706:38:706:38 | b | 1.0 | -| test.c:706:38:706:44 | ... <= ... | 1.0 | -| test.c:706:43:706:44 | 23 | 1.0 | -| test.c:706:43:706:44 | (unsigned int)... | 1.0 | -| test.c:707:13:707:13 | a | 1.0 | -| test.c:707:13:707:15 | (int)... | 1.0 | -| test.c:707:13:707:15 | ... * ... | 1.0 | -| test.c:707:15:707:15 | b | 1.0 | -| test.c:708:5:708:9 | total | 1.0 | -| test.c:708:5:708:14 | ... += ... | 1.0 | -| test.c:708:14:708:14 | r | 1.0 | -| test.c:710:7:710:7 | 3 | 1.0 | -| test.c:710:7:710:7 | (unsigned int)... | 1.0 | -| test.c:710:7:710:12 | ... <= ... | 1.0 | -| test.c:710:7:710:23 | ... && ... | 1.0 | -| test.c:710:7:710:33 | ... && ... | 1.0 | -| test.c:710:7:710:44 | ... && ... | 1.0 | -| test.c:710:12:710:12 | a | 2.0 | -| test.c:710:17:710:17 | a | 2.0 | -| test.c:710:17:710:23 | ... <= ... | 1.0 | -| test.c:710:22:710:23 | 11 | 1.0 | -| test.c:710:22:710:23 | (unsigned int)... | 1.0 | -| test.c:710:28:710:28 | 0 | 1.0 | -| test.c:710:28:710:28 | (unsigned int)... | 1.0 | -| test.c:710:28:710:33 | ... <= ... | 1.0 | -| test.c:710:33:710:33 | b | 3.0 | -| test.c:710:38:710:38 | b | 3.0 | -| test.c:710:38:710:44 | ... <= ... | 1.0 | -| test.c:710:43:710:44 | 23 | 1.0 | -| test.c:710:43:710:44 | (unsigned int)... | 1.0 | -| test.c:711:13:711:13 | a | 2.0 | -| test.c:711:13:711:15 | (int)... | 6.0 | -| test.c:711:13:711:15 | ... * ... | 6.0 | -| test.c:711:15:711:15 | b | 3.0 | -| test.c:712:5:712:9 | total | 2.0 | -| test.c:712:5:712:14 | ... += ... | 12.0 | -| test.c:712:14:712:14 | r | 6.0 | -| test.c:714:7:714:7 | 3 | 1.0 | -| test.c:714:7:714:7 | (unsigned int)... | 1.0 | -| test.c:714:7:714:12 | ... <= ... | 1.0 | -| test.c:714:7:714:23 | ... && ... | 1.0 | -| test.c:714:7:714:34 | ... && ... | 1.0 | -| test.c:714:7:714:45 | ... && ... | 1.0 | -| test.c:714:12:714:12 | a | 3.0 | -| test.c:714:17:714:17 | a | 3.0 | -| test.c:714:17:714:23 | ... <= ... | 1.0 | -| test.c:714:22:714:23 | 11 | 1.0 | -| test.c:714:22:714:23 | (unsigned int)... | 1.0 | -| test.c:714:28:714:29 | 13 | 1.0 | -| test.c:714:28:714:29 | (unsigned int)... | 1.0 | -| test.c:714:28:714:34 | ... <= ... | 1.0 | -| test.c:714:34:714:34 | b | 7.0 | -| test.c:714:39:714:39 | b | 7.0 | -| test.c:714:39:714:45 | ... <= ... | 1.0 | -| test.c:714:44:714:45 | 23 | 1.0 | -| test.c:714:44:714:45 | (unsigned int)... | 1.0 | -| test.c:715:13:715:13 | a | 3.0 | -| test.c:715:13:715:15 | (int)... | 21.0 | -| test.c:715:13:715:15 | ... * ... | 21.0 | -| test.c:715:15:715:15 | b | 7.0 | -| test.c:716:5:716:9 | total | 14.0 | -| test.c:716:5:716:14 | ... += ... | 294.0 | -| test.c:716:14:716:14 | r | 21.0 | -| test.c:719:10:719:14 | total | 308.0 | -| test.c:723:14:723:15 | 0 | 1.0 | -| test.c:725:7:725:7 | 5 | 1.0 | -| test.c:725:7:725:7 | (unsigned int)... | 1.0 | -| test.c:725:7:725:12 | ... <= ... | 1.0 | -| test.c:725:7:725:23 | ... && ... | 1.0 | -| test.c:725:12:725:12 | b | 1.0 | -| test.c:725:17:725:17 | b | 1.0 | -| test.c:725:17:725:23 | ... <= ... | 1.0 | -| test.c:725:22:725:23 | 23 | 1.0 | -| test.c:725:22:725:23 | (unsigned int)... | 1.0 | -| test.c:726:13:726:14 | 11 | 1.0 | -| test.c:726:13:726:14 | (unsigned int)... | 1.0 | -| test.c:726:13:726:16 | (int)... | 1.0 | -| test.c:726:13:726:16 | ... * ... | 1.0 | -| test.c:726:16:726:16 | b | 1.0 | -| test.c:727:5:727:9 | total | 1.0 | -| test.c:727:5:727:14 | ... += ... | 1.0 | -| test.c:727:14:727:14 | r | 1.0 | -| test.c:729:7:729:7 | 0 | 1.0 | -| test.c:729:7:729:7 | (unsigned int)... | 1.0 | -| test.c:729:7:729:12 | ... <= ... | 1.0 | -| test.c:729:7:729:23 | ... && ... | 1.0 | -| test.c:729:12:729:12 | b | 2.0 | -| test.c:729:17:729:17 | b | 2.0 | -| test.c:729:17:729:23 | ... <= ... | 1.0 | -| test.c:729:22:729:23 | 23 | 1.0 | -| test.c:729:22:729:23 | (unsigned int)... | 1.0 | -| test.c:730:13:730:14 | 11 | 1.0 | -| test.c:730:13:730:14 | (unsigned int)... | 1.0 | -| test.c:730:13:730:16 | (int)... | 2.0 | -| test.c:730:13:730:16 | ... * ... | 2.0 | -| test.c:730:16:730:16 | b | 2.0 | -| test.c:731:5:731:9 | total | 2.0 | -| test.c:731:5:731:14 | ... += ... | 4.0 | -| test.c:731:14:731:14 | r | 2.0 | -| test.c:733:7:733:8 | 13 | 1.0 | -| test.c:733:7:733:8 | (unsigned int)... | 1.0 | -| test.c:733:7:733:13 | ... <= ... | 1.0 | -| test.c:733:7:733:24 | ... && ... | 1.0 | -| test.c:733:13:733:13 | b | 3.0 | -| test.c:733:18:733:18 | b | 3.0 | -| test.c:733:18:733:24 | ... <= ... | 1.0 | -| test.c:733:23:733:24 | 23 | 1.0 | -| test.c:733:23:733:24 | (unsigned int)... | 1.0 | -| test.c:734:13:734:14 | 11 | 1.0 | -| test.c:734:13:734:14 | (unsigned int)... | 1.0 | -| test.c:734:13:734:16 | (int)... | 3.0 | -| test.c:734:13:734:16 | ... * ... | 3.0 | -| test.c:734:16:734:16 | b | 3.0 | -| test.c:735:5:735:9 | total | 6.0 | -| test.c:735:5:735:14 | ... += ... | 18.0 | -| test.c:735:14:735:14 | r | 3.0 | -| test.c:738:10:738:14 | total | 24.0 | -| test.c:743:3:743:3 | x | 1.0 | -| test.c:743:3:743:22 | ... = ... | 1.0 | -| test.c:743:7:743:7 | y | 1.0 | -| test.c:743:7:743:22 | ... = ... | 1.0 | -| test.c:743:11:743:22 | 1000000003 | 1.0 | -| test.c:744:3:744:4 | xy | 1.0 | -| test.c:744:3:744:12 | ... = ... | 1.0 | -| test.c:744:8:744:8 | x | 1.0 | -| test.c:744:8:744:12 | ... * ... | 1.0 | -| test.c:744:12:744:12 | y | 1.0 | -| test.c:745:10:745:11 | xy | 1.0 | -| test.c:750:3:750:3 | x | 1.0 | -| test.c:750:3:750:14 | ... = ... | 1.0 | -| test.c:750:7:750:14 | 274177 | 1.0 | -| test.c:751:3:751:3 | y | 1.0 | -| test.c:751:3:751:22 | ... = ... | 1.0 | -| test.c:751:7:751:22 | 67280421310721 | 1.0 | -| test.c:752:3:752:4 | xy | 1.0 | -| test.c:752:3:752:12 | ... = ... | 1.0 | -| test.c:752:8:752:8 | x | 1.0 | -| test.c:752:8:752:12 | ... * ... | 1.0 | -| test.c:752:12:752:12 | y | 1.0 | -| test.c:753:10:753:11 | xy | 1.0 | -| test.c:757:7:757:8 | ui | 1.0 | -| test.c:757:7:757:14 | ... >= ... | 1.0 | -| test.c:757:13:757:14 | 10 | 1.0 | -| test.c:757:13:757:14 | (unsigned int)... | 1.0 | -| test.c:758:28:758:44 | (unsigned long)... | 1.0 | -| test.c:758:28:758:49 | ... * ... | 1.0 | -| test.c:758:43:758:44 | ui | 1.0 | -| test.c:758:48:758:49 | (unsigned long)... | 1.0 | -| test.c:758:48:758:49 | ui | 1.0 | -| test.c:759:12:759:17 | result | 1.0 | -| test.c:761:7:761:8 | ul | 1.0 | -| test.c:761:7:761:14 | ... >= ... | 1.0 | -| test.c:761:13:761:14 | 10 | 1.0 | -| test.c:761:13:761:14 | (unsigned long)... | 1.0 | -| test.c:762:28:762:29 | ul | 1.0 | -| test.c:762:28:762:34 | ... * ... | 1.0 | -| test.c:762:33:762:34 | ul | 1.0 | -| test.c:763:12:763:17 | result | 1.0 | -| test.c:765:10:765:10 | 0 | 1.0 | -| test.c:765:10:765:10 | (unsigned long)... | 1.0 | -| test.c:769:7:769:8 | ui | 1.0 | -| test.c:769:7:769:14 | ... <= ... | 1.0 | -| test.c:769:7:769:25 | ... && ... | 1.0 | -| test.c:769:13:769:14 | 10 | 1.0 | -| test.c:769:13:769:14 | (unsigned int)... | 1.0 | -| test.c:769:19:769:20 | ui | 1.0 | -| test.c:769:19:769:25 | ... >= ... | 1.0 | -| test.c:769:25:769:25 | 2 | 1.0 | -| test.c:769:25:769:25 | (unsigned int)... | 1.0 | -| test.c:770:5:770:6 | ui | 1.0 | -| test.c:770:5:770:16 | ... *= ... | 1.0 | -| test.c:770:11:770:12 | ui | 1.0 | -| test.c:770:11:770:16 | ... + ... | 1.0 | -| test.c:770:16:770:16 | 0 | 1.0 | -| test.c:770:16:770:16 | (unsigned int)... | 1.0 | -| test.c:771:12:771:13 | (unsigned long)... | 1.0 | -| test.c:771:12:771:13 | ui | 1.0 | -| test.c:774:26:774:27 | 10 | 1.0 | -| test.c:774:26:774:27 | (unsigned int)... | 1.0 | -| test.c:775:3:775:9 | uiconst | 1.0 | -| test.c:775:3:775:14 | ... *= ... | 1.0 | -| test.c:775:14:775:14 | 4 | 1.0 | -| test.c:775:14:775:14 | (unsigned int)... | 1.0 | -| test.c:777:27:777:28 | 10 | 1.0 | -| test.c:777:27:777:28 | (unsigned long)... | 1.0 | -| test.c:778:3:778:9 | ulconst | 1.0 | -| test.c:778:3:778:14 | ... *= ... | 1.0 | -| test.c:778:14:778:14 | 4 | 1.0 | -| test.c:778:14:778:14 | (unsigned long)... | 1.0 | -| test.c:779:10:779:16 | (unsigned long)... | 1.0 | -| test.c:779:10:779:16 | uiconst | 1.0 | -| test.c:779:10:779:26 | ... + ... | 1.0 | -| test.c:779:20:779:26 | ulconst | 1.0 | -| test.c:783:7:783:7 | i | 1.0 | -| test.c:783:7:783:13 | ... >= ... | 1.0 | -| test.c:783:7:783:23 | ... && ... | 1.0 | -| test.c:783:12:783:13 | - ... | 1.0 | -| test.c:783:13:783:13 | 1 | 1.0 | -| test.c:783:18:783:18 | i | 1.0 | -| test.c:783:18:783:23 | ... <= ... | 1.0 | -| test.c:783:23:783:23 | 2 | 1.0 | -| test.c:784:5:784:5 | i | 1.0 | -| test.c:784:5:784:13 | ... = ... | 1.0 | -| test.c:784:9:784:9 | 5 | 1.0 | -| test.c:784:9:784:13 | ... * ... | 1.0 | -| test.c:784:13:784:13 | i | 1.0 | -| test.c:785:9:785:9 | i | 1.0 | -| test.c:787:5:787:5 | i | 1.0 | -| test.c:787:5:787:14 | ... = ... | 1.0 | -| test.c:787:9:787:9 | i | 1.0 | -| test.c:787:9:787:14 | ... * ... | 1.0 | -| test.c:787:13:787:14 | - ... | 1.0 | -| test.c:787:14:787:14 | 3 | 1.0 | -| test.c:788:9:788:9 | i | 1.0 | -| test.c:790:5:790:5 | i | 1.0 | -| test.c:790:5:790:10 | ... *= ... | 1.0 | -| test.c:790:10:790:10 | 7 | 1.0 | -| test.c:791:9:791:9 | i | 1.0 | -| test.c:793:5:793:5 | i | 1.0 | -| test.c:793:5:793:12 | ... *= ... | 1.0 | -| test.c:793:10:793:12 | - ... | 1.0 | -| test.c:793:11:793:12 | 11 | 1.0 | -| test.c:794:9:794:9 | i | 1.0 | -| test.c:796:7:796:7 | i | 2.0 | -| test.c:796:7:796:13 | ... == ... | 1.0 | -| test.c:796:12:796:13 | - ... | 1.0 | -| test.c:796:13:796:13 | 1 | 1.0 | -| test.c:797:5:797:5 | i | 1.0 | -| test.c:797:5:797:27 | ... = ... | 2.0 | -| test.c:797:9:797:9 | i | 2.0 | -| test.c:797:9:797:27 | ... * ... | 2.0 | -| test.c:797:13:797:27 | (int)... | 1.0 | -| test.c:797:18:797:27 | 4294967295 | 1.0 | -| test.c:798:9:798:9 | i | 2.0 | -| test.c:800:3:800:3 | i | 1.0 | -| test.c:800:3:800:12 | ... = ... | 4.0 | -| test.c:800:7:800:7 | i | 4.0 | -| test.c:800:7:800:12 | ... * ... | 4.0 | -| test.c:800:11:800:12 | - ... | 1.0 | -| test.c:800:12:800:12 | 1 | 1.0 | -| test.c:801:10:801:10 | i | 4.0 | -| test.c:803:20:803:20 | 1 | 1.0 | -| test.c:803:20:803:20 | (signed char)... | 1.0 | -| test.c:804:3:804:3 | i | 1.0 | -| test.c:804:3:804:17 | ... = ... | 1.0 | -| test.c:804:7:804:17 | (...) | 1.0 | -| test.c:804:7:804:17 | (int)... | 1.0 | -| test.c:804:8:804:11 | * ... | 1.0 | -| test.c:804:8:804:16 | ... *= ... | 1.0 | -| test.c:804:10:804:11 | sc | 1.0 | -| test.c:804:16:804:16 | 2 | 1.0 | -| test.c:806:7:806:7 | i | 1.0 | -| test.c:808:10:808:10 | 0 | 1.0 | -| test.c:813:7:813:7 | (int)... | 1.0 | -| test.c:813:7:813:7 | n | 1.0 | -| test.c:815:7:815:7 | n | 1.0 | -| test.c:815:7:815:11 | ... > ... | 1.0 | -| test.c:815:11:815:11 | 0 | 1.0 | -| test.c:815:11:815:11 | (unsigned int)... | 1.0 | -| test.c:816:9:816:9 | (int)... | 1.0 | -| test.c:816:9:816:9 | n | 1.0 | -| test.c:819:7:819:7 | n | 2.0 | -| test.c:819:7:819:12 | ... != ... | 1.0 | -| test.c:819:12:819:12 | 0 | 1.0 | -| test.c:819:12:819:12 | (unsigned int)... | 1.0 | -| test.c:820:9:820:9 | (int)... | 2.0 | -| test.c:820:9:820:9 | n | 2.0 | -| test.c:822:9:822:9 | (int)... | 2.0 | -| test.c:822:9:822:9 | n | 2.0 | -| test.c:825:7:825:8 | ! ... | 1.0 | -| test.c:825:8:825:8 | n | 4.0 | -| test.c:826:9:826:9 | (int)... | 4.0 | -| test.c:826:9:826:9 | n | 4.0 | -| test.c:828:9:828:9 | (int)... | 4.0 | -| test.c:828:9:828:9 | n | 4.0 | -| test.c:831:10:831:10 | n | 13.0 | -| test.c:831:10:831:15 | ... != ... | 1.0 | -| test.c:831:15:831:15 | 0 | 1.0 | -| test.c:831:15:831:15 | (unsigned int)... | 1.0 | -| test.c:832:5:832:5 | n | 13.0 | -| test.c:832:5:832:7 | ... -- | 13.0 | -| test.c:835:7:835:7 | (int)... | 13.0 | -| test.c:835:7:835:7 | n | 13.0 | -| test.c:839:7:839:7 | (int)... | 1.0 | -| test.c:839:7:839:7 | n | 1.0 | -| test.c:839:7:839:11 | ... < ... | 1.0 | -| test.c:839:11:839:11 | 0 | 1.0 | -| test.c:842:7:842:7 | (int)... | 1.0 | -| test.c:842:7:842:7 | n | 1.0 | -| test.c:842:7:842:12 | ... == ... | 1.0 | -| test.c:842:12:842:12 | 0 | 1.0 | -| test.c:843:9:843:9 | (int)... | 1.0 | -| test.c:843:9:843:9 | n | 1.0 | -| test.c:845:9:845:9 | (int)... | 1.0 | -| test.c:845:9:845:9 | n | 1.0 | -| test.c:848:7:848:7 | n | 2.0 | -| test.c:849:9:849:9 | (int)... | 2.0 | -| test.c:849:9:849:9 | n | 2.0 | -| test.c:851:9:851:9 | (int)... | 2.0 | -| test.c:851:9:851:9 | n | 2.0 | -| test.c:854:10:854:10 | (int)... | 13.0 | -| test.c:854:10:854:10 | n | 12.0 | -| test.c:854:10:854:15 | ... != ... | 1.0 | -| test.c:854:15:854:15 | 0 | 1.0 | -| test.c:855:5:855:5 | n | 12.0 | -| test.c:855:5:855:7 | ... -- | 12.0 | -| test.c:858:7:858:7 | (int)... | 12.0 | -| test.c:858:7:858:7 | n | 12.0 | -| test.c:862:7:862:7 | (int)... | 1.0 | -| test.c:862:7:862:7 | n | 1.0 | -| test.c:862:7:862:12 | ... != ... | 1.0 | -| test.c:862:12:862:12 | 0 | 1.0 | -| test.c:863:9:863:9 | (int)... | 1.0 | -| test.c:863:9:863:9 | n | 1.0 | -| test.c:863:9:863:14 | ... >= ... | 1.0 | -| test.c:863:14:863:14 | 0 | 1.0 | -| test.c:864:11:864:11 | (int)... | 1.0 | -| test.c:864:11:864:11 | n | 1.0 | -| test.c:868:7:868:7 | (int)... | 2.0 | -| test.c:868:7:868:7 | n | 2.0 | -| test.c:868:7:868:12 | ... >= ... | 1.0 | -| test.c:868:12:868:12 | 5 | 1.0 | -| test.c:869:9:869:9 | 2 | 1.0 | -| test.c:869:9:869:13 | ... * ... | 2.0 | -| test.c:869:9:869:18 | ... - ... | 2.0 | -| test.c:869:9:869:23 | ... == ... | 1.0 | -| test.c:869:13:869:13 | (int)... | 2.0 | -| test.c:869:13:869:13 | n | 2.0 | -| test.c:869:17:869:18 | 10 | 1.0 | -| test.c:869:23:869:23 | 0 | 1.0 | -| test.c:872:9:872:9 | (int)... | 2.0 | -| test.c:872:9:872:9 | n | 2.0 | -| test.c:875:7:875:7 | (int)... | 3.0 | -| test.c:875:7:875:7 | n | 3.0 | -| test.c:875:7:875:17 | ... != ... | 1.0 | -| test.c:875:7:875:32 | ... && ... | 1.0 | -| test.c:875:12:875:17 | - ... | 1.0 | -| test.c:875:13:875:17 | 32768 | 1.0 | -| test.c:875:22:875:22 | (int)... | 3.0 | -| test.c:875:22:875:22 | n | 3.0 | -| test.c:875:22:875:32 | ... != ... | 1.0 | -| test.c:875:27:875:32 | - ... | 1.0 | -| test.c:875:28:875:32 | 32767 | 1.0 | -| test.c:876:9:876:9 | (int)... | 3.0 | -| test.c:876:9:876:9 | n | 3.0 | -| test.c:879:7:879:7 | (int)... | 4.0 | -| test.c:879:7:879:7 | n | 4.0 | -| test.c:879:7:879:12 | ... >= ... | 1.0 | -| test.c:879:12:879:12 | 0 | 1.0 | -| test.c:880:5:880:5 | n | 4.0 | -| test.c:880:5:880:14 | ... ? ... : ... | 16.0 | -| test.c:880:10:880:10 | (int)... | 4.0 | -| test.c:880:10:880:10 | n | 4.0 | -| test.c:880:14:880:14 | (int)... | 4.0 | -| test.c:880:14:880:14 | n | 4.0 | -| test.c:881:5:881:6 | ! ... | 1.0 | -| test.c:881:5:881:14 | ... ? ... : ... | 64.0 | -| test.c:881:6:881:6 | n | 8.0 | -| test.c:881:10:881:10 | (int)... | 8.0 | -| test.c:881:10:881:10 | n | 8.0 | -| test.c:881:14:881:14 | (int)... | 8.0 | -| test.c:881:14:881:14 | n | 8.0 | -| test.c:892:7:892:8 | (unsigned long)... | 1.0 | -| test.c:892:7:892:8 | ss | 1.0 | -| test.c:892:7:892:22 | ... < ... | 1.0 | -| test.c:892:12:892:22 | sizeof(int) | 1.0 | -| test.c:893:9:893:10 | (int)... | 1.0 | -| test.c:893:9:893:10 | ss | 1.0 | -| test.c:896:7:896:8 | (int)... | 2.0 | -| test.c:896:7:896:8 | ss | 2.0 | -| test.c:896:7:896:17 | ... < ... | 1.0 | -| test.c:896:12:896:17 | 32769 | 1.0 | -| test.c:897:9:897:10 | (int)... | 2.0 | -| test.c:897:9:897:10 | ss | 2.0 | -| test.c:900:7:900:15 | (int)... | 1.0 | -| test.c:900:7:900:15 | (short)... | 1.0 | -| test.c:900:7:900:20 | ... >= ... | 1.0 | -| test.c:900:14:900:15 | us | 1.0 | -| test.c:900:20:900:20 | 0 | 1.0 | -| test.c:901:9:901:10 | (int)... | 1.0 | -| test.c:901:9:901:10 | us | 1.0 | -| test.c:904:7:904:15 | (int)... | 2.0 | -| test.c:904:7:904:15 | (short)... | 2.0 | -| test.c:904:7:904:21 | ... >= ... | 1.0 | -| test.c:904:14:904:15 | us | 2.0 | -| test.c:904:20:904:21 | - ... | 1.0 | -| test.c:904:21:904:21 | 1 | 1.0 | -| test.c:905:9:905:10 | (int)... | 2.0 | -| test.c:905:9:905:10 | us | 2.0 | -| test.c:908:7:908:8 | (unsigned long)... | 3.0 | -| test.c:908:7:908:8 | ss | 3.0 | -| test.c:908:7:908:23 | ... >= ... | 1.0 | -| test.c:908:13:908:23 | sizeof(int) | 1.0 | -| test.c:909:9:909:10 | (int)... | 3.0 | -| test.c:909:9:909:10 | ss | 3.0 | -| test.c:912:7:912:8 | (int)... | 4.0 | -| test.c:912:7:912:8 | ss | 4.0 | -| test.c:912:7:912:12 | (unsigned long)... | 4.0 | -| test.c:912:7:912:12 | ... + ... | 4.0 | -| test.c:912:7:912:26 | ... < ... | 1.0 | -| test.c:912:12:912:12 | 1 | 1.0 | -| test.c:912:16:912:26 | sizeof(int) | 1.0 | -| test.c:913:9:913:10 | (int)... | 4.0 | -| test.c:913:9:913:10 | ss | 4.0 | -| test.c:919:8:919:8 | s | 1.0 | -| test.c:919:8:919:12 | ... = ... | 1.0 | -| test.c:919:12:919:12 | 0 | 1.0 | -| test.c:919:15:919:15 | s | 13.0 | -| test.c:919:15:919:20 | ... < ... | 1.0 | -| test.c:919:19:919:20 | 10 | 1.0 | -| test.c:919:23:919:23 | s | 13.0 | -| test.c:919:23:919:25 | ... ++ | 13.0 | -| test.c:920:18:920:18 | s | 13.0 | -| test.c:920:18:920:22 | ... + ... | 13.0 | -| test.c:920:22:920:22 | s | 13.0 | -| test.c:921:9:921:14 | result | 13.0 | -| test.c:926:10:926:11 | 0 | 1.0 | -| test.c:927:7:927:7 | i | 1.0 | -| test.c:927:7:927:11 | ... < ... | 1.0 | -| test.c:927:11:927:11 | 0 | 1.0 | -| test.c:928:9:928:9 | i | 1.0 | -| test.c:931:20:931:20 | 0 | 1.0 | -| test.c:931:20:931:20 | (unsigned int)... | 1.0 | -| test.c:932:7:932:7 | u | 1.0 | -| test.c:932:7:932:11 | ... < ... | 1.0 | -| test.c:932:11:932:11 | 0 | 1.0 | -| test.c:932:11:932:11 | (unsigned int)... | 1.0 | -| test.c:933:9:933:9 | (int)... | 1.0 | -| test.c:933:9:933:9 | u | 1.0 | -| test.c:938:12:938:12 | s | 1.0 | -| test.c:938:12:938:16 | ... % ... | 1.0 | -| test.c:938:16:938:16 | 5 | 1.0 | -| test.c:939:7:939:8 | s2 | 1.0 | -| test.c:944:7:944:7 | x | 1.0 | -| test.c:945:9:945:9 | y | 1.0 | -| test.c:945:9:945:14 | ... != ... | 1.0 | -| test.c:945:14:945:14 | 0 | 1.0 | -| test.c:946:12:946:12 | 0 | 1.0 | -| test.c:949:7:949:7 | y | 2.0 | -| test.c:958:7:958:7 | x | 1.0 | -| test.c:958:7:958:13 | ... >= ... | 1.0 | -| test.c:958:12:958:13 | 10 | 1.0 | -| test.c:963:7:963:7 | x | 13.0 | -| test.c:968:16:968:26 | 2147483647 | 1.0 | -| test.c:969:16:969:19 | 256 | 1.0 | -| test.c:970:7:970:13 | (...) | 1.0 | -| test.c:970:7:970:20 | ... <= ... | 1.0 | -| test.c:970:8:970:8 | x | 1.0 | -| test.c:970:8:970:12 | ... + ... | 1.0 | -| test.c:970:12:970:12 | y | 1.0 | -| 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 | -| test.cpp:10:7:10:7 | b | 1.0 | -| test.cpp:11:5:11:5 | x | 1.0 | -| test.cpp:11:5:11:14 | ... = ... | 1.0 | -| test.cpp:11:12:11:12 | call to operator[] | 1.0 | -| test.cpp:11:12:11:14 | (reference dereference) | 1.0 | -| test.cpp:11:13:11:13 | 3 | 1.0 | -| test.cpp:13:10:13:10 | x | 2.0 | -| test.cpp:18:12:18:31 | (int)... | 1.0 | -| test.cpp:18:12:18:31 | static_cast... | 1.0 | -| test.cpp:18:30:18:30 | x | 1.0 | -| test.cpp:19:10:19:11 | x0 | 1.0 | -| test.cpp:27:7:27:7 | y | 1.0 | -| test.cpp:27:7:27:12 | ... == ... | 1.0 | -| test.cpp:27:12:27:12 | 0 | 1.0 | -| test.cpp:28:5:28:5 | x | 1.0 | -| test.cpp:28:5:28:9 | ... = ... | 1.0 | -| test.cpp:28:9:28:9 | 0 | 1.0 | -| test.cpp:30:7:30:7 | y | 2.0 | -| test.cpp:30:7:30:13 | ... == ... | 1.0 | -| test.cpp:30:12:30:13 | - ... | 1.0 | -| test.cpp:30:13:30:13 | 1 | 1.0 | -| test.cpp:31:5:31:5 | x | 1.0 | -| test.cpp:31:5:31:10 | ... = ... | 1.0 | -| test.cpp:31:9:31:10 | - ... | 1.0 | -| test.cpp:31:10:31:10 | 1 | 1.0 | -| test.cpp:33:7:33:7 | y | 4.0 | -| test.cpp:33:7:33:12 | ... == ... | 1.0 | -| test.cpp:33:12:33:12 | 1 | 1.0 | -| test.cpp:34:5:34:5 | x | 1.0 | -| test.cpp:34:5:34:9 | ... = ... | 1.0 | -| test.cpp:34:9:34:9 | 1 | 1.0 | -| test.cpp:36:7:36:7 | y | 8.0 | -| test.cpp:36:7:36:15 | ... == ... | 1.0 | -| test.cpp:36:12:36:15 | - ... | 1.0 | -| test.cpp:36:13:36:15 | 128 | 1.0 | -| test.cpp:37:5:37:5 | x | 1.0 | -| test.cpp:37:5:37:12 | ... = ... | 1.0 | -| test.cpp:37:9:37:12 | - ... | 1.0 | -| test.cpp:37:10:37:12 | 128 | 1.0 | -| test.cpp:39:7:39:7 | y | 16.0 | -| test.cpp:39:7:39:14 | ... == ... | 1.0 | -| test.cpp:39:12:39:14 | 128 | 1.0 | -| test.cpp:40:5:40:5 | x | 1.0 | -| test.cpp:40:5:40:11 | ... = ... | 1.0 | -| test.cpp:40:9:40:11 | 128 | 1.0 | -| test.cpp:42:7:42:7 | y | 32.0 | -| test.cpp:42:7:42:16 | ... == ... | 1.0 | -| test.cpp:42:12:42:16 | - ... | 1.0 | -| test.cpp:42:13:42:16 | 1024 | 1.0 | -| test.cpp:43:5:43:5 | x | 1.0 | -| test.cpp:43:5:43:13 | ... = ... | 1.0 | -| test.cpp:43:9:43:13 | - ... | 1.0 | -| test.cpp:43:10:43:13 | 1024 | 1.0 | -| test.cpp:45:7:45:7 | y | 64.0 | -| test.cpp:45:7:45:15 | ... == ... | 1.0 | -| test.cpp:45:12:45:15 | 1024 | 1.0 | -| test.cpp:46:5:46:5 | x | 1.0 | -| test.cpp:46:5:46:12 | ... = ... | 1.0 | -| test.cpp:46:9:46:12 | 1024 | 1.0 | -| test.cpp:49:10:49:11 | 0 | 1.0 | -| test.cpp:51:7:51:7 | x | 8.0 | -| test.cpp:51:7:51:12 | ... == ... | 1.0 | -| test.cpp:51:12:51:12 | 0 | 1.0 | -| test.cpp:52:15:52:21 | (bool)... | 1.0 | -| test.cpp:52:21:52:21 | x | 8.0 | -| test.cpp:53:5:53:5 | t | 1.0 | -| test.cpp:53:5:53:16 | ... += ... | 8.0 | -| test.cpp:53:10:53:16 | (int)... | 8.0 | -| test.cpp:53:15:53:16 | xb | 8.0 | -| test.cpp:56:7:56:7 | x | 16.0 | -| test.cpp:56:7:56:11 | ... > ... | 1.0 | -| test.cpp:56:11:56:11 | 0 | 1.0 | -| test.cpp:57:15:57:21 | (bool)... | 1.0 | -| test.cpp:57:21:57:21 | x | 16.0 | -| test.cpp:58:5:58:5 | t | 9.0 | -| test.cpp:58:5:58:16 | ... += ... | 144.0 | -| test.cpp:58:10:58:16 | (int)... | 16.0 | -| test.cpp:58:15:58:16 | xb | 16.0 | -| test.cpp:61:7:61:7 | x | 17.0 | -| test.cpp:61:7:61:11 | ... < ... | 1.0 | -| test.cpp:61:11:61:11 | 0 | 1.0 | -| test.cpp:62:15:62:21 | (bool)... | 1.0 | -| test.cpp:62:21:62:21 | x | 17.0 | -| test.cpp:63:5:63:5 | t | 153.0 | -| test.cpp:63:5:63:16 | ... += ... | 2601.0 | -| test.cpp:63:10:63:16 | (int)... | 17.0 | -| test.cpp:63:15:63:16 | xb | 17.0 | -| test.cpp:66:13:66:19 | (bool)... | 1.0 | -| test.cpp:66:19:66:19 | x | 18.0 | -| test.cpp:67:3:67:3 | t | 2754.0 | -| test.cpp:67:3:67:14 | ... += ... | 49572.0 | -| test.cpp:67:8:67:14 | (int)... | 18.0 | -| test.cpp:67:13:67:14 | xb | 18.0 | -| test.cpp:69:10:69:10 | b | 1.0 | -| test.cpp:69:10:69:21 | ... \|\| ... | 1.0 | -| test.cpp:69:15:69:21 | (bool)... | 1.0 | -| test.cpp:69:21:69:21 | t | 49572.0 | -| test.cpp:74:30:74:30 | (int)... | 1.0 | -| test.cpp:74:30:74:30 | c | 1.0 | -| test.cpp:74:30:74:34 | (unsigned short)... | 1.0 | -| test.cpp:74:30:74:34 | ... + ... | 1.0 | -| test.cpp:74:34:74:34 | (int)... | 1.0 | -| test.cpp:74:34:74:34 | c | 1.0 | -| test.cpp:75:7:75:30 | (int)... | 1.0 | -| test.cpp:75:7:75:30 | (unsigned char)... | 1.0 | -| test.cpp:75:7:75:35 | ... == ... | 1.0 | -| test.cpp:75:22:75:30 | c_times_2 | 1.0 | -| test.cpp:75:35:75:35 | 0 | 1.0 | -| test.cpp:77:5:77:13 | c_times_2 | 1.0 | -| test.cpp:79:3:79:11 | c_times_2 | 1.0 | -| test.cpp:83:16:83:22 | (reference dereference) | 1.0 | -| test.cpp:83:16:83:22 | (reference to) | 1.0 | -| test.cpp:83:16:83:22 | aliased | 1.0 | -| test.cpp:85:7:85:7 | (reference dereference) | 1.0 | -| test.cpp:85:7:85:7 | i | 1.0 | -| test.cpp:85:7:85:12 | ... >= ... | 1.0 | -| test.cpp:85:12:85:12 | 2 | 1.0 | -| test.cpp:86:12:86:12 | (reference dereference) | 1.0 | -| test.cpp:86:12:86:12 | i | 1.0 | -| test.cpp:88:7:88:8 | (reference dereference) | 1.0 | -| test.cpp:88:7:88:8 | ci | 1.0 | -| test.cpp:88:7:88:13 | ... >= ... | 1.0 | -| test.cpp:88:13:88:13 | 2 | 1.0 | -| test.cpp:89:12:89:13 | (reference dereference) | 1.0 | -| test.cpp:89:12:89:13 | ci | 1.0 | -| test.cpp:91:7:91:13 | (reference dereference) | 1.0 | -| test.cpp:91:7:91:13 | aliased | 1.0 | -| test.cpp:91:7:91:18 | ... >= ... | 1.0 | -| test.cpp:91:18:91:18 | 2 | 1.0 | -| test.cpp:92:12:92:18 | (reference dereference) | 1.0 | -| test.cpp:92:12:92:18 | aliased | 1.0 | -| test.cpp:94:7:94:11 | (reference dereference) | 1.0 | -| test.cpp:94:7:94:11 | alias | 1.0 | -| test.cpp:94:7:94:16 | ... >= ... | 1.0 | -| test.cpp:94:16:94:16 | 2 | 1.0 | -| test.cpp:95:12:95:16 | (reference dereference) | 1.0 | -| test.cpp:95:12:95:16 | alias | 1.0 | -| test.cpp:97:10:97:10 | (reference dereference) | 13.0 | -| test.cpp:97:10:97:19 | ... <= ... | 1.0 | -| test.cpp:97:15:97:19 | 12345 | 1.0 | -| test.cpp:97:22:97:22 | (reference dereference) | 13.0 | -| test.cpp:97:22:97:24 | ... ++ | 13.0 | -| test.cpp:98:5:98:5 | (reference dereference) | 1.0 | -| test.cpp:98:5:98:5 | i | 1.0 | -| test.cpp:98:5:98:9 | ... = ... | 13.0 | -| test.cpp:98:9:98:9 | (reference dereference) | 13.0 | -| test.cpp:99:5:99:5 | (reference dereference) | 13.0 | -| test.cpp:102:10:102:10 | 0 | 1.0 | -| test.cpp:106:7:106:7 | (int)... | 1.0 | -| test.cpp:106:7:106:7 | n | 1.0 | -| test.cpp:106:7:106:11 | ... < ... | 1.0 | -| test.cpp:106:11:106:11 | 0 | 1.0 | -| test.cpp:109:7:109:7 | (bool)... | 1.0 | -| test.cpp:109:7:109:7 | n | 1.0 | -| test.cpp:110:5:110:5 | n | 1.0 | -| test.cpp:112:5:112:5 | n | 1.0 | -| test.cpp:115:7:115:8 | ! ... | 1.0 | -| test.cpp:115:8:115:8 | (bool)... | 1.0 | -| test.cpp:115:8:115:8 | n | 2.0 | -| test.cpp:116:5:116:5 | n | 2.0 | -| test.cpp:118:5:118:5 | n | 2.0 | -| test.cpp:121:3:121:3 | (bool)... | 1.0 | -| test.cpp:121:3:121:3 | n | 4.0 | -| test.cpp:121:3:121:12 | ... ? ... : ... | 16.0 | -| test.cpp:121:8:121:8 | n | 4.0 | -| test.cpp:121:12:121:12 | n | 4.0 | -| test.cpp:122:3:122:4 | ! ... | 1.0 | -| test.cpp:122:3:122:12 | ... ? ... : ... | 64.0 | -| test.cpp:122:4:122:4 | (bool)... | 1.0 | -| 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 | +| inline_assembly.c:9:20:9:20 | 0 | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:9:20:9:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:10:3:10:3 | y | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:10:3:10:7 | ... = ... | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:10:7:10:7 | 1 | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:10:7:10:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:12:3:12:8 | call to printf | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:12:29:12:29 | x | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:12:32:12:32 | y | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:16:25:16:25 | x | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:16:35:16:35 | y | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:21:3:21:8 | call to printf | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:21:29:21:29 | x | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:21:32:21:32 | y | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:23:10:23:10 | 0 | 1.0 | -1.0 | -1.0 | +| minmax.c:16:9:16:10 | 1 | 1.0 | -1.0 | -1.0 | +| minmax.c:16:16:16:17 | 2 | 1.0 | -1.0 | -1.0 | +| minmax.c:16:23:16:24 | 3 | 1.0 | -1.0 | -1.0 | +| minmax.c:18:2:18:7 | call to printf | 1.0 | -1.0 | -1.0 | +| minmax.c:18:37:18:37 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:18:40:18:40 | y | 1.0 | 1.0 | 1.0 | +| minmax.c:18:43:18:43 | z | 1.0 | 1.0 | 1.0 | +| minmax.c:20:2:20:2 | z | 1.0 | -1.0 | -1.0 | +| minmax.c:20:2:24:3 | ... = ... | 2.0 | 2.0 | 2.0 | +| minmax.c:20:6:24:3 | (statement expression) | 2.0 | 2.0 | 2.0 | +| minmax.c:21:10:21:11 | 0 | 1.0 | -1.0 | -1.0 | +| minmax.c:22:7:22:14 | ... != ... | 1.0 | -1.0 | -1.0 | +| minmax.c:22:8:22:8 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:22:14:22:14 | y | 1.0 | 1.0 | 1.0 | +| minmax.c:22:18:22:18 | t | 1.0 | -1.0 | -1.0 | +| minmax.c:22:18:22:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| minmax.c:22:22:22:22 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:23:3:23:3 | t | 2.0 | 2.0 | 2.0 | +| minmax.c:26:2:26:7 | call to printf | 1.0 | -1.0 | -1.0 | +| minmax.c:26:37:26:37 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:26:40:26:40 | y | 1.0 | 1.0 | 1.0 | +| minmax.c:26:43:26:43 | z | 2.0 | 2.0 | 2.0 | +| test.c:6:14:6:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:8:5:8:9 | count | 1.0 | -1.0 | -1.0 | +| test.c:8:5:8:19 | ... = ... | 13.0 | 5.0 | 10.0 | +| test.c:8:13:8:17 | count | 13.0 | 4.0 | 10.0 | +| test.c:8:13:8:19 | ... + ... | 13.0 | 4.0 | 10.0 | +| test.c:8:19:8:19 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:10:10:10:14 | count | 13.0 | 4.0 | 10.0 | +| test.c:14:14:14:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:16:5:16:9 | count | 1.0 | -1.0 | -1.0 | +| test.c:16:5:16:26 | ... = ... | 13.0 | 1.0 | 1.0 | +| test.c:16:13:16:21 | (...) | 13.0 | 1.0 | 2.0 | +| test.c:16:13:16:26 | ... % ... | 13.0 | 1.0 | 1.0 | +| test.c:16:14:16:18 | count | 13.0 | 1.0 | 2.0 | +| test.c:16:14:16:20 | ... + ... | 13.0 | 1.0 | 2.0 | +| test.c:16:20:16:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:16:25:16:26 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:18:10:18:14 | count | 13.0 | 1.0 | 2.0 | +| test.c:22:14:22:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:24:5:24:9 | count | 13.0 | 1.0 | 2.0 | +| test.c:24:5:24:11 | ... ++ | 13.0 | 1.0 | 2.0 | +| test.c:25:5:25:9 | count | 1.0 | -1.0 | -1.0 | +| test.c:25:5:25:22 | ... = ... | 13.0 | 1.0 | 1.0 | +| test.c:25:13:25:17 | count | 13.0 | 1.0 | 2.0 | +| test.c:25:13:25:22 | ... % ... | 13.0 | 1.0 | 1.0 | +| test.c:25:21:25:22 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:27:10:27:14 | count | 13.0 | 1.0 | 2.0 | +| test.c:31:10:31:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:32:14:32:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:33:8:33:8 | i | 1.0 | -1.0 | -1.0 | +| test.c:33:8:33:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:33:12:33:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:33:15:33:15 | i | 13.0 | 3.0 | 3.0 | +| test.c:33:15:33:19 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:33:19:33:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:33:22:33:22 | i | 1.0 | -1.0 | -1.0 | +| test.c:33:22:33:28 | ... = ... | 13.0 | 3.0 | 2.0 | +| test.c:33:26:33:26 | i | 13.0 | 3.0 | 2.0 | +| test.c:33:26:33:28 | ... + ... | 13.0 | 3.0 | 2.0 | +| test.c:33:28:33:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:34:5:34:9 | total | 13.0 | 4.0 | 10.0 | +| test.c:34:5:34:14 | ... += ... | 13.0 | 8.0 | 18.0 | +| test.c:34:14:34:14 | i | 13.0 | 3.0 | 2.0 | +| test.c:36:10:36:14 | total | 13.0 | 4.0 | 10.0 | +| test.c:36:10:36:18 | ... + ... | 13.0 | 4.0 | 26.0 | +| test.c:36:18:36:18 | i | 7.0 | 1.0 | 3.0 | +| test.c:40:10:40:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:41:14:41:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:42:8:42:8 | i | 1.0 | -1.0 | -1.0 | +| test.c:42:8:42:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:42:12:42:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:42:15:42:15 | i | 13.0 | 3.0 | 3.0 | +| test.c:42:15:42:19 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:42:19:42:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:42:22:42:22 | i | 13.0 | 3.0 | 2.0 | +| test.c:42:22:42:24 | ... ++ | 13.0 | 3.0 | 2.0 | +| test.c:43:5:43:9 | total | 13.0 | 4.0 | 10.0 | +| test.c:43:5:43:14 | ... += ... | 13.0 | 8.0 | 18.0 | +| test.c:43:14:43:14 | i | 13.0 | 3.0 | 2.0 | +| test.c:45:10:45:14 | total | 13.0 | 4.0 | 10.0 | +| test.c:45:10:45:18 | ... + ... | 13.0 | 4.0 | 26.0 | +| test.c:45:18:45:18 | i | 7.0 | 1.0 | 3.0 | +| test.c:49:10:49:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:50:14:50:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:51:8:51:8 | i | 1.0 | -1.0 | -1.0 | +| test.c:51:8:51:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:51:12:51:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:51:15:51:15 | i | 13.0 | 3.0 | 3.0 | +| test.c:51:15:51:17 | ... + ... | 13.0 | 3.0 | 3.0 | +| test.c:51:15:51:21 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:51:17:51:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:51:21:51:21 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:51:24:51:24 | i | 1.0 | -1.0 | -1.0 | +| test.c:51:24:51:30 | ... = ... | 13.0 | 3.0 | 2.0 | +| test.c:51:28:51:28 | i | 13.0 | 3.0 | 2.0 | +| test.c:51:28:51:30 | ... + ... | 13.0 | 3.0 | 2.0 | +| test.c:51:30:51:30 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:52:5:52:9 | total | 13.0 | 4.0 | 10.0 | +| test.c:52:5:52:14 | ... += ... | 13.0 | 8.0 | 18.0 | +| test.c:52:14:52:14 | i | 13.0 | 3.0 | 2.0 | +| test.c:54:10:54:14 | total | 13.0 | 4.0 | 10.0 | +| test.c:54:10:54:18 | ... + ... | 13.0 | 4.0 | 26.0 | +| test.c:54:18:54:18 | i | 7.0 | 1.0 | 3.0 | +| test.c:58:7:58:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:58:7:58:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:58:11:58:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:59:9:59:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:59:9:59:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:59:13:59:13 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:60:14:60:14 | i | 1.0 | 1.0 | 1.0 | +| test.c:63:10:63:10 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:67:7:67:11 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:67:7:67:15 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:67:7:67:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:67:8:67:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:67:15:67:15 | y | 1.0 | 1.0 | 1.0 | +| test.c:67:20:67:20 | y | 1.0 | 1.0 | 1.0 | +| test.c:67:20:67:25 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:67:24:67:25 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:68:9:68:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:68:9:68:15 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:68:13:68:13 | y | 1.0 | 1.0 | 1.0 | +| test.c:68:13:68:15 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:68:15:68:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:69:14:69:14 | x | 1.0 | 1.0 | 1.0 | +| test.c:72:10:72:10 | y | 1.0 | 3.0 | 3.0 | +| test.c:76:7:76:7 | y | 1.0 | 1.0 | 1.0 | +| test.c:76:7:76:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:76:12:76:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:77:9:77:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:77:9:77:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:77:13:77:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:78:14:78:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:81:9:81:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:81:9:81:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:81:13:81:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:82:14:82:14 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:85:10:85:10 | x | 1.0 | 1.0 | 1.0 | +| test.c:89:7:89:7 | y | 1.0 | 1.0 | 1.0 | +| test.c:89:7:89:11 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:89:11:89:11 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:90:9:90:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:90:9:90:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:90:13:90:13 | y | 1.0 | 1.0 | 1.0 | +| test.c:91:14:91:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:93:12:93:12 | x | 1.0 | 1.0 | 1.0 | +| test.c:95:10:95:10 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:100:3:100:3 | c | 1.0 | -1.0 | -1.0 | +| test.c:100:3:100:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:100:7:100:8 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:101:7:101:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:101:7:101:7 | c | 1.0 | 1.0 | 1.0 | +| test.c:101:7:101:15 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:101:12:101:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:102:5:102:8 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:102:5:102:15 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:102:12:102:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:102:12:102:15 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:104:7:104:7 | (int)... | 2.0 | 2.0 | 2.0 | +| test.c:104:7:104:7 | c | 2.0 | 2.0 | 2.0 | +| test.c:104:7:104:14 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:104:12:104:14 | 58 | 1.0 | -1.0 | -1.0 | +| test.c:105:5:105:5 | c | 1.0 | -1.0 | -1.0 | +| test.c:105:5:105:10 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:105:9:105:10 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:106:9:106:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:106:9:106:9 | c | 1.0 | 1.0 | 1.0 | +| test.c:106:9:106:17 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:106:14:106:17 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:107:7:107:10 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:107:7:107:17 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:107:14:107:17 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:107:14:107:17 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:109:9:109:9 | (int)... | 2.0 | 2.0 | 2.0 | +| test.c:109:9:109:9 | c | 2.0 | 2.0 | 2.0 | +| test.c:109:9:109:16 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:109:14:109:16 | 44 | 1.0 | -1.0 | -1.0 | +| test.c:110:14:110:14 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:112:10:112:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:118:24:118:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:118:24:118:24 | (size_type)... | 1.0 | 1.0 | 1.0 | +| test.c:119:10:119:10 | n | 1.0 | -1.0 | -1.0 | +| test.c:119:10:119:12 | ... ++ | 1.0 | 1.0 | 1.0 | +| test.c:123:22:123:22 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:123:22:123:22 | (size_type)... | 1.0 | 1.0 | 1.0 | +| test.c:124:11:124:15 | Start | 13.0 | 1.0 | 2.0 | +| test.c:124:11:124:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:124:20:124:32 | call to test12_helper | 1.0 | -1.0 | -1.0 | +| test.c:124:20:124:36 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:124:36:124:36 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:124:36:124:36 | (unsigned long long)... | 1.0 | 1.0 | 1.0 | +| test.c:126:31:126:43 | call to test12_helper | 1.0 | -1.0 | -1.0 | +| test.c:127:6:127:10 | Start | 13.0 | 1.0 | 2.0 | +| test.c:127:6:127:24 | ... += ... | 13.0 | 1.0 | 2.0 | +| test.c:127:15:127:20 | Length | 1.0 | 1.0 | 1.0 | +| test.c:127:15:127:24 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:127:24:127:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:127:24:127:24 | (unsigned long long)... | 1.0 | 1.0 | 1.0 | +| test.c:130:11:130:11 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:135:22:135:22 | (unsigned char)... | 1.0 | 1.0 | 1.0 | +| test.c:135:22:135:22 | c | 1.0 | 1.0 | 1.0 | +| test.c:136:20:136:20 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:136:20:136:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:137:20:137:20 | x | 1.0 | 1.0 | 1.0 | +| test.c:137:20:137:22 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:137:22:137:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:137:22:137:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:138:11:138:11 | i | 1.0 | 1.0 | 1.0 | +| test.c:138:11:138:13 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:138:13:138:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:139:10:139:41 | (double)... | 1.0 | 1.0 | 1.0 | +| test.c:139:10:139:41 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:18:139:41 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:19 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:19 | c | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:23 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:28 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:19:139:32 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:19:139:36 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:19:139:40 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:23:139:23 | i | 1.0 | 1.0 | 1.0 | +| test.c:139:27:139:28 | (int)... | 1.0 | 1.0 | 2.0 | +| test.c:139:27:139:28 | uc | 1.0 | 1.0 | 2.0 | +| test.c:139:32:139:32 | x | 1.0 | 1.0 | 1.0 | +| test.c:139:36:139:36 | y | 1.0 | 1.0 | 1.0 | +| test.c:139:40:139:40 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:40:139:40 | z | 1.0 | 1.0 | 1.0 | +| test.c:144:12:144:23 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:144:17:144:23 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:144:23:144:23 | x | 1.0 | 1.0 | 1.0 | +| test.c:145:12:145:32 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:145:17:145:32 | (unsigned char)... | 1.0 | 1.0 | 1.0 | +| test.c:145:32:145:32 | x | 1.0 | 1.0 | 1.0 | +| test.c:146:12:146:33 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:146:17:146:33 | (unsigned short)... | 1.0 | 1.0 | 1.0 | +| test.c:146:33:146:33 | x | 1.0 | 1.0 | 1.0 | +| test.c:147:12:147:31 | (int)... | 1.0 | 1.0 | 2.0 | +| test.c:147:17:147:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:147:31:147:31 | x | 1.0 | 1.0 | 1.0 | +| test.c:148:13:148:13 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:148:13:148:13 | x | 1.0 | 1.0 | 1.0 | +| test.c:149:23:149:23 | (unsigned short)... | 1.0 | 1.0 | 1.0 | +| test.c:149:23:149:23 | x | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:11 | x0 | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:16 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:21 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:26 | ... + ... | 1.0 | 2.0 | 1.0 | +| test.c:150:10:150:31 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:36 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:15:150:16 | x1 | 1.0 | 1.0 | 1.0 | +| test.c:150:20:150:21 | x2 | 1.0 | 1.0 | 1.0 | +| test.c:150:25:150:26 | x3 | 1.0 | 2.0 | 1.0 | +| test.c:150:30:150:31 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:150:30:150:31 | c0 | 1.0 | 1.0 | 1.0 | +| test.c:150:35:150:36 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:150:35:150:36 | s0 | 1.0 | 1.0 | 1.0 | +| test.c:154:10:154:31 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:154:10:154:40 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:154:11:154:11 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:11:154:15 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:154:11:154:30 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:154:15:154:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:154:15:154:15 | (long long)... | 1.0 | 1.0 | 1.0 | +| test.c:154:20:154:20 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:20:154:30 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:154:25:154:30 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:154:25:154:30 | (long long)... | 1.0 | 1.0 | 1.0 | +| test.c:154:30:154:30 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:35:154:35 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:39:154:40 | (long long)... | 1.0 | 1.0 | 1.0 | +| test.c:154:39:154:40 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:154:40:154:40 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:159:14:159:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:161:7:161:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:161:7:161:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:161:7:161:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:161:12:161:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:161:17:161:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:161:17:161:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:161:22:161:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:162:13:162:14 | + ... | 1.0 | 1.0 | 1.0 | +| test.c:162:14:162:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:163:13:163:14 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:163:14:163:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:164:5:164:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:164:5:164:16 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:164:14:164:14 | b | 1.0 | 1.0 | 1.0 | +| test.c:164:14:164:16 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:164:16:164:16 | c | 1.0 | 1.0 | 1.0 | +| test.c:166:7:166:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:166:7:166:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:166:7:166:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:166:12:166:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:166:17:166:17 | a | 1.5 | 3.0 | 3.0 | +| test.c:166:17:166:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:166:22:166:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:167:13:167:14 | + ... | 1.25 | 3.0 | 2.0 | +| test.c:167:14:167:14 | a | 1.25 | 3.0 | 2.0 | +| test.c:168:13:168:14 | - ... | 1.25 | 2.0 | 3.0 | +| test.c:168:14:168:14 | a | 1.25 | 3.0 | 2.0 | +| test.c:169:5:169:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:169:5:169:16 | ... += ... | 3.125 | 10.0 | 10.0 | +| test.c:169:14:169:14 | b | 1.25 | 3.0 | 2.0 | +| test.c:169:14:169:16 | ... + ... | 1.5625 | 5.0 | 5.0 | +| test.c:169:16:169:16 | c | 1.25 | 2.0 | 3.0 | +| test.c:171:7:171:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:171:7:171:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:171:7:171:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:171:8:171:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:171:13:171:13 | a | 2.75 | 4.0 | 4.0 | +| test.c:171:18:171:18 | a | 1.875 | 4.0 | 4.0 | +| test.c:171:18:171:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:171:23:171:24 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:172:13:172:14 | + ... | 1.4375 | 4.0 | 3.0 | +| test.c:172:14:172:14 | a | 1.4375 | 4.0 | 3.0 | +| test.c:173:13:173:14 | - ... | 1.4375 | 3.0 | 4.0 | +| test.c:173:14:173:14 | a | 1.4375 | 4.0 | 3.0 | +| test.c:174:5:174:9 | total | 5.125 | 11.0 | 11.0 | +| test.c:174:5:174:16 | ... += ... | 10.59033203125 | 47.0 | 47.0 | +| test.c:174:14:174:14 | b | 1.4375 | 4.0 | 3.0 | +| test.c:174:14:174:16 | ... + ... | 2.06640625 | 10.0 | 10.0 | +| test.c:174:16:174:16 | c | 1.4375 | 3.0 | 4.0 | +| test.c:176:7:176:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:176:7:176:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:176:7:176:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:176:8:176:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:176:13:176:13 | a | 3.3125 | 5.0 | 5.0 | +| test.c:176:18:176:18 | a | 2.15625 | 4.0 | 5.0 | +| test.c:176:18:176:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:176:23:176:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:177:13:177:14 | + ... | 1.578125 | 4.0 | 3.0 | +| test.c:177:14:177:14 | a | 1.578125 | 4.0 | 3.0 | +| test.c:178:13:178:14 | - ... | 1.578125 | 3.0 | 4.0 | +| test.c:178:14:178:14 | a | 1.578125 | 4.0 | 3.0 | +| test.c:179:5:179:9 | total | 15.71533203125 | 47.0 | 47.0 | +| test.c:179:5:179:16 | ... += ... | 39.138696789741516 | 80.0 | 80.0 | +| test.c:179:14:179:14 | b | 1.578125 | 4.0 | 3.0 | +| test.c:179:14:179:16 | ... + ... | 2.490478515625 | 10.0 | 10.0 | +| test.c:179:16:179:16 | c | 1.578125 | 3.0 | 4.0 | +| test.c:181:7:181:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:181:7:181:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:181:7:181:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:181:8:181:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:181:13:181:13 | a | 3.734375 | 6.0 | 6.0 | +| test.c:181:18:181:18 | a | 2.3671875 | 5.0 | 6.0 | +| test.c:181:18:181:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:181:23:181:23 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:182:13:182:14 | + ... | 1.68359375 | 5.0 | 3.0 | +| test.c:182:14:182:14 | a | 1.68359375 | 5.0 | 3.0 | +| test.c:183:13:183:14 | - ... | 1.68359375 | 3.0 | 5.0 | +| test.c:183:14:183:14 | a | 1.68359375 | 5.0 | 3.0 | +| test.c:184:5:184:9 | total | 54.854028820991516 | 80.0 | 80.0 | +| test.c:184:5:184:16 | ... += ... | 155.4830817843049 | 111.0 | 111.0 | +| test.c:184:14:184:14 | b | 1.68359375 | 5.0 | 3.0 | +| test.c:184:14:184:16 | ... + ... | 2.8344879150390625 | 13.0 | 13.0 | +| test.c:184:16:184:16 | c | 1.68359375 | 3.0 | 5.0 | +| test.c:186:7:186:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:186:7:186:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:186:7:186:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:186:8:186:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:186:13:186:13 | a | 4.05078125 | 7.0 | 7.0 | +| test.c:186:18:186:18 | a | 2.525390625 | 6.0 | 7.0 | +| test.c:186:18:186:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:186:23:186:24 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:186:24:186:24 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:187:13:187:14 | + ... | 1.7626953125 | 6.0 | 2.0 | +| test.c:187:14:187:14 | a | 1.7626953125 | 6.0 | 2.0 | +| test.c:188:13:188:14 | - ... | 1.7626953125 | 2.0 | 6.0 | +| test.c:188:14:188:14 | a | 1.7626953125 | 6.0 | 2.0 | +| test.c:189:5:189:9 | total | 210.3371106052964 | 111.0 | 111.0 | +| test.c:189:5:189:16 | ... += ... | 653.5373351858337 | 137.0 | 137.0 | +| test.c:189:14:189:14 | b | 1.7626953125 | 6.0 | 2.0 | +| test.c:189:14:189:16 | ... + ... | 3.1070947647094727 | 12.0 | 12.0 | +| test.c:189:16:189:16 | c | 1.7626953125 | 2.0 | 6.0 | +| test.c:192:10:192:14 | total | 863.8744457911301 | 137.0 | 137.0 | +| test.c:198:14:198:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:200:12:200:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:200:17:200:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:200:17:200:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:22:200:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:200:28:200:28 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:200:28:200:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:33:200:33 | b | 1.0 | 1.0 | 1.0 | +| test.c:200:38:200:38 | b | 1.0 | 1.0 | 1.0 | +| test.c:200:38:200:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:43:200:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:201:13:201:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:201:13:201:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:201:15:201:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:202:5:202:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:202:5:202:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:202:14:202:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:204:7:204:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:204:12:204:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:204:17:204:17 | a | 1.5 | 2.0 | 3.0 | +| test.c:204:17:204:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:22:204:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:204:28:204:28 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:204:28:204:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:33:204:33 | b | 3.0 | 3.0 | 3.0 | +| test.c:204:38:204:38 | b | 2.0 | 3.0 | 3.0 | +| test.c:204:38:204:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:43:204:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:205:13:205:13 | a | 1.25 | 2.0 | 2.0 | +| test.c:205:13:205:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:205:15:205:15 | b | 1.5 | 3.0 | 2.0 | +| test.c:206:5:206:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:206:5:206:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:206:14:206:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:208:7:208:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:208:12:208:12 | a | 2.75 | 3.0 | 3.0 | +| test.c:208:17:208:17 | a | 1.875 | 2.0 | 3.0 | +| test.c:208:17:208:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:22:208:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:208:28:208:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:208:28:208:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:29:208:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:208:35:208:35 | b | 6.5 | 4.0 | 4.0 | +| test.c:208:40:208:40 | b | 3.75 | 4.0 | 4.0 | +| test.c:208:40:208:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:45:208:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:209:13:209:13 | a | 1.4375 | 2.0 | 2.0 | +| test.c:209:13:209:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:209:15:209:15 | b | 2.375 | 4.0 | 3.0 | +| test.c:210:5:210:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:210:5:210:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:210:14:210:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:212:7:212:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:212:12:212:12 | a | 3.3125 | 3.0 | 3.0 | +| test.c:212:17:212:17 | a | 2.15625 | 2.0 | 3.0 | +| test.c:212:17:212:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:22:212:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:212:28:212:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:212:28:212:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:29:212:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:212:35:212:35 | b | 12.625 | 5.0 | 5.0 | +| test.c:212:40:212:40 | b | 6.8125 | 4.0 | 5.0 | +| test.c:212:40:212:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:45:212:45 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:213:13:213:13 | a | 1.578125 | 2.0 | 2.0 | +| test.c:213:13:213:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:213:15:213:15 | b | 3.90625 | 4.0 | 3.0 | +| test.c:214:5:214:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:214:5:214:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:214:14:214:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:216:7:216:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:216:12:216:12 | a | 3.734375 | 3.0 | 3.0 | +| test.c:216:17:216:17 | a | 2.3671875 | 2.0 | 3.0 | +| test.c:216:17:216:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:22:216:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:216:28:216:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:216:28:216:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:29:216:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:216:35:216:35 | b | 23.34375 | 6.0 | 6.0 | +| test.c:216:40:216:40 | b | 12.171875 | 5.0 | 6.0 | +| test.c:216:40:216:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:45:216:46 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:216:46:216:46 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:217:13:217:13 | a | 1.68359375 | 2.0 | 2.0 | +| test.c:217:13:217:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:217:15:217:15 | b | 6.5859375 | 5.0 | 2.0 | +| test.c:218:5:218:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:218:5:218:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:218:14:218:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:221:10:221:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:226:14:226:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:228:12:228:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:228:17:228:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:228:17:228:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:22:228:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:228:28:228:28 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:228:28:228:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:33:228:33 | b | 1.0 | 1.0 | 1.0 | +| test.c:228:38:228:38 | b | 1.0 | 1.0 | 1.0 | +| test.c:228:38:228:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:43:228:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:229:13:229:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:229:13:229:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:229:15:229:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:230:5:230:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:230:5:230:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:230:14:230:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:232:7:232:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:232:12:232:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:232:17:232:17 | a | 1.5 | 2.0 | 3.0 | +| test.c:232:17:232:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:22:232:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:232:28:232:28 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:232:28:232:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:33:232:33 | b | 3.0 | 3.0 | 3.0 | +| test.c:232:38:232:38 | b | 2.0 | 3.0 | 3.0 | +| test.c:232:38:232:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:43:232:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:233:13:233:13 | a | 1.25 | 2.0 | 2.0 | +| test.c:233:13:233:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:233:15:233:15 | b | 1.5 | 3.0 | 2.0 | +| test.c:234:5:234:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:234:5:234:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:234:14:234:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:236:7:236:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:236:12:236:12 | a | 2.75 | 3.0 | 3.0 | +| test.c:236:17:236:17 | a | 1.875 | 2.0 | 3.0 | +| test.c:236:17:236:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:22:236:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:236:28:236:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:236:28:236:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:29:236:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:236:35:236:35 | b | 6.5 | 4.0 | 4.0 | +| test.c:236:40:236:40 | b | 3.75 | 4.0 | 4.0 | +| test.c:236:40:236:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:45:236:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:237:13:237:13 | a | 1.4375 | 2.0 | 2.0 | +| test.c:237:13:237:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:237:15:237:15 | b | 2.375 | 4.0 | 3.0 | +| test.c:238:5:238:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:238:5:238:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:238:14:238:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:240:7:240:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:240:12:240:12 | a | 3.3125 | 3.0 | 3.0 | +| test.c:240:17:240:17 | a | 2.15625 | 2.0 | 3.0 | +| test.c:240:17:240:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:22:240:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:240:28:240:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:240:28:240:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:29:240:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:240:35:240:35 | b | 12.625 | 5.0 | 5.0 | +| test.c:240:40:240:40 | b | 6.8125 | 4.0 | 5.0 | +| test.c:240:40:240:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:45:240:45 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:241:13:241:13 | a | 1.578125 | 2.0 | 2.0 | +| test.c:241:13:241:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:241:15:241:15 | b | 3.90625 | 4.0 | 3.0 | +| test.c:242:5:242:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:242:5:242:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:242:14:242:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:244:7:244:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:244:12:244:12 | a | 3.734375 | 3.0 | 3.0 | +| test.c:244:17:244:17 | a | 2.3671875 | 2.0 | 3.0 | +| test.c:244:17:244:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:22:244:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:244:28:244:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:244:28:244:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:29:244:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:244:35:244:35 | b | 23.34375 | 6.0 | 6.0 | +| test.c:244:40:244:40 | b | 12.171875 | 5.0 | 6.0 | +| test.c:244:40:244:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:45:244:46 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:244:46:244:46 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:245:13:245:13 | a | 1.68359375 | 2.0 | 2.0 | +| test.c:245:13:245:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:245:15:245:15 | b | 6.5859375 | 5.0 | 2.0 | +| test.c:246:5:246:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:246:5:246:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:246:14:246:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:249:10:249:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:254:14:254:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:256:7:256:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:256:8:256:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:256:14:256:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:256:19:256:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:256:19:256:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:24:256:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:256:30:256:30 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:256:30:256:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:35:256:35 | b | 1.0 | 1.0 | 1.0 | +| test.c:256:40:256:40 | b | 1.0 | 1.0 | 1.0 | +| test.c:256:40:256:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:45:256:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:257:13:257:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:257:13:257:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:257:15:257:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:258:5:258:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:258:5:258:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:258:14:258:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:260:7:260:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:260:7:260:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:7:260:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:260:7:260:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:260:7:260:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:260:8:260:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:260:14:260:14 | a | 2.0 | 3.0 | 3.0 | +| test.c:260:19:260:19 | a | 1.5 | 2.0 | 3.0 | +| test.c:260:19:260:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:24:260:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:260:30:260:30 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:260:30:260:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:35:260:35 | b | 3.0 | 3.0 | 3.0 | +| test.c:260:40:260:40 | b | 2.0 | 3.0 | 3.0 | +| test.c:260:40:260:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:45:260:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:261:13:261:13 | a | 1.25 | 2.0 | 2.0 | +| test.c:261:13:261:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:261:15:261:15 | b | 1.5 | 3.0 | 2.0 | +| test.c:262:5:262:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:262:5:262:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:262:14:262:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:264:7:264:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:264:7:264:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:7:264:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:264:7:264:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:264:7:264:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:264:8:264:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:264:14:264:14 | a | 2.75 | 3.0 | 3.0 | +| test.c:264:19:264:19 | a | 1.875 | 2.0 | 3.0 | +| test.c:264:19:264:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:24:264:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:264:30:264:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:264:30:264:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:31:264:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:264:37:264:37 | b | 6.5 | 4.0 | 4.0 | +| test.c:264:42:264:42 | b | 3.75 | 4.0 | 4.0 | +| test.c:264:42:264:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:47:264:48 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:265:13:265:13 | a | 1.4375 | 2.0 | 2.0 | +| test.c:265:13:265:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:265:15:265:15 | b | 2.375 | 4.0 | 3.0 | +| test.c:266:5:266:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:266:5:266:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:266:14:266:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:268:7:268:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:268:7:268:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:7:268:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:268:7:268:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:268:7:268:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:268:8:268:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:268:14:268:14 | a | 3.3125 | 3.0 | 3.0 | +| test.c:268:19:268:19 | a | 2.15625 | 2.0 | 3.0 | +| test.c:268:19:268:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:24:268:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:268:30:268:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:268:30:268:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:31:268:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:268:37:268:37 | b | 12.625 | 5.0 | 5.0 | +| test.c:268:42:268:42 | b | 6.8125 | 4.0 | 5.0 | +| test.c:268:42:268:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:47:268:47 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:269:13:269:13 | a | 1.578125 | 2.0 | 2.0 | +| test.c:269:13:269:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:269:15:269:15 | b | 3.90625 | 4.0 | 3.0 | +| test.c:270:5:270:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:270:5:270:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:270:14:270:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:272:7:272:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:272:7:272:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:7:272:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:272:7:272:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:272:7:272:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:272:8:272:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:272:14:272:14 | a | 3.734375 | 3.0 | 3.0 | +| test.c:272:19:272:19 | a | 2.3671875 | 2.0 | 3.0 | +| test.c:272:19:272:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:24:272:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:272:30:272:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:272:30:272:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:31:272:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:272:37:272:37 | b | 23.34375 | 6.0 | 6.0 | +| test.c:272:42:272:42 | b | 12.171875 | 5.0 | 6.0 | +| test.c:272:42:272:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:47:272:48 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:272:48:272:48 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:273:13:273:13 | a | 1.68359375 | 2.0 | 2.0 | +| test.c:273:13:273:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:273:15:273:15 | b | 6.5859375 | 5.0 | 2.0 | +| test.c:274:5:274:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:274:5:274:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:274:14:274:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:277:10:277:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:282:14:282:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:284:7:284:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:34 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:284:8:284:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:284:14:284:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:284:19:284:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:284:19:284:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:24:284:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:284:29:284:29 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:284:29:284:34 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:34:284:34 | b | 1.0 | 1.0 | 1.0 | +| test.c:284:39:284:39 | b | 1.0 | 1.0 | 1.0 | +| test.c:284:39:284:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:44:284:45 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:285:13:285:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:285:13:285:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:285:15:285:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:286:5:286:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:286:5:286:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:286:14:286:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:288:7:288:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:288:7:288:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:7:288:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:288:7:288:34 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:288:7:288:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:288:8:288:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:288:14:288:14 | a | 2.0 | 3.0 | 3.0 | +| test.c:288:19:288:19 | a | 1.5 | 2.0 | 3.0 | +| test.c:288:19:288:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:24:288:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:288:29:288:29 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:288:29:288:34 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:34:288:34 | b | 3.0 | 3.0 | 3.0 | +| test.c:288:39:288:39 | b | 2.0 | 3.0 | 3.0 | +| test.c:288:39:288:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:44:288:45 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:289:13:289:13 | a | 1.25 | 2.0 | 2.0 | +| test.c:289:13:289:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:289:15:289:15 | b | 1.5 | 3.0 | 2.0 | +| test.c:290:5:290:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:290:5:290:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:290:14:290:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:292:7:292:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:292:7:292:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:7:292:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:292:7:292:36 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:292:7:292:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:292:8:292:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:292:14:292:14 | a | 2.75 | 3.0 | 3.0 | +| test.c:292:19:292:19 | a | 1.875 | 2.0 | 3.0 | +| test.c:292:19:292:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:24:292:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:292:29:292:31 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:292:29:292:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:30:292:31 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:292:36:292:36 | b | 6.5 | 4.0 | 4.0 | +| test.c:292:41:292:41 | b | 3.75 | 4.0 | 4.0 | +| test.c:292:41:292:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:46:292:47 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:293:13:293:13 | a | 1.4375 | 2.0 | 2.0 | +| test.c:293:13:293:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:293:15:293:15 | b | 2.375 | 4.0 | 3.0 | +| test.c:294:5:294:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:294:5:294:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:294:14:294:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:296:7:296:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:296:7:296:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:7:296:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:296:7:296:36 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:296:7:296:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:296:8:296:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:296:14:296:14 | a | 3.3125 | 3.0 | 3.0 | +| test.c:296:19:296:19 | a | 2.15625 | 2.0 | 3.0 | +| test.c:296:19:296:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:24:296:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:296:29:296:31 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:296:29:296:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:30:296:31 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:296:36:296:36 | b | 12.625 | 5.0 | 5.0 | +| test.c:296:41:296:41 | b | 6.8125 | 4.0 | 5.0 | +| test.c:296:41:296:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:46:296:46 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:297:13:297:13 | a | 1.578125 | 2.0 | 2.0 | +| test.c:297:13:297:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:297:15:297:15 | b | 3.90625 | 4.0 | 3.0 | +| test.c:298:5:298:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:298:5:298:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:298:14:298:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:300:7:300:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:300:7:300:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:7:300:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:300:7:300:36 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:300:7:300:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:300:8:300:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:300:14:300:14 | a | 3.734375 | 3.0 | 3.0 | +| test.c:300:19:300:19 | a | 2.3671875 | 2.0 | 3.0 | +| test.c:300:19:300:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:24:300:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:300:29:300:31 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:300:29:300:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:30:300:31 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:300:36:300:36 | b | 23.34375 | 6.0 | 6.0 | +| test.c:300:41:300:41 | b | 12.171875 | 5.0 | 6.0 | +| test.c:300:41:300:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:46:300:47 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:300:47:300:47 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:301:13:301:13 | a | 1.68359375 | 2.0 | 2.0 | +| test.c:301:13:301:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:301:15:301:15 | b | 6.5859375 | 5.0 | 2.0 | +| test.c:302:5:302:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:302:5:302:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:302:14:302:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:305:10:305:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:310:14:310:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:312:7:312:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:312:8:312:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:312:14:312:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:312:19:312:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:312:19:312:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:24:312:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:312:25:312:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:312:30:312:30 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:312:30:312:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:35:312:35 | b | 1.0 | 1.0 | 1.0 | +| test.c:312:40:312:40 | b | 1.0 | 1.0 | 1.0 | +| test.c:312:40:312:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:45:312:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:313:13:313:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:313:13:313:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:313:15:313:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:314:5:314:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:314:5:314:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:314:14:314:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:316:7:316:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:316:7:316:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:7:316:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:316:7:316:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:316:7:316:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:316:8:316:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:316:14:316:14 | a | 2.0 | 3.0 | 3.0 | +| test.c:316:19:316:19 | a | 1.5 | 2.0 | 3.0 | +| test.c:316:19:316:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:24:316:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:316:25:316:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:316:30:316:30 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:316:30:316:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:35:316:35 | b | 3.0 | 3.0 | 3.0 | +| test.c:316:40:316:40 | b | 2.0 | 3.0 | 3.0 | +| test.c:316:40:316:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:45:316:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:317:13:317:13 | a | 1.25 | 2.0 | 2.0 | +| test.c:317:13:317:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:317:15:317:15 | b | 1.5 | 3.0 | 2.0 | +| test.c:318:5:318:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:318:5:318:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:318:14:318:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:320:7:320:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:320:7:320:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:7:320:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:320:7:320:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:320:7:320:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:320:8:320:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:320:14:320:14 | a | 2.75 | 3.0 | 3.0 | +| test.c:320:19:320:19 | a | 1.875 | 2.0 | 3.0 | +| test.c:320:19:320:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:24:320:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:320:25:320:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:320:30:320:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:320:30:320:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:31:320:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:320:37:320:37 | b | 6.5 | 4.0 | 4.0 | +| test.c:320:42:320:42 | b | 3.75 | 4.0 | 4.0 | +| test.c:320:42:320:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:47:320:48 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:321:13:321:13 | a | 1.4375 | 2.0 | 2.0 | +| test.c:321:13:321:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:321:15:321:15 | b | 2.375 | 4.0 | 3.0 | +| test.c:322:5:322:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:322:5:322:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:322:14:322:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:324:7:324:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:324:7:324:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:7:324:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:324:7:324:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:324:7:324:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:324:8:324:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:324:14:324:14 | a | 3.3125 | 3.0 | 3.0 | +| test.c:324:19:324:19 | a | 2.15625 | 2.0 | 3.0 | +| test.c:324:19:324:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:24:324:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:324:25:324:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:324:30:324:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:324:30:324:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:31:324:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:324:37:324:37 | b | 12.625 | 5.0 | 5.0 | +| test.c:324:42:324:42 | b | 6.8125 | 4.0 | 5.0 | +| test.c:324:42:324:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:47:324:47 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:325:13:325:13 | a | 1.578125 | 2.0 | 2.0 | +| test.c:325:13:325:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:325:15:325:15 | b | 3.90625 | 4.0 | 3.0 | +| test.c:326:5:326:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:326:5:326:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:326:14:326:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:328:7:328:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:7:328:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:7:328:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:328:7:328:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:328:7:328:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:328:8:328:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:328:14:328:14 | a | 3.734375 | 3.0 | 3.0 | +| test.c:328:19:328:19 | a | 2.3671875 | 2.0 | 3.0 | +| test.c:328:19:328:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:24:328:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:25:328:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:328:30:328:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:30:328:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:31:328:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:328:37:328:37 | b | 23.34375 | 6.0 | 6.0 | +| test.c:328:42:328:42 | b | 12.171875 | 5.0 | 6.0 | +| test.c:328:42:328:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:47:328:48 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:48:328:48 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:329:13:329:13 | a | 1.68359375 | 2.0 | 2.0 | +| test.c:329:13:329:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:329:15:329:15 | b | 6.5859375 | 5.0 | 2.0 | +| test.c:330:5:330:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:330:5:330:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:330:14:330:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:333:10:333:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:339:28:339:43 | 9007199254740992 | 1.0 | -1.0 | -1.0 | +| test.c:339:28:339:47 | (unsigned long long)... | 1.0 | 1.0 | 1.0 | +| test.c:339:28:339:47 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:339:47:339:47 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:339:47:339:47 | (long)... | 1.0 | 1.0 | 1.0 | +| test.c:341:32:341:34 | odd | 1.0 | 1.0 | 1.0 | +| test.c:341:32:341:39 | ... >> ... | 1.0 | 1.0 | 1.0 | +| test.c:341:39:341:39 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:343:10:343:16 | shifted | 1.0 | 1.0 | 1.0 | +| test.c:348:22:348:32 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:348:22:348:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:348:22:348:44 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:348:23:348:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:348:23:348:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:348:23:348:27 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:348:23:348:31 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:348:27:348:27 | e | 1.0 | 1.0 | 1.0 | +| test.c:348:31:348:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:348:31:348:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:348:36:348:36 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:348:36:348:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:348:40:348:40 | e | 1.0 | 1.0 | 1.0 | +| test.c:348:44:348:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:348:44:348:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:20:349:30 | (...) | 2.0 | 2.0 | 1.0 | +| test.c:349:20:349:35 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:349:20:349:43 | (signed int)... | 1.5 | 1.0 | 1.0 | +| test.c:349:20:349:43 | ... ? ... : ... | 1.5 | 1.0 | 1.0 | +| test.c:349:21:349:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:349:21:349:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:21:349:25 | ... * ... | 2.0 | 1.0 | 2.0 | +| test.c:349:21:349:29 | ... + ... | 2.0 | 1.0 | 2.0 | +| test.c:349:25:349:25 | e | 2.0 | 1.0 | 2.0 | +| test.c:349:29:349:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:349:29:349:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:35:349:35 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:349:35:349:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:39:349:39 | e | 1.5 | 1.0 | 1.0 | +| test.c:349:43:349:43 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:349:43:349:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:22:350:32 | (...) | 3.0 | 1.0 | 1.0 | +| test.c:350:22:350:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:350:22:350:44 | ... ? ... : ... | 2.0 | 1.0 | 1.0 | +| test.c:350:23:350:23 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:350:23:350:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:23:350:27 | ... * ... | 3.0 | 1.0 | 2.0 | +| test.c:350:23:350:31 | ... + ... | 3.0 | 1.0 | 1.0 | +| test.c:350:27:350:27 | e | 3.0 | 1.0 | 2.0 | +| test.c:350:31:350:31 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:350:31:350:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:36:350:36 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:350:36:350:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:40:350:40 | e | 2.0 | 1.0 | 1.0 | +| test.c:350:44:350:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:350:44:350:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:22:351:32 | (...) | 4.0 | 2.0 | 2.0 | +| test.c:351:22:351:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:351:22:351:44 | ... ? ... : ... | 2.5 | 1.0 | 2.0 | +| test.c:351:23:351:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:351:23:351:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:23:351:27 | ... * ... | 4.0 | 1.0 | 2.0 | +| test.c:351:23:351:31 | ... + ... | 4.0 | 1.0 | 2.0 | +| test.c:351:27:351:27 | e | 4.0 | 1.0 | 2.0 | +| test.c:351:31:351:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:351:31:351:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:36:351:36 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:351:36:351:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:40:351:40 | e | 2.5 | 1.0 | 2.0 | +| test.c:351:44:351:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:351:44:351:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:22:352:32 | (...) | 5.0 | 2.0 | 2.0 | +| test.c:352:22:352:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:352:22:352:45 | ... ? ... : ... | 3.0 | 1.0 | 2.0 | +| test.c:352:23:352:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:352:23:352:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:23:352:27 | ... * ... | 5.0 | 1.0 | 3.0 | +| test.c:352:23:352:31 | ... + ... | 5.0 | 1.0 | 3.0 | +| test.c:352:27:352:27 | e | 5.0 | 1.0 | 3.0 | +| test.c:352:31:352:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:352:31:352:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:36:352:37 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:352:36:352:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:41:352:41 | e | 3.0 | 1.0 | 2.0 | +| test.c:352:45:352:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:352:45:352:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:354:10:354:12 | bi1 | 1.0 | 1.0 | 1.0 | +| test.c:354:10:354:18 | ... + ... | 1.5 | 1.0 | 1.0 | +| test.c:354:10:354:24 | ... + ... | 3.0 | 1.0 | 1.0 | +| test.c:354:10:354:30 | ... + ... | 7.5 | 1.0 | 2.0 | +| test.c:354:10:354:36 | ... + ... | 22.5 | 1.0 | 2.0 | +| test.c:354:16:354:18 | (unsigned int)... | 1.5 | 1.0 | 1.0 | +| test.c:354:16:354:18 | bi2 | 1.5 | 1.0 | 1.0 | +| test.c:354:22:354:24 | bi3 | 2.0 | 1.0 | 1.0 | +| test.c:354:28:354:30 | bi4 | 2.5 | 1.0 | 2.0 | +| test.c:354:34:354:36 | bi5 | 3.0 | 1.0 | 2.0 | +| test.c:358:13:358:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:359:7:359:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:359:7:359:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:359:11:359:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:360:12:360:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:360:13:360:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:363:10:363:10 | i | 13.0 | 3.0 | 4.0 | +| test.c:363:10:363:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:363:14:363:14 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:364:5:364:5 | i | 13.0 | 3.0 | 3.0 | +| test.c:364:5:364:7 | ... ++ | 13.0 | 3.0 | 3.0 | +| test.c:366:3:366:3 | d | 1.0 | -1.0 | -1.0 | +| test.c:366:3:366:7 | ... = ... | 7.0 | 1.0 | 4.0 | +| test.c:366:7:366:7 | i | 7.0 | 1.0 | 4.0 | +| test.c:367:7:367:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:367:7:367:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:367:11:367:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:368:9:368:9 | d | 7.0 | 1.0 | 4.0 | +| test.c:368:9:368:14 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:368:13:368:14 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:368:14:368:14 | x | 1.0 | 1.0 | 1.0 | +| test.c:369:14:369:14 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:372:10:372:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:378:3:378:4 | y1 | 1.0 | -1.0 | -1.0 | +| test.c:378:3:378:23 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:378:8:378:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:378:8:378:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:378:8:378:23 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:378:12:378:14 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:378:12:378:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:378:18:378:18 | x | 1.0 | 1.0 | 1.0 | +| test.c:378:22:378:23 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:378:22:378:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:379:3:379:4 | y2 | 1.0 | -1.0 | -1.0 | +| test.c:379:3:379:24 | ... = ... | 1.5 | 2.0 | 1.0 | +| test.c:379:8:379:8 | x | 2.0 | 2.0 | 2.0 | +| test.c:379:8:379:15 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:379:8:379:24 | ... ? ... : ... | 1.5 | 2.0 | 1.0 | +| test.c:379:13:379:15 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:379:13:379:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:379:19:379:20 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:379:19:379:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:379:24:379:24 | x | 1.5 | 2.0 | 1.0 | +| test.c:380:3:380:4 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:380:3:380:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:380:8:380:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:380:8:380:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:381:3:381:4 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:381:3:381:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:381:8:381:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:381:8:381:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:382:3:382:4 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:382:3:382:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:382:8:382:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:382:8:382:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:383:3:383:4 | y6 | 1.0 | -1.0 | -1.0 | +| test.c:383:3:383:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:383:8:383:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:383:8:383:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:384:3:384:4 | y7 | 1.0 | -1.0 | -1.0 | +| test.c:384:3:384:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:384:8:384:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:384:8:384:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:385:3:385:4 | y8 | 1.0 | -1.0 | -1.0 | +| test.c:385:3:385:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:385:8:385:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:385:8:385:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:386:7:386:7 | x | 3.0 | 2.0 | 2.0 | +| test.c:386:7:386:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:386:11:386:13 | 300 | 1.0 | -1.0 | -1.0 | +| test.c:386:11:386:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:387:5:387:6 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:387:5:387:15 | ... = ... | 2.0 | 3.0 | 3.0 | +| test.c:387:10:387:10 | x | 2.0 | 2.0 | 2.0 | +| test.c:387:10:387:15 | ... ? ... : ... | 2.0 | 3.0 | 3.0 | +| test.c:387:15:387:15 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:387:15:387:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:388:5:388:6 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:388:5:388:17 | ... = ... | 2.0 | 3.0 | 3.0 | +| test.c:388:10:388:10 | x | 2.0 | 2.0 | 2.0 | +| test.c:388:10:388:17 | ... ? ... : ... | 2.0 | 3.0 | 3.0 | +| test.c:388:15:388:17 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:388:15:388:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:389:5:389:6 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:389:5:389:21 | ... = ... | 2.0 | 2.0 | 2.0 | +| test.c:389:10:389:14 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:389:10:389:21 | ... ? ... : ... | 2.0 | 2.0 | 2.0 | +| test.c:389:11:389:11 | x | 2.0 | 2.0 | 2.0 | +| test.c:389:11:389:13 | ... + ... | 2.0 | 2.0 | 2.0 | +| test.c:389:13:389:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:389:13:389:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:389:19:389:21 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:389:19:389:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:390:5:390:6 | y6 | 1.0 | -1.0 | -1.0 | +| test.c:390:5:390:36 | ... = ... | 2.0 | 4.0 | 3.0 | +| test.c:390:10:390:31 | (...) | 2.0 | 3.0 | 2.0 | +| test.c:390:10:390:36 | (unsigned int)... | 2.0 | 4.0 | 3.0 | +| test.c:390:10:390:36 | ... ? ... : ... | 2.0 | 4.0 | 3.0 | +| test.c:390:11:390:30 | (unsigned char)... | 2.0 | 2.0 | 2.0 | +| test.c:390:26:390:30 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:390:27:390:27 | x | 2.0 | 2.0 | 2.0 | +| test.c:390:27:390:29 | ... + ... | 2.0 | 2.0 | 2.0 | +| test.c:390:29:390:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:390:29:390:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:390:36:390:36 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:391:5:391:6 | y7 | 1.0 | -1.0 | -1.0 | +| test.c:391:5:391:38 | ... = ... | 2.0 | 4.0 | 3.0 | +| test.c:391:10:391:31 | (...) | 2.0 | 3.0 | 2.0 | +| test.c:391:10:391:38 | (unsigned int)... | 2.0 | 4.0 | 3.0 | +| test.c:391:10:391:38 | ... ? ... : ... | 2.0 | 4.0 | 3.0 | +| test.c:391:11:391:30 | (unsigned char)... | 2.0 | 2.0 | 2.0 | +| test.c:391:26:391:30 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:391:27:391:27 | x | 2.0 | 2.0 | 2.0 | +| test.c:391:27:391:29 | ... + ... | 2.0 | 2.0 | 2.0 | +| test.c:391:29:391:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:391:29:391:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:391:36:391:38 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:392:5:392:6 | y8 | 1.0 | -1.0 | -1.0 | +| test.c:392:5:392:39 | ... = ... | 2.0 | 2.0 | 2.0 | +| test.c:392:10:392:32 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:392:10:392:39 | (unsigned int)... | 2.0 | 2.0 | 2.0 | +| test.c:392:10:392:39 | ... ? ... : ... | 2.0 | 2.0 | 2.0 | +| test.c:392:11:392:31 | (unsigned short)... | 2.0 | 2.0 | 2.0 | +| test.c:392:27:392:31 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:392:28:392:28 | x | 2.0 | 2.0 | 2.0 | +| test.c:392:28:392:30 | ... + ... | 2.0 | 2.0 | 2.0 | +| test.c:392:30:392:30 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:392:30:392:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:392:37:392:39 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:394:10:394:11 | y1 | 1.0 | 1.0 | 1.0 | +| test.c:394:10:394:16 | ... + ... | 1.5 | 2.0 | 1.0 | +| test.c:394:10:394:21 | ... + ... | 4.5 | 6.0 | 4.0 | +| test.c:394:10:394:26 | ... + ... | 13.5 | 16.0 | 13.0 | +| test.c:394:10:394:31 | ... + ... | 40.5 | 40.0 | 33.0 | +| test.c:394:10:394:36 | ... + ... | 121.5 | 88.0 | 102.0 | +| test.c:394:10:394:41 | ... + ... | 364.5 | 186.0 | 214.0 | +| test.c:394:10:394:46 | ... + ... | 1093.5 | 265.0 | 276.0 | +| test.c:394:15:394:16 | y2 | 1.5 | 2.0 | 1.0 | +| test.c:394:20:394:21 | y3 | 3.0 | 3.0 | 4.0 | +| test.c:394:25:394:26 | y4 | 3.0 | 3.0 | 4.0 | +| test.c:394:30:394:31 | y5 | 3.0 | 3.0 | 3.0 | +| test.c:394:35:394:36 | y6 | 3.0 | 4.0 | 4.0 | +| test.c:394:40:394:41 | y7 | 3.0 | 4.0 | 4.0 | +| test.c:394:45:394:46 | y8 | 3.0 | 3.0 | 3.0 | +| test.c:400:3:400:4 | y1 | 1.0 | -1.0 | -1.0 | +| test.c:400:3:400:24 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:400:8:400:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:400:8:400:14 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:400:8:400:24 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:400:12:400:14 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:400:12:400:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:400:18:400:18 | x | 1.0 | 1.0 | 1.0 | +| test.c:400:22:400:24 | 110 | 1.0 | -1.0 | -1.0 | +| test.c:400:22:400:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:401:3:401:4 | y2 | 1.0 | -1.0 | -1.0 | +| test.c:401:3:401:25 | ... = ... | 1.5 | 1.0 | 2.0 | +| test.c:401:8:401:8 | x | 2.0 | 2.0 | 2.0 | +| test.c:401:8:401:15 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:401:8:401:25 | ... ? ... : ... | 1.5 | 1.0 | 2.0 | +| test.c:401:13:401:15 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:401:13:401:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:401:19:401:21 | 110 | 1.0 | -1.0 | -1.0 | +| test.c:401:19:401:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:401:25:401:25 | x | 1.5 | 1.0 | 2.0 | +| test.c:402:3:402:4 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:402:3:402:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:402:8:402:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:402:8:402:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:403:3:403:4 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:403:3:403:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:403:8:403:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:403:8:403:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:404:3:404:4 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:404:3:404:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:404:8:404:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:404:8:404:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:405:7:405:7 | x | 3.0 | 2.0 | 2.0 | +| test.c:405:7:405:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:405:12:405:14 | 300 | 1.0 | -1.0 | -1.0 | +| test.c:405:12:405:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:406:5:406:6 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:406:5:406:21 | ... = ... | 2.0 | 2.0 | 3.0 | +| test.c:406:10:406:16 | (...) | 2.0 | 1.0 | 2.0 | +| test.c:406:10:406:21 | ... ? ... : ... | 2.0 | 2.0 | 3.0 | +| test.c:406:11:406:11 | x | 2.0 | 1.0 | 2.0 | +| test.c:406:11:406:15 | ... - ... | 2.0 | 1.0 | 2.0 | +| test.c:406:13:406:15 | 300 | 1.0 | -1.0 | -1.0 | +| test.c:406:13:406:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:406:21:406:21 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:406:21:406:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:407:5:407:6 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:407:5:407:21 | ... = ... | 2.0 | 1.0 | 2.0 | +| test.c:407:10:407:16 | (...) | 2.0 | 1.0 | 2.0 | +| test.c:407:10:407:21 | ... ? ... : ... | 2.0 | 1.0 | 2.0 | +| test.c:407:11:407:11 | x | 2.0 | 1.0 | 2.0 | +| test.c:407:11:407:15 | ... - ... | 2.0 | 1.0 | 2.0 | +| test.c:407:13:407:15 | 200 | 1.0 | -1.0 | -1.0 | +| test.c:407:13:407:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:407:21:407:21 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:407:21:407:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:408:5:408:6 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:408:5:408:38 | ... = ... | 2.0 | 2.0 | 2.0 | +| test.c:408:10:408:33 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:408:10:408:38 | (unsigned int)... | 2.0 | 2.0 | 2.0 | +| test.c:408:10:408:38 | ... ? ... : ... | 2.0 | 2.0 | 2.0 | +| test.c:408:11:408:32 | (unsigned char)... | 2.0 | 1.0 | 2.0 | +| test.c:408:26:408:32 | (...) | 2.0 | 1.0 | 2.0 | +| test.c:408:27:408:27 | x | 2.0 | 1.0 | 2.0 | +| test.c:408:27:408:31 | ... - ... | 2.0 | 1.0 | 2.0 | +| test.c:408:29:408:31 | 200 | 1.0 | -1.0 | -1.0 | +| test.c:408:29:408:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:408:38:408:38 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:410:10:410:11 | y1 | 1.0 | 1.0 | 1.0 | +| test.c:410:10:410:16 | ... + ... | 1.5 | 1.0 | 2.0 | +| test.c:410:10:410:21 | ... + ... | 4.5 | 3.0 | 4.0 | +| test.c:410:10:410:26 | ... + ... | 13.5 | 2.0 | 3.0 | +| test.c:410:10:410:31 | ... + ... | 40.5 | 3.0 | 3.0 | +| test.c:410:15:410:16 | y2 | 1.5 | 1.0 | 2.0 | +| test.c:410:20:410:21 | y3 | 3.0 | 3.0 | 4.0 | +| test.c:410:25:410:26 | y4 | 3.0 | 2.0 | 3.0 | +| test.c:410:30:410:31 | y5 | 3.0 | 3.0 | 3.0 | +| test.c:415:14:415:14 | m | 1.0 | 1.0 | 1.0 | +| test.c:415:14:415:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:18:415:18 | n | 1.0 | 1.0 | 1.0 | +| test.c:415:18:415:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:22:415:22 | o | 1.0 | 1.0 | 1.0 | +| test.c:415:22:415:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:26:415:26 | p | 1.0 | 1.0 | 1.0 | +| test.c:415:26:415:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:30:415:30 | q | 1.0 | 1.0 | 1.0 | +| test.c:415:30:415:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:34:415:43 | 0.47438827 | 1.0 | -1.0 | -1.0 | +| test.c:415:47:415:56 | 0.14333887 | 1.0 | -1.0 | -1.0 | +| test.c:415:60:415:69 | 0.35279203 | 1.0 | -1.0 | -1.0 | +| test.c:415:73:415:82 | 0.39206458 | 1.0 | -1.0 | -1.0 | +| test.c:415:86:415:95 | 0.21540225 | 1.0 | -1.0 | -1.0 | +| test.c:415:99:415:108 | 0.40496805 | 1.0 | -1.0 | -1.0 | +| test.c:416:14:416:14 | m | 2.0 | 1.0 | 1.0 | +| test.c:416:14:416:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:18:416:18 | n | 3.0 | 1.0 | 1.0 | +| test.c:416:18:416:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:22:416:22 | o | 3.0 | 1.0 | 1.0 | +| test.c:416:22:416:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:26:416:26 | p | 3.0 | 1.0 | 1.0 | +| test.c:416:26:416:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:30:416:30 | q | 3.0 | 1.0 | 1.0 | +| test.c:416:30:416:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:34:416:43 | 0.34183348 | 1.0 | -1.0 | -1.0 | +| test.c:416:47:416:56 | 0.3533464 | 1.0 | -1.0 | -1.0 | +| test.c:416:60:416:69 | 0.22247853 | 1.0 | -1.0 | -1.0 | +| test.c:416:73:416:82 | 0.32661893 | 1.0 | -1.0 | -1.0 | +| test.c:416:86:416:95 | 0.59270465 | 1.0 | -1.0 | -1.0 | +| test.c:416:99:416:108 | 0.5297741 | 1.0 | -1.0 | -1.0 | +| test.c:417:14:417:14 | m | 3.5 | 1.0 | 1.0 | +| test.c:417:14:417:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:18:417:18 | n | 8.0 | 1.0 | 1.0 | +| test.c:417:18:417:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:22:417:22 | o | 8.0 | 1.0 | 1.0 | +| test.c:417:22:417:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:26:417:26 | p | 8.0 | 1.0 | 1.0 | +| test.c:417:26:417:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:30:417:30 | q | 8.0 | 1.0 | 1.0 | +| test.c:417:30:417:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:34:417:43 | 0.77429603 | 1.0 | -1.0 | -1.0 | +| test.c:417:47:417:56 | 0.31478084 | 1.0 | -1.0 | -1.0 | +| test.c:417:60:417:69 | 0.31235514 | 1.0 | -1.0 | -1.0 | +| test.c:417:73:417:82 | 0.05121256 | 1.0 | -1.0 | -1.0 | +| test.c:417:86:417:95 | 0.79310745 | 1.0 | -1.0 | -1.0 | +| test.c:417:99:417:108 | 0.67981451 | 1.0 | -1.0 | -1.0 | +| test.c:418:14:418:14 | m | 5.75 | 1.0 | 1.0 | +| test.c:418:14:418:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:18:418:18 | n | 20.5 | 1.0 | 1.0 | +| test.c:418:18:418:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:22:418:22 | o | 20.5 | 1.0 | 1.0 | +| test.c:418:22:418:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:26:418:26 | p | 20.5 | 1.0 | 1.0 | +| test.c:418:26:418:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:30:418:30 | q | 20.5 | 1.0 | 1.0 | +| test.c:418:30:418:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:34:418:43 | 0.44729556 | 1.0 | -1.0 | -1.0 | +| test.c:418:47:418:56 | 0.80599202 | 1.0 | -1.0 | -1.0 | +| test.c:418:60:418:69 | 0.98997262 | 1.0 | -1.0 | -1.0 | +| test.c:418:73:418:82 | 0.59952732 | 1.0 | -1.0 | -1.0 | +| test.c:418:86:418:95 | 0.36976948 | 1.0 | -1.0 | -1.0 | +| test.c:418:99:418:108 | 0.83866835 | 1.0 | -1.0 | -1.0 | +| test.c:419:14:419:14 | m | 9.125 | 1.0 | 1.0 | +| test.c:419:14:419:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:18:419:18 | n | 51.75 | 1.0 | 1.0 | +| test.c:419:18:419:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:22:419:22 | o | 51.75 | 1.0 | 1.0 | +| test.c:419:22:419:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:26:419:26 | p | 51.75 | 1.0 | 1.0 | +| test.c:419:26:419:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:30:419:30 | q | 51.75 | 1.0 | 1.0 | +| test.c:419:30:419:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:34:419:43 | 0.49311828 | 1.0 | -1.0 | -1.0 | +| test.c:419:47:419:56 | 0.90389911 | 1.0 | -1.0 | -1.0 | +| test.c:419:60:419:69 | 0.10597712 | 1.0 | -1.0 | -1.0 | +| test.c:419:73:419:82 | 0.21778426 | 1.0 | -1.0 | -1.0 | +| test.c:419:86:419:95 | 0.72485966 | 1.0 | -1.0 | -1.0 | +| test.c:419:99:419:108 | 0.68734874 | 1.0 | -1.0 | -1.0 | +| test.c:420:14:420:14 | m | 14.1875 | 1.0 | 1.0 | +| test.c:420:14:420:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:18:420:18 | n | 129.875 | 1.0 | 1.0 | +| test.c:420:18:420:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:22:420:22 | o | 129.875 | 1.0 | 1.0 | +| test.c:420:22:420:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:26:420:26 | p | 129.875 | 1.0 | 1.0 | +| test.c:420:26:420:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:30:420:30 | q | 129.875 | 1.0 | 1.0 | +| test.c:420:30:420:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:34:420:43 | 0.47452848 | 1.0 | -1.0 | -1.0 | +| test.c:420:47:420:56 | 0.1078665 | 1.0 | -1.0 | -1.0 | +| test.c:420:60:420:69 | 0.11884576 | 1.0 | -1.0 | -1.0 | +| test.c:420:73:420:82 | 0.76164052 | 1.0 | -1.0 | -1.0 | +| test.c:420:86:420:95 | 0.34808892 | 1.0 | -1.0 | -1.0 | +| test.c:420:99:420:108 | 0.58440865 | 1.0 | -1.0 | -1.0 | +| test.c:421:14:421:14 | m | 21.78125 | 1.0 | 1.0 | +| test.c:421:14:421:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:18:421:18 | n | 325.1875 | 1.0 | 1.0 | +| test.c:421:18:421:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:22:421:22 | o | 325.1875 | 1.0 | 1.0 | +| test.c:421:22:421:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:26:421:26 | p | 325.1875 | 1.0 | 1.0 | +| test.c:421:26:421:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:30:421:30 | q | 325.1875 | 1.0 | 1.0 | +| test.c:421:30:421:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:34:421:43 | 0.02524326 | 1.0 | -1.0 | -1.0 | +| test.c:421:47:421:56 | 0.82905046 | 1.0 | -1.0 | -1.0 | +| test.c:421:60:421:69 | 0.95823075 | 1.0 | -1.0 | -1.0 | +| test.c:421:73:421:82 | 0.12516558 | 1.0 | -1.0 | -1.0 | +| test.c:421:86:421:95 | 0.85235179 | 1.0 | -1.0 | -1.0 | +| test.c:421:99:421:108 | 0.36232384 | 1.0 | -1.0 | -1.0 | +| test.c:422:14:422:14 | m | 33.171875 | 1.0 | 1.0 | +| test.c:422:14:422:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:18:422:18 | n | 813.46875 | 1.0 | 1.0 | +| test.c:422:18:422:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:22:422:22 | o | 813.46875 | 1.0 | 1.0 | +| test.c:422:22:422:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:26:422:26 | p | 813.46875 | 1.0 | 1.0 | +| test.c:422:26:422:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:30:422:30 | q | 813.46875 | 1.0 | 1.0 | +| test.c:422:30:422:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:34:422:43 | 0.38708626 | 1.0 | -1.0 | -1.0 | +| test.c:422:47:422:56 | 0.32876044 | 1.0 | -1.0 | -1.0 | +| test.c:422:60:422:69 | 0.14963485 | 1.0 | -1.0 | -1.0 | +| test.c:422:73:422:82 | 0.45041108 | 1.0 | -1.0 | -1.0 | +| test.c:422:86:422:95 | 0.48640909 | 1.0 | -1.0 | -1.0 | +| test.c:422:99:422:108 | 0.84331272 | 1.0 | -1.0 | -1.0 | +| test.c:423:14:423:14 | m | 50.2578125 | 1.0 | 1.0 | +| test.c:423:14:423:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:18:423:18 | n | 2034.171875 | 1.0 | 1.0 | +| test.c:423:18:423:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:22:423:22 | o | 2034.171875 | 1.0 | 1.0 | +| test.c:423:22:423:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:26:423:26 | p | 2034.171875 | 1.0 | 1.0 | +| test.c:423:26:423:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:30:423:30 | q | 2034.171875 | 1.0 | 1.0 | +| test.c:423:30:423:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:34:423:43 | 0.15755063 | 1.0 | -1.0 | -1.0 | +| test.c:423:47:423:56 | 0.77086833 | 1.0 | -1.0 | -1.0 | +| test.c:423:60:423:69 | 0.26428481 | 1.0 | -1.0 | -1.0 | +| test.c:423:73:423:82 | 0.14800508 | 1.0 | -1.0 | -1.0 | +| test.c:423:86:423:95 | 0.37428143 | 1.0 | -1.0 | -1.0 | +| test.c:423:99:423:108 | 0.05328182 | 1.0 | -1.0 | -1.0 | +| test.c:424:14:424:14 | m | 75.88671875 | 1.0 | 1.0 | +| test.c:424:14:424:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:18:424:18 | n | 5085.9296875 | 1.0 | 1.0 | +| test.c:424:18:424:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:22:424:22 | o | 5085.9296875 | 1.0 | 1.0 | +| test.c:424:22:424:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:26:424:26 | p | 5085.9296875 | 1.0 | 1.0 | +| test.c:424:26:424:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:30:424:30 | q | 5085.9296875 | 1.0 | 1.0 | +| test.c:424:30:424:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:34:424:43 | 0.41736536 | 1.0 | -1.0 | -1.0 | +| test.c:424:47:424:56 | 0.76826628 | 1.0 | -1.0 | -1.0 | +| test.c:424:60:424:69 | 0.27643238 | 1.0 | -1.0 | -1.0 | +| test.c:424:73:424:82 | 0.55679274 | 1.0 | -1.0 | -1.0 | +| test.c:424:86:424:95 | 0.39468857 | 1.0 | -1.0 | -1.0 | +| test.c:424:99:424:108 | 0.69072144 | 1.0 | -1.0 | -1.0 | +| test.c:425:14:425:14 | m | 114.330078125 | 1.0 | 1.0 | +| test.c:425:14:425:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:18:425:18 | n | 12715.32421875 | 1.0 | 1.0 | +| test.c:425:18:425:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:22:425:22 | o | 12715.32421875 | 1.0 | 1.0 | +| test.c:425:22:425:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:26:425:26 | p | 12715.32421875 | 1.0 | 1.0 | +| test.c:425:26:425:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:30:425:30 | q | 12715.32421875 | 1.0 | 1.0 | +| test.c:425:30:425:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:34:425:43 | 0.88955345 | 1.0 | -1.0 | -1.0 | +| test.c:425:47:425:56 | 0.29904824 | 1.0 | -1.0 | -1.0 | +| test.c:425:60:425:69 | 0.76242583 | 1.0 | -1.0 | -1.0 | +| test.c:425:73:425:82 | 0.2051911 | 1.0 | -1.0 | -1.0 | +| test.c:425:86:425:95 | 0.88745559 | 1.0 | -1.0 | -1.0 | +| test.c:425:99:425:108 | 0.81372798 | 1.0 | -1.0 | -1.0 | +| test.c:426:14:426:14 | m | 171.9951171875 | 1.0 | 1.0 | +| test.c:426:14:426:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:18:426:18 | n | 31788.810546875 | 1.0 | 1.0 | +| test.c:426:18:426:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:22:426:22 | o | 31788.810546875 | 1.0 | 1.0 | +| test.c:426:22:426:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:26:426:26 | p | 31788.810546875 | 1.0 | 1.0 | +| test.c:426:26:426:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:30:426:30 | q | 31788.810546875 | 1.0 | 1.0 | +| test.c:426:30:426:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:34:426:43 | 0.42186276 | 1.0 | -1.0 | -1.0 | +| test.c:426:47:426:56 | 0.53843358 | 1.0 | -1.0 | -1.0 | +| test.c:426:60:426:69 | 0.44996679 | 1.0 | -1.0 | -1.0 | +| test.c:426:73:426:82 | 0.13204114 | 1.0 | -1.0 | -1.0 | +| test.c:426:86:426:95 | 0.52031241 | 1.0 | -1.0 | -1.0 | +| test.c:426:99:426:108 | 0.42762647 | 1.0 | -1.0 | -1.0 | +| test.c:432:19:432:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:23 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:27 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:31 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:35 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:39 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:43 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:47 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:51 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:55 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:59 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:63 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:23:432:23 | b | 1.0 | 1.0 | 1.0 | +| test.c:432:27:432:27 | c | 1.0 | 1.0 | 1.0 | +| test.c:432:31:432:31 | d | 1.0 | 1.0 | 1.0 | +| test.c:432:35:432:35 | e | 1.0 | 1.0 | 1.0 | +| test.c:432:39:432:39 | f | 1.0 | 1.0 | 1.0 | +| test.c:432:43:432:43 | g | 1.0 | 1.0 | 1.0 | +| test.c:432:47:432:47 | h | 1.0 | 1.0 | 1.0 | +| test.c:432:51:432:51 | i | 1.0 | 1.0 | 1.0 | +| test.c:432:55:432:55 | j | 1.0 | 1.0 | 1.0 | +| test.c:432:59:432:59 | k | 1.0 | 1.0 | 1.0 | +| test.c:432:63:432:63 | l | 1.0 | 1.0 | 1.0 | +| test.c:434:10:434:15 | output | 1.0 | 1.0 | 1.0 | +| test.c:441:7:441:9 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:441:7:441:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:441:13:441:14 | 12 | 1.0 | -1.0 | -1.0 | +| test.c:441:13:441:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:441:19:441:21 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:441:19:441:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:441:26:441:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:442:7:442:9 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:442:7:442:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:442:13:442:14 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:442:13:442:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:442:19:442:21 | rhs | 1.5 | 2.0 | 2.0 | +| test.c:442:19:442:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:442:26:442:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:443:7:443:9 | rhs | 3.0 | 3.0 | 3.0 | +| test.c:443:7:443:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:443:13:443:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:443:13:443:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:443:19:443:21 | rhs | 2.0 | 3.0 | 3.0 | +| test.c:443:19:443:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:443:26:443:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:444:7:444:9 | rhs | 4.0 | 4.0 | 4.0 | +| test.c:444:7:444:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:444:13:444:14 | 15 | 1.0 | -1.0 | -1.0 | +| test.c:444:13:444:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:444:19:444:21 | rhs | 2.5 | 4.0 | 4.0 | +| test.c:444:19:444:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:444:26:444:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:445:7:445:9 | rhs | 5.0 | 5.0 | 5.0 | +| test.c:445:7:445:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:445:13:445:14 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:445:13:445:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:445:19:445:21 | rhs | 3.0 | 5.0 | 5.0 | +| test.c:445:19:445:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:445:26:445:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:446:10:446:12 | (int)... | 6.0 | 6.0 | 6.0 | +| test.c:446:10:446:12 | rhs | 6.0 | 6.0 | 6.0 | +| test.c:452:7:452:9 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:452:7:452:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:452:13:452:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:452:13:452:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:452:19:452:21 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:452:19:452:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:452:26:452:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:452:38:452:40 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:452:38:452:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:452:45:452:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:453:7:453:9 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:453:7:453:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:453:13:453:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:453:13:453:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:453:19:453:21 | rhs | 1.5 | 2.0 | 2.0 | +| test.c:453:19:453:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:453:26:453:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:453:38:453:40 | rhs | 1.5 | 1.0 | 2.0 | +| test.c:453:38:453:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:453:45:453:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:454:7:454:9 | rhs | 3.0 | 3.0 | 3.0 | +| test.c:454:7:454:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:454:13:454:14 | 12 | 1.0 | -1.0 | -1.0 | +| test.c:454:13:454:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:454:19:454:21 | rhs | 2.0 | 3.0 | 3.0 | +| test.c:454:19:454:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:454:26:454:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:454:38:454:40 | rhs | 2.0 | 1.0 | 3.0 | +| test.c:454:38:454:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:454:45:454:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:455:7:455:9 | rhs | 4.0 | 4.0 | 4.0 | +| test.c:455:7:455:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:455:13:455:14 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:455:13:455:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:455:19:455:21 | rhs | 2.5 | 4.0 | 4.0 | +| test.c:455:19:455:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:455:26:455:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:455:38:455:40 | rhs | 2.5 | 1.0 | 4.0 | +| test.c:455:38:455:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:455:45:455:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:456:7:456:9 | rhs | 5.0 | 5.0 | 5.0 | +| test.c:456:7:456:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:456:13:456:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:456:13:456:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:456:19:456:21 | rhs | 3.0 | 5.0 | 5.0 | +| test.c:456:19:456:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:456:26:456:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:456:38:456:40 | rhs | 3.0 | 1.0 | 5.0 | +| test.c:456:38:456:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:456:45:456:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:457:7:457:9 | rhs | 6.0 | 6.0 | 6.0 | +| test.c:457:7:457:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:457:13:457:14 | 15 | 1.0 | -1.0 | -1.0 | +| test.c:457:13:457:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:457:19:457:21 | rhs | 3.5 | 6.0 | 6.0 | +| test.c:457:19:457:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:457:26:457:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:457:38:457:40 | rhs | 3.5 | 1.0 | 6.0 | +| test.c:457:38:457:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:457:45:457:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:458:7:458:9 | rhs | 7.0 | 7.0 | 7.0 | +| test.c:458:7:458:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:458:13:458:14 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:458:13:458:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:458:19:458:21 | rhs | 4.0 | 7.0 | 7.0 | +| test.c:458:19:458:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:458:26:458:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:458:38:458:40 | rhs | 4.0 | 1.0 | 7.0 | +| test.c:458:38:458:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:458:45:458:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:459:7:459:9 | rhs | 8.0 | 8.0 | 8.0 | +| test.c:459:7:459:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:459:13:459:14 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:459:13:459:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:459:19:459:21 | rhs | 4.5 | 8.0 | 8.0 | +| test.c:459:19:459:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:459:26:459:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:459:38:459:40 | rhs | 4.5 | 1.0 | 8.0 | +| test.c:459:38:459:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:459:45:459:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:460:7:460:9 | rhs | 9.0 | 9.0 | 9.0 | +| test.c:460:7:460:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:460:13:460:14 | 18 | 1.0 | -1.0 | -1.0 | +| test.c:460:13:460:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:460:19:460:21 | rhs | 5.0 | 9.0 | 9.0 | +| test.c:460:19:460:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:460:26:460:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:460:38:460:40 | rhs | 5.0 | 1.0 | 9.0 | +| test.c:460:38:460:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:460:45:460:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:461:7:461:9 | rhs | 10.0 | 10.0 | 10.0 | +| test.c:461:7:461:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:461:13:461:14 | 19 | 1.0 | -1.0 | -1.0 | +| test.c:461:13:461:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:461:19:461:21 | rhs | 5.5 | 10.0 | 10.0 | +| test.c:461:19:461:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:461:26:461:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:461:38:461:40 | rhs | 5.5 | 1.0 | 10.0 | +| test.c:461:38:461:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:461:45:461:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:462:7:462:9 | rhs | 11.0 | 11.0 | 11.0 | +| test.c:462:7:462:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:462:13:462:14 | 20 | 1.0 | -1.0 | -1.0 | +| test.c:462:13:462:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:462:19:462:21 | rhs | 6.0 | 11.0 | 11.0 | +| test.c:462:19:462:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:462:26:462:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:462:38:462:40 | rhs | 6.0 | 1.0 | 11.0 | +| test.c:462:38:462:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:462:45:462:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:463:10:463:12 | (int)... | 12.0 | 12.0 | 12.0 | +| test.c:463:10:463:12 | rhs | 12.0 | 12.0 | 12.0 | +| test.c:467:7:467:7 | a | 1.0 | 1.0 | 1.0 | +| test.c:467:7:467:13 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:467:12:467:13 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:468:9:468:9 | b | 1.0 | 1.0 | 1.0 | +| test.c:468:9:468:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:468:14:468:15 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:469:7:469:7 | a | 1.0 | 1.0 | 1.0 | +| test.c:469:7:469:12 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:469:12:469:12 | b | 1.0 | 1.0 | 1.0 | +| test.c:471:9:471:9 | a | 2.0 | 2.0 | 2.0 | +| test.c:471:9:471:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:471:14:471:15 | 18 | 1.0 | -1.0 | -1.0 | +| test.c:472:7:472:7 | b | 1.0 | -1.0 | -1.0 | +| test.c:472:7:472:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:472:11:472:12 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:477:11:477:11 | a | 3.5 | 4.0 | 4.0 | +| test.c:477:11:477:15 | ... + ... | 14.0 | 12.0 | 12.0 | +| test.c:477:15:477:15 | b | 4.0 | 3.0 | 3.0 | +| test.c:478:10:478:10 | a | 3.5 | 4.0 | 4.0 | +| test.c:478:10:478:14 | ... + ... | 14.0 | 12.0 | 12.0 | +| test.c:478:14:478:14 | b | 4.0 | 3.0 | 3.0 | +| test.c:485:4:487:50 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:485:4:570:26 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 1.4542272872758854E125 | 1.0 | 1.0 | +| test.c:485:5:485:6 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:485:5:485:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:5:485:11 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:5:485:55 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:485:5:487:49 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:485:10:485:11 | ip | 1.0 | 1.0 | 1.0 | +| test.c:485:15:485:26 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:485:15:485:31 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:15:485:55 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:16:485:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:485:16:485:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:16:485:21 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:16:485:25 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:20:485:21 | ip | 1.0 | 1.0 | 1.0 | +| test.c:485:25:485:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:485:25:485:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:30:485:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:485:30:485:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:35:485:50 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:485:35:485:55 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:36 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:485:36:485:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:41 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:45 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:49 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:40:485:41 | ip | 1.0 | 1.0 | 1.0 | +| test.c:485:45:485:45 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:485:45:485:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:49:485:49 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:485:49:485:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:54:485:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:485:54:485:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:486:9:486:10 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:486:9:486:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:486:9:486:15 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:486:14:486:15 | ip | 1.0 | 1.0 | 1.0 | +| test.c:487:9:487:20 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:487:9:487:25 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:9:487:49 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:10:487:10 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:487:10:487:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:10:487:15 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:10:487:19 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:14:487:15 | ip | 1.0 | 1.0 | 1.0 | +| test.c:487:19:487:19 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:487:19:487:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:24:487:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:487:24:487:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:29:487:44 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:487:29:487:49 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:30 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:487:30:487:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:35 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:39 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:43 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:34:487:35 | ip | 1.0 | 1.0 | 1.0 | +| test.c:487:39:487:39 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:487:39:487:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:43:487:43 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:487:43:487:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:48:487:49 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:487:48:487:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:488:5:570:26 | (...) | 3.405969190536326E53 | 1.0 | 1.0 | +| test.c:488:6:488:6 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:488:6:488:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:488:6:488:23 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:488:6:507:42 | ... + ... | 2.5265625E8 | 1.0 | 1.0 | +| test.c:488:6:527:24 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:488:6:570:25 | ... ? ... : ... | 3.405969190536326E53 | 1.0 | 1.0 | +| test.c:488:10:488:23 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:488:11:488:12 | ip | 2.0 | 2.0 | 1.0 | +| test.c:488:11:488:17 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:488:11:488:22 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:488:16:488:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:488:16:488:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:488:21:488:22 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:488:21:488:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:489:7:507:42 | (...) | 1.26328125E8 | 1.0 | 1.0 | +| test.c:489:8:489:8 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:489:8:489:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:489:8:489:25 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:489:8:490:26 | ... + ... | 4.0 | 1.0 | 1.0 | +| test.c:489:8:491:26 | ... + ... | 8.0 | 1.0 | 1.0 | +| test.c:489:8:496:22 | ... + ... | 272.25 | 1.0 | 1.0 | +| test.c:489:8:497:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:489:8:507:41 | ... ? ... : ... | 1.26328125E8 | 1.0 | 1.0 | +| test.c:489:12:489:25 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:489:13:489:14 | ip | 2.0 | 2.0 | 1.0 | +| test.c:489:13:489:19 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:489:13:489:24 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:489:18:489:19 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:489:18:489:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:489:23:489:24 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:489:23:489:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:490:9:490:26 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:490:10:490:10 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:490:10:490:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:490:10:490:15 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:490:10:490:20 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:490:10:490:25 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:490:14:490:15 | ip | 2.0 | 2.0 | 1.0 | +| test.c:490:19:490:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:490:19:490:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:490:24:490:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:490:24:490:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:491:9:491:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:491:9:491:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:491:9:491:26 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:491:13:491:26 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:491:14:491:15 | ip | 2.0 | 2.0 | 1.0 | +| test.c:491:14:491:20 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:491:14:491:25 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:491:19:491:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:491:19:491:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:491:24:491:25 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:491:24:491:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:9:496:22 | (...) | 34.03125 | 1.0 | 1.0 | +| test.c:492:10:492:21 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:492:10:492:26 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:492:10:492:80 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:492:10:496:21 | ... ? ... : ... | 34.03125 | 1.0 | 1.0 | +| test.c:492:11:492:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:492:11:492:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:11:492:16 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:11:492:20 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:492:15:492:16 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:20:492:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:492:20:492:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:25:492:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:492:25:492:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:30:492:80 | (...) | 2.25 | 1.0 | 1.0 | +| test.c:492:31:492:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:31:492:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:31:492:43 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:492:31:492:53 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:492:31:492:79 | ... ? ... : ... | 2.25 | 1.0 | 1.0 | +| test.c:492:36:492:43 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:492:37:492:37 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:492:37:492:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:37:492:42 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:41:492:42 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:47:492:48 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:47:492:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:47:492:53 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:52:492:53 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:57:492:58 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:57:492:58 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:57:492:69 | ... * ... | 1.5 | 1.0 | 1.0 | +| test.c:492:62:492:69 | (...) | 1.5 | 1.0 | 1.0 | +| test.c:492:63:492:63 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:492:63:492:63 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:63:492:68 | ... * ... | 1.5 | 2.0 | 1.0 | +| test.c:492:67:492:68 | ip | 1.5 | 2.0 | 2.0 | +| test.c:492:73:492:74 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:73:492:74 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:73:492:79 | ... * ... | 1.5 | 2.0 | 1.0 | +| test.c:492:78:492:79 | ip | 1.5 | 2.0 | 2.0 | +| test.c:493:13:493:24 | (...) | 4.5 | 1.0 | 1.0 | +| test.c:493:13:493:29 | ... * ... | 4.5 | 1.0 | 1.0 | +| test.c:493:14:493:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:493:14:493:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:493:14:493:19 | ... * ... | 4.5 | 2.0 | 1.0 | +| test.c:493:14:493:23 | ... + ... | 4.5 | 1.0 | 1.0 | +| test.c:493:18:493:19 | ip | 4.5 | 2.0 | 4.0 | +| test.c:493:23:493:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:493:23:493:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:493:28:493:29 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:493:28:493:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:13:494:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:494:13:494:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:13:494:25 | ... * ... | 4.5 | 1.0 | 1.0 | +| test.c:494:13:494:35 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:494:13:496:21 | ... ? ... : ... | 7.5625 | 1.0 | 1.0 | +| test.c:494:18:494:25 | (...) | 4.5 | 1.0 | 1.0 | +| test.c:494:19:494:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:494:19:494:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:19:494:24 | ... * ... | 4.5 | 2.0 | 1.0 | +| test.c:494:23:494:24 | ip | 4.5 | 2.0 | 4.0 | +| test.c:494:29:494:30 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:494:29:494:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:29:494:35 | ... * ... | 4.5 | 2.0 | 1.0 | +| test.c:494:34:494:35 | ip | 4.5 | 2.0 | 4.0 | +| test.c:495:15:495:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:495:15:495:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:495:15:495:27 | ... * ... | 2.75 | 1.0 | 1.0 | +| test.c:495:20:495:27 | (...) | 2.75 | 1.0 | 1.0 | +| test.c:495:21:495:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:495:21:495:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:495:21:495:26 | ... * ... | 2.75 | 2.0 | 1.0 | +| test.c:495:25:495:26 | ip | 2.75 | 2.0 | 2.0 | +| test.c:496:15:496:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:496:15:496:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:496:15:496:21 | ... * ... | 2.75 | 2.0 | 1.0 | +| test.c:496:20:496:21 | ip | 2.75 | 2.0 | 2.0 | +| test.c:497:7:497:7 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:497:7:497:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:7:497:12 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:497:7:497:17 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:497:7:497:37 | ... + ... | 100.0 | 1.0 | 1.0 | +| test.c:497:11:497:12 | ip | 10.0 | 2.0 | 5.0 | +| test.c:497:16:497:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:497:16:497:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:21:497:32 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:497:21:497:37 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:497:22:497:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:497:22:497:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:22:497:27 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:497:22:497:31 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:497:26:497:27 | ip | 10.0 | 2.0 | 5.0 | +| test.c:497:31:497:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:497:31:497:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:36:497:37 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:497:36:497:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:498:11:498:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:498:11:498:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:498:11:498:28 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:498:11:499:28 | ... + ... | 100.0 | 1.0 | 1.0 | +| test.c:498:11:500:28 | ... + ... | 1000.0 | 1.0 | 1.0 | +| test.c:498:11:506:24 | ... + ... | 1263281.25 | 1.0 | 1.0 | +| test.c:498:15:498:28 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:498:16:498:17 | ip | 10.0 | 2.0 | 5.0 | +| test.c:498:16:498:22 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:498:16:498:27 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:498:21:498:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:498:21:498:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:498:26:498:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:498:26:498:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:499:11:499:28 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:499:12:499:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:499:12:499:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:499:12:499:17 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:499:12:499:22 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:499:12:499:27 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:499:16:499:17 | ip | 10.0 | 2.0 | 5.0 | +| test.c:499:21:499:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:499:21:499:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:499:26:499:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:499:26:499:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:500:11:500:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:500:11:500:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:500:11:500:28 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:500:15:500:28 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:500:16:500:17 | ip | 10.0 | 2.0 | 5.0 | +| test.c:500:16:500:22 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:500:16:500:27 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:500:21:500:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:500:21:500:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:500:26:500:27 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:500:26:500:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:501:11:506:24 | (...) | 1263.28125 | 1.0 | 1.0 | +| test.c:501:12:501:23 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:501:12:501:28 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:501:12:502:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:501:12:506:23 | ... ? ... : ... | 1263.28125 | 1.0 | 1.0 | +| test.c:501:13:501:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:501:13:501:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:501:13:501:18 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:501:13:501:22 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:501:17:501:18 | ip | 10.0 | 2.0 | 5.0 | +| test.c:501:22:501:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:501:22:501:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:501:27:501:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:501:27:501:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:11:502:61 | (...) | 30.25 | 1.0 | 1.0 | +| test.c:502:12:502:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:502:12:502:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:12:502:24 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:502:12:502:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:502:12:502:60 | ... ? ... : ... | 30.25 | 1.0 | 1.0 | +| test.c:502:17:502:24 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:502:18:502:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:502:18:502:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:18:502:23 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:502:22:502:23 | ip | 10.0 | 2.0 | 5.0 | +| test.c:502:28:502:29 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:502:28:502:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:28:502:34 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:502:33:502:34 | ip | 10.0 | 2.0 | 5.0 | +| test.c:502:38:502:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:502:38:502:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:38:502:50 | ... * ... | 5.5 | 1.0 | 1.0 | +| test.c:502:43:502:50 | (...) | 5.5 | 1.0 | 1.0 | +| test.c:502:44:502:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:502:44:502:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:44:502:49 | ... * ... | 5.5 | 2.0 | 1.0 | +| test.c:502:48:502:49 | ip | 5.5 | 2.0 | 2.0 | +| test.c:502:54:502:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:502:54:502:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:54:502:60 | ... * ... | 5.5 | 2.0 | 1.0 | +| test.c:502:59:502:60 | ip | 5.5 | 2.0 | 2.0 | +| test.c:503:15:503:26 | (...) | 16.5 | 1.0 | 1.0 | +| test.c:503:15:503:31 | ... * ... | 16.5 | 1.0 | 1.0 | +| test.c:503:16:503:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:503:16:503:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:503:16:503:21 | ... * ... | 16.5 | 2.0 | 1.0 | +| test.c:503:16:503:25 | ... + ... | 16.5 | 1.0 | 1.0 | +| test.c:503:20:503:21 | ip | 16.5 | 2.0 | 4.0 | +| test.c:503:25:503:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:503:25:503:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:503:30:503:31 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:503:30:503:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:15:504:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:504:15:504:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:15:504:27 | ... * ... | 16.5 | 1.0 | 1.0 | +| test.c:504:15:504:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:504:15:506:23 | ... ? ... : ... | 76.5625 | 1.0 | 1.0 | +| test.c:504:20:504:27 | (...) | 16.5 | 1.0 | 1.0 | +| test.c:504:21:504:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:504:21:504:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:21:504:26 | ... * ... | 16.5 | 2.0 | 1.0 | +| test.c:504:25:504:26 | ip | 16.5 | 2.0 | 4.0 | +| test.c:504:31:504:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:504:31:504:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:31:504:37 | ... * ... | 16.5 | 2.0 | 1.0 | +| test.c:504:36:504:37 | ip | 16.5 | 2.0 | 4.0 | +| test.c:505:17:505:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:505:17:505:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:505:17:505:29 | ... * ... | 8.75 | 1.0 | 1.0 | +| test.c:505:22:505:29 | (...) | 8.75 | 1.0 | 1.0 | +| test.c:505:23:505:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:505:23:505:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:505:23:505:28 | ... * ... | 8.75 | 2.0 | 1.0 | +| test.c:505:27:505:28 | ip | 8.75 | 2.0 | 2.0 | +| test.c:506:17:506:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:506:17:506:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:506:17:506:23 | ... * ... | 8.75 | 2.0 | 1.0 | +| test.c:506:22:506:23 | ip | 8.75 | 2.0 | 2.0 | +| test.c:507:11:507:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:507:11:507:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:11:507:16 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:507:11:507:21 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:507:11:507:41 | ... + ... | 100.0 | 1.0 | 1.0 | +| test.c:507:15:507:16 | ip | 10.0 | 2.0 | 5.0 | +| test.c:507:20:507:21 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:507:20:507:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:25:507:36 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:507:25:507:41 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:507:26:507:26 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:507:26:507:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:26:507:31 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:507:26:507:35 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:507:30:507:31 | ip | 10.0 | 2.0 | 5.0 | +| test.c:507:35:507:35 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:507:35:507:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:40:507:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:507:40:507:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:508:5:527:24 | (...) | 2.7409234531663296E16 | 1.0 | 1.0 | +| test.c:508:6:508:6 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:508:6:508:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:508:6:508:23 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:508:6:509:24 | ... + ... | 1936.0 | 1.0 | 1.0 | +| test.c:508:6:510:24 | ... + ... | 85184.0 | 1.0 | 1.0 | +| test.c:508:6:515:20 | ... + ... | 6.74501553E9 | 1.0 | 1.0 | +| test.c:508:6:516:55 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:508:6:527:23 | ... ? ... : ... | 2.7409234531663296E16 | 1.0 | 1.0 | +| test.c:508:10:508:23 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:508:11:508:12 | ip | 44.0 | 2.0 | 5.0 | +| test.c:508:11:508:17 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:508:11:508:22 | ... + ... | 44.0 | 1.0 | 1.0 | +| test.c:508:16:508:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:508:16:508:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:508:21:508:22 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:508:21:508:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:509:7:509:24 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:509:8:509:8 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:509:8:509:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:509:8:509:13 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:509:8:509:18 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:509:8:509:23 | ... + ... | 44.0 | 1.0 | 1.0 | +| test.c:509:12:509:13 | ip | 44.0 | 2.0 | 5.0 | +| test.c:509:17:509:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:509:17:509:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:509:22:509:23 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:509:22:509:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:510:7:510:7 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:510:7:510:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:510:7:510:24 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:510:11:510:24 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:510:12:510:13 | ip | 44.0 | 2.0 | 5.0 | +| test.c:510:12:510:18 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:510:12:510:23 | ... + ... | 44.0 | 1.0 | 1.0 | +| test.c:510:17:510:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:510:17:510:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:510:22:510:23 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:510:22:510:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:7:515:20 | (...) | 79181.71875 | 1.0 | 1.0 | +| test.c:511:8:511:19 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:511:8:511:24 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:511:8:511:78 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:511:8:515:19 | ... ? ... : ... | 79181.71875 | 1.0 | 1.0 | +| test.c:511:9:511:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:511:9:511:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:9:511:14 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:511:9:511:18 | ... + ... | 44.0 | 1.0 | 1.0 | +| test.c:511:13:511:14 | ip | 44.0 | 2.0 | 5.0 | +| test.c:511:18:511:18 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:511:18:511:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:23:511:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:511:23:511:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:28:511:78 | (...) | 506.25 | 1.0 | 1.0 | +| test.c:511:29:511:30 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:29:511:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:29:511:41 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:511:29:511:51 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:511:29:511:77 | ... ? ... : ... | 506.25 | 1.0 | 1.0 | +| test.c:511:34:511:41 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:511:35:511:35 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:511:35:511:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:35:511:40 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:511:39:511:40 | ip | 44.0 | 2.0 | 5.0 | +| test.c:511:45:511:46 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:45:511:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:45:511:51 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:511:50:511:51 | ip | 44.0 | 2.0 | 5.0 | +| test.c:511:55:511:56 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:55:511:56 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:55:511:67 | ... * ... | 22.5 | 1.0 | 1.0 | +| test.c:511:60:511:67 | (...) | 22.5 | 1.0 | 1.0 | +| test.c:511:61:511:61 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:511:61:511:61 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:61:511:66 | ... * ... | 22.5 | 2.0 | 1.0 | +| test.c:511:65:511:66 | ip | 22.5 | 2.0 | 2.0 | +| test.c:511:71:511:72 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:71:511:72 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:71:511:77 | ... * ... | 22.5 | 2.0 | 1.0 | +| test.c:511:76:511:77 | ip | 22.5 | 2.0 | 2.0 | +| test.c:512:11:512:22 | (...) | 67.5 | 1.0 | 1.0 | +| test.c:512:11:512:27 | ... * ... | 67.5 | 1.0 | 1.0 | +| test.c:512:12:512:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:512:12:512:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:512:12:512:17 | ... * ... | 67.5 | 2.0 | 1.0 | +| test.c:512:12:512:21 | ... + ... | 67.5 | 1.0 | 1.0 | +| test.c:512:16:512:17 | ip | 67.5 | 2.0 | 4.0 | +| test.c:512:21:512:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:512:21:512:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:512:26:512:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:512:26:512:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:11:513:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:513:11:513:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:11:513:23 | ... * ... | 67.5 | 1.0 | 1.0 | +| test.c:513:11:513:33 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:513:11:515:19 | ... ? ... : ... | 1173.0625 | 1.0 | 1.0 | +| test.c:513:16:513:23 | (...) | 67.5 | 1.0 | 1.0 | +| test.c:513:17:513:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:513:17:513:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:17:513:22 | ... * ... | 67.5 | 2.0 | 1.0 | +| test.c:513:21:513:22 | ip | 67.5 | 2.0 | 4.0 | +| test.c:513:27:513:28 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:513:27:513:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:27:513:33 | ... * ... | 67.5 | 2.0 | 1.0 | +| test.c:513:32:513:33 | ip | 67.5 | 2.0 | 4.0 | +| test.c:514:13:514:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:514:13:514:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:514:13:514:25 | ... * ... | 34.25 | 1.0 | 1.0 | +| test.c:514:18:514:25 | (...) | 34.25 | 1.0 | 1.0 | +| test.c:514:19:514:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:514:19:514:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:514:19:514:24 | ... * ... | 34.25 | 2.0 | 1.0 | +| test.c:514:23:514:24 | ip | 34.25 | 2.0 | 2.0 | +| test.c:515:13:515:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:515:13:515:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:515:13:515:19 | ... * ... | 34.25 | 2.0 | 1.0 | +| test.c:515:18:515:19 | ip | 34.25 | 2.0 | 2.0 | +| test.c:516:5:516:55 | (...) | 4692.25 | 1.0 | 1.0 | +| test.c:516:6:516:7 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:516:6:516:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:6:516:12 | ... * ... | 136.0 | 2.0 | 1.0 | +| test.c:516:6:516:28 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:516:6:516:54 | ... ? ... : ... | 4692.25 | 1.0 | 1.0 | +| test.c:516:11:516:12 | ip | 136.0 | 2.0 | 5.0 | +| test.c:516:16:516:23 | (...) | 136.0 | 1.0 | 1.0 | +| test.c:516:16:516:28 | ... * ... | 136.0 | 1.0 | 1.0 | +| test.c:516:17:516:18 | ip | 136.0 | 2.0 | 5.0 | +| test.c:516:17:516:22 | ... + ... | 136.0 | 2.0 | 1.0 | +| test.c:516:22:516:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:516:22:516:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:27:516:28 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:516:27:516:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:32:516:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:516:32:516:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:32:516:38 | ... * ... | 68.5 | 2.0 | 1.0 | +| test.c:516:37:516:38 | ip | 68.5 | 2.0 | 2.0 | +| test.c:516:42:516:49 | (...) | 68.5 | 1.0 | 1.0 | +| test.c:516:42:516:54 | ... * ... | 68.5 | 1.0 | 1.0 | +| test.c:516:43:516:44 | ip | 68.5 | 2.0 | 2.0 | +| test.c:516:43:516:48 | ... + ... | 68.5 | 2.0 | 1.0 | +| test.c:516:48:516:48 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:516:48:516:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:53:516:54 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:516:53:516:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:517:9:517:9 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:517:9:517:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:517:9:517:26 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:517:9:518:26 | ... + ... | 18769.0 | 1.0 | 1.0 | +| test.c:517:9:519:26 | ... + ... | 2571353.0 | 1.0 | 1.0 | +| test.c:517:9:524:22 | ... + ... | 5.757033087936E12 | 1.0 | 1.0 | +| test.c:517:13:517:26 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:517:14:517:15 | ip | 137.0 | 2.0 | 3.0 | +| test.c:517:14:517:20 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:517:14:517:25 | ... + ... | 137.0 | 1.0 | 1.0 | +| test.c:517:19:517:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:517:19:517:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:517:24:517:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:517:24:517:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:518:9:518:26 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:518:10:518:10 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:518:10:518:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:518:10:518:15 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:518:10:518:20 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:518:10:518:25 | ... + ... | 137.0 | 1.0 | 1.0 | +| test.c:518:14:518:15 | ip | 137.0 | 2.0 | 3.0 | +| test.c:518:19:518:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:518:19:518:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:518:24:518:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:518:24:518:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:519:9:519:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:519:9:519:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:519:9:519:26 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:519:13:519:26 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:519:14:519:15 | ip | 137.0 | 2.0 | 3.0 | +| test.c:519:14:519:20 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:519:14:519:25 | ... + ... | 137.0 | 1.0 | 1.0 | +| test.c:519:19:519:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:519:19:519:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:519:24:519:25 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:519:24:519:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:9:524:22 | (...) | 2238912.0 | 1.0 | 1.0 | +| test.c:520:10:520:21 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:520:10:520:26 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:520:10:520:80 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:520:10:524:21 | ... ? ... : ... | 2238912.0 | 1.0 | 1.0 | +| test.c:520:11:520:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:520:11:520:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:11:520:16 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:520:11:520:20 | ... + ... | 137.0 | 1.0 | 1.0 | +| test.c:520:15:520:16 | ip | 137.0 | 2.0 | 3.0 | +| test.c:520:20:520:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:520:20:520:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:25:520:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:520:25:520:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:30:520:80 | (...) | 4761.0 | 1.0 | 1.0 | +| test.c:520:31:520:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:31:520:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:31:520:43 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:520:31:520:53 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:520:31:520:79 | ... ? ... : ... | 4761.0 | 1.0 | 1.0 | +| test.c:520:36:520:43 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:520:37:520:37 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:520:37:520:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:37:520:42 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:520:41:520:42 | ip | 137.0 | 2.0 | 3.0 | +| test.c:520:47:520:48 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:47:520:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:47:520:53 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:520:52:520:53 | ip | 137.0 | 2.0 | 3.0 | +| test.c:520:57:520:58 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:57:520:58 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:57:520:69 | ... * ... | 69.0 | 1.0 | 1.0 | +| test.c:520:62:520:69 | (...) | 69.0 | 1.0 | 1.0 | +| test.c:520:63:520:63 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:520:63:520:63 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:63:520:68 | ... * ... | 69.0 | 2.0 | 1.0 | +| test.c:520:67:520:68 | ip | 69.0 | 2.0 | 2.0 | +| test.c:520:73:520:74 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:73:520:74 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:73:520:79 | ... * ... | 69.0 | 2.0 | 1.0 | +| test.c:520:78:520:79 | ip | 69.0 | 2.0 | 2.0 | +| test.c:521:13:521:24 | (...) | 207.0 | 1.0 | 1.0 | +| test.c:521:13:521:29 | ... * ... | 207.0 | 1.0 | 1.0 | +| test.c:521:14:521:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:521:14:521:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:521:14:521:19 | ... * ... | 207.0 | 2.0 | 1.0 | +| test.c:521:14:521:23 | ... + ... | 207.0 | 1.0 | 1.0 | +| test.c:521:18:521:19 | ip | 207.0 | 2.0 | 4.0 | +| test.c:521:23:521:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:521:23:521:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:521:28:521:29 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:521:28:521:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:13:522:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:522:13:522:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:13:522:25 | ... * ... | 207.0 | 1.0 | 1.0 | +| test.c:522:13:522:35 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:522:13:524:21 | ... ? ... : ... | 10816.0 | 1.0 | 1.0 | +| test.c:522:18:522:25 | (...) | 207.0 | 1.0 | 1.0 | +| test.c:522:19:522:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:522:19:522:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:19:522:24 | ... * ... | 207.0 | 2.0 | 1.0 | +| test.c:522:23:522:24 | ip | 207.0 | 2.0 | 4.0 | +| test.c:522:29:522:30 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:522:29:522:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:29:522:35 | ... * ... | 207.0 | 2.0 | 1.0 | +| test.c:522:34:522:35 | ip | 207.0 | 2.0 | 4.0 | +| test.c:523:15:523:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:523:15:523:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:523:15:523:27 | ... * ... | 104.0 | 1.0 | 1.0 | +| test.c:523:20:523:27 | (...) | 104.0 | 1.0 | 1.0 | +| test.c:523:21:523:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:523:21:523:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:523:21:523:26 | ... * ... | 104.0 | 2.0 | 1.0 | +| test.c:523:25:523:26 | ip | 104.0 | 2.0 | 2.0 | +| test.c:524:15:524:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:524:15:524:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:524:15:524:21 | ... * ... | 104.0 | 2.0 | 1.0 | +| test.c:524:20:524:21 | ip | 104.0 | 2.0 | 2.0 | +| test.c:525:9:525:10 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:525:9:525:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:525:9:525:15 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:525:9:525:31 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:525:9:527:23 | ... ? ... : ... | 4761.0 | 1.0 | 1.0 | +| test.c:525:14:525:15 | ip | 137.0 | 2.0 | 3.0 | +| test.c:525:19:525:26 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:525:19:525:31 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:525:20:525:21 | ip | 137.0 | 2.0 | 3.0 | +| test.c:525:20:525:25 | ... + ... | 137.0 | 2.0 | 1.0 | +| test.c:525:25:525:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:525:25:525:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:525:30:525:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:525:30:525:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:526:11:526:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:526:11:526:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:526:11:526:17 | ... * ... | 69.0 | 2.0 | 1.0 | +| test.c:526:16:526:17 | ip | 69.0 | 2.0 | 2.0 | +| test.c:527:11:527:18 | (...) | 69.0 | 1.0 | 1.0 | +| test.c:527:11:527:23 | ... * ... | 69.0 | 1.0 | 1.0 | +| test.c:527:12:527:13 | ip | 69.0 | 2.0 | 2.0 | +| test.c:527:12:527:17 | ... + ... | 69.0 | 2.0 | 1.0 | +| test.c:527:17:527:17 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:527:17:527:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:527:22:527:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:527:22:527:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:528:9:528:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:528:9:528:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:528:9:528:26 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:528:9:548:44 | ... + ... | 2.7365793897006286E28 | 1.0 | 1.0 | +| test.c:528:13:528:26 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:528:14:528:15 | ip | 553.0 | 2.0 | 7.0 | +| test.c:528:14:528:20 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:528:14:528:25 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:528:19:528:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:528:19:528:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:528:24:528:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:528:24:528:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:529:9:548:44 | (...) | 4.948606491321209E25 | 1.0 | 1.0 | +| test.c:529:10:529:10 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:529:10:529:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:529:10:529:27 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:529:10:530:28 | ... + ... | 305809.0 | 1.0 | 1.0 | +| test.c:529:10:531:28 | ... + ... | 1.69112377E8 | 1.0 | 1.0 | +| test.c:529:10:537:24 | ... + ... | 2.431997246822707E16 | 1.0 | 1.0 | +| test.c:529:10:538:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:529:10:548:43 | ... ? ... : ... | 4.948606491321209E25 | 1.0 | 1.0 | +| test.c:529:14:529:27 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:529:15:529:16 | ip | 553.0 | 2.0 | 7.0 | +| test.c:529:15:529:21 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:529:15:529:26 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:529:20:529:21 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:529:20:529:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:529:25:529:26 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:529:25:529:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:530:11:530:28 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:530:12:530:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:530:12:530:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:530:12:530:17 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:530:12:530:22 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:530:12:530:27 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:530:16:530:17 | ip | 553.0 | 2.0 | 7.0 | +| test.c:530:21:530:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:530:21:530:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:530:26:530:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:530:26:530:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:531:11:531:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:531:11:531:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:531:11:531:28 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:531:15:531:28 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:531:16:531:17 | ip | 553.0 | 2.0 | 7.0 | +| test.c:531:16:531:22 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:531:16:531:27 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:531:21:531:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:531:21:531:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:531:26:531:27 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:531:26:531:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:532:11:537:24 | (...) | 1.43809536E8 | 1.0 | 1.0 | +| test.c:532:12:532:23 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:532:12:532:28 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:532:12:533:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:532:12:537:23 | ... ? ... : ... | 1.43809536E8 | 1.0 | 1.0 | +| test.c:532:13:532:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:532:13:532:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:532:13:532:18 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:532:13:532:22 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:532:17:532:18 | ip | 553.0 | 2.0 | 7.0 | +| test.c:532:22:532:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:532:22:532:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:532:27:532:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:532:27:532:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:11:533:61 | (...) | 76729.0 | 1.0 | 1.0 | +| test.c:533:12:533:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:533:12:533:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:12:533:24 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:533:12:533:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:533:12:533:60 | ... ? ... : ... | 76729.0 | 1.0 | 1.0 | +| test.c:533:17:533:24 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:533:18:533:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:533:18:533:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:18:533:23 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:533:22:533:23 | ip | 553.0 | 2.0 | 7.0 | +| test.c:533:28:533:29 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:533:28:533:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:28:533:34 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:533:33:533:34 | ip | 553.0 | 2.0 | 7.0 | +| test.c:533:38:533:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:533:38:533:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:38:533:50 | ... * ... | 277.0 | 1.0 | 1.0 | +| test.c:533:43:533:50 | (...) | 277.0 | 1.0 | 1.0 | +| test.c:533:44:533:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:533:44:533:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:44:533:49 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:533:48:533:49 | ip | 277.0 | 2.0 | 2.0 | +| test.c:533:54:533:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:533:54:533:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:54:533:60 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:533:59:533:60 | ip | 277.0 | 2.0 | 2.0 | +| test.c:534:15:534:26 | (...) | 831.0 | 1.0 | 1.0 | +| test.c:534:15:534:31 | ... * ... | 831.0 | 1.0 | 1.0 | +| test.c:534:16:534:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:534:16:534:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:534:16:534:21 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:534:16:534:25 | ... + ... | 831.0 | 1.0 | 1.0 | +| test.c:534:20:534:21 | ip | 831.0 | 2.0 | 4.0 | +| test.c:534:25:534:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:534:25:534:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:534:30:534:31 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:534:30:534:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:15:535:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:535:15:535:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:15:535:27 | ... * ... | 831.0 | 1.0 | 1.0 | +| test.c:535:15:535:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:535:15:537:23 | ... ? ... : ... | 173056.0 | 1.0 | 1.0 | +| test.c:535:20:535:27 | (...) | 831.0 | 1.0 | 1.0 | +| test.c:535:21:535:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:535:21:535:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:21:535:26 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:535:25:535:26 | ip | 831.0 | 2.0 | 4.0 | +| test.c:535:31:535:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:535:31:535:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:31:535:37 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:535:36:535:37 | ip | 831.0 | 2.0 | 4.0 | +| test.c:536:17:536:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:536:17:536:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:536:17:536:29 | ... * ... | 416.0 | 1.0 | 1.0 | +| test.c:536:22:536:29 | (...) | 416.0 | 1.0 | 1.0 | +| test.c:536:23:536:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:536:23:536:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:536:23:536:28 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:536:27:536:28 | ip | 416.0 | 2.0 | 2.0 | +| test.c:537:17:537:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:537:17:537:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:537:17:537:23 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:537:22:537:23 | ip | 416.0 | 2.0 | 2.0 | +| test.c:538:9:538:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:538:9:538:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:9:538:14 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:538:9:538:19 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:538:9:538:39 | ... + ... | 2765569.0 | 1.0 | 1.0 | +| test.c:538:13:538:14 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:538:18:538:19 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:538:18:538:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:23:538:34 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:538:23:538:39 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:538:24:538:24 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:538:24:538:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:24:538:29 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:538:24:538:33 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:538:28:538:29 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:538:33:538:33 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:538:33:538:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:38:538:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:538:38:538:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:539:13:539:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:539:13:539:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:539:13:539:30 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:539:13:540:30 | ... + ... | 2765569.0 | 1.0 | 1.0 | +| test.c:539:13:541:30 | ... + ... | 4.599141247E9 | 1.0 | 1.0 | +| test.c:539:13:547:26 | ... + ... | 1.7893628730005324E19 | 1.0 | 1.0 | +| test.c:539:17:539:30 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:539:18:539:19 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:539:18:539:24 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:539:18:539:29 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:539:23:539:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:539:23:539:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:539:28:539:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:539:28:539:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:540:13:540:30 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:540:14:540:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:540:14:540:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:540:14:540:19 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:540:14:540:24 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:540:14:540:29 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:540:18:540:19 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:540:23:540:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:540:23:540:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:540:28:540:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:540:28:540:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:541:13:541:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:541:13:541:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:541:13:541:30 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:541:17:541:30 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:541:18:541:19 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:541:18:541:24 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:541:18:541:29 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:541:23:541:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:541:23:541:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:541:28:541:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:541:28:541:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:542:13:547:26 | (...) | 3.890645616E9 | 1.0 | 1.0 | +| test.c:542:14:542:25 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:542:14:542:30 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:542:14:543:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:542:14:547:25 | ... ? ... : ... | 3.890645616E9 | 1.0 | 1.0 | +| test.c:542:15:542:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:542:15:542:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:542:15:542:20 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:542:15:542:24 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:542:19:542:20 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:542:24:542:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:542:24:542:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:542:29:542:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:542:29:542:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:13:543:63 | (...) | 692224.0 | 1.0 | 1.0 | +| test.c:543:14:543:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:543:14:543:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:14:543:26 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:543:14:543:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:543:14:543:62 | ... ? ... : ... | 692224.0 | 1.0 | 1.0 | +| test.c:543:19:543:26 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:543:20:543:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:543:20:543:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:20:543:25 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:543:24:543:25 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:543:30:543:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:543:30:543:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:30:543:36 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:543:35:543:36 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:543:40:543:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:543:40:543:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:40:543:52 | ... * ... | 832.0 | 1.0 | 1.0 | +| test.c:543:45:543:52 | (...) | 832.0 | 1.0 | 1.0 | +| test.c:543:46:543:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:543:46:543:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:46:543:51 | ... * ... | 832.0 | 2.0 | 1.0 | +| test.c:543:50:543:51 | ip | 832.0 | 2.0 | 2.0 | +| test.c:543:56:543:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:543:56:543:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:56:543:62 | ... * ... | 832.0 | 2.0 | 1.0 | +| test.c:543:61:543:62 | ip | 832.0 | 2.0 | 2.0 | +| test.c:544:17:544:28 | (...) | 2496.0 | 1.0 | 1.0 | +| test.c:544:17:544:33 | ... * ... | 2496.0 | 1.0 | 1.0 | +| test.c:544:18:544:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:544:18:544:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:544:18:544:23 | ... * ... | 2496.0 | 2.0 | 1.0 | +| test.c:544:18:544:27 | ... + ... | 2496.0 | 1.0 | 1.0 | +| test.c:544:22:544:23 | ip | 2496.0 | 2.0 | 4.0 | +| test.c:544:27:544:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:544:27:544:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:544:32:544:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:544:32:544:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:17:545:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:545:17:545:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:17:545:29 | ... * ... | 2496.0 | 1.0 | 1.0 | +| test.c:545:17:545:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:545:17:547:25 | ... ? ... : ... | 1558752.25 | 1.0 | 1.0 | +| test.c:545:22:545:29 | (...) | 2496.0 | 1.0 | 1.0 | +| test.c:545:23:545:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:545:23:545:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:23:545:28 | ... * ... | 2496.0 | 2.0 | 1.0 | +| test.c:545:27:545:28 | ip | 2496.0 | 2.0 | 4.0 | +| test.c:545:33:545:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:545:33:545:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:33:545:39 | ... * ... | 2496.0 | 2.0 | 1.0 | +| test.c:545:38:545:39 | ip | 2496.0 | 2.0 | 4.0 | +| test.c:546:19:546:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:546:19:546:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:546:19:546:31 | ... * ... | 1248.5 | 1.0 | 1.0 | +| test.c:546:24:546:31 | (...) | 1248.5 | 1.0 | 1.0 | +| test.c:546:25:546:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:546:25:546:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:546:25:546:30 | ... * ... | 1248.5 | 2.0 | 1.0 | +| test.c:546:29:546:30 | ip | 1248.5 | 2.0 | 2.0 | +| test.c:547:19:547:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:547:19:547:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:547:19:547:25 | ... * ... | 1248.5 | 2.0 | 1.0 | +| test.c:547:24:547:25 | ip | 1248.5 | 2.0 | 2.0 | +| test.c:548:13:548:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:548:13:548:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:13:548:18 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:548:13:548:23 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:548:13:548:43 | ... + ... | 2765569.0 | 1.0 | 1.0 | +| test.c:548:17:548:18 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:548:22:548:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:548:22:548:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:27:548:38 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:548:27:548:43 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:548:28:548:28 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:548:28:548:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:28:548:33 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:548:28:548:37 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:548:32:548:33 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:548:37:548:37 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:548:37:548:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:42:548:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:548:42:548:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:549:9:549:9 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:549:9:549:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:549:9:549:26 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:549:9:550:30 | ... + ... | 305809.0 | 1.0 | 1.0 | +| test.c:549:9:551:30 | ... + ... | 1.69112377E8 | 1.0 | 1.0 | +| test.c:549:9:557:26 | ... + ... | 2.431997246822707E16 | 1.0 | 1.0 | +| test.c:549:9:558:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:549:9:570:25 | ... ? ... : ... | 1.2446082154075297E25 | 1.0 | 1.0 | +| test.c:549:13:549:26 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:549:14:549:15 | ip | 553.0 | 2.0 | 7.0 | +| test.c:549:14:549:20 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:549:14:549:25 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:549:19:549:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:549:19:549:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:549:24:549:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:549:24:549:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:550:13:550:30 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:550:14:550:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:550:14:550:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:550:14:550:19 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:550:14:550:24 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:550:14:550:29 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:550:18:550:19 | ip | 553.0 | 2.0 | 7.0 | +| test.c:550:23:550:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:550:23:550:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:550:28:550:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:550:28:550:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:551:13:551:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:551:13:551:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:551:13:551:30 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:551:17:551:30 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:551:18:551:19 | ip | 553.0 | 2.0 | 7.0 | +| test.c:551:18:551:24 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:551:18:551:29 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:551:23:551:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:551:23:551:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:551:28:551:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:551:28:551:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:552:13:557:26 | (...) | 1.43809536E8 | 1.0 | 1.0 | +| test.c:552:14:552:25 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:552:14:552:30 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:552:14:553:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:552:14:557:25 | ... ? ... : ... | 1.43809536E8 | 1.0 | 1.0 | +| test.c:552:15:552:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:552:15:552:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:552:15:552:20 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:552:15:552:24 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:552:19:552:20 | ip | 553.0 | 2.0 | 7.0 | +| test.c:552:24:552:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:552:24:552:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:552:29:552:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:552:29:552:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:13:553:63 | (...) | 76729.0 | 1.0 | 1.0 | +| test.c:553:14:553:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:553:14:553:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:14:553:26 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:553:14:553:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:553:14:553:62 | ... ? ... : ... | 76729.0 | 1.0 | 1.0 | +| test.c:553:19:553:26 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:553:20:553:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:553:20:553:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:20:553:25 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:553:24:553:25 | ip | 553.0 | 2.0 | 7.0 | +| test.c:553:30:553:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:553:30:553:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:30:553:36 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:553:35:553:36 | ip | 553.0 | 2.0 | 7.0 | +| test.c:553:40:553:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:553:40:553:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:40:553:52 | ... * ... | 277.0 | 1.0 | 1.0 | +| test.c:553:45:553:52 | (...) | 277.0 | 1.0 | 1.0 | +| test.c:553:46:553:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:553:46:553:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:46:553:51 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:553:50:553:51 | ip | 277.0 | 2.0 | 2.0 | +| test.c:553:56:553:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:553:56:553:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:56:553:62 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:553:61:553:62 | ip | 277.0 | 2.0 | 2.0 | +| test.c:554:17:554:28 | (...) | 831.0 | 1.0 | 1.0 | +| test.c:554:17:554:33 | ... * ... | 831.0 | 1.0 | 1.0 | +| test.c:554:18:554:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:554:18:554:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:554:18:554:23 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:554:18:554:27 | ... + ... | 831.0 | 1.0 | 1.0 | +| test.c:554:22:554:23 | ip | 831.0 | 2.0 | 4.0 | +| test.c:554:27:554:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:554:27:554:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:554:32:554:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:554:32:554:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:17:555:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:555:17:555:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:17:555:29 | ... * ... | 831.0 | 1.0 | 1.0 | +| test.c:555:17:555:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:555:17:557:25 | ... ? ... : ... | 173056.0 | 1.0 | 1.0 | +| test.c:555:22:555:29 | (...) | 831.0 | 1.0 | 1.0 | +| test.c:555:23:555:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:555:23:555:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:23:555:28 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:555:27:555:28 | ip | 831.0 | 2.0 | 4.0 | +| test.c:555:33:555:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:555:33:555:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:33:555:39 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:555:38:555:39 | ip | 831.0 | 2.0 | 4.0 | +| test.c:556:19:556:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:556:19:556:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:556:19:556:31 | ... * ... | 416.0 | 1.0 | 1.0 | +| test.c:556:24:556:31 | (...) | 416.0 | 1.0 | 1.0 | +| test.c:556:25:556:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:556:25:556:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:556:25:556:30 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:556:29:556:30 | ip | 416.0 | 2.0 | 2.0 | +| test.c:557:19:557:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:557:19:557:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:557:19:557:25 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:557:24:557:25 | ip | 416.0 | 2.0 | 2.0 | +| test.c:558:11:558:61 | (...) | 692224.0 | 1.0 | 1.0 | +| test.c:558:12:558:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:558:12:558:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:12:558:18 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:558:12:558:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:558:12:558:60 | ... ? ... : ... | 692224.0 | 1.0 | 1.0 | +| test.c:558:17:558:18 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:558:22:558:29 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:558:22:558:34 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:558:23:558:24 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:558:23:558:28 | ... + ... | 1663.0 | 2.0 | 1.0 | +| test.c:558:28:558:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:558:28:558:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:33:558:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:558:33:558:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:38:558:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:558:38:558:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:38:558:44 | ... * ... | 832.0 | 2.0 | 1.0 | +| test.c:558:43:558:44 | ip | 832.0 | 2.0 | 2.0 | +| test.c:558:48:558:55 | (...) | 832.0 | 1.0 | 1.0 | +| test.c:558:48:558:60 | ... * ... | 832.0 | 1.0 | 1.0 | +| test.c:558:49:558:50 | ip | 832.0 | 2.0 | 2.0 | +| test.c:558:49:558:54 | ... + ... | 832.0 | 2.0 | 1.0 | +| test.c:558:54:558:54 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:558:54:558:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:59:558:60 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:558:59:558:60 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:559:11:559:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:559:11:559:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:559:11:559:28 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:559:11:560:28 | ... + ... | 2768896.0 | 1.0 | 1.0 | +| test.c:559:11:561:28 | ... + ... | 4.607442944E9 | 1.0 | 1.0 | +| test.c:559:11:567:24 | ... + ... | 1.7958256857326223E19 | 1.0 | 1.0 | +| test.c:559:15:559:28 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:559:16:559:17 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:559:16:559:22 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:559:16:559:27 | ... + ... | 1664.0 | 1.0 | 1.0 | +| test.c:559:21:559:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:559:21:559:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:559:26:559:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:559:26:559:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:560:11:560:28 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:560:12:560:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:560:12:560:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:560:12:560:17 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:560:12:560:22 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:560:12:560:27 | ... + ... | 1664.0 | 1.0 | 1.0 | +| test.c:560:16:560:17 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:560:21:560:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:560:21:560:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:560:26:560:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:560:26:560:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:561:11:561:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:561:11:561:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:561:11:561:28 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:561:15:561:28 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:561:16:561:17 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:561:16:561:22 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:561:16:561:27 | ... + ... | 1664.0 | 1.0 | 1.0 | +| test.c:561:21:561:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:561:21:561:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:561:26:561:27 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:561:26:561:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:562:11:567:24 | (...) | 3.89766234234375E9 | 1.0 | 1.0 | +| test.c:562:12:562:23 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:562:12:562:28 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:562:12:563:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:562:12:567:23 | ... ? ... : ... | 3.89766234234375E9 | 1.0 | 1.0 | +| test.c:562:13:562:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:562:13:562:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:562:13:562:18 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:562:13:562:22 | ... + ... | 1664.0 | 1.0 | 1.0 | +| test.c:562:17:562:18 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:562:22:562:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:562:22:562:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:562:27:562:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:562:27:562:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:11:563:61 | (...) | 693056.25 | 1.0 | 1.0 | +| test.c:563:12:563:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:563:12:563:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:12:563:24 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:563:12:563:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:563:12:563:60 | ... ? ... : ... | 693056.25 | 1.0 | 1.0 | +| test.c:563:17:563:24 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:563:18:563:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:563:18:563:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:18:563:23 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:563:22:563:23 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:563:28:563:29 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:563:28:563:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:28:563:34 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:563:33:563:34 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:563:38:563:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:563:38:563:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:38:563:50 | ... * ... | 832.5 | 1.0 | 1.0 | +| test.c:563:43:563:50 | (...) | 832.5 | 1.0 | 1.0 | +| test.c:563:44:563:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:563:44:563:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:44:563:49 | ... * ... | 832.5 | 2.0 | 1.0 | +| test.c:563:48:563:49 | ip | 832.5 | 2.0 | 2.0 | +| test.c:563:54:563:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:563:54:563:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:54:563:60 | ... * ... | 832.5 | 2.0 | 1.0 | +| test.c:563:59:563:60 | ip | 832.5 | 2.0 | 2.0 | +| test.c:564:15:564:26 | (...) | 2497.5 | 1.0 | 1.0 | +| test.c:564:15:564:31 | ... * ... | 2497.5 | 1.0 | 1.0 | +| test.c:564:16:564:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:564:16:564:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:564:16:564:21 | ... * ... | 2497.5 | 2.0 | 1.0 | +| test.c:564:16:564:25 | ... + ... | 2497.5 | 1.0 | 1.0 | +| test.c:564:20:564:21 | ip | 2497.5 | 2.0 | 4.0 | +| test.c:564:25:564:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:564:25:564:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:564:30:564:31 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:564:30:564:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:15:565:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:565:15:565:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:15:565:27 | ... * ... | 2497.5 | 1.0 | 1.0 | +| test.c:565:15:565:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:565:15:567:23 | ... ? ... : ... | 1560625.5625 | 1.0 | 1.0 | +| test.c:565:20:565:27 | (...) | 2497.5 | 1.0 | 1.0 | +| test.c:565:21:565:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:565:21:565:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:21:565:26 | ... * ... | 2497.5 | 2.0 | 1.0 | +| test.c:565:25:565:26 | ip | 2497.5 | 2.0 | 4.0 | +| test.c:565:31:565:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:565:31:565:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:31:565:37 | ... * ... | 2497.5 | 2.0 | 1.0 | +| test.c:565:36:565:37 | ip | 2497.5 | 2.0 | 4.0 | +| test.c:566:17:566:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:566:17:566:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:566:17:566:29 | ... * ... | 1249.25 | 1.0 | 1.0 | +| test.c:566:22:566:29 | (...) | 1249.25 | 1.0 | 1.0 | +| test.c:566:23:566:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:566:23:566:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:566:23:566:28 | ... * ... | 1249.25 | 2.0 | 1.0 | +| test.c:566:27:566:28 | ip | 1249.25 | 2.0 | 2.0 | +| test.c:567:17:567:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:567:17:567:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:567:17:567:23 | ... * ... | 1249.25 | 2.0 | 1.0 | +| test.c:567:22:567:23 | ip | 1249.25 | 2.0 | 2.0 | +| test.c:568:11:568:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:568:11:568:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:568:11:568:17 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:568:11:568:33 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:568:11:570:25 | ... ? ... : ... | 693056.25 | 1.0 | 1.0 | +| test.c:568:16:568:17 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:568:21:568:28 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:568:21:568:33 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:568:22:568:23 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:568:22:568:27 | ... + ... | 1664.0 | 2.0 | 1.0 | +| test.c:568:27:568:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:568:27:568:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:568:32:568:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:568:32:568:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:569:13:569:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:569:13:569:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:569:13:569:19 | ... * ... | 832.5 | 2.0 | 1.0 | +| test.c:569:18:569:19 | ip | 832.5 | 2.0 | 2.0 | +| test.c:570:13:570:20 | (...) | 832.5 | 1.0 | 1.0 | +| test.c:570:13:570:25 | ... * ... | 832.5 | 1.0 | 1.0 | +| test.c:570:14:570:15 | ip | 832.5 | 2.0 | 2.0 | +| test.c:570:14:570:19 | ... + ... | 832.5 | 2.0 | 1.0 | +| test.c:570:19:570:19 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:570:19:570:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:570:24:570:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:570:24:570:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:9:571:10 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:571:9:571:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:9:571:15 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:571:9:571:59 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:571:9:573:51 | ... ? ... : ... | 2.95275249179E11 | 1.0 | 1.0 | +| test.c:571:14:571:15 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:571:19:571:30 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:571:19:571:35 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:19:571:59 | ... + ... | 1.77342489E8 | 1.0 | 1.0 | +| test.c:571:20:571:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:571:20:571:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:20:571:25 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:571:20:571:29 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:24:571:25 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:571:29:571:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:571:29:571:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:34:571:35 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:571:34:571:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:39:571:54 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:571:39:571:59 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:40:571:40 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:571:40:571:40 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:40:571:45 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:571:40:571:49 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:40:571:53 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:44:571:45 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:571:49:571:49 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:571:49:571:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:53:571:53 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:571:53:571:53 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:58:571:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:571:58:571:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:572:11:572:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:572:11:572:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:572:11:572:17 | ... * ... | 6659.0 | 1.0 | 1.0 | +| test.c:572:16:572:17 | ip | 6659.0 | 1.0 | 1.0 | +| test.c:573:11:573:22 | (...) | 6659.0 | 1.0 | 1.0 | +| test.c:573:11:573:27 | ... * ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:11:573:51 | ... + ... | 4.4342281E7 | 1.0 | 1.0 | +| test.c:573:12:573:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:573:12:573:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:12:573:17 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:573:12:573:21 | ... + ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:16:573:17 | ip | 6659.0 | 2.0 | 1.0 | +| test.c:573:21:573:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:573:21:573:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:26:573:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:573:26:573:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:31:573:46 | (...) | 6659.0 | 1.0 | 1.0 | +| test.c:573:31:573:51 | ... * ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:32:573:32 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:573:32:573:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:32:573:37 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:573:32:573:41 | ... + ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:32:573:45 | ... + ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:36:573:37 | ip | 6659.0 | 2.0 | 1.0 | +| test.c:573:41:573:41 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:573:41:573:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:45:573:45 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:573:45:573:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:50:573:51 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:573:50:573:51 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:574:9:574:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:574:9:574:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:574:9:574:26 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:574:9:594:48 | ... + ... | 7.298546280791731E40 | 1.0 | 1.0 | +| test.c:574:9:616:30 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:574:9:659:27 | ... ? ... : ... | 4.924988773421752E113 | 1.0 | 1.0 | +| test.c:574:13:574:26 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:574:14:574:15 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:574:14:574:20 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:574:14:574:25 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:574:19:574:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:574:19:574:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:574:24:574:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:574:24:574:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:575:13:594:48 | (...) | 5.480623474349876E36 | 1.0 | 1.0 | +| test.c:575:14:575:14 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:575:14:575:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:575:14:575:31 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:575:14:576:32 | ... + ... | 1.77342489E8 | 1.0 | 1.0 | +| test.c:575:14:577:32 | ... + ... | 2.361669926013E12 | 1.0 | 1.0 | +| test.c:575:14:583:28 | ... + ... | 4.707534322240232E24 | 1.0 | 1.0 | +| test.c:575:14:584:43 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:575:14:594:47 | ... ? ... : ... | 5.480623474349876E36 | 1.0 | 1.0 | +| test.c:575:18:575:31 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:575:19:575:20 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:575:19:575:25 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:575:19:575:30 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:575:24:575:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:575:24:575:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:575:29:575:30 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:575:29:575:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:576:15:576:32 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:576:16:576:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:576:16:576:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:576:16:576:21 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:576:16:576:26 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:576:16:576:31 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:576:20:576:21 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:576:25:576:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:576:25:576:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:576:30:576:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:576:30:576:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:577:15:577:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:577:15:577:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:577:15:577:32 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:577:19:577:32 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:577:20:577:21 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:577:20:577:26 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:577:20:577:31 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:577:25:577:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:577:25:577:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:577:30:577:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:577:30:577:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:578:15:583:28 | (...) | 1.993307477217E12 | 1.0 | 1.0 | +| test.c:578:16:578:27 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:578:16:578:32 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:578:16:579:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:578:16:583:27 | ... ? ... : ... | 1.993307477217E12 | 1.0 | 1.0 | +| test.c:578:17:578:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:578:17:578:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:578:17:578:22 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:578:17:578:26 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:578:21:578:22 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:578:26:578:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:578:26:578:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:578:31:578:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:578:31:578:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:15:579:65 | (...) | 4.4342281E7 | 1.0 | 1.0 | +| test.c:579:16:579:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:579:16:579:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:16:579:28 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:579:16:579:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:579:16:579:64 | ... ? ... : ... | 4.4342281E7 | 1.0 | 1.0 | +| test.c:579:21:579:28 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:579:22:579:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:579:22:579:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:22:579:27 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:579:26:579:27 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:579:32:579:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:579:32:579:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:32:579:38 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:579:37:579:38 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:579:42:579:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:579:42:579:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:42:579:54 | ... * ... | 6659.0 | 1.0 | 1.0 | +| test.c:579:47:579:54 | (...) | 6659.0 | 1.0 | 1.0 | +| test.c:579:48:579:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:579:48:579:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:48:579:53 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:579:52:579:53 | ip | 6659.0 | 2.0 | 2.0 | +| test.c:579:58:579:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:579:58:579:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:58:579:64 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:579:63:579:64 | ip | 6659.0 | 2.0 | 2.0 | +| test.c:580:19:580:30 | (...) | 19977.0 | 1.0 | 1.0 | +| test.c:580:19:580:35 | ... * ... | 19977.0 | 1.0 | 1.0 | +| test.c:580:20:580:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:580:20:580:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:580:20:580:25 | ... * ... | 19977.0 | 2.0 | 1.0 | +| test.c:580:20:580:29 | ... + ... | 19977.0 | 1.0 | 1.0 | +| test.c:580:24:580:25 | ip | 19977.0 | 2.0 | 4.0 | +| test.c:580:29:580:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:580:29:580:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:580:34:580:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:580:34:580:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:19:581:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:581:19:581:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:19:581:31 | ... * ... | 19977.0 | 1.0 | 1.0 | +| test.c:581:19:581:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:581:19:583:27 | ... ? ... : ... | 9.9780121E7 | 1.0 | 1.0 | +| test.c:581:24:581:31 | (...) | 19977.0 | 1.0 | 1.0 | +| test.c:581:25:581:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:581:25:581:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:25:581:30 | ... * ... | 19977.0 | 2.0 | 1.0 | +| test.c:581:29:581:30 | ip | 19977.0 | 2.0 | 4.0 | +| test.c:581:35:581:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:581:35:581:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:35:581:41 | ... * ... | 19977.0 | 2.0 | 1.0 | +| test.c:581:40:581:41 | ip | 19977.0 | 2.0 | 4.0 | +| test.c:582:21:582:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:582:21:582:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:582:21:582:33 | ... * ... | 9989.0 | 1.0 | 1.0 | +| test.c:582:26:582:33 | (...) | 9989.0 | 1.0 | 1.0 | +| test.c:582:27:582:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:582:27:582:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:582:27:582:32 | ... * ... | 9989.0 | 2.0 | 1.0 | +| test.c:582:31:582:32 | ip | 9989.0 | 2.0 | 2.0 | +| test.c:583:21:583:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:583:21:583:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:583:21:583:27 | ... * ... | 9989.0 | 2.0 | 1.0 | +| test.c:583:26:583:27 | ip | 9989.0 | 2.0 | 2.0 | +| test.c:584:13:584:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:584:13:584:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:13:584:18 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:584:13:584:23 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:584:13:584:43 | ... + ... | 1.596402025E9 | 1.0 | 1.0 | +| test.c:584:17:584:18 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:584:22:584:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:584:22:584:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:27:584:38 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:584:27:584:43 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:584:28:584:28 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:584:28:584:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:28:584:33 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:584:28:584:37 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:584:32:584:33 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:584:37:584:37 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:584:37:584:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:42:584:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:584:42:584:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:585:17:585:17 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:585:17:585:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:585:17:585:34 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:585:17:586:34 | ... + ... | 1.596402025E9 | 1.0 | 1.0 | +| test.c:585:17:587:34 | ... + ... | 6.3784242908875E13 | 1.0 | 1.0 | +| test.c:585:17:593:30 | ... + ... | 3.433109823542022E27 | 1.0 | 1.0 | +| test.c:585:21:585:34 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:585:22:585:23 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:585:22:585:28 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:585:22:585:33 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:585:27:585:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:585:27:585:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:585:32:585:33 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:585:32:585:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:586:17:586:34 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:586:18:586:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:586:18:586:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:586:18:586:23 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:586:18:586:28 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:586:18:586:33 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:586:22:586:23 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:586:27:586:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:586:27:586:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:586:32:586:33 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:586:32:586:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:587:17:587:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:587:17:587:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:587:17:587:34 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:587:21:587:34 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:587:22:587:23 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:587:22:587:28 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:587:22:587:33 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:587:27:587:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:587:27:587:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:587:32:587:33 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:587:32:587:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:588:17:593:30 | (...) | 5.38237920052875E13 | 1.0 | 1.0 | +| test.c:588:18:588:29 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:588:18:588:34 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:588:18:589:67 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:588:18:593:29 | ... ? ... : ... | 5.38237920052875E13 | 1.0 | 1.0 | +| test.c:588:19:588:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:588:19:588:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:588:19:588:24 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:588:19:588:28 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:588:23:588:24 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:588:28:588:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:588:28:588:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:588:33:588:34 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:588:33:588:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:17:589:67 | (...) | 3.99120484E8 | 1.0 | 1.0 | +| test.c:589:18:589:19 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:589:18:589:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:18:589:30 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:589:18:589:40 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:589:18:589:66 | ... ? ... : ... | 3.99120484E8 | 1.0 | 1.0 | +| test.c:589:23:589:30 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:589:24:589:24 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:589:24:589:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:24:589:29 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:589:28:589:29 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:589:34:589:35 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:589:34:589:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:34:589:40 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:589:39:589:40 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:589:44:589:45 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:589:44:589:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:44:589:56 | ... * ... | 19978.0 | 1.0 | 1.0 | +| test.c:589:49:589:56 | (...) | 19978.0 | 1.0 | 1.0 | +| test.c:589:50:589:50 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:589:50:589:50 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:50:589:55 | ... * ... | 19978.0 | 2.0 | 1.0 | +| test.c:589:54:589:55 | ip | 19978.0 | 2.0 | 2.0 | +| test.c:589:60:589:61 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:589:60:589:61 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:60:589:66 | ... * ... | 19978.0 | 2.0 | 1.0 | +| test.c:589:65:589:66 | ip | 19978.0 | 2.0 | 2.0 | +| test.c:590:21:590:32 | (...) | 59934.0 | 1.0 | 1.0 | +| test.c:590:21:590:37 | ... * ... | 59934.0 | 1.0 | 1.0 | +| test.c:590:22:590:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:590:22:590:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:590:22:590:27 | ... * ... | 59934.0 | 2.0 | 1.0 | +| test.c:590:22:590:31 | ... + ... | 59934.0 | 1.0 | 1.0 | +| test.c:590:26:590:27 | ip | 59934.0 | 2.0 | 4.0 | +| test.c:590:31:590:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:590:31:590:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:590:36:590:37 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:590:36:590:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:21:591:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:591:21:591:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:21:591:33 | ... * ... | 59934.0 | 1.0 | 1.0 | +| test.c:591:21:591:43 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:591:21:593:29 | ... ? ... : ... | 8.9805105625E8 | 1.0 | 1.0 | +| test.c:591:26:591:33 | (...) | 59934.0 | 1.0 | 1.0 | +| test.c:591:27:591:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:591:27:591:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:27:591:32 | ... * ... | 59934.0 | 2.0 | 1.0 | +| test.c:591:31:591:32 | ip | 59934.0 | 2.0 | 4.0 | +| test.c:591:37:591:38 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:591:37:591:38 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:37:591:43 | ... * ... | 59934.0 | 2.0 | 1.0 | +| test.c:591:42:591:43 | ip | 59934.0 | 2.0 | 4.0 | +| test.c:592:23:592:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:592:23:592:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:592:23:592:35 | ... * ... | 29967.5 | 1.0 | 1.0 | +| test.c:592:28:592:35 | (...) | 29967.5 | 1.0 | 1.0 | +| test.c:592:29:592:29 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:592:29:592:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:592:29:592:34 | ... * ... | 29967.5 | 2.0 | 1.0 | +| test.c:592:33:592:34 | ip | 29967.5 | 2.0 | 2.0 | +| test.c:593:23:593:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:593:23:593:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:593:23:593:29 | ... * ... | 29967.5 | 2.0 | 1.0 | +| test.c:593:28:593:29 | ip | 29967.5 | 2.0 | 2.0 | +| test.c:594:17:594:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:594:17:594:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:17:594:22 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:594:17:594:27 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:594:17:594:47 | ... + ... | 1.596402025E9 | 1.0 | 1.0 | +| test.c:594:21:594:22 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:594:26:594:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:594:26:594:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:31:594:42 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:594:31:594:47 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:594:32:594:32 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:594:32:594:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:32:594:37 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:594:32:594:41 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:594:36:594:37 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:594:41:594:41 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:594:41:594:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:46:594:47 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:594:46:594:47 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:595:11:616:30 | (...) | 5.8925295069020155E44 | 1.0 | 1.0 | +| test.c:595:12:595:12 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:595:12:595:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:595:12:595:29 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:595:12:596:30 | ... + ... | 2.5543710976E10 | 1.0 | 1.0 | +| test.c:595:12:597:30 | ... + ... | 4.082498063028224E15 | 1.0 | 1.0 | +| test.c:595:12:603:26 | ... + ... | 1.406298571419582E31 | 1.0 | 1.0 | +| test.c:595:12:604:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:595:12:616:29 | ... ? ... : ... | 5.8925295069020155E44 | 1.0 | 1.0 | +| test.c:595:16:595:29 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:595:17:595:18 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:595:17:595:23 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:595:17:595:28 | ... + ... | 159824.0 | 1.0 | 1.0 | +| test.c:595:22:595:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:595:22:595:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:595:27:595:28 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:595:27:595:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:596:13:596:30 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:596:14:596:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:596:14:596:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:596:14:596:19 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:596:14:596:24 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:596:14:596:29 | ... + ... | 159824.0 | 1.0 | 1.0 | +| test.c:596:18:596:19 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:596:23:596:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:596:23:596:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:596:28:596:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:596:28:596:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:597:13:597:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:597:13:597:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:597:13:597:30 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:597:17:597:30 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:597:18:597:19 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:597:18:597:24 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:597:18:597:29 | ... + ... | 159824.0 | 1.0 | 1.0 | +| test.c:597:23:597:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:597:23:597:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:597:28:597:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:597:28:597:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:598:13:603:26 | (...) | 3.444701135697415E15 | 1.0 | 1.0 | +| test.c:598:14:598:25 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:598:14:598:30 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:598:14:599:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:598:14:603:25 | ... ? ... : ... | 3.444701135697415E15 | 1.0 | 1.0 | +| test.c:598:15:598:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:598:15:598:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:598:15:598:20 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:598:15:598:24 | ... + ... | 159824.0 | 1.0 | 1.0 | +| test.c:598:19:598:20 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:598:24:598:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:598:24:598:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:598:29:598:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:598:29:598:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:13:599:63 | (...) | 6.38600765625E9 | 1.0 | 1.0 | +| test.c:599:14:599:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:599:14:599:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:14:599:26 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:599:14:599:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:599:14:599:62 | ... ? ... : ... | 6.38600765625E9 | 1.0 | 1.0 | +| test.c:599:19:599:26 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:599:20:599:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:599:20:599:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:20:599:25 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:599:24:599:25 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:599:30:599:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:599:30:599:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:30:599:36 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:599:35:599:36 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:599:40:599:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:599:40:599:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:40:599:52 | ... * ... | 79912.5 | 1.0 | 1.0 | +| test.c:599:45:599:52 | (...) | 79912.5 | 1.0 | 1.0 | +| test.c:599:46:599:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:599:46:599:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:46:599:51 | ... * ... | 79912.5 | 2.0 | 1.0 | +| test.c:599:50:599:51 | ip | 79912.5 | 2.0 | 2.0 | +| test.c:599:56:599:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:599:56:599:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:56:599:62 | ... * ... | 79912.5 | 2.0 | 1.0 | +| test.c:599:61:599:62 | ip | 79912.5 | 2.0 | 2.0 | +| test.c:600:17:600:28 | (...) | 239737.5 | 1.0 | 1.0 | +| test.c:600:17:600:33 | ... * ... | 239737.5 | 1.0 | 1.0 | +| test.c:600:18:600:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:600:18:600:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:600:18:600:23 | ... * ... | 239737.5 | 2.0 | 1.0 | +| test.c:600:18:600:27 | ... + ... | 239737.5 | 1.0 | 1.0 | +| test.c:600:22:600:23 | ip | 239737.5 | 2.0 | 4.0 | +| test.c:600:27:600:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:600:27:600:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:600:32:600:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:600:32:600:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:17:601:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:601:17:601:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:17:601:29 | ... * ... | 239737.5 | 1.0 | 1.0 | +| test.c:601:17:601:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:601:17:603:25 | ... ? ... : ... | 1.43686370955625E10 | 1.0 | 1.0 | +| test.c:601:22:601:29 | (...) | 239737.5 | 1.0 | 1.0 | +| test.c:601:23:601:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:601:23:601:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:23:601:28 | ... * ... | 239737.5 | 2.0 | 1.0 | +| test.c:601:27:601:28 | ip | 239737.5 | 2.0 | 4.0 | +| test.c:601:33:601:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:601:33:601:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:33:601:39 | ... * ... | 239737.5 | 2.0 | 1.0 | +| test.c:601:38:601:39 | ip | 239737.5 | 2.0 | 4.0 | +| test.c:602:19:602:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:602:19:602:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:602:19:602:31 | ... * ... | 119869.25 | 1.0 | 1.0 | +| test.c:602:24:602:31 | (...) | 119869.25 | 1.0 | 1.0 | +| test.c:602:25:602:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:602:25:602:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:602:25:602:30 | ... * ... | 119869.25 | 2.0 | 1.0 | +| test.c:602:29:602:30 | ip | 119869.25 | 2.0 | 2.0 | +| test.c:603:19:603:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:603:19:603:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:603:19:603:25 | ... * ... | 119869.25 | 2.0 | 1.0 | +| test.c:603:24:603:25 | ip | 119869.25 | 2.0 | 2.0 | +| test.c:604:11:604:61 | (...) | 5.747454838225E10 | 1.0 | 1.0 | +| test.c:604:12:604:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:604:12:604:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:12:604:18 | ... * ... | 479476.0 | 2.0 | 1.0 | +| test.c:604:12:604:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:604:12:604:60 | ... ? ... : ... | 5.747454838225E10 | 1.0 | 1.0 | +| test.c:604:17:604:18 | ip | 479476.0 | 2.0 | 4.0 | +| test.c:604:22:604:29 | (...) | 479476.0 | 1.0 | 1.0 | +| test.c:604:22:604:34 | ... * ... | 479476.0 | 1.0 | 1.0 | +| test.c:604:23:604:24 | ip | 479476.0 | 2.0 | 4.0 | +| test.c:604:23:604:28 | ... + ... | 479476.0 | 2.0 | 1.0 | +| test.c:604:28:604:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:604:28:604:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:33:604:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:604:33:604:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:38:604:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:604:38:604:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:38:604:44 | ... * ... | 239738.5 | 2.0 | 1.0 | +| test.c:604:43:604:44 | ip | 239738.5 | 2.0 | 2.0 | +| test.c:604:48:604:55 | (...) | 239738.5 | 1.0 | 1.0 | +| test.c:604:48:604:60 | ... * ... | 239738.5 | 1.0 | 1.0 | +| test.c:604:49:604:50 | ip | 239738.5 | 2.0 | 2.0 | +| test.c:604:49:604:54 | ... + ... | 239738.5 | 2.0 | 1.0 | +| test.c:604:54:604:54 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:604:54:604:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:59:604:60 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:604:59:604:60 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:605:15:605:15 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:605:15:605:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:605:15:605:32 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:605:15:606:32 | ... + ... | 2.29898193529E11 | 1.0 | 1.0 | +| test.c:605:15:607:32 | ... + ... | 1.1023089613870434E17 | 1.0 | 1.0 | +| test.c:605:15:613:28 | ... + ... | 1.0252372735148921E34 | 1.0 | 1.0 | +| test.c:605:19:605:32 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:605:20:605:21 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:605:20:605:26 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:605:20:605:31 | ... + ... | 479477.0 | 1.0 | 1.0 | +| test.c:605:25:605:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:605:25:605:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:605:30:605:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:605:30:605:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:606:15:606:32 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:606:16:606:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:606:16:606:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:606:16:606:21 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:606:16:606:26 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:606:16:606:31 | ... + ... | 479477.0 | 1.0 | 1.0 | +| test.c:606:20:606:21 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:606:25:606:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:606:25:606:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:606:30:606:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:606:30:606:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:607:15:607:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:607:15:607:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:607:15:607:32 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:607:19:607:32 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:607:20:607:21 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:607:20:607:26 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:607:20:607:31 | ... + ... | 479477.0 | 1.0 | 1.0 | +| test.c:607:25:607:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:607:25:607:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:607:30:607:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:607:30:607:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:608:15:613:28 | (...) | 9.300815918477418E16 | 1.0 | 1.0 | +| test.c:608:16:608:27 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:608:16:608:32 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:608:16:609:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:608:16:613:27 | ... ? ... : ... | 9.300815918477418E16 | 1.0 | 1.0 | +| test.c:608:17:608:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:608:17:608:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:608:17:608:22 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:608:17:608:26 | ... + ... | 479477.0 | 1.0 | 1.0 | +| test.c:608:21:608:22 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:608:26:608:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:608:26:608:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:608:31:608:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:608:31:608:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:15:609:65 | (...) | 5.7474788121E10 | 1.0 | 1.0 | +| test.c:609:16:609:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:609:16:609:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:16:609:28 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:609:16:609:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:609:16:609:64 | ... ? ... : ... | 5.7474788121E10 | 1.0 | 1.0 | +| test.c:609:21:609:28 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:609:22:609:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:609:22:609:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:22:609:27 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:609:26:609:27 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:609:32:609:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:609:32:609:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:32:609:38 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:609:37:609:38 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:609:42:609:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:609:42:609:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:42:609:54 | ... * ... | 239739.0 | 1.0 | 1.0 | +| test.c:609:47:609:54 | (...) | 239739.0 | 1.0 | 1.0 | +| test.c:609:48:609:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:609:48:609:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:48:609:53 | ... * ... | 239739.0 | 2.0 | 1.0 | +| test.c:609:52:609:53 | ip | 239739.0 | 2.0 | 2.0 | +| test.c:609:58:609:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:609:58:609:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:58:609:64 | ... * ... | 239739.0 | 2.0 | 1.0 | +| test.c:609:63:609:64 | ip | 239739.0 | 2.0 | 2.0 | +| test.c:610:19:610:30 | (...) | 719217.0 | 1.0 | 1.0 | +| test.c:610:19:610:35 | ... * ... | 719217.0 | 1.0 | 1.0 | +| test.c:610:20:610:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:610:20:610:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:610:20:610:25 | ... * ... | 719217.0 | 2.0 | 1.0 | +| test.c:610:20:610:29 | ... + ... | 719217.0 | 1.0 | 1.0 | +| test.c:610:24:610:25 | ip | 719217.0 | 2.0 | 4.0 | +| test.c:610:29:610:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:610:29:610:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:610:34:610:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:610:34:610:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:19:611:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:611:19:611:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:19:611:31 | ... * ... | 719217.0 | 1.0 | 1.0 | +| test.c:611:19:611:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:611:19:613:27 | ... ? ... : ... | 1.29318632881E11 | 1.0 | 1.0 | +| test.c:611:24:611:31 | (...) | 719217.0 | 1.0 | 1.0 | +| test.c:611:25:611:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:611:25:611:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:25:611:30 | ... * ... | 719217.0 | 2.0 | 1.0 | +| test.c:611:29:611:30 | ip | 719217.0 | 2.0 | 4.0 | +| test.c:611:35:611:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:611:35:611:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:35:611:41 | ... * ... | 719217.0 | 2.0 | 1.0 | +| test.c:611:40:611:41 | ip | 719217.0 | 2.0 | 4.0 | +| test.c:612:21:612:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:612:21:612:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:612:21:612:33 | ... * ... | 359609.0 | 1.0 | 1.0 | +| test.c:612:26:612:33 | (...) | 359609.0 | 1.0 | 1.0 | +| test.c:612:27:612:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:612:27:612:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:612:27:612:32 | ... * ... | 359609.0 | 2.0 | 1.0 | +| test.c:612:31:612:32 | ip | 359609.0 | 2.0 | 2.0 | +| test.c:613:21:613:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:613:21:613:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:613:21:613:27 | ... * ... | 359609.0 | 2.0 | 1.0 | +| test.c:613:26:613:27 | ip | 359609.0 | 2.0 | 2.0 | +| test.c:614:15:614:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:614:15:614:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:614:15:614:21 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:614:15:614:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:614:15:616:29 | ... ? ... : ... | 5.7474788121E10 | 1.0 | 1.0 | +| test.c:614:20:614:21 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:614:25:614:32 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:614:25:614:37 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:614:26:614:27 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:614:26:614:31 | ... + ... | 479477.0 | 2.0 | 1.0 | +| test.c:614:31:614:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:614:31:614:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:614:36:614:37 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:614:36:614:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:615:17:615:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:615:17:615:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:615:17:615:23 | ... * ... | 239739.0 | 2.0 | 1.0 | +| test.c:615:22:615:23 | ip | 239739.0 | 2.0 | 2.0 | +| test.c:616:17:616:24 | (...) | 239739.0 | 1.0 | 1.0 | +| test.c:616:17:616:29 | ... * ... | 239739.0 | 1.0 | 1.0 | +| test.c:616:18:616:19 | ip | 239739.0 | 2.0 | 2.0 | +| test.c:616:18:616:23 | ... + ... | 239739.0 | 2.0 | 1.0 | +| test.c:616:23:616:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:616:23:616:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:616:28:616:29 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:616:28:616:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:617:11:617:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:617:11:617:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:617:11:617:28 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:617:11:637:46 | ... + ... | 1.9437781331005143E60 | 1.0 | 1.0 | +| test.c:617:15:617:28 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:617:16:617:17 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:617:16:617:22 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:617:16:617:27 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:617:21:617:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:617:21:617:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:617:26:617:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:617:26:617:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:618:11:637:46 | (...) | 1.0134860825806563E54 | 1.0 | 1.0 | +| test.c:618:12:618:12 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:618:12:618:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:618:12:618:29 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:618:12:619:30 | ... + ... | 3.678390275569E12 | 1.0 | 1.0 | +| test.c:618:12:620:30 | ... + ... | 7.054832528587367E18 | 1.0 | 1.0 | +| test.c:618:12:626:26 | ... + ... | 4.1994090949232005E37 | 1.0 | 1.0 | +| test.c:618:12:627:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:618:12:637:45 | ... ? ... : ... | 1.0134860825806563E54 | 1.0 | 1.0 | +| test.c:618:16:618:29 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:618:17:618:18 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:618:17:618:23 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:618:17:618:28 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:618:22:618:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:618:22:618:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:618:27:618:28 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:618:27:618:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:619:13:619:30 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:619:14:619:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:619:14:619:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:619:14:619:19 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:619:14:619:24 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:619:14:619:29 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:619:18:619:19 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:619:23:619:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:619:23:619:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:619:28:619:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:619:28:619:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:620:13:620:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:620:13:620:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:620:13:620:30 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:620:17:620:30 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:620:18:620:19 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:620:18:620:24 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:620:18:620:29 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:620:23:620:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:620:23:620:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:620:28:620:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:620:28:620:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:621:13:626:26 | (...) | 5.952528395119925E18 | 1.0 | 1.0 | +| test.c:621:14:621:25 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:621:14:621:30 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:621:14:622:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:621:14:626:25 | ... ? ... : ... | 5.952528395119925E18 | 1.0 | 1.0 | +| test.c:621:15:621:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:621:15:621:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:621:15:621:20 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:621:15:621:24 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:621:19:621:20 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:621:24:621:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:621:24:621:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:621:29:621:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:621:29:621:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:13:622:63 | (...) | 9.19598527849E11 | 1.0 | 1.0 | +| test.c:622:14:622:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:622:14:622:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:14:622:26 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:622:14:622:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:622:14:622:62 | ... ? ... : ... | 9.19598527849E11 | 1.0 | 1.0 | +| test.c:622:19:622:26 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:622:20:622:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:622:20:622:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:20:622:25 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:622:24:622:25 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:622:30:622:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:622:30:622:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:30:622:36 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:622:35:622:36 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:622:40:622:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:622:40:622:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:40:622:52 | ... * ... | 958957.0 | 1.0 | 1.0 | +| test.c:622:45:622:52 | (...) | 958957.0 | 1.0 | 1.0 | +| test.c:622:46:622:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:622:46:622:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:46:622:51 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:622:50:622:51 | ip | 958957.0 | 2.0 | 2.0 | +| test.c:622:56:622:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:622:56:622:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:56:622:62 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:622:61:622:62 | ip | 958957.0 | 2.0 | 2.0 | +| test.c:623:17:623:28 | (...) | 2876871.0 | 1.0 | 1.0 | +| test.c:623:17:623:33 | ... * ... | 2876871.0 | 1.0 | 1.0 | +| test.c:623:18:623:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:623:18:623:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:623:18:623:23 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:623:18:623:27 | ... + ... | 2876871.0 | 1.0 | 1.0 | +| test.c:623:22:623:23 | ip | 2876871.0 | 2.0 | 4.0 | +| test.c:623:27:623:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:623:27:623:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:623:32:623:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:623:32:623:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:17:624:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:624:17:624:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:17:624:29 | ... * ... | 2876871.0 | 1.0 | 1.0 | +| test.c:624:17:624:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:624:17:626:25 | ... ? ... : ... | 2.069098126096E12 | 1.0 | 1.0 | +| test.c:624:22:624:29 | (...) | 2876871.0 | 1.0 | 1.0 | +| test.c:624:23:624:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:624:23:624:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:23:624:28 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:624:27:624:28 | ip | 2876871.0 | 2.0 | 4.0 | +| test.c:624:33:624:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:624:33:624:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:33:624:39 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:624:38:624:39 | ip | 2876871.0 | 2.0 | 4.0 | +| test.c:625:19:625:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:625:19:625:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:625:19:625:31 | ... * ... | 1438436.0 | 1.0 | 1.0 | +| test.c:625:24:625:31 | (...) | 1438436.0 | 1.0 | 1.0 | +| test.c:625:25:625:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:625:25:625:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:625:25:625:30 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:625:29:625:30 | ip | 1438436.0 | 2.0 | 2.0 | +| test.c:626:19:626:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:626:19:626:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:626:19:626:25 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:626:24:626:25 | ip | 1438436.0 | 2.0 | 2.0 | +| test.c:627:11:627:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:627:11:627:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:11:627:16 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:627:11:627:21 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:627:11:627:41 | ... + ... | 3.3105558510049E13 | 1.0 | 1.0 | +| test.c:627:15:627:16 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:627:20:627:21 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:627:20:627:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:25:627:36 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:627:25:627:41 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:627:26:627:26 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:627:26:627:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:26:627:31 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:627:26:627:35 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:627:30:627:31 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:627:35:627:35 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:627:35:627:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:40:627:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:627:40:627:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:628:15:628:15 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:628:15:628:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:628:15:628:32 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:628:15:629:32 | ... + ... | 3.3105558510049E13 | 1.0 | 1.0 | +| test.c:628:15:630:32 | ... + ... | 1.9048087553828487E20 | 1.0 | 1.0 | +| test.c:628:15:636:28 | ... + ... | 3.0613773885524947E40 | 1.0 | 1.0 | +| test.c:628:19:628:32 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:628:20:628:21 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:628:20:628:26 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:628:20:628:31 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:628:25:628:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:628:25:628:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:628:30:628:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:628:30:628:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:629:15:629:32 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:629:16:629:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:629:16:629:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:629:16:629:21 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:629:16:629:26 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:629:16:629:31 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:629:20:629:21 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:629:25:629:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:629:25:629:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:629:30:629:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:629:30:629:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:630:15:630:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:630:15:630:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:630:15:630:32 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:630:19:630:32 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:630:20:630:21 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:630:20:630:26 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:630:20:630:31 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:630:25:630:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:630:25:630:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:630:30:630:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:630:30:630:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:631:15:636:28 | (...) | 1.607183597776558E20 | 1.0 | 1.0 | +| test.c:631:16:631:27 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:631:16:631:32 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:631:16:632:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:631:16:636:27 | ... ? ... : ... | 1.607183597776558E20 | 1.0 | 1.0 | +| test.c:631:17:631:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:631:17:631:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:631:17:631:22 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:631:17:631:26 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:631:21:631:22 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:631:26:631:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:631:26:631:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:631:31:631:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:631:31:631:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:15:632:65 | (...) | 8.276392504384E12 | 1.0 | 1.0 | +| test.c:632:16:632:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:632:16:632:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:16:632:28 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:632:16:632:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:632:16:632:64 | ... ? ... : ... | 8.276392504384E12 | 1.0 | 1.0 | +| test.c:632:21:632:28 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:632:22:632:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:632:22:632:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:22:632:27 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:632:26:632:27 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:632:32:632:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:632:32:632:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:32:632:38 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:632:37:632:38 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:632:42:632:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:632:42:632:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:42:632:54 | ... * ... | 2876872.0 | 1.0 | 1.0 | +| test.c:632:47:632:54 | (...) | 2876872.0 | 1.0 | 1.0 | +| test.c:632:48:632:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:632:48:632:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:48:632:53 | ... * ... | 2876872.0 | 2.0 | 1.0 | +| test.c:632:52:632:53 | ip | 2876872.0 | 2.0 | 2.0 | +| test.c:632:58:632:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:632:58:632:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:58:632:64 | ... * ... | 2876872.0 | 2.0 | 1.0 | +| test.c:632:63:632:64 | ip | 2876872.0 | 2.0 | 2.0 | +| test.c:633:19:633:30 | (...) | 8630616.0 | 1.0 | 1.0 | +| test.c:633:19:633:35 | ... * ... | 8630616.0 | 1.0 | 1.0 | +| test.c:633:20:633:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:633:20:633:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:633:20:633:25 | ... * ... | 8630616.0 | 2.0 | 1.0 | +| test.c:633:20:633:29 | ... + ... | 8630616.0 | 1.0 | 1.0 | +| test.c:633:24:633:25 | ip | 8630616.0 | 2.0 | 4.0 | +| test.c:633:29:633:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:633:29:633:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:633:34:633:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:633:34:633:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:19:634:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:634:19:634:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:19:634:31 | ... * ... | 8630616.0 | 1.0 | 1.0 | +| test.c:634:19:634:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:634:19:636:27 | ... ? ... : ... | 1.862188745017225E13 | 1.0 | 1.0 | +| test.c:634:24:634:31 | (...) | 8630616.0 | 1.0 | 1.0 | +| test.c:634:25:634:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:634:25:634:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:25:634:30 | ... * ... | 8630616.0 | 2.0 | 1.0 | +| test.c:634:29:634:30 | ip | 8630616.0 | 2.0 | 4.0 | +| test.c:634:35:634:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:634:35:634:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:35:634:41 | ... * ... | 8630616.0 | 2.0 | 1.0 | +| test.c:634:40:634:41 | ip | 8630616.0 | 2.0 | 4.0 | +| test.c:635:21:635:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:635:21:635:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:635:21:635:33 | ... * ... | 4315308.5 | 1.0 | 1.0 | +| test.c:635:26:635:33 | (...) | 4315308.5 | 1.0 | 1.0 | +| test.c:635:27:635:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:635:27:635:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:635:27:635:32 | ... * ... | 4315308.5 | 2.0 | 1.0 | +| test.c:635:31:635:32 | ip | 4315308.5 | 2.0 | 2.0 | +| test.c:636:21:636:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:636:21:636:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:636:21:636:27 | ... * ... | 4315308.5 | 2.0 | 1.0 | +| test.c:636:26:636:27 | ip | 4315308.5 | 2.0 | 2.0 | +| test.c:637:15:637:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:637:15:637:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:15:637:20 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:637:15:637:25 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:637:15:637:45 | ... + ... | 3.3105558510049E13 | 1.0 | 1.0 | +| test.c:637:19:637:20 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:637:24:637:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:637:24:637:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:29:637:40 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:637:29:637:45 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:637:30:637:30 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:637:30:637:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:30:637:35 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:637:30:637:39 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:637:34:637:35 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:637:39:637:39 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:637:39:637:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:44:637:45 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:637:44:637:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:638:11:638:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:638:11:638:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:638:11:638:28 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:638:11:639:32 | ... + ... | 3.678390275569E12 | 1.0 | 1.0 | +| test.c:638:11:640:32 | ... + ... | 7.054832528587367E18 | 1.0 | 1.0 | +| test.c:638:11:646:28 | ... + ... | 4.1994090949232005E37 | 1.0 | 1.0 | +| test.c:638:11:647:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:638:11:659:27 | ... ? ... : ... | 2.5337196100492797E53 | 1.0 | 1.0 | +| test.c:638:15:638:28 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:638:16:638:17 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:638:16:638:22 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:638:16:638:27 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:638:21:638:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:638:21:638:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:638:26:638:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:638:26:638:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:639:15:639:32 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:639:16:639:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:639:16:639:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:639:16:639:21 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:639:16:639:26 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:639:16:639:31 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:639:20:639:21 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:639:25:639:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:639:25:639:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:639:30:639:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:639:30:639:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:640:15:640:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:640:15:640:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:640:15:640:32 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:640:19:640:32 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:640:20:640:21 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:640:20:640:26 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:640:20:640:31 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:640:25:640:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:640:25:640:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:640:30:640:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:640:30:640:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:641:15:646:28 | (...) | 5.952528395119925E18 | 1.0 | 1.0 | +| test.c:641:16:641:27 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:641:16:641:32 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:641:16:642:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:641:16:646:27 | ... ? ... : ... | 5.952528395119925E18 | 1.0 | 1.0 | +| test.c:641:17:641:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:641:17:641:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:641:17:641:22 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:641:17:641:26 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:641:21:641:22 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:641:26:641:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:641:26:641:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:641:31:641:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:641:31:641:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:15:642:65 | (...) | 9.19598527849E11 | 1.0 | 1.0 | +| test.c:642:16:642:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:642:16:642:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:16:642:28 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:642:16:642:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:642:16:642:64 | ... ? ... : ... | 9.19598527849E11 | 1.0 | 1.0 | +| test.c:642:21:642:28 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:642:22:642:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:642:22:642:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:22:642:27 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:642:26:642:27 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:642:32:642:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:642:32:642:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:32:642:38 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:642:37:642:38 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:642:42:642:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:642:42:642:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:42:642:54 | ... * ... | 958957.0 | 1.0 | 1.0 | +| test.c:642:47:642:54 | (...) | 958957.0 | 1.0 | 1.0 | +| test.c:642:48:642:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:642:48:642:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:48:642:53 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:642:52:642:53 | ip | 958957.0 | 2.0 | 2.0 | +| test.c:642:58:642:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:642:58:642:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:58:642:64 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:642:63:642:64 | ip | 958957.0 | 2.0 | 2.0 | +| test.c:643:19:643:30 | (...) | 2876871.0 | 1.0 | 1.0 | +| test.c:643:19:643:35 | ... * ... | 2876871.0 | 1.0 | 1.0 | +| test.c:643:20:643:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:643:20:643:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:643:20:643:25 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:643:20:643:29 | ... + ... | 2876871.0 | 1.0 | 1.0 | +| test.c:643:24:643:25 | ip | 2876871.0 | 2.0 | 4.0 | +| test.c:643:29:643:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:643:29:643:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:643:34:643:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:643:34:643:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:19:644:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:644:19:644:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:19:644:31 | ... * ... | 2876871.0 | 1.0 | 1.0 | +| test.c:644:19:644:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:644:19:646:27 | ... ? ... : ... | 2.069098126096E12 | 1.0 | 1.0 | +| test.c:644:24:644:31 | (...) | 2876871.0 | 1.0 | 1.0 | +| test.c:644:25:644:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:644:25:644:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:25:644:30 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:644:29:644:30 | ip | 2876871.0 | 2.0 | 4.0 | +| test.c:644:35:644:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:644:35:644:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:35:644:41 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:644:40:644:41 | ip | 2876871.0 | 2.0 | 4.0 | +| test.c:645:21:645:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:645:21:645:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:645:21:645:33 | ... * ... | 1438436.0 | 1.0 | 1.0 | +| test.c:645:26:645:33 | (...) | 1438436.0 | 1.0 | 1.0 | +| test.c:645:27:645:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:645:27:645:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:645:27:645:32 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:645:31:645:32 | ip | 1438436.0 | 2.0 | 2.0 | +| test.c:646:21:646:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:646:21:646:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:646:21:646:27 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:646:26:646:27 | ip | 1438436.0 | 2.0 | 2.0 | +| test.c:647:13:647:63 | (...) | 8.276392504384E12 | 1.0 | 1.0 | +| test.c:647:14:647:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:647:14:647:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:14:647:20 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:647:14:647:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:647:14:647:62 | ... ? ... : ... | 8.276392504384E12 | 1.0 | 1.0 | +| test.c:647:19:647:20 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:647:24:647:31 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:647:24:647:36 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:647:25:647:26 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:647:25:647:30 | ... + ... | 5753743.0 | 2.0 | 1.0 | +| test.c:647:30:647:30 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:647:30:647:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:35:647:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:647:35:647:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:40:647:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:647:40:647:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:40:647:46 | ... * ... | 2876872.0 | 2.0 | 1.0 | +| test.c:647:45:647:46 | ip | 2876872.0 | 2.0 | 2.0 | +| test.c:647:50:647:57 | (...) | 2876872.0 | 1.0 | 1.0 | +| test.c:647:50:647:62 | ... * ... | 2876872.0 | 1.0 | 1.0 | +| test.c:647:51:647:52 | ip | 2876872.0 | 2.0 | 2.0 | +| test.c:647:51:647:56 | ... + ... | 2876872.0 | 2.0 | 1.0 | +| test.c:647:56:647:56 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:647:56:647:56 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:61:647:62 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:647:61:647:62 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:648:13:648:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:648:13:648:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:648:13:648:30 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:648:13:649:30 | ... + ... | 3.3105570017536E13 | 1.0 | 1.0 | +| test.c:648:13:650:30 | ... + ... | 1.9048097485497765E20 | 1.0 | 1.0 | +| test.c:648:13:656:26 | ... + ... | 3.0613805809561187E40 | 1.0 | 1.0 | +| test.c:648:17:648:30 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:648:18:648:19 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:648:18:648:24 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:648:18:648:29 | ... + ... | 5753744.0 | 1.0 | 1.0 | +| test.c:648:23:648:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:648:23:648:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:648:28:648:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:648:28:648:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:649:13:649:30 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:649:14:649:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:649:14:649:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:649:14:649:19 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:649:14:649:24 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:649:14:649:29 | ... + ... | 5753744.0 | 1.0 | 1.0 | +| test.c:649:18:649:19 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:649:23:649:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:649:23:649:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:649:28:649:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:649:28:649:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:650:13:650:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:650:13:650:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:650:13:650:30 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:650:17:650:30 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:650:18:650:19 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:650:18:650:24 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:650:18:650:29 | ... + ... | 5753744.0 | 1.0 | 1.0 | +| test.c:650:23:650:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:650:23:650:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:650:28:650:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:650:28:650:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:651:13:656:26 | (...) | 1.6071844357615744E20 | 1.0 | 1.0 | +| test.c:651:14:651:25 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:651:14:651:30 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:651:14:652:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:651:14:656:25 | ... ? ... : ... | 1.6071844357615744E20 | 1.0 | 1.0 | +| test.c:651:15:651:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:651:15:651:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:651:15:651:20 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:651:15:651:24 | ... + ... | 5753744.0 | 1.0 | 1.0 | +| test.c:651:19:651:20 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:651:24:651:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:651:24:651:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:651:29:651:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:651:29:651:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:13:652:63 | (...) | 8.27639538125625E12 | 1.0 | 1.0 | +| test.c:652:14:652:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:652:14:652:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:14:652:26 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:652:14:652:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:652:14:652:62 | ... ? ... : ... | 8.27639538125625E12 | 1.0 | 1.0 | +| test.c:652:19:652:26 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:652:20:652:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:652:20:652:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:20:652:25 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:652:24:652:25 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:652:30:652:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:652:30:652:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:30:652:36 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:652:35:652:36 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:652:40:652:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:652:40:652:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:40:652:52 | ... * ... | 2876872.5 | 1.0 | 1.0 | +| test.c:652:45:652:52 | (...) | 2876872.5 | 1.0 | 1.0 | +| test.c:652:46:652:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:652:46:652:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:46:652:51 | ... * ... | 2876872.5 | 2.0 | 1.0 | +| test.c:652:50:652:51 | ip | 2876872.5 | 2.0 | 2.0 | +| test.c:652:56:652:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:652:56:652:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:56:652:62 | ... * ... | 2876872.5 | 2.0 | 1.0 | +| test.c:652:61:652:62 | ip | 2876872.5 | 2.0 | 2.0 | +| test.c:653:17:653:28 | (...) | 8630617.5 | 1.0 | 1.0 | +| test.c:653:17:653:33 | ... * ... | 8630617.5 | 1.0 | 1.0 | +| test.c:653:18:653:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:653:18:653:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:653:18:653:23 | ... * ... | 8630617.5 | 2.0 | 1.0 | +| test.c:653:18:653:27 | ... + ... | 8630617.5 | 1.0 | 1.0 | +| test.c:653:22:653:23 | ip | 8630617.5 | 2.0 | 4.0 | +| test.c:653:27:653:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:653:27:653:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:653:32:653:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:653:32:653:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:17:654:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:654:17:654:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:17:654:29 | ... * ... | 8630617.5 | 1.0 | 1.0 | +| test.c:654:17:654:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:654:17:656:25 | ... ? ... : ... | 1.8621893923135562E13 | 1.0 | 1.0 | +| test.c:654:22:654:29 | (...) | 8630617.5 | 1.0 | 1.0 | +| test.c:654:23:654:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:654:23:654:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:23:654:28 | ... * ... | 8630617.5 | 2.0 | 1.0 | +| test.c:654:27:654:28 | ip | 8630617.5 | 2.0 | 4.0 | +| test.c:654:33:654:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:654:33:654:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:33:654:39 | ... * ... | 8630617.5 | 2.0 | 1.0 | +| test.c:654:38:654:39 | ip | 8630617.5 | 2.0 | 4.0 | +| test.c:655:19:655:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:655:19:655:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:655:19:655:31 | ... * ... | 4315309.25 | 1.0 | 1.0 | +| test.c:655:24:655:31 | (...) | 4315309.25 | 1.0 | 1.0 | +| test.c:655:25:655:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:655:25:655:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:655:25:655:30 | ... * ... | 4315309.25 | 2.0 | 1.0 | +| test.c:655:29:655:30 | ip | 4315309.25 | 2.0 | 2.0 | +| test.c:656:19:656:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:656:19:656:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:656:19:656:25 | ... * ... | 4315309.25 | 2.0 | 1.0 | +| test.c:656:24:656:25 | ip | 4315309.25 | 2.0 | 2.0 | +| test.c:657:13:657:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:657:13:657:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:657:13:657:19 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:657:13:657:35 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:657:13:659:27 | ... ? ... : ... | 8.27639538125625E12 | 1.0 | 1.0 | +| test.c:657:18:657:19 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:657:23:657:30 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:657:23:657:35 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:657:24:657:25 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:657:24:657:29 | ... + ... | 5753744.0 | 2.0 | 1.0 | +| test.c:657:29:657:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:657:29:657:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:657:34:657:35 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:657:34:657:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:658:15:658:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:658:15:658:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:658:15:658:21 | ... * ... | 2876872.5 | 2.0 | 1.0 | +| test.c:658:20:658:21 | ip | 2876872.5 | 2.0 | 2.0 | +| test.c:659:15:659:22 | (...) | 2876872.5 | 1.0 | 1.0 | +| test.c:659:15:659:27 | ... * ... | 2876872.5 | 1.0 | 1.0 | +| test.c:659:16:659:17 | ip | 2876872.5 | 2.0 | 2.0 | +| test.c:659:16:659:21 | ... + ... | 2876872.5 | 2.0 | 1.0 | +| test.c:659:21:659:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:659:21:659:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:659:26:659:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:659:26:659:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:660:10:660:23 | special_number | 1.4542272872758854E125 | 1.0 | 1.0 | +| test.c:667:10:667:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:668:7:668:8 | c1 | 1.0 | 1.0 | 1.0 | +| test.c:668:13:668:13 | x | 1.0 | 1.0 | 1.0 | +| test.c:668:13:668:23 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:668:18:668:23 | 748596 | 1.0 | -1.0 | -1.0 | +| test.c:669:7:669:8 | c2 | 1.0 | 1.0 | 1.0 | +| test.c:669:13:669:13 | x | 2.0 | 2.0 | 2.0 | +| test.c:669:13:669:25 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:669:18:669:25 | 84652395 | 1.0 | -1.0 | -1.0 | +| test.c:670:7:670:8 | c3 | 1.0 | 1.0 | 1.0 | +| test.c:670:13:670:13 | x | 4.0 | 4.0 | 4.0 | +| test.c:670:13:670:24 | ... += ... | 4.0 | 4.0 | 4.0 | +| test.c:670:18:670:24 | 3675895 | 1.0 | -1.0 | -1.0 | +| test.c:671:7:671:8 | c4 | 1.0 | 1.0 | 1.0 | +| test.c:671:13:671:13 | x | 8.0 | 8.0 | 8.0 | +| test.c:671:13:671:22 | ... += ... | 8.0 | 8.0 | 8.0 | +| test.c:671:18:671:22 | 98634 | 1.0 | -1.0 | -1.0 | +| test.c:672:7:672:8 | c5 | 1.0 | 1.0 | 1.0 | +| test.c:672:13:672:13 | x | 16.0 | 16.0 | 16.0 | +| test.c:672:13:672:24 | ... += ... | 16.0 | 16.0 | 16.0 | +| test.c:672:18:672:24 | 7834985 | 1.0 | -1.0 | -1.0 | +| test.c:673:7:673:8 | c1 | 2.0 | 2.0 | 2.0 | +| test.c:673:7:673:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:673:13:673:14 | c2 | 2.0 | 2.0 | 2.0 | +| test.c:673:19:673:19 | x | 32.0 | 32.0 | 32.0 | +| test.c:673:19:673:32 | ... += ... | 32.0 | 32.0 | 32.0 | +| test.c:673:24:673:32 | 938457398 | 1.0 | -1.0 | -1.0 | +| test.c:674:7:674:8 | c1 | 3.5 | 3.0 | 3.0 | +| test.c:674:7:674:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:674:13:674:14 | c3 | 2.0 | 2.0 | 2.0 | +| test.c:674:19:674:19 | x | 64.0 | 64.0 | 64.0 | +| test.c:674:19:674:31 | ... += ... | 64.0 | 64.0 | 64.0 | +| test.c:674:24:674:31 | 73895648 | 1.0 | -1.0 | -1.0 | +| test.c:675:7:675:8 | c1 | 5.75 | 3.0 | 3.0 | +| test.c:675:7:675:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:675:13:675:14 | c4 | 2.0 | 2.0 | 2.0 | +| test.c:675:19:675:19 | x | 128.0 | 128.0 | 128.0 | +| test.c:675:19:675:31 | ... += ... | 128.0 | 128.0 | 128.0 | +| test.c:675:24:675:31 | 12345432 | 1.0 | -1.0 | -1.0 | +| test.c:676:7:676:8 | c1 | 9.125 | 3.0 | 3.0 | +| test.c:676:7:676:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:676:13:676:14 | c5 | 2.0 | 2.0 | 2.0 | +| test.c:676:19:676:19 | x | 256.0 | 256.0 | 256.0 | +| test.c:676:19:676:28 | ... += ... | 256.0 | 256.0 | 256.0 | +| test.c:676:24:676:28 | 38847 | 1.0 | -1.0 | -1.0 | +| test.c:677:7:677:8 | c2 | 5.5 | 3.0 | 3.0 | +| test.c:677:7:677:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:677:13:677:14 | c3 | 5.5 | 3.0 | 3.0 | +| test.c:677:19:677:19 | x | 512.0 | 512.0 | 512.0 | +| test.c:677:19:677:26 | ... += ... | 512.0 | 512.0 | 512.0 | +| test.c:677:24:677:26 | 234 | 1.0 | -1.0 | -1.0 | +| test.c:679:11:679:11 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:11:679:15 | ... + ... | 1048576.0 | 3.0 | 10.0 | +| test.c:679:11:679:19 | ... + ... | 1.073741824E9 | 5.0 | 14.0 | +| test.c:679:11:679:23 | ... + ... | 1.099511627776E12 | 5.0 | 14.0 | +| test.c:679:11:679:27 | ... + ... | 1.125899906842624E15 | 5.0 | 14.0 | +| test.c:679:11:679:31 | ... + ... | 1.152921504606847E18 | 5.0 | 14.0 | +| test.c:679:11:679:35 | ... + ... | 1.1805916207174113E21 | 5.0 | 14.0 | +| test.c:679:11:679:39 | ... + ... | 1.2089258196146292E24 | 5.0 | 14.0 | +| test.c:679:11:679:43 | ... + ... | 1.2379400392853803E27 | 5.0 | 14.0 | +| test.c:679:11:679:47 | ... + ... | 1.2676506002282294E30 | 5.0 | 14.0 | +| test.c:679:11:679:51 | ... + ... | 1.298074214633707E33 | 5.0 | 14.0 | +| test.c:679:11:679:55 | ... + ... | 1.329227995784916E36 | 5.0 | 14.0 | +| test.c:679:15:679:15 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:19:679:19 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:23:679:23 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:27:679:27 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:31:679:31 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:35:679:35 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:39:679:39 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:43:679:43 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:47:679:47 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:51:679:51 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:55:679:55 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:680:10:680:10 | y | 1.329227995784916E36 | 3.0 | 5.0 | +| test.c:685:20:685:20 | x | 1.0 | 1.0 | 1.0 | +| test.c:685:20:685:26 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:685:20:685:36 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:685:24:685:26 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:685:24:685:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:685:30:685:30 | x | 1.0 | 1.0 | 1.0 | +| test.c:685:34:685:36 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:685:34:685:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:688:3:688:4 | y1 | 1.0 | -1.0 | -1.0 | +| test.c:688:9:688:11 | ++ ... | 1.0 | 1.0 | 1.0 | +| test.c:688:11:688:11 | y | 1.0 | 1.0 | 1.0 | +| test.c:689:3:689:4 | y2 | 1.0 | -1.0 | -1.0 | +| test.c:689:19:689:19 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:689:19:689:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:698:3:698:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:698:3:698:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:698:7:698:8 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:699:7:699:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:701:3:701:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:701:3:701:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:701:7:701:8 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:702:3:702:3 | i | 1.0 | 1.0 | 1.0 | +| test.c:702:3:702:9 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:702:8:702:9 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:703:7:703:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:705:3:705:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:705:3:705:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:705:7:705:8 | 40 | 1.0 | -1.0 | -1.0 | +| test.c:706:3:706:3 | i | 1.0 | 1.0 | 1.0 | +| test.c:706:3:706:9 | ... -= ... | 1.0 | 1.0 | 1.0 | +| test.c:706:8:706:9 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:707:7:707:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:709:3:709:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:709:3:709:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:709:7:709:7 | j | 1.0 | -1.0 | -1.0 | +| test.c:709:7:709:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:709:11:709:12 | 40 | 1.0 | -1.0 | -1.0 | +| test.c:710:7:710:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:712:3:712:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:712:3:712:15 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:712:7:712:15 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:712:8:712:8 | j | 1.0 | 1.0 | 1.0 | +| test.c:712:8:712:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:712:13:712:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:713:7:713:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:715:3:715:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:715:3:715:20 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:715:7:715:8 | 20 | 1.0 | -1.0 | -1.0 | +| test.c:715:7:715:20 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:715:12:715:20 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:715:13:715:13 | j | 1.0 | 1.0 | 1.0 | +| test.c:715:13:715:19 | ... -= ... | 1.0 | 1.0 | 1.0 | +| test.c:715:18:715:19 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:716:7:716:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:721:14:721:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:723:7:723:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:723:12:723:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:723:17:723:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:723:17:723:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:22:723:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:723:22:723:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:723:28:723:28 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:723:28:723:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:723:28:723:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:33:723:33 | b | 1.0 | 1.0 | 1.0 | +| test.c:723:38:723:38 | b | 1.0 | 1.0 | 1.0 | +| test.c:723:38:723:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:43:723:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:723:43:723:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:724:13:724:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:724:13:724:15 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:724:13:724:15 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:724:15:724:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:725:5:725:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:725:5:725:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:725:14:725:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:727:7:727:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:727:7:727:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:727:12:727:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:727:17:727:17 | a | 1.5 | 2.0 | 3.0 | +| test.c:727:17:727:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:22:727:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:727:22:727:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:727:28:727:28 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:727:28:727:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:727:28:727:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:33:727:33 | b | 3.0 | 3.0 | 3.0 | +| test.c:727:38:727:38 | b | 2.0 | 3.0 | 3.0 | +| test.c:727:38:727:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:43:727:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:727:43:727:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:728:13:728:13 | a | 1.25 | 2.0 | 2.0 | +| test.c:728:13:728:15 | (int)... | 1.875 | 5.0 | 4.0 | +| test.c:728:13:728:15 | ... * ... | 1.875 | 5.0 | 4.0 | +| test.c:728:15:728:15 | b | 1.5 | 3.0 | 2.0 | +| test.c:729:5:729:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:729:5:729:14 | ... += ... | 3.75 | 9.0 | 8.0 | +| test.c:729:14:729:14 | r | 1.875 | 5.0 | 4.0 | +| test.c:731:7:731:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:731:7:731:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:34 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:731:12:731:12 | a | 2.75 | 3.0 | 3.0 | +| test.c:731:17:731:17 | a | 1.875 | 2.0 | 3.0 | +| test.c:731:17:731:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:22:731:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:731:22:731:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:731:28:731:29 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:731:28:731:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:731:28:731:34 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:34:731:34 | b | 6.5 | 3.0 | 3.0 | +| test.c:731:39:731:39 | b | 3.75 | 2.0 | 3.0 | +| test.c:731:39:731:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:44:731:45 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:731:44:731:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:732:13:732:13 | a | 1.4375 | 2.0 | 2.0 | +| test.c:732:13:732:15 | (int)... | 3.4140625 | 4.0 | 4.0 | +| test.c:732:13:732:15 | ... * ... | 3.4140625 | 4.0 | 4.0 | +| test.c:732:15:732:15 | b | 2.375 | 2.0 | 2.0 | +| test.c:733:5:733:9 | total | 5.75 | 9.0 | 9.0 | +| test.c:733:5:733:14 | ... += ... | 19.630859375 | 34.0 | 24.0 | +| test.c:733:14:733:14 | r | 3.4140625 | 4.0 | 4.0 | +| test.c:736:10:736:14 | total | 25.380859375 | 39.0 | 25.0 | +| test.c:740:14:740:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:742:7:742:7 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:742:7:742:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:742:7:742:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:742:7:742:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:742:12:742:12 | b | 1.0 | 1.0 | 1.0 | +| test.c:742:17:742:17 | b | 1.0 | 1.0 | 1.0 | +| test.c:742:17:742:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:742:22:742:23 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:742:22:742:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:743:13:743:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:743:13:743:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:743:13:743:16 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:743:13:743:16 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:743:16:743:16 | b | 1.0 | 1.0 | 1.0 | +| test.c:744:5:744:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:744:5:744:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:744:14:744:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:746:7:746:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:746:7:746:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:746:7:746:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:746:7:746:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:746:12:746:12 | b | 2.0 | 3.0 | 3.0 | +| test.c:746:17:746:17 | b | 1.5 | 3.0 | 3.0 | +| test.c:746:17:746:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:746:22:746:23 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:746:22:746:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:747:13:747:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:747:13:747:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:747:13:747:16 | (int)... | 1.25 | 3.0 | 2.0 | +| test.c:747:13:747:16 | ... * ... | 1.25 | 3.0 | 2.0 | +| test.c:747:16:747:16 | b | 1.25 | 3.0 | 2.0 | +| test.c:748:5:748:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:748:5:748:14 | ... += ... | 2.5 | 5.0 | 4.0 | +| test.c:748:14:748:14 | r | 1.25 | 3.0 | 2.0 | +| test.c:750:7:750:8 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:750:7:750:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:750:7:750:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:750:7:750:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:750:13:750:13 | b | 2.75 | 3.0 | 3.0 | +| test.c:750:18:750:18 | b | 1.875 | 2.0 | 3.0 | +| test.c:750:18:750:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:750:23:750:24 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:750:23:750:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:751:13:751:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:751:13:751:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:751:13:751:16 | (int)... | 1.4375 | 2.0 | 2.0 | +| test.c:751:13:751:16 | ... * ... | 1.4375 | 2.0 | 2.0 | +| test.c:751:16:751:16 | b | 1.4375 | 2.0 | 2.0 | +| test.c:752:5:752:9 | total | 4.5 | 5.0 | 5.0 | +| test.c:752:5:752:14 | ... += ... | 6.46875 | 10.0 | 8.0 | +| test.c:752:14:752:14 | r | 1.4375 | 2.0 | 2.0 | +| test.c:755:10:755:14 | total | 10.96875 | 13.0 | 9.0 | +| test.c:760:3:760:3 | x | 1.0 | -1.0 | -1.0 | +| test.c:760:3:760:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:760:7:760:7 | y | 1.0 | -1.0 | -1.0 | +| test.c:760:7:760:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:760:11:760:22 | 1000000003 | 1.0 | -1.0 | -1.0 | +| test.c:761:3:761:4 | xy | 1.0 | -1.0 | -1.0 | +| test.c:761:3:761:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:761:8:761:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:761:8:761:12 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:761:12:761:12 | y | 1.0 | 1.0 | 1.0 | +| test.c:762:10:762:11 | xy | 1.0 | 1.0 | 1.0 | +| test.c:767:3:767:3 | x | 1.0 | -1.0 | -1.0 | +| test.c:767:3:767:14 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:767:7:767:14 | 274177 | 1.0 | -1.0 | -1.0 | +| test.c:768:3:768:3 | y | 1.0 | -1.0 | -1.0 | +| test.c:768:3:768:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:768:7:768:22 | 67280421310721 | 1.0 | -1.0 | -1.0 | +| test.c:769:3:769:4 | xy | 1.0 | -1.0 | -1.0 | +| test.c:769:3:769:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:769:8:769:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:769:8:769:12 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:769:12:769:12 | y | 1.0 | 1.0 | 1.0 | +| test.c:770:10:770:11 | xy | 1.0 | 1.0 | 1.0 | +| test.c:774:7:774:8 | ui | 1.0 | 1.0 | 1.0 | +| test.c:774:7:774:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:774:13:774:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:774:13:774:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:775:28:775:44 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:775:28:775:49 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:775:43:775:44 | ui | 1.0 | 1.0 | 1.0 | +| test.c:775:48:775:49 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:775:48:775:49 | ui | 1.0 | 1.0 | 1.0 | +| test.c:776:12:776:17 | result | 1.0 | 1.0 | 1.0 | +| test.c:778:7:778:8 | ul | 1.0 | 1.0 | 1.0 | +| test.c:778:7:778:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:778:13:778:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:778:13:778:14 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:779:28:779:29 | ul | 1.0 | 1.0 | 1.0 | +| test.c:779:28:779:34 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:779:33:779:34 | ul | 1.0 | 1.0 | 1.0 | +| test.c:780:12:780:17 | result | 1.0 | 1.0 | 1.0 | +| test.c:782:10:782:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:782:10:782:10 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:786:7:786:8 | ui | 1.0 | 1.0 | 1.0 | +| test.c:786:7:786:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:786:7:786:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:786:13:786:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:786:13:786:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:786:19:786:20 | ui | 1.0 | 1.0 | 1.0 | +| test.c:786:19:786:25 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:786:25:786:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:786:25:786:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:787:5:787:6 | ui | 1.0 | 1.0 | 1.0 | +| test.c:787:5:787:16 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:787:11:787:12 | ui | 1.0 | 1.0 | 1.0 | +| test.c:787:11:787:16 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:787:16:787:16 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:787:16:787:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:788:12:788:13 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:788:12:788:13 | ui | 1.0 | 1.0 | 1.0 | +| test.c:791:26:791:27 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:791:26:791:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:792:3:792:9 | uiconst | 1.0 | 1.0 | 1.0 | +| test.c:792:3:792:14 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:792:14:792:14 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:792:14:792:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:794:27:794:28 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:794:27:794:28 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:795:3:795:9 | ulconst | 1.0 | 1.0 | 1.0 | +| test.c:795:3:795:14 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:795:14:795:14 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:795:14:795:14 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:796:10:796:16 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:796:10:796:16 | uiconst | 1.0 | 1.0 | 1.0 | +| test.c:796:10:796:26 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:796:20:796:26 | ulconst | 1.0 | 1.0 | 1.0 | +| test.c:800:7:800:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:800:7:800:13 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:800:7:800:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:800:12:800:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:800:13:800:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:800:18:800:18 | i | 1.0 | 1.0 | 1.0 | +| test.c:800:18:800:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:800:23:800:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:801:5:801:5 | i | 1.0 | -1.0 | -1.0 | +| test.c:801:5:801:13 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:801:9:801:9 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:801:9:801:13 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:801:13:801:13 | i | 1.0 | 1.0 | 1.0 | +| test.c:802:9:802:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:804:5:804:5 | i | 1.0 | -1.0 | -1.0 | +| test.c:804:5:804:14 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:804:9:804:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:804:9:804:14 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:804:13:804:14 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:804:14:804:14 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:805:9:805:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:807:5:807:5 | i | 1.0 | 1.0 | 1.0 | +| test.c:807:5:807:10 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:807:10:807:10 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:808:9:808:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:810:5:810:5 | i | 1.0 | 1.0 | 1.0 | +| test.c:810:5:810:12 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:810:10:810:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:810:11:810:12 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:811:9:811:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:813:7:813:7 | i | 2.0 | 3.0 | 3.0 | +| test.c:813:7:813:13 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:813:12:813:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:813:13:813:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:814:5:814:5 | i | 1.0 | -1.0 | -1.0 | +| test.c:814:5:814:27 | ... = ... | 1.5 | 2.0 | 2.0 | +| test.c:814:9:814:9 | i | 1.5 | 2.0 | 2.0 | +| test.c:814:9:814:27 | ... * ... | 1.5 | 2.0 | 2.0 | +| test.c:814:13:814:27 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:814:18:814:27 | 4294967295 | 1.0 | -1.0 | -1.0 | +| test.c:815:9:815:9 | i | 1.5 | 2.0 | 2.0 | +| test.c:817:3:817:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:817:3:817:12 | ... = ... | 3.5 | 6.0 | 5.0 | +| test.c:817:7:817:7 | i | 3.5 | 5.0 | 5.0 | +| test.c:817:7:817:12 | ... * ... | 3.5 | 5.0 | 5.0 | +| test.c:817:11:817:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:817:12:817:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:818:10:818:10 | i | 3.5 | 6.0 | 5.0 | +| test.c:820:20:820:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:820:20:820:20 | (signed char)... | 1.0 | 1.0 | 1.0 | +| test.c:821:3:821:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:821:3:821:17 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:821:7:821:17 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:821:7:821:17 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:821:8:821:11 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:821:8:821:16 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:821:10:821:11 | sc | 1.0 | 1.0 | 1.0 | +| test.c:821:16:821:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:823:7:823:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:825:10:825:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:830:7:830:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:830:7:830:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:832:7:832:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:832:7:832:11 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:832:11:832:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:832:11:832:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:833:9:833:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:833:9:833:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:836:7:836:7 | n | 2.0 | 2.0 | 2.0 | +| test.c:836:7:836:12 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:836:12:836:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:836:12:836:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:837:9:837:9 | (int)... | 2.0 | 1.0 | 1.0 | +| test.c:837:9:837:9 | n | 2.0 | 1.0 | 1.0 | +| test.c:839:9:839:9 | (int)... | 1.5 | 2.0 | 1.0 | +| test.c:839:9:839:9 | n | 1.5 | 2.0 | 1.0 | +| test.c:842:7:842:8 | ! ... | 1.0 | -1.0 | -1.0 | +| test.c:842:8:842:8 | n | 3.5 | 2.0 | 2.0 | +| test.c:843:9:843:9 | (int)... | 2.25 | 2.0 | 1.0 | +| test.c:843:9:843:9 | n | 2.25 | 2.0 | 1.0 | +| test.c:845:9:845:9 | (int)... | 3.5 | 1.0 | 1.0 | +| test.c:845:9:845:9 | n | 3.5 | 1.0 | 1.0 | +| test.c:848:10:848:10 | n | 13.0 | 2.0 | 2.0 | +| test.c:848:10:848:15 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:848:15:848:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:848:15:848:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:849:5:849:5 | n | 13.0 | 1.0 | 1.0 | +| test.c:849:5:849:7 | ... -- | 13.0 | 1.0 | 1.0 | +| test.c:852:7:852:7 | (int)... | 7.0 | 2.0 | 1.0 | +| test.c:852:7:852:7 | n | 7.0 | 2.0 | 1.0 | +| test.c:856:7:856:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:856:7:856:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:856:7:856:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:856:11:856:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:859:7:859:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:859:7:859:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:859:7:859:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:859:12:859:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:860:9:860:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:860:9:860:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:862:9:862:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:862:9:862:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:865:7:865:7 | n | 2.0 | 2.0 | 2.0 | +| test.c:866:9:866:9 | (int)... | 2.0 | 1.0 | 2.0 | +| test.c:866:9:866:9 | n | 2.0 | 1.0 | 2.0 | +| test.c:868:9:868:9 | (int)... | 1.5 | 2.0 | 1.0 | +| test.c:868:9:868:9 | n | 1.5 | 2.0 | 1.0 | +| test.c:871:10:871:10 | (int)... | 13.0 | 2.0 | 4.0 | +| test.c:871:10:871:10 | n | 12.0 | 2.0 | 4.0 | +| test.c:871:10:871:15 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:871:15:871:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:872:5:872:5 | n | 12.0 | 1.0 | 3.0 | +| test.c:872:5:872:7 | ... -- | 12.0 | 1.0 | 3.0 | +| test.c:875:7:875:7 | (int)... | 6.5 | 2.0 | 3.0 | +| test.c:875:7:875:7 | n | 6.5 | 2.0 | 3.0 | +| test.c:879:7:879:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:879:7:879:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:879:7:879:12 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:879:12:879:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:880:9:880:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:880:9:880:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:880:9:880:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:880:14:880:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:881:11:881:11 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:881:11:881:11 | n | 1.0 | 1.0 | 1.0 | +| test.c:885:7:885:7 | (int)... | 2.0 | 2.0 | 3.0 | +| test.c:885:7:885:7 | n | 2.0 | 2.0 | 3.0 | +| test.c:885:7:885:12 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:885:12:885:12 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:886:9:886:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:886:9:886:13 | ... * ... | 1.5 | 1.0 | 3.0 | +| test.c:886:9:886:18 | ... - ... | 1.5 | 1.0 | 3.0 | +| test.c:886:9:886:23 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:886:13:886:13 | (int)... | 1.5 | 1.0 | 3.0 | +| test.c:886:13:886:13 | n | 1.5 | 1.0 | 3.0 | +| test.c:886:17:886:18 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:886:23:886:23 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:889:9:889:9 | (int)... | 1.5 | 1.0 | 3.0 | +| test.c:889:9:889:9 | n | 1.5 | 1.0 | 3.0 | +| test.c:892:7:892:7 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:892:7:892:7 | n | 3.0 | 3.0 | 4.0 | +| test.c:892:7:892:17 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:892:7:892:32 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:892:12:892:17 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:892:13:892:17 | 32768 | 1.0 | -1.0 | -1.0 | +| test.c:892:22:892:22 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:892:22:892:22 | n | 3.0 | 3.0 | 4.0 | +| test.c:892:22:892:32 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:892:27:892:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:892:28:892:32 | 32767 | 1.0 | -1.0 | -1.0 | +| test.c:893:9:893:9 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:893:9:893:9 | n | 3.0 | 3.0 | 4.0 | +| test.c:896:7:896:7 | (int)... | 5.0 | 5.0 | 6.0 | +| test.c:896:7:896:7 | n | 5.0 | 5.0 | 6.0 | +| test.c:896:7:896:12 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:896:12:896:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:897:5:897:5 | n | 3.0 | 2.0 | 6.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 6.0 | 3.0 | 6.0 | +| test.c:897:10:897:10 | (int)... | 3.0 | 2.0 | 5.0 | +| test.c:897:10:897:10 | n | 3.0 | 2.0 | 5.0 | +| test.c:897:14:897:14 | (int)... | 2.0 | 2.0 | 4.0 | +| test.c:897:14:897:14 | n | 2.0 | 2.0 | 4.0 | +| test.c:898:5:898:6 | ! ... | 1.0 | -1.0 | -1.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 15.0 | 3.0 | 6.0 | +| test.c:898:6:898:6 | n | 5.0 | 3.0 | 6.0 | +| test.c:898:10:898:10 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:898:10:898:10 | n | 3.0 | 3.0 | 4.0 | +| test.c:898:14:898:14 | (int)... | 5.0 | 2.0 | 5.0 | +| test.c:898:14:898:14 | n | 5.0 | 2.0 | 5.0 | +| test.c:909:7:909:8 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:909:7:909:8 | ss | 1.0 | 1.0 | 1.0 | +| test.c:909:7:909:22 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:909:12:909:22 | sizeof(int) | 1.0 | -1.0 | -1.0 | +| test.c:910:9:910:10 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:910:9:910:10 | ss | 1.0 | 1.0 | 1.0 | +| test.c:913:7:913:8 | (int)... | 2.0 | 3.0 | 2.0 | +| test.c:913:7:913:8 | ss | 2.0 | 3.0 | 2.0 | +| test.c:913:7:913:17 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:913:12:913:17 | 32769 | 1.0 | -1.0 | -1.0 | +| test.c:914:9:914:10 | (int)... | 1.5 | 3.0 | 2.0 | +| test.c:914:9:914:10 | ss | 1.5 | 3.0 | 2.0 | +| test.c:917:7:917:15 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:917:7:917:15 | (short)... | 1.0 | 1.0 | 1.0 | +| test.c:917:7:917:20 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:917:14:917:15 | us | 1.0 | 1.0 | 1.0 | +| test.c:917:20:917:20 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:918:9:918:10 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:918:9:918:10 | us | 1.0 | 1.0 | 1.0 | +| test.c:921:7:921:15 | (int)... | 2.0 | 2.0 | 1.0 | +| test.c:921:7:921:15 | (short)... | 2.0 | 1.0 | 2.0 | +| test.c:921:7:921:21 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:921:14:921:15 | us | 2.0 | 1.0 | 2.0 | +| test.c:921:20:921:21 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:921:21:921:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:922:9:922:10 | (int)... | 1.5 | 1.0 | 2.0 | +| test.c:922:9:922:10 | us | 1.5 | 1.0 | 2.0 | +| test.c:925:7:925:8 | (unsigned long)... | 3.0 | 3.0 | 2.0 | +| test.c:925:7:925:8 | ss | 3.0 | 3.0 | 2.0 | +| test.c:925:7:925:23 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:925:13:925:23 | sizeof(int) | 1.0 | -1.0 | -1.0 | +| test.c:926:9:926:10 | (int)... | 2.0 | 2.0 | 2.0 | +| test.c:926:9:926:10 | ss | 2.0 | 2.0 | 2.0 | +| test.c:929:7:929:8 | (int)... | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:8 | ss | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:12 | (unsigned long)... | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:12 | ... + ... | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:26 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:929:12:929:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:929:16:929:26 | sizeof(int) | 1.0 | -1.0 | -1.0 | +| test.c:930:9:930:10 | (int)... | 2.5 | 3.0 | 1.0 | +| test.c:930:9:930:10 | ss | 2.5 | 3.0 | 1.0 | +| test.c:936:8:936:8 | s | 1.0 | -1.0 | -1.0 | +| test.c:936:8:936:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:936:12:936:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:936:15:936:15 | s | 13.0 | 3.0 | 6.0 | +| test.c:936:15:936:20 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:936:19:936:20 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:936:23:936:23 | s | 13.0 | 3.0 | 5.0 | +| test.c:936:23:936:25 | ... ++ | 13.0 | 3.0 | 5.0 | +| test.c:937:18:937:18 | s | 13.0 | 3.0 | 5.0 | +| test.c:937:18:937:22 | ... + ... | 13.0 | 5.0 | 14.0 | +| test.c:937:22:937:22 | s | 13.0 | 3.0 | 5.0 | +| test.c:938:9:938:14 | result | 13.0 | 3.0 | 6.0 | +| test.c:943:10:943:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:944:7:944:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:944:7:944:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:944:11:944:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:945:9:945:9 | i | 1.0 | -1.0 | -1.0 | +| test.c:948:20:948:20 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:948:20:948:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:949:7:949:7 | u | 1.0 | 1.0 | 1.0 | +| test.c:949:7:949:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:949:11:949:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:949:11:949:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:950:9:950:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:950:9:950:9 | u | 1.0 | -1.0 | -1.0 | +| test.c:955:12:955:12 | s | 1.0 | 1.0 | 1.0 | +| test.c:955:12:955:16 | ... % ... | 1.0 | 3.0 | 1.0 | +| test.c:955:16:955:16 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:956:7:956:8 | s2 | 1.0 | 3.0 | 1.0 | +| test.c:961:7:961:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:962:9:962:9 | y | 1.0 | 1.0 | 1.0 | +| test.c:962:9:962:14 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:962:14:962:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:963:12:963:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:966:7:966:7 | y | 2.0 | 2.0 | 2.0 | +| test.c:975:7:975:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:975:7:975:13 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:975:12:975:13 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:980:7:980:7 | x | 13.0 | 1.0 | 1.0 | +| test.c:985:16:985:26 | 2147483647 | 1.0 | -1.0 | -1.0 | +| test.c:986:16:986:19 | 256 | 1.0 | -1.0 | -1.0 | +| test.c:987:7:987:13 | (...) | 1.0 | 2.0 | 1.0 | +| test.c:987:7:987:20 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:987:8:987:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:987:8:987:12 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:987:12:987:12 | y | 1.0 | 1.0 | 1.0 | +| test.c:987:18:987:20 | 512 | 1.0 | -1.0 | -1.0 | +| test.c:988:9:988:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:989:9:989:9 | y | 1.0 | 1.0 | 1.0 | +| test.c:994:9:994:11 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:995:9:995:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:996:9:996:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:997:9:997:11 | 8 | 1.0 | -1.0 | -1.0 | +| test.c:998:9:998:12 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:1002:7:1002:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:1002:7:1002:7 | e | 1.0 | 1.0 | 1.0 | +| test.cpp:9:11:9:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:9:12:9:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:10:7:10:7 | (bool)... | 1.0 | 1.0 | 1.0 | +| test.cpp:10:7:10:7 | b | 1.0 | 1.0 | 1.0 | +| test.cpp:11:5:11:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:11:5:11:14 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:11:12:11:12 | call to operator[] | 1.0 | -1.0 | -1.0 | +| test.cpp:11:12:11:14 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:11:13:11:13 | 3 | 1.0 | -1.0 | -1.0 | +| test.cpp:13:10:13:10 | x | 2.0 | 2.0 | 2.0 | +| test.cpp:18:12:18:31 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:18:12:18:31 | static_cast... | 1.0 | 1.0 | 1.0 | +| test.cpp:18:30:18:30 | x | 1.0 | 1.0 | 1.0 | +| test.cpp:19:10:19:11 | x0 | 1.0 | 1.0 | 1.0 | +| test.cpp:27:7:27:7 | y | 1.0 | 1.0 | 1.0 | +| test.cpp:27:7:27:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:27:12:27:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:28:5:28:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:28:5:28:9 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:28:9:28:9 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:30:7:30:7 | y | 2.0 | 2.0 | 2.0 | +| test.cpp:30:7:30:13 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:30:12:30:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:30:13:30:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:31:5:31:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:31:5:31:10 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:31:9:31:10 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:31:10:31:10 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:33:7:33:7 | y | 3.5 | 3.0 | 3.0 | +| test.cpp:33:7:33:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:33:12:33:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:34:5:34:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:34:5:34:9 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:34:9:34:9 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:36:7:36:7 | y | 5.75 | 4.0 | 4.0 | +| test.cpp:36:7:36:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:36:12:36:15 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:36:13:36:15 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:37:5:37:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:37:5:37:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:37:9:37:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:37:10:37:12 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:39:7:39:7 | y | 9.125 | 5.0 | 5.0 | +| test.cpp:39:7:39:14 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:39:12:39:14 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:40:5:40:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:40:5:40:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:40:9:40:11 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:42:7:42:7 | y | 14.1875 | 6.0 | 6.0 | +| test.cpp:42:7:42:16 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:42:12:42:16 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:42:13:42:16 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:43:5:43:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:43:5:43:13 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:43:9:43:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:43:10:43:13 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:45:7:45:7 | y | 21.78125 | 7.0 | 7.0 | +| test.cpp:45:7:45:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:45:12:45:15 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:46:5:46:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:46:5:46:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:46:9:46:12 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:49:10:49:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:51:7:51:7 | x | 8.0 | 8.0 | 8.0 | +| test.cpp:51:7:51:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:51:12:51:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:52:15:52:21 | (bool)... | 1.0 | 2.0 | 1.0 | +| test.cpp:52:21:52:21 | x | 4.5 | 4.0 | 4.0 | +| test.cpp:53:5:53:5 | t | 1.0 | 1.0 | 1.0 | +| test.cpp:53:5:53:16 | ... += ... | 4.5 | 2.0 | 1.0 | +| test.cpp:53:10:53:16 | (int)... | 4.5 | 2.0 | 1.0 | +| test.cpp:53:15:53:16 | xb | 4.5 | 2.0 | 1.0 | +| test.cpp:56:7:56:7 | x | 12.5 | 8.0 | 8.0 | +| test.cpp:56:7:56:11 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.cpp:56:11:56:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:57:15:57:21 | (bool)... | 1.0 | 1.0 | 2.0 | +| test.cpp:57:21:57:21 | x | 6.75 | 3.0 | 8.0 | +| test.cpp:58:5:58:5 | t | 5.5 | 2.0 | 1.0 | +| test.cpp:58:5:58:16 | ... += ... | 37.125 | 2.0 | 2.0 | +| test.cpp:58:10:58:16 | (int)... | 6.75 | 1.0 | 2.0 | +| test.cpp:58:15:58:16 | xb | 6.75 | 1.0 | 2.0 | +| test.cpp:61:7:61:7 | x | 13.5 | 8.0 | 8.0 | +| test.cpp:61:7:61:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.cpp:61:11:61:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:62:15:62:21 | (bool)... | 1.0 | 1.0 | 2.0 | +| test.cpp:62:21:62:21 | x | 7.25 | 8.0 | 3.0 | +| test.cpp:63:5:63:5 | t | 42.625 | 3.0 | 2.0 | +| test.cpp:63:5:63:16 | ... += ... | 309.03125 | 3.0 | 3.0 | +| test.cpp:63:10:63:16 | (int)... | 7.25 | 1.0 | 2.0 | +| test.cpp:63:15:63:16 | xb | 7.25 | 1.0 | 2.0 | +| test.cpp:66:13:66:19 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:66:19:66:19 | x | 14.5 | 8.0 | 8.0 | +| test.cpp:67:3:67:3 | t | 351.65625 | 4.0 | 3.0 | +| test.cpp:67:3:67:14 | ... += ... | 5099.015625 | 5.0 | 4.0 | +| test.cpp:67:8:67:14 | (int)... | 14.5 | 2.0 | 2.0 | +| test.cpp:67:13:67:14 | xb | 14.5 | 2.0 | 2.0 | +| test.cpp:69:10:69:10 | b | 1.0 | 1.0 | 1.0 | +| test.cpp:69:10:69:21 | ... \|\| ... | 1.0 | -1.0 | -1.0 | +| test.cpp:69:15:69:21 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:69:21:69:21 | t | 5099.015625 | 5.0 | 4.0 | +| test.cpp:74:30:74:30 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:30:74:30 | c | 1.0 | 1.0 | 1.0 | +| test.cpp:74:30:74:34 | (unsigned short)... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:30:74:34 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:34:74:34 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:34:74:34 | c | 1.0 | 1.0 | 1.0 | +| test.cpp:75:7:75:30 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:75:7:75:30 | (unsigned char)... | 1.0 | 1.0 | 1.0 | +| test.cpp:75:7:75:35 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:75:22:75:30 | c_times_2 | 1.0 | 1.0 | 1.0 | +| test.cpp:75:35:75:35 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:77:5:77:13 | c_times_2 | 1.0 | 1.0 | 1.0 | +| test.cpp:79:3:79:11 | c_times_2 | 1.0 | 1.0 | 1.0 | +| test.cpp:83:16:83:22 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:83:16:83:22 | (reference to) | 1.0 | 1.0 | 1.0 | +| test.cpp:83:16:83:22 | aliased | 1.0 | 1.0 | 1.0 | +| test.cpp:85:7:85:7 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:85:7:85:7 | i | 1.0 | 1.0 | 1.0 | +| test.cpp:85:7:85:12 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:85:12:85:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:86:12:86:12 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:86:12:86:12 | i | 1.0 | 1.0 | 1.0 | +| test.cpp:88:7:88:8 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:88:7:88:8 | ci | 1.0 | 1.0 | 1.0 | +| test.cpp:88:7:88:13 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:88:13:88:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:89:12:89:13 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:89:12:89:13 | ci | 1.0 | 1.0 | 1.0 | +| test.cpp:91:7:91:13 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:91:7:91:13 | aliased | 1.0 | 1.0 | 1.0 | +| test.cpp:91:7:91:18 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:91:18:91:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:92:12:92:18 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:92:12:92:18 | aliased | 1.0 | 1.0 | 1.0 | +| test.cpp:94:7:94:11 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:94:7:94:11 | alias | 1.0 | 1.0 | 1.0 | +| test.cpp:94:7:94:16 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:94:16:94:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:95:12:95:16 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:95:12:95:16 | alias | 1.0 | 1.0 | 1.0 | +| test.cpp:97:10:97:10 | (reference dereference) | 13.0 | 1.0 | 8.0 | +| test.cpp:97:10:97:19 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:97:15:97:19 | 12345 | 1.0 | -1.0 | -1.0 | +| test.cpp:97:22:97:22 | (reference dereference) | 13.0 | 1.0 | 7.0 | +| test.cpp:97:22:97:24 | ... ++ | 13.0 | 1.0 | 7.0 | +| test.cpp:98:5:98:5 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:98:5:98:5 | i | 1.0 | -1.0 | -1.0 | +| test.cpp:98:5:98:9 | ... = ... | 13.0 | 1.0 | 7.0 | +| test.cpp:98:9:98:9 | (reference dereference) | 13.0 | 1.0 | 7.0 | +| test.cpp:99:5:99:5 | (reference dereference) | 13.0 | 1.0 | 7.0 | +| test.cpp:102:10:102:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:106:7:106:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:106:7:106:7 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:106:7:106:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.cpp:106:11:106:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:109:7:109:7 | (bool)... | 1.0 | 1.0 | 2.0 | +| test.cpp:109:7:109:7 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:110:5:110:5 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:112:5:112:5 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:115:7:115:8 | ! ... | 1.0 | -1.0 | -1.0 | +| test.cpp:115:8:115:8 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:115:8:115:8 | n | 2.0 | 2.0 | 2.0 | +| test.cpp:116:5:116:5 | n | 1.5 | 2.0 | 1.0 | +| test.cpp:118:5:118:5 | n | 2.0 | 1.0 | 2.0 | +| test.cpp:121:3:121:3 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:121:3:121:3 | n | 3.5 | 2.0 | 3.0 | +| test.cpp:121:3:121:12 | ... ? ... : ... | 7.875 | 2.0 | 3.0 | +| test.cpp:121:8:121:8 | n | 3.5 | 1.0 | 2.0 | +| test.cpp:121:12:121:12 | n | 2.25 | 2.0 | 1.0 | +| test.cpp:122:3:122:4 | ! ... | 1.0 | -1.0 | -1.0 | +| test.cpp:122:3:122:12 | ... ? ... : ... | 19.40625 | 2.0 | 3.0 | +| test.cpp:122:4:122:4 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:122:4:122:4 | n | 5.75 | 2.0 | 3.0 | +| test.cpp:122:8:122:8 | n | 3.375 | 2.0 | 1.0 | +| test.cpp:122:12:122:12 | n | 5.75 | 1.0 | 2.0 | +| test_nr_of_bounds.cpp:2:9:2:11 | 1 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:3:9:3:11 | 2 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:4:9:4:11 | 4 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:5:9:5:11 | 8 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:6:9:6:12 | 16 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:7:9:7:12 | 32 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:8:9:8:12 | 64 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:9:9:9:12 | 128 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:10:9:10:13 | 256 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:11:9:11:13 | 512 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:12:9:12:13 | 1024 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:13:9:13:13 | 2048 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:14:9:14:14 | 4096 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:15:9:15:14 | 8192 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:16:9:16:14 | 16384 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:17:9:17:14 | 32768 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:18:9:18:15 | 65536 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:19:9:19:15 | 131072 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:20:9:20:15 | 262144 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:21:9:21:15 | 524288 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:22:9:22:16 | 1048576 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:23:9:23:16 | 2097152 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:24:9:24:16 | 4194304 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:25:9:25:16 | 8388608 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:26:9:26:17 | 16777216 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:27:10:27:18 | 33554432 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:28:10:28:18 | 67108864 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:29:10:29:18 | 134217728 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:30:10:30:19 | 268435456 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:31:10:31:19 | 536870912 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:5:40:19 | ... & ... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:19 | ... -= ... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:5:40:20 | (...) | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:5:41:19 | ... & ... | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:19 | ... -= ... | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:5:41:20 | (...) | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:5:42:19 | ... & ... | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:19 | ... -= ... | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:5:42:20 | (...) | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:5:43:19 | ... & ... | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:19 | ... -= ... | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:5:43:20 | (...) | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:5:44:19 | ... & ... | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:19 | ... -= ... | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:5:44:20 | (...) | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:5:45:19 | ... & ... | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:19 | ... -= ... | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:5:45:20 | (...) | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:5:46:19 | ... & ... | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:19 | ... -= ... | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:5:46:20 | (...) | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:5:47:19 | ... & ... | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:19 | ... -= ... | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:5:47:20 | (...) | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:5:48:19 | ... & ... | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:19 | ... -= ... | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:5:48:20 | (...) | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:5:49:19 | ... & ... | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:19 | ... -= ... | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:5:49:20 | (...) | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:5:50:19 | ... & ... | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:19 | ... -= ... | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:5:50:20 | (...) | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:5:51:19 | ... & ... | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:19 | ... -= ... | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:5:51:20 | (...) | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:5:52:19 | ... & ... | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:19 | ... -= ... | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:5:52:20 | (...) | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:5:53:19 | ... & ... | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:19 | ... -= ... | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:5:53:20 | (...) | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:5:54:19 | ... & ... | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:19 | ... -= ... | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:5:54:20 | (...) | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:5:55:19 | ... & ... | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:19 | ... -= ... | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:5:55:20 | (...) | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:5:56:19 | ... & ... | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:19 | ... -= ... | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:5:56:20 | (...) | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:5:57:19 | ... & ... | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:19 | ... -= ... | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:5:57:20 | (...) | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:5:58:19 | ... & ... | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:19 | ... -= ... | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:5:58:20 | (...) | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:5:59:19 | ... & ... | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:19 | ... -= ... | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:5:59:20 | (...) | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:5:60:19 | ... & ... | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:19 | ... -= ... | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:5:60:20 | (...) | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:5:61:19 | ... & ... | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:19 | ... -= ... | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:5:61:20 | (...) | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:5:62:19 | ... & ... | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:19 | ... -= ... | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:5:62:20 | (...) | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:5:63:19 | ... & ... | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:19 | ... -= ... | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:5:63:20 | (...) | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:5:64:19 | ... & ... | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:19 | ... -= ... | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:5:64:20 | (...) | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:5:65:20 | ... & ... | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:20 | ... -= ... | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:5:65:21 | (...) | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:5:66:20 | ... & ... | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:20 | ... -= ... | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:5:66:21 | (...) | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:5:67:20 | ... & ... | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:20 | ... -= ... | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:5:67:21 | (...) | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:5:68:20 | ... & ... | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:20 | ... -= ... | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:5:68:21 | (...) | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:5:69:20 | ... & ... | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:20 | ... -= ... | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:5:69:21 | (...) | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:72:12:72:12 | x | 1.073741824E9 | 1.0 | 1.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql index 5539dc0720b..fabdba8f4b1 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql @@ -2,8 +2,20 @@ import cpp import utils.test.InlineExpectationsTest import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis -query predicate estimateNrOfBounds(Expr e, float nrOfBounds) { - nrOfBounds = SimpleRangeAnalysisInternal::estimateNrOfBounds(e) +query predicate estimateNrOfBounds( + Expr e, float nrOfBounds, float actualNrOfLowerBounds, float actualNrOfUpperBounds +) { + nrOfBounds = SimpleRangeAnalysisInternal::estimateNrOfBounds(e) and + ( + actualNrOfLowerBounds = SimpleRangeAnalysisInternal::countNrOfLowerBounds(e) + or + not exists(SimpleRangeAnalysisInternal::countNrOfLowerBounds(e)) and actualNrOfLowerBounds = -1 + ) and + ( + actualNrOfUpperBounds = SimpleRangeAnalysisInternal::countNrOfUpperBounds(e) + or + not exists(SimpleRangeAnalysisInternal::countNrOfUpperBounds(e)) and actualNrOfUpperBounds = -1 + ) } /** diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected index 50b65d84bf3..8b30e12cd4f 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected @@ -77,77 +77,77 @@ | test.c:426:22:426:82 | ... ? ... : ... | 0.13204114 | 0.42186276 | 0.13204114 | | test.c:426:26:426:69 | ... ? ... : ... | 0.42186276 | 0.42186276 | 0.44996679 | | test.c:426:30:426:56 | ... ? ... : ... | 0.42186276 | 0.42186276 | 0.53843358 | -| test.c:468:4:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:468:5:470:49 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:471:6:553:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:472:8:490:41 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:475:10:479:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:475:31:475:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:477:13:479:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:484:12:489:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:485:12:485:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:487:15:489:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:491:6:510:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:494:8:498:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:494:29:494:77 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:496:11:498:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:499:6:499:54 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:503:10:507:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:503:31:503:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:505:13:507:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:508:9:510:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:512:10:531:43 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:515:12:520:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:516:12:516:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:518:15:520:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:525:14:530:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:526:14:526:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:528:17:530:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:532:9:553:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:535:14:540:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:536:14:536:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:538:17:540:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:541:12:541:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:545:12:550:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:546:12:546:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:548:15:550:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:551:11:553:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:554:9:556:51 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:557:9:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:558:14:577:47 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:561:16:566:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:562:16:562:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:564:19:566:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:571:18:576:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:572:18:572:66 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:574:21:576:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:578:12:599:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:581:14:586:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:582:14:582:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:584:17:586:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:587:12:587:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:591:16:596:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:592:16:592:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:594:19:596:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:597:15:599:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:601:12:620:45 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:604:14:609:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:605:14:605:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:607:17:609:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:614:16:619:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:615:16:615:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:617:19:619:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:621:11:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:624:16:629:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:625:16:625:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:627:19:629:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:630:14:630:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:634:14:639:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:635:14:635:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:637:17:639:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:640:13:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:668:20:668:36 | ... ? ... : ... | 0.0 | 0.0 | 100.0 | -| test.c:880:5:880:14 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | -| test.c:881:5:881:14 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:485:5:487:49 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:488:6:570:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:489:8:507:41 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:492:10:496:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:492:31:492:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:494:13:496:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:501:12:506:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:502:12:502:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:504:15:506:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:508:6:527:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:511:8:515:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:511:29:511:77 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:513:11:515:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:516:6:516:54 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:520:10:524:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:520:31:520:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:522:13:524:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:525:9:527:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:529:10:548:43 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:532:12:537:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:533:12:533:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:535:15:537:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:542:14:547:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:543:14:543:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:545:17:547:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:549:9:570:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:552:14:557:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:553:14:553:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:555:17:557:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:558:12:558:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:562:12:567:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:563:12:563:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:565:15:567:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:568:11:570:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:571:9:573:51 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:574:9:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:575:14:594:47 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:578:16:583:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:579:16:579:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:581:19:583:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:588:18:593:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:589:18:589:66 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:591:21:593:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:595:12:616:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:598:14:603:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:599:14:599:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:601:17:603:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:604:12:604:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:608:16:613:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:609:16:609:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:611:19:613:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:614:15:616:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:618:12:637:45 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:621:14:626:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:622:14:622:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:624:17:626:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:631:16:636:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:632:16:632:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:634:19:636:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:638:11:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:641:16:646:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:642:16:642:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:644:19:646:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:647:14:647:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:651:14:656:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:652:14:652:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:654:17:656:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:657:13:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:685:20:685:36 | ... ? ... : ... | 0.0 | 0.0 | 100.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | | test.cpp:121:3:121:12 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | | test.cpp:122:3:122:12 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected index 3b3a00df6b9..90f786b6cef 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected @@ -77,77 +77,77 @@ | test.c:426:22:426:82 | ... ? ... : ... | 0.53843358 | 0.53843358 | 0.13204114 | | test.c:426:26:426:69 | ... ? ... : ... | 0.53843358 | 0.53843358 | 0.44996679 | | test.c:426:30:426:56 | ... ? ... : ... | 0.53843358 | 0.42186276 | 0.53843358 | -| test.c:468:4:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:468:5:470:49 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:471:6:553:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:472:8:490:41 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:475:10:479:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:475:31:475:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:477:13:479:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:484:12:489:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:485:12:485:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:487:15:489:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:491:6:510:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:494:8:498:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:494:29:494:77 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:496:11:498:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:499:6:499:54 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:503:10:507:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:503:31:503:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:505:13:507:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:508:9:510:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:512:10:531:43 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:515:12:520:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:516:12:516:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:518:15:520:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:525:14:530:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:526:14:526:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:528:17:530:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:532:9:553:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:535:14:540:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:536:14:536:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:538:17:540:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:541:12:541:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:545:12:550:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:546:12:546:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:548:15:550:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:551:11:553:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:554:9:556:51 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:557:9:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:558:14:577:47 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:561:16:566:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:562:16:562:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:564:19:566:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:571:18:576:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:572:18:572:66 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:574:21:576:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:578:12:599:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:581:14:586:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:582:14:582:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:584:17:586:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:587:12:587:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:591:16:596:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:592:16:592:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:594:19:596:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:597:15:599:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:601:12:620:45 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:604:14:609:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:605:14:605:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:607:17:609:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:614:16:619:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:615:16:615:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:617:19:619:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:621:11:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:624:16:629:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:625:16:625:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:627:19:629:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:630:14:630:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:634:14:639:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:635:14:635:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:637:17:639:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:640:13:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:668:20:668:36 | ... ? ... : ... | 100.0 | 99.0 | 100.0 | -| test.c:880:5:880:14 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | -| test.c:881:5:881:14 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:485:5:487:49 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:488:6:570:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:489:8:507:41 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:492:10:496:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:492:31:492:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:494:13:496:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:501:12:506:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:502:12:502:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:504:15:506:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:508:6:527:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:511:8:515:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:511:29:511:77 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:513:11:515:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:516:6:516:54 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:520:10:524:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:520:31:520:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:522:13:524:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:525:9:527:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:529:10:548:43 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:532:12:537:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:533:12:533:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:535:15:537:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:542:14:547:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:543:14:543:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:545:17:547:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:549:9:570:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:552:14:557:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:553:14:553:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:555:17:557:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:558:12:558:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:562:12:567:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:563:12:563:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:565:15:567:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:568:11:570:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:571:9:573:51 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:574:9:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:575:14:594:47 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:578:16:583:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:579:16:579:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:581:19:583:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:588:18:593:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:589:18:589:66 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:591:21:593:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:595:12:616:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:598:14:603:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:599:14:599:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:601:17:603:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:604:12:604:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:608:16:613:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:609:16:609:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:611:19:613:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:614:15:616:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:618:12:637:45 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:621:14:626:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:622:14:622:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:624:17:626:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:631:16:636:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:632:16:632:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:634:19:636:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:638:11:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:641:16:646:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:642:16:642:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:644:19:646:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:647:14:647:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:651:14:656:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:652:14:652:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:654:17:656:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:657:13:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:685:20:685:36 | ... ? ... : ... | 100.0 | 99.0 | 100.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | | test.cpp:121:3:121:12 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | | test.cpp:122:3:122:12 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c index 71f28e8f605..0f5ee451dff 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c @@ -446,6 +446,23 @@ int repeated_if_statements(unsigned int rhs) { return rhs; // rhs has 6 bounds } +int repeated_if_else_statements(unsigned int rhs) { + // Test how many bounds we estimate for repeated `if`-`else` statements that + // guard the same variable. + if (rhs < 10) { rhs << 1; } else { rhs << 2; } + if (rhs < 11) { rhs << 1; } else { rhs << 2; } + if (rhs < 12) { rhs << 1; } else { rhs << 2; } + if (rhs < 13) { rhs << 1; } else { rhs << 2; } + if (rhs < 14) { rhs << 1; } else { rhs << 2; } + if (rhs < 15) { rhs << 1; } else { rhs << 2; } + if (rhs < 16) { rhs << 1; } else { rhs << 2; } + if (rhs < 17) { rhs << 1; } else { rhs << 2; } + if (rhs < 18) { rhs << 1; } else { rhs << 2; } + if (rhs < 19) { rhs << 1; } else { rhs << 2; } + if (rhs < 20) { rhs << 1; } else { rhs << 2; } + return rhs; // rhs has 12 bounds +} + int ne_phi_nodes(int a, int b) { if (a == 17) { if (b == 23) { diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected index a4aee501a94..29b428bc6af 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected @@ -513,519 +513,553 @@ | test.c:445:7:445:9 | rhs | 4294967295 | | test.c:445:19:445:21 | rhs | 15 | | test.c:446:10:446:12 | rhs | 4294967295 | -| test.c:450:7:450:7 | a | 2147483647 | -| test.c:451:9:451:9 | b | 2147483647 | -| test.c:452:7:452:7 | a | 17 | -| test.c:452:12:452:12 | b | 23 | -| test.c:454:9:454:9 | a | 40 | -| test.c:455:7:455:7 | b | 2147483647 | -| test.c:460:11:460:11 | a | 2147483647 | -| test.c:460:15:460:15 | b | 2147483647 | -| test.c:461:10:461:10 | a | 2147483647 | -| test.c:461:14:461:14 | b | 2147483647 | -| test.c:468:10:468:11 | ip | 4294967295 | -| test.c:468:20:468:21 | ip | 4294967295 | -| test.c:468:40:468:41 | ip | 4294967295 | -| test.c:469:14:469:15 | ip | 4294967295 | -| test.c:470:14:470:15 | ip | 4294967295 | -| test.c:470:34:470:35 | ip | 4294967295 | -| test.c:471:11:471:12 | ip | 4294967295 | -| test.c:472:13:472:14 | ip | 4294967295 | -| test.c:473:14:473:15 | ip | 4294967295 | -| test.c:474:14:474:15 | ip | 4294967295 | -| test.c:475:15:475:16 | ip | 4294967295 | -| test.c:475:41:475:42 | ip | 4294967295 | -| test.c:475:52:475:53 | ip | 4294967295 | -| test.c:475:67:475:68 | ip | 4294967295 | -| test.c:475:78:475:79 | ip | 4294967295 | -| test.c:476:18:476:19 | ip | 4294967295 | -| test.c:477:23:477:24 | ip | 4294967295 | -| test.c:477:34:477:35 | ip | 4294967295 | -| test.c:478:25:478:26 | ip | 4294967295 | -| test.c:479:20:479:21 | ip | 4294967295 | -| test.c:480:11:480:12 | ip | 4294967295 | -| test.c:480:26:480:27 | ip | 4294967295 | -| test.c:481:16:481:17 | ip | 4294967295 | -| test.c:482:16:482:17 | ip | 4294967295 | -| test.c:483:16:483:17 | ip | 4294967295 | -| test.c:484:17:484:18 | ip | 4294967295 | -| test.c:485:22:485:23 | ip | 4294967295 | -| test.c:485:33:485:34 | ip | 4294967295 | -| test.c:485:48:485:49 | ip | 4294967295 | -| test.c:485:59:485:60 | ip | 4294967295 | -| test.c:486:20:486:21 | ip | 4294967295 | -| test.c:487:25:487:26 | ip | 4294967295 | -| test.c:487:36:487:37 | ip | 4294967295 | -| test.c:488:27:488:28 | ip | 4294967295 | -| test.c:489:22:489:23 | ip | 4294967295 | -| test.c:490:15:490:16 | ip | 4294967295 | -| test.c:490:30:490:31 | ip | 4294967295 | -| test.c:491:11:491:12 | ip | 4294967295 | -| test.c:492:12:492:13 | ip | 4294967295 | -| test.c:493:12:493:13 | ip | 4294967295 | -| test.c:494:13:494:14 | ip | 4294967295 | -| test.c:494:39:494:40 | ip | 4294967295 | -| test.c:494:50:494:51 | ip | 4294967295 | -| test.c:494:65:494:66 | ip | 4294967295 | -| test.c:494:76:494:77 | ip | 4294967295 | -| test.c:495:16:495:17 | ip | 4294967295 | -| test.c:496:21:496:22 | ip | 4294967295 | -| test.c:496:32:496:33 | ip | 4294967295 | -| test.c:497:23:497:24 | ip | 4294967295 | -| test.c:498:18:498:19 | ip | 4294967295 | -| test.c:499:11:499:12 | ip | 4294967295 | -| test.c:499:17:499:18 | ip | 4294967295 | -| test.c:499:37:499:38 | ip | 4294967295 | -| test.c:499:43:499:44 | ip | 4294967295 | -| test.c:500:14:500:15 | ip | 4294967295 | -| test.c:501:14:501:15 | ip | 4294967295 | -| test.c:502:14:502:15 | ip | 4294967295 | -| test.c:503:15:503:16 | ip | 4294967295 | -| test.c:503:41:503:42 | ip | 4294967295 | -| test.c:503:52:503:53 | ip | 4294967295 | -| test.c:503:67:503:68 | ip | 4294967295 | -| test.c:503:78:503:79 | ip | 4294967295 | -| test.c:504:18:504:19 | ip | 4294967295 | -| test.c:505:23:505:24 | ip | 4294967295 | -| test.c:505:34:505:35 | ip | 4294967295 | -| test.c:506:25:506:26 | ip | 4294967295 | -| test.c:507:20:507:21 | ip | 4294967295 | -| test.c:508:14:508:15 | ip | 4294967295 | -| test.c:508:20:508:21 | ip | 4294967295 | -| test.c:509:16:509:17 | ip | 4294967295 | +| test.c:452:7:452:9 | rhs | 4294967295 | +| test.c:452:19:452:21 | rhs | 9 | +| test.c:452:38:452:40 | rhs | 4294967295 | +| test.c:453:7:453:9 | rhs | 4294967295 | +| test.c:453:19:453:21 | rhs | 10 | +| test.c:453:38:453:40 | rhs | 4294967295 | +| test.c:454:7:454:9 | rhs | 4294967295 | +| test.c:454:19:454:21 | rhs | 11 | +| test.c:454:38:454:40 | rhs | 4294967295 | +| test.c:455:7:455:9 | rhs | 4294967295 | +| test.c:455:19:455:21 | rhs | 12 | +| test.c:455:38:455:40 | rhs | 4294967295 | +| test.c:456:7:456:9 | rhs | 4294967295 | +| test.c:456:19:456:21 | rhs | 13 | +| test.c:456:38:456:40 | rhs | 4294967295 | +| test.c:457:7:457:9 | rhs | 4294967295 | +| test.c:457:19:457:21 | rhs | 14 | +| test.c:457:38:457:40 | rhs | 4294967295 | +| test.c:458:7:458:9 | rhs | 4294967295 | +| test.c:458:19:458:21 | rhs | 15 | +| test.c:458:38:458:40 | rhs | 4294967295 | +| test.c:459:7:459:9 | rhs | 4294967295 | +| test.c:459:19:459:21 | rhs | 16 | +| test.c:459:38:459:40 | rhs | 4294967295 | +| test.c:460:7:460:9 | rhs | 4294967295 | +| test.c:460:19:460:21 | rhs | 17 | +| test.c:460:38:460:40 | rhs | 4294967295 | +| test.c:461:7:461:9 | rhs | 4294967295 | +| test.c:461:19:461:21 | rhs | 18 | +| test.c:461:38:461:40 | rhs | 4294967295 | +| test.c:462:7:462:9 | rhs | 4294967295 | +| test.c:462:19:462:21 | rhs | 19 | +| test.c:462:38:462:40 | rhs | 4294967295 | +| test.c:463:10:463:12 | rhs | 4294967295 | +| test.c:467:7:467:7 | a | 2147483647 | +| test.c:468:9:468:9 | b | 2147483647 | +| test.c:469:7:469:7 | a | 17 | +| test.c:469:12:469:12 | b | 23 | +| test.c:471:9:471:9 | a | 40 | +| test.c:472:7:472:7 | b | 2147483647 | +| test.c:477:11:477:11 | a | 2147483647 | +| test.c:477:15:477:15 | b | 2147483647 | +| test.c:478:10:478:10 | a | 2147483647 | +| test.c:478:14:478:14 | b | 2147483647 | +| test.c:485:10:485:11 | ip | 4294967295 | +| test.c:485:20:485:21 | ip | 4294967295 | +| test.c:485:40:485:41 | ip | 4294967295 | +| test.c:486:14:486:15 | ip | 4294967295 | +| test.c:487:14:487:15 | ip | 4294967295 | +| test.c:487:34:487:35 | ip | 4294967295 | +| test.c:488:11:488:12 | ip | 4294967295 | +| test.c:489:13:489:14 | ip | 4294967295 | +| test.c:490:14:490:15 | ip | 4294967295 | +| test.c:491:14:491:15 | ip | 4294967295 | +| test.c:492:15:492:16 | ip | 4294967295 | +| test.c:492:41:492:42 | ip | 4294967295 | +| test.c:492:52:492:53 | ip | 4294967295 | +| test.c:492:67:492:68 | ip | 4294967295 | +| test.c:492:78:492:79 | ip | 4294967295 | +| test.c:493:18:493:19 | ip | 4294967295 | +| test.c:494:23:494:24 | ip | 4294967295 | +| test.c:494:34:494:35 | ip | 4294967295 | +| test.c:495:25:495:26 | ip | 4294967295 | +| test.c:496:20:496:21 | ip | 4294967295 | +| test.c:497:11:497:12 | ip | 4294967295 | +| test.c:497:26:497:27 | ip | 4294967295 | +| test.c:498:16:498:17 | ip | 4294967295 | +| test.c:499:16:499:17 | ip | 4294967295 | +| test.c:500:16:500:17 | ip | 4294967295 | +| test.c:501:17:501:18 | ip | 4294967295 | +| test.c:502:22:502:23 | ip | 4294967295 | +| test.c:502:33:502:34 | ip | 4294967295 | +| test.c:502:48:502:49 | ip | 4294967295 | +| test.c:502:59:502:60 | ip | 4294967295 | +| test.c:503:20:503:21 | ip | 4294967295 | +| test.c:504:25:504:26 | ip | 4294967295 | +| test.c:504:36:504:37 | ip | 4294967295 | +| test.c:505:27:505:28 | ip | 4294967295 | +| test.c:506:22:506:23 | ip | 4294967295 | +| test.c:507:15:507:16 | ip | 4294967295 | +| test.c:507:30:507:31 | ip | 4294967295 | +| test.c:508:11:508:12 | ip | 4294967295 | +| test.c:509:12:509:13 | ip | 4294967295 | | test.c:510:12:510:13 | ip | 4294967295 | -| test.c:511:14:511:15 | ip | 4294967295 | -| test.c:512:15:512:16 | ip | 4294967295 | -| test.c:513:16:513:17 | ip | 4294967295 | -| test.c:514:16:514:17 | ip | 4294967295 | -| test.c:515:17:515:18 | ip | 4294967295 | -| test.c:516:22:516:23 | ip | 4294967295 | -| test.c:516:33:516:34 | ip | 4294967295 | -| test.c:516:48:516:49 | ip | 4294967295 | -| test.c:516:59:516:60 | ip | 4294967295 | -| test.c:517:20:517:21 | ip | 4294967295 | -| test.c:518:25:518:26 | ip | 4294967295 | -| test.c:518:36:518:37 | ip | 4294967295 | -| test.c:519:27:519:28 | ip | 4294967295 | -| test.c:520:22:520:23 | ip | 4294967295 | -| test.c:521:13:521:14 | ip | 4294967295 | -| test.c:521:28:521:29 | ip | 4294967295 | -| test.c:522:18:522:19 | ip | 4294967295 | -| test.c:523:18:523:19 | ip | 4294967295 | -| test.c:524:18:524:19 | ip | 4294967295 | -| test.c:525:19:525:20 | ip | 4294967295 | -| test.c:526:24:526:25 | ip | 4294967295 | -| test.c:526:35:526:36 | ip | 4294967295 | -| test.c:526:50:526:51 | ip | 4294967295 | -| test.c:526:61:526:62 | ip | 4294967295 | -| test.c:527:22:527:23 | ip | 4294967295 | -| test.c:528:27:528:28 | ip | 4294967295 | -| test.c:528:38:528:39 | ip | 4294967295 | -| test.c:529:29:529:30 | ip | 4294967295 | -| test.c:530:24:530:25 | ip | 4294967295 | -| test.c:531:17:531:18 | ip | 4294967295 | -| test.c:531:32:531:33 | ip | 4294967295 | -| test.c:532:14:532:15 | ip | 4294967295 | -| test.c:533:18:533:19 | ip | 4294967295 | -| test.c:534:18:534:19 | ip | 4294967295 | -| test.c:535:19:535:20 | ip | 4294967295 | -| test.c:536:24:536:25 | ip | 4294967295 | -| test.c:536:35:536:36 | ip | 4294967295 | -| test.c:536:50:536:51 | ip | 4294967295 | -| test.c:536:61:536:62 | ip | 4294967295 | +| test.c:511:13:511:14 | ip | 4294967295 | +| test.c:511:39:511:40 | ip | 4294967295 | +| test.c:511:50:511:51 | ip | 4294967295 | +| test.c:511:65:511:66 | ip | 4294967295 | +| test.c:511:76:511:77 | ip | 4294967295 | +| test.c:512:16:512:17 | ip | 4294967295 | +| test.c:513:21:513:22 | ip | 4294967295 | +| test.c:513:32:513:33 | ip | 4294967295 | +| test.c:514:23:514:24 | ip | 4294967295 | +| test.c:515:18:515:19 | ip | 4294967295 | +| test.c:516:11:516:12 | ip | 4294967295 | +| test.c:516:17:516:18 | ip | 4294967295 | +| test.c:516:37:516:38 | ip | 4294967295 | +| test.c:516:43:516:44 | ip | 4294967295 | +| test.c:517:14:517:15 | ip | 4294967295 | +| test.c:518:14:518:15 | ip | 4294967295 | +| test.c:519:14:519:15 | ip | 4294967295 | +| test.c:520:15:520:16 | ip | 4294967295 | +| test.c:520:41:520:42 | ip | 4294967295 | +| test.c:520:52:520:53 | ip | 4294967295 | +| test.c:520:67:520:68 | ip | 4294967295 | +| test.c:520:78:520:79 | ip | 4294967295 | +| test.c:521:18:521:19 | ip | 4294967295 | +| test.c:522:23:522:24 | ip | 4294967295 | +| test.c:522:34:522:35 | ip | 4294967295 | +| test.c:523:25:523:26 | ip | 4294967295 | +| test.c:524:20:524:21 | ip | 4294967295 | +| test.c:525:14:525:15 | ip | 4294967295 | +| test.c:525:20:525:21 | ip | 4294967295 | +| test.c:526:16:526:17 | ip | 4294967295 | +| test.c:527:12:527:13 | ip | 4294967295 | +| test.c:528:14:528:15 | ip | 4294967295 | +| test.c:529:15:529:16 | ip | 4294967295 | +| test.c:530:16:530:17 | ip | 4294967295 | +| test.c:531:16:531:17 | ip | 4294967295 | +| test.c:532:17:532:18 | ip | 4294967295 | +| test.c:533:22:533:23 | ip | 4294967295 | +| test.c:533:33:533:34 | ip | 4294967295 | +| test.c:533:48:533:49 | ip | 4294967295 | +| test.c:533:59:533:60 | ip | 4294967295 | +| test.c:534:20:534:21 | ip | 4294967295 | +| test.c:535:25:535:26 | ip | 4294967295 | +| test.c:535:36:535:37 | ip | 4294967295 | +| test.c:536:27:536:28 | ip | 4294967295 | | test.c:537:22:537:23 | ip | 4294967295 | -| test.c:538:27:538:28 | ip | 4294967295 | -| test.c:538:38:538:39 | ip | 4294967295 | -| test.c:539:29:539:30 | ip | 4294967295 | -| test.c:540:24:540:25 | ip | 4294967295 | -| test.c:541:17:541:18 | ip | 4294967295 | -| test.c:541:23:541:24 | ip | 4294967295 | -| test.c:541:43:541:44 | ip | 4294967295 | -| test.c:541:49:541:50 | ip | 4294967295 | -| test.c:542:16:542:17 | ip | 4294967295 | -| test.c:543:16:543:17 | ip | 4294967295 | -| test.c:544:16:544:17 | ip | 4294967295 | -| test.c:545:17:545:18 | ip | 4294967295 | -| test.c:546:22:546:23 | ip | 4294967295 | -| test.c:546:33:546:34 | ip | 4294967295 | -| test.c:546:48:546:49 | ip | 4294967295 | -| test.c:546:59:546:60 | ip | 4294967295 | -| test.c:547:20:547:21 | ip | 4294967295 | -| test.c:548:25:548:26 | ip | 4294967295 | -| test.c:548:36:548:37 | ip | 4294967295 | -| test.c:549:27:549:28 | ip | 4294967295 | -| test.c:550:22:550:23 | ip | 4294967295 | -| test.c:551:16:551:17 | ip | 4294967295 | -| test.c:551:22:551:23 | ip | 4294967295 | -| test.c:552:18:552:19 | ip | 4294967295 | -| test.c:553:14:553:15 | ip | 4294967295 | -| test.c:554:14:554:15 | ip | 4294967295 | -| test.c:554:24:554:25 | ip | 4294967295 | -| test.c:554:44:554:45 | ip | 4294967295 | -| test.c:555:16:555:17 | ip | 4294967295 | -| test.c:556:16:556:17 | ip | 4294967295 | -| test.c:556:36:556:37 | ip | 4294967295 | -| test.c:557:14:557:15 | ip | 4294967295 | -| test.c:558:19:558:20 | ip | 4294967295 | -| test.c:559:20:559:21 | ip | 4294967295 | -| test.c:560:20:560:21 | ip | 4294967295 | -| test.c:561:21:561:22 | ip | 4294967295 | -| test.c:562:26:562:27 | ip | 4294967295 | -| test.c:562:37:562:38 | ip | 4294967295 | -| test.c:562:52:562:53 | ip | 4294967295 | -| test.c:562:63:562:64 | ip | 4294967295 | -| test.c:563:24:563:25 | ip | 4294967295 | -| test.c:564:29:564:30 | ip | 4294967295 | -| test.c:564:40:564:41 | ip | 4294967295 | -| test.c:565:31:565:32 | ip | 4294967295 | -| test.c:566:26:566:27 | ip | 4294967295 | -| test.c:567:17:567:18 | ip | 4294967295 | -| test.c:567:32:567:33 | ip | 4294967295 | +| test.c:538:13:538:14 | ip | 4294967295 | +| test.c:538:28:538:29 | ip | 4294967295 | +| test.c:539:18:539:19 | ip | 4294967295 | +| test.c:540:18:540:19 | ip | 4294967295 | +| test.c:541:18:541:19 | ip | 4294967295 | +| test.c:542:19:542:20 | ip | 4294967295 | +| test.c:543:24:543:25 | ip | 4294967295 | +| test.c:543:35:543:36 | ip | 4294967295 | +| test.c:543:50:543:51 | ip | 4294967295 | +| test.c:543:61:543:62 | ip | 4294967295 | +| test.c:544:22:544:23 | ip | 4294967295 | +| test.c:545:27:545:28 | ip | 4294967295 | +| test.c:545:38:545:39 | ip | 4294967295 | +| test.c:546:29:546:30 | ip | 4294967295 | +| test.c:547:24:547:25 | ip | 4294967295 | +| test.c:548:17:548:18 | ip | 4294967295 | +| test.c:548:32:548:33 | ip | 4294967295 | +| test.c:549:14:549:15 | ip | 4294967295 | +| test.c:550:18:550:19 | ip | 4294967295 | +| test.c:551:18:551:19 | ip | 4294967295 | +| test.c:552:19:552:20 | ip | 4294967295 | +| test.c:553:24:553:25 | ip | 4294967295 | +| test.c:553:35:553:36 | ip | 4294967295 | +| test.c:553:50:553:51 | ip | 4294967295 | +| test.c:553:61:553:62 | ip | 4294967295 | +| test.c:554:22:554:23 | ip | 4294967295 | +| test.c:555:27:555:28 | ip | 4294967295 | +| test.c:555:38:555:39 | ip | 4294967295 | +| test.c:556:29:556:30 | ip | 4294967295 | +| test.c:557:24:557:25 | ip | 4294967295 | +| test.c:558:17:558:18 | ip | 4294967295 | +| test.c:558:23:558:24 | ip | 4294967295 | +| test.c:558:43:558:44 | ip | 4294967295 | +| test.c:558:49:558:50 | ip | 4294967295 | +| test.c:559:16:559:17 | ip | 4294967295 | +| test.c:560:16:560:17 | ip | 4294967295 | +| test.c:561:16:561:17 | ip | 4294967295 | +| test.c:562:17:562:18 | ip | 4294967295 | +| test.c:563:22:563:23 | ip | 4294967295 | +| test.c:563:33:563:34 | ip | 4294967295 | +| test.c:563:48:563:49 | ip | 4294967295 | +| test.c:563:59:563:60 | ip | 4294967295 | +| test.c:564:20:564:21 | ip | 4294967295 | +| test.c:565:25:565:26 | ip | 4294967295 | +| test.c:565:36:565:37 | ip | 4294967295 | +| test.c:566:27:566:28 | ip | 4294967295 | +| test.c:567:22:567:23 | ip | 4294967295 | +| test.c:568:16:568:17 | ip | 4294967295 | | test.c:568:22:568:23 | ip | 4294967295 | -| test.c:569:22:569:23 | ip | 4294967295 | -| test.c:570:22:570:23 | ip | 4294967295 | -| test.c:571:23:571:24 | ip | 4294967295 | -| test.c:572:28:572:29 | ip | 4294967295 | -| test.c:572:39:572:40 | ip | 4294967295 | -| test.c:572:54:572:55 | ip | 4294967295 | -| test.c:572:65:572:66 | ip | 4294967295 | -| test.c:573:26:573:27 | ip | 4294967295 | -| test.c:574:31:574:32 | ip | 4294967295 | -| test.c:574:42:574:43 | ip | 4294967295 | -| test.c:575:33:575:34 | ip | 4294967295 | -| test.c:576:28:576:29 | ip | 4294967295 | -| test.c:577:21:577:22 | ip | 4294967295 | -| test.c:577:36:577:37 | ip | 4294967295 | -| test.c:578:17:578:18 | ip | 4294967295 | -| test.c:579:18:579:19 | ip | 4294967295 | -| test.c:580:18:580:19 | ip | 4294967295 | -| test.c:581:19:581:20 | ip | 4294967295 | -| test.c:582:24:582:25 | ip | 4294967295 | -| test.c:582:35:582:36 | ip | 4294967295 | -| test.c:582:50:582:51 | ip | 4294967295 | -| test.c:582:61:582:62 | ip | 4294967295 | -| test.c:583:22:583:23 | ip | 4294967295 | -| test.c:584:27:584:28 | ip | 4294967295 | -| test.c:584:38:584:39 | ip | 4294967295 | -| test.c:585:29:585:30 | ip | 4294967295 | -| test.c:586:24:586:25 | ip | 4294967295 | -| test.c:587:17:587:18 | ip | 4294967295 | -| test.c:587:23:587:24 | ip | 4294967295 | -| test.c:587:43:587:44 | ip | 4294967295 | -| test.c:587:49:587:50 | ip | 4294967295 | -| test.c:588:20:588:21 | ip | 4294967295 | -| test.c:589:20:589:21 | ip | 4294967295 | -| test.c:590:20:590:21 | ip | 4294967295 | -| test.c:591:21:591:22 | ip | 4294967295 | -| test.c:592:26:592:27 | ip | 4294967295 | -| test.c:592:37:592:38 | ip | 4294967295 | -| test.c:592:52:592:53 | ip | 4294967295 | -| test.c:592:63:592:64 | ip | 4294967295 | -| test.c:593:24:593:25 | ip | 4294967295 | -| test.c:594:29:594:30 | ip | 4294967295 | -| test.c:594:40:594:41 | ip | 4294967295 | -| test.c:595:31:595:32 | ip | 4294967295 | -| test.c:596:26:596:27 | ip | 4294967295 | -| test.c:597:20:597:21 | ip | 4294967295 | -| test.c:597:26:597:27 | ip | 4294967295 | -| test.c:598:22:598:23 | ip | 4294967295 | -| test.c:599:18:599:19 | ip | 4294967295 | -| test.c:600:16:600:17 | ip | 4294967295 | -| test.c:601:17:601:18 | ip | 4294967295 | -| test.c:602:18:602:19 | ip | 4294967295 | -| test.c:603:18:603:19 | ip | 4294967295 | -| test.c:604:19:604:20 | ip | 4294967295 | -| test.c:605:24:605:25 | ip | 4294967295 | -| test.c:605:35:605:36 | ip | 4294967295 | -| test.c:605:50:605:51 | ip | 4294967295 | -| test.c:605:61:605:62 | ip | 4294967295 | -| test.c:606:22:606:23 | ip | 4294967295 | -| test.c:607:27:607:28 | ip | 4294967295 | -| test.c:607:38:607:39 | ip | 4294967295 | -| test.c:608:29:608:30 | ip | 4294967295 | -| test.c:609:24:609:25 | ip | 4294967295 | -| test.c:610:15:610:16 | ip | 4294967295 | -| test.c:610:30:610:31 | ip | 4294967295 | -| test.c:611:20:611:21 | ip | 4294967295 | -| test.c:612:20:612:21 | ip | 4294967295 | -| test.c:613:20:613:21 | ip | 4294967295 | -| test.c:614:21:614:22 | ip | 4294967295 | -| test.c:615:26:615:27 | ip | 4294967295 | -| test.c:615:37:615:38 | ip | 4294967295 | -| test.c:615:52:615:53 | ip | 4294967295 | -| test.c:615:63:615:64 | ip | 4294967295 | -| test.c:616:24:616:25 | ip | 4294967295 | -| test.c:617:29:617:30 | ip | 4294967295 | -| test.c:617:40:617:41 | ip | 4294967295 | -| test.c:618:31:618:32 | ip | 4294967295 | -| test.c:619:26:619:27 | ip | 4294967295 | -| test.c:620:19:620:20 | ip | 4294967295 | -| test.c:620:34:620:35 | ip | 4294967295 | -| test.c:621:16:621:17 | ip | 4294967295 | -| test.c:622:20:622:21 | ip | 4294967295 | -| test.c:623:20:623:21 | ip | 4294967295 | -| test.c:624:21:624:22 | ip | 4294967295 | -| test.c:625:26:625:27 | ip | 4294967295 | -| test.c:625:37:625:38 | ip | 4294967295 | -| test.c:625:52:625:53 | ip | 4294967295 | -| test.c:625:63:625:64 | ip | 4294967295 | +| test.c:569:18:569:19 | ip | 4294967295 | +| test.c:570:14:570:15 | ip | 4294967295 | +| test.c:571:14:571:15 | ip | 4294967295 | +| test.c:571:24:571:25 | ip | 4294967295 | +| test.c:571:44:571:45 | ip | 4294967295 | +| test.c:572:16:572:17 | ip | 4294967295 | +| test.c:573:16:573:17 | ip | 4294967295 | +| test.c:573:36:573:37 | ip | 4294967295 | +| test.c:574:14:574:15 | ip | 4294967295 | +| test.c:575:19:575:20 | ip | 4294967295 | +| test.c:576:20:576:21 | ip | 4294967295 | +| test.c:577:20:577:21 | ip | 4294967295 | +| test.c:578:21:578:22 | ip | 4294967295 | +| test.c:579:26:579:27 | ip | 4294967295 | +| test.c:579:37:579:38 | ip | 4294967295 | +| test.c:579:52:579:53 | ip | 4294967295 | +| test.c:579:63:579:64 | ip | 4294967295 | +| test.c:580:24:580:25 | ip | 4294967295 | +| test.c:581:29:581:30 | ip | 4294967295 | +| test.c:581:40:581:41 | ip | 4294967295 | +| test.c:582:31:582:32 | ip | 4294967295 | +| test.c:583:26:583:27 | ip | 4294967295 | +| test.c:584:17:584:18 | ip | 4294967295 | +| test.c:584:32:584:33 | ip | 4294967295 | +| test.c:585:22:585:23 | ip | 4294967295 | +| test.c:586:22:586:23 | ip | 4294967295 | +| test.c:587:22:587:23 | ip | 4294967295 | +| test.c:588:23:588:24 | ip | 4294967295 | +| test.c:589:28:589:29 | ip | 4294967295 | +| test.c:589:39:589:40 | ip | 4294967295 | +| test.c:589:54:589:55 | ip | 4294967295 | +| test.c:589:65:589:66 | ip | 4294967295 | +| test.c:590:26:590:27 | ip | 4294967295 | +| test.c:591:31:591:32 | ip | 4294967295 | +| test.c:591:42:591:43 | ip | 4294967295 | +| test.c:592:33:592:34 | ip | 4294967295 | +| test.c:593:28:593:29 | ip | 4294967295 | +| test.c:594:21:594:22 | ip | 4294967295 | +| test.c:594:36:594:37 | ip | 4294967295 | +| test.c:595:17:595:18 | ip | 4294967295 | +| test.c:596:18:596:19 | ip | 4294967295 | +| test.c:597:18:597:19 | ip | 4294967295 | +| test.c:598:19:598:20 | ip | 4294967295 | +| test.c:599:24:599:25 | ip | 4294967295 | +| test.c:599:35:599:36 | ip | 4294967295 | +| test.c:599:50:599:51 | ip | 4294967295 | +| test.c:599:61:599:62 | ip | 4294967295 | +| test.c:600:22:600:23 | ip | 4294967295 | +| test.c:601:27:601:28 | ip | 4294967295 | +| test.c:601:38:601:39 | ip | 4294967295 | +| test.c:602:29:602:30 | ip | 4294967295 | +| test.c:603:24:603:25 | ip | 4294967295 | +| test.c:604:17:604:18 | ip | 4294967295 | +| test.c:604:23:604:24 | ip | 4294967295 | +| test.c:604:43:604:44 | ip | 4294967295 | +| test.c:604:49:604:50 | ip | 4294967295 | +| test.c:605:20:605:21 | ip | 4294967295 | +| test.c:606:20:606:21 | ip | 4294967295 | +| test.c:607:20:607:21 | ip | 4294967295 | +| test.c:608:21:608:22 | ip | 4294967295 | +| test.c:609:26:609:27 | ip | 4294967295 | +| test.c:609:37:609:38 | ip | 4294967295 | +| test.c:609:52:609:53 | ip | 4294967295 | +| test.c:609:63:609:64 | ip | 4294967295 | +| test.c:610:24:610:25 | ip | 4294967295 | +| test.c:611:29:611:30 | ip | 4294967295 | +| test.c:611:40:611:41 | ip | 4294967295 | +| test.c:612:31:612:32 | ip | 4294967295 | +| test.c:613:26:613:27 | ip | 4294967295 | +| test.c:614:20:614:21 | ip | 4294967295 | +| test.c:614:26:614:27 | ip | 4294967295 | +| test.c:615:22:615:23 | ip | 4294967295 | +| test.c:616:18:616:19 | ip | 4294967295 | +| test.c:617:16:617:17 | ip | 4294967295 | +| test.c:618:17:618:18 | ip | 4294967295 | +| test.c:619:18:619:19 | ip | 4294967295 | +| test.c:620:18:620:19 | ip | 4294967295 | +| test.c:621:19:621:20 | ip | 4294967295 | +| test.c:622:24:622:25 | ip | 4294967295 | +| test.c:622:35:622:36 | ip | 4294967295 | +| test.c:622:50:622:51 | ip | 4294967295 | +| test.c:622:61:622:62 | ip | 4294967295 | +| test.c:623:22:623:23 | ip | 4294967295 | +| test.c:624:27:624:28 | ip | 4294967295 | +| test.c:624:38:624:39 | ip | 4294967295 | +| test.c:625:29:625:30 | ip | 4294967295 | | test.c:626:24:626:25 | ip | 4294967295 | -| test.c:627:29:627:30 | ip | 4294967295 | -| test.c:627:40:627:41 | ip | 4294967295 | -| test.c:628:31:628:32 | ip | 4294967295 | -| test.c:629:26:629:27 | ip | 4294967295 | -| test.c:630:19:630:20 | ip | 4294967295 | -| test.c:630:25:630:26 | ip | 4294967295 | -| test.c:630:45:630:46 | ip | 4294967295 | -| test.c:630:51:630:52 | ip | 4294967295 | -| test.c:631:18:631:19 | ip | 4294967295 | -| test.c:632:18:632:19 | ip | 4294967295 | -| test.c:633:18:633:19 | ip | 4294967295 | -| test.c:634:19:634:20 | ip | 4294967295 | -| test.c:635:24:635:25 | ip | 4294967295 | -| test.c:635:35:635:36 | ip | 4294967295 | -| test.c:635:50:635:51 | ip | 4294967295 | -| test.c:635:61:635:62 | ip | 4294967295 | -| test.c:636:22:636:23 | ip | 4294967295 | -| test.c:637:27:637:28 | ip | 4294967295 | -| test.c:637:38:637:39 | ip | 4294967295 | -| test.c:638:29:638:30 | ip | 4294967295 | -| test.c:639:24:639:25 | ip | 4294967295 | -| test.c:640:18:640:19 | ip | 4294967295 | -| test.c:640:24:640:25 | ip | 4294967295 | -| test.c:641:20:641:21 | ip | 4294967295 | -| test.c:642:16:642:17 | ip | 4294967295 | -| test.c:643:10:643:23 | special_number | 4294967295 | -| test.c:651:7:651:8 | c1 | 2147483647 | -| test.c:651:13:651:13 | x | 0 | -| test.c:652:7:652:8 | c2 | 2147483647 | -| test.c:652:13:652:13 | x | 748596 | -| test.c:653:7:653:8 | c3 | 2147483647 | -| test.c:653:13:653:13 | x | 85400991 | -| test.c:654:7:654:8 | c4 | 2147483647 | -| test.c:654:13:654:13 | x | 89076886 | -| test.c:655:7:655:8 | c5 | 2147483647 | -| test.c:655:13:655:13 | x | 89175520 | -| test.c:656:7:656:8 | c1 | 2147483647 | -| test.c:656:13:656:14 | c2 | 2147483647 | -| test.c:656:19:656:19 | x | 97010505 | -| test.c:657:7:657:8 | c1 | 2147483647 | -| test.c:657:13:657:14 | c3 | 2147483647 | -| test.c:657:19:657:19 | x | 1035467903 | -| test.c:658:7:658:8 | c1 | 2147483647 | -| test.c:658:13:658:14 | c4 | 2147483647 | -| test.c:658:19:658:19 | x | 1109363551 | -| test.c:659:7:659:8 | c1 | 2147483647 | -| test.c:659:13:659:14 | c5 | 2147483647 | -| test.c:659:19:659:19 | x | 1121708983 | -| test.c:660:7:660:8 | c2 | 2147483647 | -| test.c:660:13:660:14 | c3 | 2147483647 | -| test.c:660:19:660:19 | x | 1121747830 | -| test.c:662:11:662:11 | x | 2147483647 | -| test.c:662:15:662:15 | x | 2147483647 | -| test.c:662:19:662:19 | x | 2147483647 | -| test.c:662:23:662:23 | x | 2147483647 | -| test.c:662:27:662:27 | x | 2147483647 | -| test.c:662:31:662:31 | x | 2147483647 | -| test.c:662:35:662:35 | x | 2147483647 | -| test.c:662:39:662:39 | x | 2147483647 | -| test.c:662:43:662:43 | x | 2147483647 | -| test.c:662:47:662:47 | x | 2147483647 | -| test.c:662:51:662:51 | x | 2147483647 | -| test.c:662:55:662:55 | x | 2147483647 | -| test.c:663:10:663:10 | y | 2147483647 | -| test.c:668:20:668:20 | x | 4294967295 | -| test.c:668:30:668:30 | x | 99 | -| test.c:671:3:671:4 | y1 | 4294967295 | -| test.c:671:11:671:11 | y | 100 | -| test.c:671:14:671:14 | y | 101 | -| test.c:672:3:672:4 | y2 | 4294967295 | -| test.c:672:9:672:9 | y | 101 | -| test.c:672:14:672:14 | y | 102 | -| test.c:672:22:672:22 | y | 105 | -| test.c:673:10:673:11 | y1 | 101 | -| test.c:673:15:673:16 | y2 | 105 | -| test.c:681:3:681:3 | i | 2147483647 | -| test.c:682:7:682:7 | i | 10 | -| test.c:684:3:684:3 | i | 2147483647 | -| test.c:685:3:685:3 | i | 10 | -| test.c:686:7:686:7 | i | 20 | -| test.c:688:3:688:3 | i | 2147483647 | -| test.c:689:3:689:3 | i | 40 | -| test.c:690:7:690:7 | i | 30 | -| test.c:692:3:692:3 | i | 2147483647 | -| test.c:692:7:692:7 | j | 2147483647 | -| test.c:693:7:693:7 | i | 40 | -| test.c:695:3:695:3 | i | 2147483647 | -| test.c:695:8:695:8 | j | 40 | -| test.c:696:7:696:7 | i | 50 | +| test.c:627:15:627:16 | ip | 4294967295 | +| test.c:627:30:627:31 | ip | 4294967295 | +| test.c:628:20:628:21 | ip | 4294967295 | +| test.c:629:20:629:21 | ip | 4294967295 | +| test.c:630:20:630:21 | ip | 4294967295 | +| test.c:631:21:631:22 | ip | 4294967295 | +| test.c:632:26:632:27 | ip | 4294967295 | +| test.c:632:37:632:38 | ip | 4294967295 | +| test.c:632:52:632:53 | ip | 4294967295 | +| test.c:632:63:632:64 | ip | 4294967295 | +| test.c:633:24:633:25 | ip | 4294967295 | +| test.c:634:29:634:30 | ip | 4294967295 | +| test.c:634:40:634:41 | ip | 4294967295 | +| test.c:635:31:635:32 | ip | 4294967295 | +| test.c:636:26:636:27 | ip | 4294967295 | +| test.c:637:19:637:20 | ip | 4294967295 | +| test.c:637:34:637:35 | ip | 4294967295 | +| test.c:638:16:638:17 | ip | 4294967295 | +| test.c:639:20:639:21 | ip | 4294967295 | +| test.c:640:20:640:21 | ip | 4294967295 | +| test.c:641:21:641:22 | ip | 4294967295 | +| test.c:642:26:642:27 | ip | 4294967295 | +| test.c:642:37:642:38 | ip | 4294967295 | +| test.c:642:52:642:53 | ip | 4294967295 | +| test.c:642:63:642:64 | ip | 4294967295 | +| test.c:643:24:643:25 | ip | 4294967295 | +| test.c:644:29:644:30 | ip | 4294967295 | +| test.c:644:40:644:41 | ip | 4294967295 | +| test.c:645:31:645:32 | ip | 4294967295 | +| test.c:646:26:646:27 | ip | 4294967295 | +| test.c:647:19:647:20 | ip | 4294967295 | +| test.c:647:25:647:26 | ip | 4294967295 | +| test.c:647:45:647:46 | ip | 4294967295 | +| test.c:647:51:647:52 | ip | 4294967295 | +| test.c:648:18:648:19 | ip | 4294967295 | +| test.c:649:18:649:19 | ip | 4294967295 | +| test.c:650:18:650:19 | ip | 4294967295 | +| test.c:651:19:651:20 | ip | 4294967295 | +| test.c:652:24:652:25 | ip | 4294967295 | +| test.c:652:35:652:36 | ip | 4294967295 | +| test.c:652:50:652:51 | ip | 4294967295 | +| test.c:652:61:652:62 | ip | 4294967295 | +| test.c:653:22:653:23 | ip | 4294967295 | +| test.c:654:27:654:28 | ip | 4294967295 | +| test.c:654:38:654:39 | ip | 4294967295 | +| test.c:655:29:655:30 | ip | 4294967295 | +| test.c:656:24:656:25 | ip | 4294967295 | +| test.c:657:18:657:19 | ip | 4294967295 | +| test.c:657:24:657:25 | ip | 4294967295 | +| test.c:658:20:658:21 | ip | 4294967295 | +| test.c:659:16:659:17 | ip | 4294967295 | +| test.c:660:10:660:23 | special_number | 4294967295 | +| test.c:668:7:668:8 | c1 | 2147483647 | +| test.c:668:13:668:13 | x | 0 | +| test.c:669:7:669:8 | c2 | 2147483647 | +| test.c:669:13:669:13 | x | 748596 | +| test.c:670:7:670:8 | c3 | 2147483647 | +| test.c:670:13:670:13 | x | 85400991 | +| test.c:671:7:671:8 | c4 | 2147483647 | +| test.c:671:13:671:13 | x | 89076886 | +| test.c:672:7:672:8 | c5 | 2147483647 | +| test.c:672:13:672:13 | x | 89175520 | +| test.c:673:7:673:8 | c1 | 2147483647 | +| test.c:673:13:673:14 | c2 | 2147483647 | +| test.c:673:19:673:19 | x | 97010505 | +| test.c:674:7:674:8 | c1 | 2147483647 | +| test.c:674:13:674:14 | c3 | 2147483647 | +| test.c:674:19:674:19 | x | 1035467903 | +| test.c:675:7:675:8 | c1 | 2147483647 | +| test.c:675:13:675:14 | c4 | 2147483647 | +| test.c:675:19:675:19 | x | 1109363551 | +| test.c:676:7:676:8 | c1 | 2147483647 | +| test.c:676:13:676:14 | c5 | 2147483647 | +| test.c:676:19:676:19 | x | 1121708983 | +| test.c:677:7:677:8 | c2 | 2147483647 | +| test.c:677:13:677:14 | c3 | 2147483647 | +| test.c:677:19:677:19 | x | 1121747830 | +| test.c:679:11:679:11 | x | 2147483647 | +| test.c:679:15:679:15 | x | 2147483647 | +| test.c:679:19:679:19 | x | 2147483647 | +| test.c:679:23:679:23 | x | 2147483647 | +| test.c:679:27:679:27 | x | 2147483647 | +| test.c:679:31:679:31 | x | 2147483647 | +| test.c:679:35:679:35 | x | 2147483647 | +| test.c:679:39:679:39 | x | 2147483647 | +| test.c:679:43:679:43 | x | 2147483647 | +| test.c:679:47:679:47 | x | 2147483647 | +| test.c:679:51:679:51 | x | 2147483647 | +| test.c:679:55:679:55 | x | 2147483647 | +| test.c:680:10:680:10 | y | 2147483647 | +| test.c:685:20:685:20 | x | 4294967295 | +| test.c:685:30:685:30 | x | 99 | +| test.c:688:3:688:4 | y1 | 4294967295 | +| test.c:688:11:688:11 | y | 100 | +| test.c:688:14:688:14 | y | 101 | +| test.c:689:3:689:4 | y2 | 4294967295 | +| test.c:689:9:689:9 | y | 101 | +| test.c:689:14:689:14 | y | 102 | +| test.c:689:22:689:22 | y | 105 | +| test.c:690:10:690:11 | y1 | 101 | +| test.c:690:15:690:16 | y2 | 105 | | test.c:698:3:698:3 | i | 2147483647 | -| test.c:698:13:698:13 | j | 50 | -| test.c:699:7:699:7 | i | 60 | -| test.c:706:12:706:12 | a | 4294967295 | -| test.c:706:17:706:17 | a | 4294967295 | -| test.c:706:33:706:33 | b | 4294967295 | -| test.c:706:38:706:38 | b | 4294967295 | -| test.c:707:13:707:13 | a | 11 | -| test.c:707:15:707:15 | b | 23 | -| test.c:708:5:708:9 | total | 0 | -| test.c:708:14:708:14 | r | 253 | -| test.c:710:12:710:12 | a | 4294967295 | -| test.c:710:17:710:17 | a | 4294967295 | -| test.c:710:33:710:33 | b | 4294967295 | -| test.c:710:38:710:38 | b | 4294967295 | -| test.c:711:13:711:13 | a | 11 | -| test.c:711:15:711:15 | b | 23 | -| test.c:712:5:712:9 | total | 253 | -| test.c:712:14:712:14 | r | 253 | -| test.c:714:12:714:12 | a | 4294967295 | -| test.c:714:17:714:17 | a | 4294967295 | -| test.c:714:34:714:34 | b | 4294967295 | -| test.c:714:39:714:39 | b | 4294967295 | -| test.c:715:13:715:13 | a | 11 | -| test.c:715:15:715:15 | b | 23 | -| test.c:716:5:716:9 | total | 506 | -| test.c:716:14:716:14 | r | 253 | -| test.c:719:10:719:14 | total | 759 | -| test.c:725:12:725:12 | b | 4294967295 | -| test.c:725:17:725:17 | b | 4294967295 | -| test.c:726:16:726:16 | b | 23 | -| test.c:727:5:727:9 | total | 0 | -| test.c:727:14:727:14 | r | 253 | -| test.c:729:12:729:12 | b | 4294967295 | -| test.c:729:17:729:17 | b | 4294967295 | -| test.c:730:16:730:16 | b | 23 | -| test.c:731:5:731:9 | total | 253 | -| test.c:731:14:731:14 | r | 253 | -| test.c:733:13:733:13 | b | 4294967295 | -| test.c:733:18:733:18 | b | 4294967295 | -| test.c:734:16:734:16 | b | 23 | -| test.c:735:5:735:9 | total | 506 | -| test.c:735:14:735:14 | r | 253 | -| test.c:738:10:738:14 | total | 759 | -| test.c:743:3:743:3 | x | 18446744073709551616 | -| test.c:743:7:743:7 | y | 18446744073709551616 | -| test.c:744:3:744:4 | xy | 18446744073709551616 | -| test.c:744:8:744:8 | x | 1000000003 | -| test.c:744:12:744:12 | y | 1000000003 | -| test.c:745:10:745:11 | xy | 1000000006000000000 | -| test.c:750:3:750:3 | x | 18446744073709551616 | -| test.c:751:3:751:3 | y | 18446744073709551616 | -| test.c:752:3:752:4 | xy | 18446744073709551616 | -| test.c:752:8:752:8 | x | 274177 | -| test.c:752:12:752:12 | y | 67280421310721 | -| test.c:753:10:753:11 | xy | 18446744073709551616 | -| test.c:757:7:757:8 | ui | 4294967295 | -| test.c:758:43:758:44 | ui | 4294967295 | -| test.c:758:48:758:49 | ui | 4294967295 | -| test.c:759:12:759:17 | result | 18446744065119617024 | -| test.c:761:7:761:8 | ul | 18446744073709551616 | -| test.c:762:28:762:29 | ul | 18446744073709551616 | -| test.c:762:33:762:34 | ul | 18446744073709551616 | -| test.c:763:12:763:17 | result | 18446744073709551616 | -| test.c:769:7:769:8 | ui | 4294967295 | -| test.c:769:19:769:20 | ui | 10 | -| test.c:770:5:770:6 | ui | 10 | -| test.c:770:11:770:12 | ui | 10 | -| test.c:771:12:771:13 | ui | 100 | -| test.c:775:3:775:9 | uiconst | 10 | -| test.c:778:3:778:9 | ulconst | 10 | -| test.c:779:10:779:16 | uiconst | 40 | -| test.c:779:20:779:26 | ulconst | 40 | -| test.c:783:7:783:7 | i | 2147483647 | -| test.c:783:18:783:18 | i | 2147483647 | -| test.c:784:5:784:5 | i | 2147483647 | -| test.c:784:13:784:13 | i | 2 | -| test.c:785:9:785:9 | i | 10 | -| test.c:787:5:787:5 | i | 2147483647 | -| test.c:787:9:787:9 | i | 10 | -| test.c:788:9:788:9 | i | 15 | -| test.c:790:5:790:5 | i | 15 | -| test.c:791:9:791:9 | i | 105 | -| test.c:793:5:793:5 | i | 105 | -| test.c:794:9:794:9 | i | 2310 | -| test.c:796:7:796:7 | i | 2147483647 | -| test.c:797:5:797:5 | i | 2147483647 | -| test.c:797:9:797:9 | i | -1 | -| test.c:798:9:798:9 | i | 1 | -| test.c:800:3:800:3 | i | 2147483647 | +| test.c:699:7:699:7 | i | 10 | +| test.c:701:3:701:3 | i | 2147483647 | +| test.c:702:3:702:3 | i | 10 | +| test.c:703:7:703:7 | i | 20 | +| test.c:705:3:705:3 | i | 2147483647 | +| test.c:706:3:706:3 | i | 40 | +| test.c:707:7:707:7 | i | 30 | +| test.c:709:3:709:3 | i | 2147483647 | +| test.c:709:7:709:7 | j | 2147483647 | +| test.c:710:7:710:7 | i | 40 | +| test.c:712:3:712:3 | i | 2147483647 | +| test.c:712:8:712:8 | j | 40 | +| test.c:713:7:713:7 | i | 50 | +| test.c:715:3:715:3 | i | 2147483647 | +| test.c:715:13:715:13 | j | 50 | +| test.c:716:7:716:7 | i | 60 | +| test.c:723:12:723:12 | a | 4294967295 | +| test.c:723:17:723:17 | a | 4294967295 | +| test.c:723:33:723:33 | b | 4294967295 | +| test.c:723:38:723:38 | b | 4294967295 | +| test.c:724:13:724:13 | a | 11 | +| test.c:724:15:724:15 | b | 23 | +| test.c:725:5:725:9 | total | 0 | +| test.c:725:14:725:14 | r | 253 | +| test.c:727:12:727:12 | a | 4294967295 | +| test.c:727:17:727:17 | a | 4294967295 | +| test.c:727:33:727:33 | b | 4294967295 | +| test.c:727:38:727:38 | b | 4294967295 | +| test.c:728:13:728:13 | a | 11 | +| test.c:728:15:728:15 | b | 23 | +| test.c:729:5:729:9 | total | 253 | +| test.c:729:14:729:14 | r | 253 | +| test.c:731:12:731:12 | a | 4294967295 | +| test.c:731:17:731:17 | a | 4294967295 | +| test.c:731:34:731:34 | b | 4294967295 | +| test.c:731:39:731:39 | b | 4294967295 | +| test.c:732:13:732:13 | a | 11 | +| test.c:732:15:732:15 | b | 23 | +| test.c:733:5:733:9 | total | 506 | +| test.c:733:14:733:14 | r | 253 | +| test.c:736:10:736:14 | total | 759 | +| test.c:742:12:742:12 | b | 4294967295 | +| test.c:742:17:742:17 | b | 4294967295 | +| test.c:743:16:743:16 | b | 23 | +| test.c:744:5:744:9 | total | 0 | +| test.c:744:14:744:14 | r | 253 | +| test.c:746:12:746:12 | b | 4294967295 | +| test.c:746:17:746:17 | b | 4294967295 | +| test.c:747:16:747:16 | b | 23 | +| test.c:748:5:748:9 | total | 253 | +| test.c:748:14:748:14 | r | 253 | +| test.c:750:13:750:13 | b | 4294967295 | +| test.c:750:18:750:18 | b | 4294967295 | +| test.c:751:16:751:16 | b | 23 | +| test.c:752:5:752:9 | total | 506 | +| test.c:752:14:752:14 | r | 253 | +| test.c:755:10:755:14 | total | 759 | +| test.c:760:3:760:3 | x | 18446744073709551616 | +| test.c:760:7:760:7 | y | 18446744073709551616 | +| test.c:761:3:761:4 | xy | 18446744073709551616 | +| test.c:761:8:761:8 | x | 1000000003 | +| test.c:761:12:761:12 | y | 1000000003 | +| test.c:762:10:762:11 | xy | 1000000006000000000 | +| test.c:767:3:767:3 | x | 18446744073709551616 | +| test.c:768:3:768:3 | y | 18446744073709551616 | +| test.c:769:3:769:4 | xy | 18446744073709551616 | +| test.c:769:8:769:8 | x | 274177 | +| test.c:769:12:769:12 | y | 67280421310721 | +| test.c:770:10:770:11 | xy | 18446744073709551616 | +| test.c:774:7:774:8 | ui | 4294967295 | +| test.c:775:43:775:44 | ui | 4294967295 | +| test.c:775:48:775:49 | ui | 4294967295 | +| test.c:776:12:776:17 | result | 18446744065119617024 | +| test.c:778:7:778:8 | ul | 18446744073709551616 | +| test.c:779:28:779:29 | ul | 18446744073709551616 | +| test.c:779:33:779:34 | ul | 18446744073709551616 | +| test.c:780:12:780:17 | result | 18446744073709551616 | +| test.c:786:7:786:8 | ui | 4294967295 | +| test.c:786:19:786:20 | ui | 10 | +| test.c:787:5:787:6 | ui | 10 | +| test.c:787:11:787:12 | ui | 10 | +| test.c:788:12:788:13 | ui | 100 | +| test.c:792:3:792:9 | uiconst | 10 | +| test.c:795:3:795:9 | ulconst | 10 | +| test.c:796:10:796:16 | uiconst | 40 | +| test.c:796:20:796:26 | ulconst | 40 | | test.c:800:7:800:7 | i | 2147483647 | -| test.c:801:10:801:10 | i | 2147483647 | -| test.c:804:3:804:3 | i | 2147483647 | -| test.c:804:10:804:11 | sc | 1 | -| test.c:806:7:806:7 | i | 127 | -| test.c:813:7:813:7 | n | 4294967295 | -| test.c:815:7:815:7 | n | 4294967295 | -| test.c:816:9:816:9 | n | 4294967295 | -| test.c:819:7:819:7 | n | 4294967295 | -| test.c:820:9:820:9 | n | 4294967295 | -| test.c:822:9:822:9 | n | 0 | -| test.c:825:8:825:8 | n | 4294967295 | -| test.c:826:9:826:9 | n | 0 | -| test.c:828:9:828:9 | n | 4294967295 | -| test.c:831:10:831:10 | n | 4294967295 | -| test.c:832:5:832:5 | n | 4294967295 | -| test.c:835:7:835:7 | n | 0 | -| test.c:839:7:839:7 | n | 32767 | -| test.c:842:7:842:7 | n | 32767 | +| test.c:800:18:800:18 | i | 2147483647 | +| test.c:801:5:801:5 | i | 2147483647 | +| test.c:801:13:801:13 | i | 2 | +| test.c:802:9:802:9 | i | 10 | +| test.c:804:5:804:5 | i | 2147483647 | +| test.c:804:9:804:9 | i | 10 | +| test.c:805:9:805:9 | i | 15 | +| test.c:807:5:807:5 | i | 15 | +| test.c:808:9:808:9 | i | 105 | +| test.c:810:5:810:5 | i | 105 | +| test.c:811:9:811:9 | i | 2310 | +| test.c:813:7:813:7 | i | 2147483647 | +| test.c:814:5:814:5 | i | 2147483647 | +| test.c:814:9:814:9 | i | -1 | +| test.c:815:9:815:9 | i | 1 | +| test.c:817:3:817:3 | i | 2147483647 | +| test.c:817:7:817:7 | i | 2147483647 | +| test.c:818:10:818:10 | i | 2147483647 | +| test.c:821:3:821:3 | i | 2147483647 | +| test.c:821:10:821:11 | sc | 1 | +| test.c:823:7:823:7 | i | 127 | +| test.c:830:7:830:7 | n | 4294967295 | +| test.c:832:7:832:7 | n | 4294967295 | +| test.c:833:9:833:9 | n | 4294967295 | +| test.c:836:7:836:7 | n | 4294967295 | +| test.c:837:9:837:9 | n | 4294967295 | +| test.c:839:9:839:9 | n | 0 | +| test.c:842:8:842:8 | n | 4294967295 | | test.c:843:9:843:9 | n | 0 | -| test.c:845:9:845:9 | n | 32767 | -| test.c:848:7:848:7 | n | 32767 | -| test.c:849:9:849:9 | n | 32767 | -| test.c:851:9:851:9 | n | 0 | -| test.c:854:10:854:10 | n | 32767 | -| test.c:855:5:855:5 | n | 32767 | -| test.c:858:7:858:7 | n | 0 | -| test.c:862:7:862:7 | n | 32767 | -| test.c:863:9:863:9 | n | 32767 | -| test.c:864:11:864:11 | n | 32767 | -| test.c:868:7:868:7 | n | 32767 | -| test.c:869:13:869:13 | n | 32767 | -| test.c:872:9:872:9 | n | 32767 | -| test.c:875:7:875:7 | n | 32767 | -| test.c:875:22:875:22 | n | 32767 | -| test.c:876:9:876:9 | n | 32767 | +| test.c:845:9:845:9 | n | 4294967295 | +| test.c:848:10:848:10 | n | 4294967295 | +| test.c:849:5:849:5 | n | 4294967295 | +| test.c:852:7:852:7 | n | 0 | +| test.c:856:7:856:7 | n | 32767 | +| test.c:859:7:859:7 | n | 32767 | +| test.c:860:9:860:9 | n | 0 | +| test.c:862:9:862:9 | n | 32767 | +| test.c:865:7:865:7 | n | 32767 | +| test.c:866:9:866:9 | n | 32767 | +| test.c:868:9:868:9 | n | 0 | +| test.c:871:10:871:10 | n | 32767 | +| test.c:872:5:872:5 | n | 32767 | +| test.c:875:7:875:7 | n | 0 | | test.c:879:7:879:7 | n | 32767 | -| test.c:880:5:880:5 | n | 32767 | -| test.c:880:10:880:10 | n | 32767 | -| test.c:880:14:880:14 | n | 0 | -| test.c:881:6:881:6 | n | 32767 | -| test.c:881:10:881:10 | n | 0 | -| test.c:881:14:881:14 | n | 32767 | -| test.c:892:7:892:8 | ss | 32767 | -| test.c:893:9:893:10 | ss | 3 | -| test.c:896:7:896:8 | ss | 32767 | -| test.c:897:9:897:10 | ss | 32767 | -| test.c:900:14:900:15 | us | 65535 | -| test.c:901:9:901:10 | us | 32767 | -| test.c:904:14:904:15 | us | 65535 | -| test.c:905:9:905:10 | us | 65535 | -| test.c:908:7:908:8 | ss | 32767 | -| test.c:909:9:909:10 | ss | 32767 | -| test.c:912:7:912:8 | ss | 32767 | -| test.c:913:9:913:10 | ss | 2 | -| test.c:919:8:919:8 | s | 2147483647 | -| test.c:919:15:919:15 | s | 127 | -| test.c:919:23:919:23 | s | 9 | -| test.c:920:18:920:18 | s | 9 | -| test.c:920:22:920:22 | s | 9 | -| test.c:921:9:921:14 | result | 127 | -| test.c:927:7:927:7 | i | 0 | -| test.c:928:9:928:9 | i | 2147483647 | -| test.c:932:7:932:7 | u | 0 | -| test.c:933:9:933:9 | u | 4294967295 | -| test.c:938:12:938:12 | s | 2147483647 | -| test.c:939:7:939:8 | s2 | 4 | -| test.c:944:7:944:7 | x | 2147483647 | -| test.c:945:9:945:9 | y | 2147483647 | -| test.c:949:7:949:7 | y | 2147483647 | -| test.c:958:7:958:7 | x | 2147483647 | -| test.c:963:7:963:7 | x | 15 | -| test.c:970:8:970:8 | x | 2147483647 | -| 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.c:880:9:880:9 | n | 32767 | +| test.c:881:11:881:11 | n | 32767 | +| test.c:885:7:885:7 | n | 32767 | +| test.c:886:13:886:13 | n | 32767 | +| test.c:889:9:889:9 | n | 32767 | +| test.c:892:7:892:7 | n | 32767 | +| test.c:892:22:892:22 | n | 32767 | +| test.c:893:9:893:9 | n | 32767 | +| test.c:896:7:896:7 | n | 32767 | +| test.c:897:5:897:5 | n | 32767 | +| test.c:897:10:897:10 | n | 32767 | +| test.c:897:14:897:14 | n | 0 | +| test.c:898:6:898:6 | n | 32767 | +| test.c:898:10:898:10 | n | 0 | +| test.c:898:14:898:14 | n | 32767 | +| test.c:909:7:909:8 | ss | 32767 | +| test.c:910:9:910:10 | ss | 3 | +| test.c:913:7:913:8 | ss | 32767 | +| test.c:914:9:914:10 | ss | 32767 | +| test.c:917:14:917:15 | us | 65535 | +| test.c:918:9:918:10 | us | 32767 | +| test.c:921:14:921:15 | us | 65535 | +| test.c:922:9:922:10 | us | 65535 | +| test.c:925:7:925:8 | ss | 32767 | +| test.c:926:9:926:10 | ss | 32767 | +| test.c:929:7:929:8 | ss | 32767 | +| test.c:930:9:930:10 | ss | 2 | +| test.c:936:8:936:8 | s | 2147483647 | +| test.c:936:15:936:15 | s | 127 | +| test.c:936:23:936:23 | s | 9 | +| test.c:937:18:937:18 | s | 9 | +| test.c:937:22:937:22 | s | 9 | +| test.c:938:9:938:14 | result | 127 | +| test.c:944:7:944:7 | i | 0 | +| test.c:945:9:945:9 | i | 2147483647 | +| test.c:949:7:949:7 | u | 0 | +| test.c:950:9:950:9 | u | 4294967295 | +| test.c:955:12:955:12 | s | 2147483647 | +| test.c:956:7:956:8 | s2 | 4 | +| test.c:961:7:961:7 | x | 2147483647 | +| test.c:962:9:962:9 | y | 2147483647 | +| test.c:966:7:966:7 | y | 2147483647 | +| test.c:975:7:975:7 | x | 2147483647 | +| test.c:980:7:980:7 | x | 15 | +| test.c:987:8:987:8 | x | 2147483647 | +| test.c:987:12:987:12 | y | 256 | +| test.c:988:9:988:9 | x | 2147483647 | +| test.c:989:9:989:9 | y | 256 | +| test.c:1002:7:1002: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 | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected index a9c1bc66c50..773cb92b0b1 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected @@ -1,15 +1,143 @@ -| test.cpp:314:5:314:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:309:13:309:14 | st | st | -| test.cpp:327:5:327:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:322:13:322:14 | st | st | -| test.cpp:338:6:338:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:333:62:333:63 | st | st | -| test.cpp:484:5:484:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:480:13:480:14 | st | st | -| test.cpp:497:5:497:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:492:13:492:14 | st | st | -| test.cpp:509:5:509:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:505:13:505:14 | st | st | -| test.cpp:606:11:606:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:602:12:602:19 | timeinfo | timeinfo | -| test.cpp:634:11:634:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:628:12:628:19 | timeinfo | timeinfo | -| test.cpp:636:11:636:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:628:12:628:19 | timeinfo | timeinfo | -| test.cpp:640:5:640:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st | -| test.cpp:642:5:642:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st | -| test.cpp:718:5:718:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:712:13:712:14 | st | st | -| test.cpp:731:5:731:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st | -| test.cpp:732:5:732:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st | -| test.cpp:733:5:733:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st | +#select +| test.cpp:422:2:422:14 | ... += ... | test.cpp:422:2:422:14 | ... += ... | test.cpp:422:2:422:14 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:440:2:440:11 | ... ++ | test.cpp:440:2:440:11 | ... ++ | test.cpp:440:2:440:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:456:2:456:12 | ... ++ | test.cpp:456:2:456:12 | ... ++ | test.cpp:456:2:456:12 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:681:2:681:23 | ... += ... | test.cpp:681:2:681:23 | ... += ... | test.cpp:681:2:681:23 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:813:2:813:40 | ... = ... | test.cpp:813:21:813:40 | ... + ... | test.cpp:813:2:813:40 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:818:2:818:24 | ... = ... | test.cpp:818:13:818:24 | ... + ... | test.cpp:818:2:818:24 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:951:3:951:25 | ... = ... | test.cpp:951:14:951:25 | ... + ... | test.cpp:951:3:951:25 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:969:3:969:12 | ... ++ | test.cpp:969:3:969:12 | ... ++ | test.cpp:969:3:969:12 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1031:2:1031:11 | ... ++ | test.cpp:1031:2:1031:11 | ... ++ | test.cpp:1031:2:1031:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1051:16:1051:23 | increment_arg output argument | test.cpp:1039:2:1039:4 | ... ++ | test.cpp:1051:16:1051:23 | increment_arg output argument | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | test.cpp:1043:2:1043:7 | ... ++ | test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1109:2:1109:26 | ... = ... | test.cpp:1109:14:1109:26 | ... - ... | test.cpp:1109:2:1109:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1160:2:1160:19 | ... = ... | test.cpp:1158:2:1158:15 | ... += ... | test.cpp:1160:2:1160:19 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1199:2:1199:28 | ... = ... | test.cpp:1199:16:1199:28 | ... + ... | test.cpp:1199:2:1199:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1214:2:1214:28 | ... = ... | test.cpp:1214:16:1214:28 | ... + ... | test.cpp:1214:2:1214:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1228:2:1228:28 | ... = ... | test.cpp:1228:16:1228:28 | ... + ... | test.cpp:1228:2:1228:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1242:2:1242:26 | ... = ... | test.cpp:1242:14:1242:26 | ... + ... | test.cpp:1242:2:1242:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1256:2:1256:26 | ... = ... | test.cpp:1256:14:1256:26 | ... + ... | test.cpp:1256:2:1256:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1262:2:1262:28 | ... = ... | test.cpp:1262:16:1262:28 | ... + ... | test.cpp:1262:2:1262:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1274:2:1274:28 | ... = ... | test.cpp:1274:16:1274:28 | ... + ... | test.cpp:1274:2:1274:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1287:2:1287:26 | ... = ... | test.cpp:1287:14:1287:26 | ... + ... | test.cpp:1287:2:1287:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1299:2:1299:26 | ... = ... | test.cpp:1299:14:1299:26 | ... + ... | test.cpp:1299:2:1299:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1341:2:1341:17 | ... = ... | test.cpp:1432:12:1432:17 | ... + ... | test.cpp:1341:2:1341:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1341:2:1341:17 | ... = ... | test.cpp:1446:9:1446:16 | ... + ... | test.cpp:1341:2:1341:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1341:2:1341:17 | ... = ... | test.cpp:1458:9:1458:16 | ... + ... | test.cpp:1341:2:1341:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1515:2:1515:15 | ... = ... | test.cpp:1512:2:1512:10 | ... += ... | test.cpp:1515:2:1515:15 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1545:2:1545:22 | ... += ... | test.cpp:1545:2:1545:22 | ... += ... | test.cpp:1545:2:1545:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1553:2:1553:22 | ... += ... | test.cpp:1553:2:1553:22 | ... += ... | test.cpp:1553:2:1553:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1632:2:1632:22 | ... += ... | test.cpp:1632:2:1632:22 | ... += ... | test.cpp:1632:2:1632:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1644:2:1644:22 | ... += ... | test.cpp:1644:2:1644:22 | ... += ... | test.cpp:1644:2:1644:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1677:2:1677:22 | ... += ... | test.cpp:1677:2:1677:22 | ... += ... | test.cpp:1677:2:1677:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1753:2:1753:22 | ... += ... | test.cpp:1753:2:1753:22 | ... += ... | test.cpp:1753:2:1753:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +edges +| test.cpp:813:21:813:40 | ... + ... | test.cpp:813:2:813:40 | ... = ... | provenance | | +| test.cpp:818:13:818:24 | ... + ... | test.cpp:818:2:818:24 | ... = ... | provenance | | +| test.cpp:951:14:951:25 | ... + ... | test.cpp:951:3:951:25 | ... = ... | provenance | | +| test.cpp:1038:26:1038:26 | *x | test.cpp:1051:16:1051:23 | increment_arg output argument | provenance | | +| test.cpp:1039:2:1039:4 | ... ++ | test.cpp:1038:26:1038:26 | *x | provenance | | +| test.cpp:1042:37:1042:37 | *x | test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | provenance | | +| test.cpp:1043:2:1043:7 | ... ++ | test.cpp:1042:37:1042:37 | *x | provenance | | +| test.cpp:1109:14:1109:26 | ... - ... | test.cpp:1109:2:1109:26 | ... = ... | provenance | | +| test.cpp:1158:2:1158:15 | ... += ... | test.cpp:1160:2:1160:19 | ... = ... | provenance | | +| test.cpp:1199:16:1199:28 | ... + ... | test.cpp:1199:2:1199:28 | ... = ... | provenance | | +| test.cpp:1214:16:1214:28 | ... + ... | test.cpp:1214:2:1214:28 | ... = ... | provenance | | +| test.cpp:1228:16:1228:28 | ... + ... | test.cpp:1228:2:1228:28 | ... = ... | provenance | | +| test.cpp:1242:14:1242:26 | ... + ... | test.cpp:1242:2:1242:26 | ... = ... | provenance | | +| test.cpp:1256:14:1256:26 | ... + ... | test.cpp:1256:2:1256:26 | ... = ... | provenance | | +| test.cpp:1262:16:1262:28 | ... + ... | test.cpp:1262:2:1262:28 | ... = ... | provenance | | +| test.cpp:1274:16:1274:28 | ... + ... | test.cpp:1274:2:1274:28 | ... = ... | provenance | | +| test.cpp:1287:14:1287:26 | ... + ... | test.cpp:1287:2:1287:26 | ... = ... | provenance | | +| test.cpp:1299:14:1299:26 | ... + ... | test.cpp:1299:2:1299:26 | ... = ... | provenance | | +| test.cpp:1338:20:1338:23 | year | test.cpp:1341:2:1341:17 | ... = ... | provenance | | +| test.cpp:1351:15:1351:22 | ... + ... | test.cpp:1351:3:1351:22 | ... = ... | provenance | | +| test.cpp:1356:12:1356:17 | ... + ... | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1365:15:1365:22 | ... + ... | test.cpp:1365:3:1365:22 | ... = ... | provenance | | +| test.cpp:1375:3:1375:20 | ... = ... | test.cpp:1377:12:1377:18 | yeartmp | provenance | | +| test.cpp:1375:13:1375:20 | ... + ... | test.cpp:1375:3:1375:20 | ... = ... | provenance | | +| test.cpp:1377:12:1377:18 | yeartmp | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1420:15:1420:22 | ... + ... | test.cpp:1420:3:1420:22 | ... = ... | provenance | | +| test.cpp:1425:12:1425:17 | ... + ... | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1432:12:1432:17 | ... + ... | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1446:2:1446:16 | ... = ... | test.cpp:1450:3:1450:18 | ... = ... | provenance | | +| test.cpp:1446:2:1446:16 | ... = ... | test.cpp:1455:12:1455:15 | year | provenance | | +| test.cpp:1446:9:1446:16 | ... + ... | test.cpp:1446:2:1446:16 | ... = ... | provenance | | +| test.cpp:1455:12:1455:15 | year | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1458:2:1458:16 | ... = ... | test.cpp:1464:12:1464:15 | year | provenance | | +| test.cpp:1458:9:1458:16 | ... + ... | test.cpp:1458:2:1458:16 | ... = ... | provenance | | +| test.cpp:1464:12:1464:15 | year | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1512:2:1512:10 | ... += ... | test.cpp:1515:2:1515:15 | ... = ... | provenance | | +nodes +| test.cpp:422:2:422:14 | ... += ... | semmle.label | ... += ... | +| test.cpp:440:2:440:11 | ... ++ | semmle.label | ... ++ | +| test.cpp:456:2:456:12 | ... ++ | semmle.label | ... ++ | +| test.cpp:482:3:482:12 | ... ++ | semmle.label | ... ++ | +| test.cpp:681:2:681:23 | ... += ... | semmle.label | ... += ... | +| test.cpp:813:2:813:40 | ... = ... | semmle.label | ... = ... | +| test.cpp:813:21:813:40 | ... + ... | semmle.label | ... + ... | +| test.cpp:818:2:818:24 | ... = ... | semmle.label | ... = ... | +| test.cpp:818:13:818:24 | ... + ... | semmle.label | ... + ... | +| test.cpp:872:4:872:15 | ... ++ | semmle.label | ... ++ | +| test.cpp:951:3:951:25 | ... = ... | semmle.label | ... = ... | +| test.cpp:951:14:951:25 | ... + ... | semmle.label | ... + ... | +| test.cpp:969:3:969:12 | ... ++ | semmle.label | ... ++ | +| test.cpp:1031:2:1031:11 | ... ++ | semmle.label | ... ++ | +| test.cpp:1038:26:1038:26 | *x | semmle.label | *x | +| test.cpp:1039:2:1039:4 | ... ++ | semmle.label | ... ++ | +| test.cpp:1042:37:1042:37 | *x | semmle.label | *x | +| test.cpp:1043:2:1043:7 | ... ++ | semmle.label | ... ++ | +| test.cpp:1051:16:1051:23 | increment_arg output argument | semmle.label | increment_arg output argument | +| test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | semmle.label | increment_arg_by_pointer output argument | +| test.cpp:1109:2:1109:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1109:14:1109:26 | ... - ... | semmle.label | ... - ... | +| test.cpp:1158:2:1158:15 | ... += ... | semmle.label | ... += ... | +| test.cpp:1160:2:1160:19 | ... = ... | semmle.label | ... = ... | +| test.cpp:1199:2:1199:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1199:16:1199:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1214:2:1214:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1214:16:1214:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1228:2:1228:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1228:16:1228:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1242:2:1242:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1242:14:1242:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1256:2:1256:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1256:14:1256:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1262:2:1262:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1262:16:1262:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1274:2:1274:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1274:16:1274:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1287:2:1287:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1287:14:1287:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1299:2:1299:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1299:14:1299:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1338:20:1338:23 | year | semmle.label | year | +| test.cpp:1341:2:1341:17 | ... = ... | semmle.label | ... = ... | +| test.cpp:1351:3:1351:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1351:15:1351:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1356:12:1356:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1365:3:1365:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1365:15:1365:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1375:3:1375:20 | ... = ... | semmle.label | ... = ... | +| test.cpp:1375:13:1375:20 | ... + ... | semmle.label | ... + ... | +| test.cpp:1377:12:1377:18 | yeartmp | semmle.label | yeartmp | +| test.cpp:1420:3:1420:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1420:15:1420:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1425:12:1425:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1432:12:1432:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1446:2:1446:16 | ... = ... | semmle.label | ... = ... | +| test.cpp:1446:9:1446:16 | ... + ... | semmle.label | ... + ... | +| test.cpp:1450:3:1450:18 | ... = ... | semmle.label | ... = ... | +| test.cpp:1455:12:1455:15 | year | semmle.label | year | +| test.cpp:1458:2:1458:16 | ... = ... | semmle.label | ... = ... | +| test.cpp:1458:9:1458:16 | ... + ... | semmle.label | ... + ... | +| test.cpp:1464:12:1464:15 | year | semmle.label | year | +| test.cpp:1512:2:1512:10 | ... += ... | semmle.label | ... += ... | +| test.cpp:1515:2:1515:15 | ... = ... | semmle.label | ... = ... | +| test.cpp:1545:2:1545:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1553:2:1553:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1632:2:1632:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1644:2:1644:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1677:2:1677:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1753:2:1753:22 | ... += ... | semmle.label | ... += ... | +subpaths diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref index 22a30d72b68..12bb5eb1e69 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref @@ -1 +1,2 @@ -Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +query: Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected index fb79592b7f2..9c1d83861f0 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected @@ -1,5 +1,6 @@ -| test.cpp:317:2:317:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:309:13:309:14 | st | st | -| test.cpp:330:2:330:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:322:13:322:14 | st | st | -| test.cpp:341:2:341:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:333:62:333:63 | st | st | -| test.cpp:720:2:720:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:712:13:712:14 | st | st | -| test.cpp:735:2:735:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:725:13:725:14 | st | st | +| test.cpp:425:2:425:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:417:13:417:14 | st | st | +| test.cpp:443:2:443:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:435:13:435:14 | st | st | +| test.cpp:459:2:459:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:451:62:451:63 | st | st | +| test.cpp:953:3:953:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:944:14:944:15 | st | st | +| test.cpp:971:3:971:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:962:14:962:15 | st | st | +| test.cpp:1035:2:1035:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:1025:13:1025:14 | st | st | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp index 3db9b61edd2..a2dce39cc85 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp @@ -1,4 +1,4 @@ -typedef unsigned short WORD; +typedef unsigned short WORD; typedef unsigned long DWORD, HANDLE; typedef int BOOL, BOOLEAN, errno_t; typedef char CHAR; @@ -46,6 +46,8 @@ typedef struct _TIME_DYNAMIC_ZONE_INFORMATION { BOOLEAN DynamicDaylightTimeDisabled; } DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION; +typedef const wchar_t* LPCWSTR; + struct tm { int tm_sec; // seconds after the minute - [0, 60] including leap second @@ -59,6 +61,42 @@ struct tm int tm_isdst; // daylight savings time flag }; +struct timespec +{ + time_t tv_sec; + long tv_nsec; +}; + +/* Timestamps of log entries. */ +struct logtime { + struct tm tm; + long usec; +}; + +/* + * Data structure representing a broken-down timestamp. + * + * CAUTION: the IANA timezone library (src/timezone/) follows the POSIX + * convention that tm_mon counts from 0 and tm_year is relative to 1900. + * However, Postgres' datetime functions generally treat tm_mon as counting + * from 1 and tm_year as relative to 1 BC. Be sure to make the appropriate + * adjustments when moving from one code domain to the other. + */ +struct pg_tm +{ + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; /* see above */ + int tm_year; /* see above */ + int tm_wday; + int tm_yday; + int tm_isdst; + long int tm_gmtoff; + const char *tm_zone; +}; + BOOL SystemTimeToFileTime( const SYSTEMTIME* lpSystemTime, @@ -99,9 +137,16 @@ TzSpecificLocalTimeToSystemTimeEx( LPSYSTEMTIME lpUniversalTime ); +int _wtoi( + const wchar_t *str +); + void GetSystemTime( LPSYSTEMTIME lpSystemTime ); +void GetLocalTime( + LPSYSTEMTIME lpSystemTime +); void GetSystemTimeAsFileTime( LPFILETIME lpSystemTimeAsFileTime @@ -149,6 +194,12 @@ GetFileTime( LPFILETIME lpLastWriteTime ); +struct tm *localtime_r( const time_t *timer, struct tm *buf ); + +/** + * Negative Case + * FileTimeToSystemTime is called and the return value is checked +*/ void Correct_FileTimeToSystemTime(const FILETIME* lpFileTime) { SYSTEMTIME systemTime; @@ -162,6 +213,10 @@ void Correct_FileTimeToSystemTime(const FILETIME* lpFileTime) /// Normal usage } +/** + * Positive (Out of Scope) Bug Case + * FileTimeToSystemTime is called but no check is conducted to verify the result of the operation +*/ void AntiPattern_FileTimeToSystemTime(const FILETIME* lpFileTime) { SYSTEMTIME systemTime; @@ -170,6 +225,10 @@ void AntiPattern_FileTimeToSystemTime(const FILETIME* lpFileTime) FileTimeToSystemTime(lpFileTime, &systemTime); } +/** + * Negative Case + * SystemTimeToTzSpecificLocalTime is called and the return value is verified +*/ void Correct_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -183,6 +242,10 @@ void Correct_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lpTime /// Normal usage } +/** + * Positive (Out of Scope) Case + * AntiPattern_SystemTimeToTzSpecificLocalTime is called but the return value is not validated +*/ void AntiPattern_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -191,6 +254,10 @@ void AntiPattern_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lp SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation, lpUniversalTime, &localTime); } +/** + * Negative Case + * SystemTimeToTzSpecificLocalTimeEx is called and the return value is validated +*/ void Correct_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -204,6 +271,10 @@ void Correct_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFORMATI /// Normal usage } +/** + * Positive Case + * SystemTimeToTzSpecificLocalTimeEx is called but the return value is not validated +*/ void AntiPattern_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -212,6 +283,10 @@ void AntiPattern_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFOR SystemTimeToTzSpecificLocalTimeEx(lpTimeZoneInformation, lpUniversalTime, &localTime); } +/** + * Negative Case + * Correct use of TzSpecificLocalTimeToSystemTime, function is called and the return value is validated. +*/ void Correct_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -225,6 +300,10 @@ void Correct_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lpTime /// Normal usage } +/** + * Positive (Out of Scope) Case + * TzSpecificLocalTimeToSystemTime is called however the return value is not validated +*/ void AntiPattern_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -233,6 +312,10 @@ void AntiPattern_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lp TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation, lpLocalTime, &universalTime); } +/** + * Negative Case + * TzSpecificLocalTimeToSystemTimeEx is called and the return value is correctly validated +*/ void Correct_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -246,6 +329,10 @@ void Correct_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFORMATI /// Normal usage } +/** + * Positive (Out of Scope) Case + * TzSpecificLocalTimeToSystemTimeEx is called however the return value is not validated +*/ void AntiPattern_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -258,6 +345,10 @@ void AntiPattern_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFOR SYSTEMTIME Cases *************************************************/ +/** + * Negative Case + * SystemTimeToFileTime is called and the return value is validated in a guard +*/ void Correct_filetime_conversion_check(SYSTEMTIME& st) { FILETIME ft; @@ -273,6 +364,10 @@ void Correct_filetime_conversion_check(SYSTEMTIME& st) ////////////////////////////////////////////// +/** + * Positive (Out of Scope) Case + * SystemTimeToFileTime is called but the return value is not validated in a guard +*/ void AntiPattern_unchecked_filetime_conversion(SYSTEMTIME& st) { FILETIME ft; @@ -281,6 +376,10 @@ void AntiPattern_unchecked_filetime_conversion(SYSTEMTIME& st) SystemTimeToFileTime(&st, &ft); } +/** + * Positive (Out of Scope) Case + * SystemTimeToFileTime is called but the return value is not validated in a guard +*/ void AntiPattern_unchecked_filetime_conversion2(SYSTEMTIME* st) { FILETIME ft; @@ -292,6 +391,10 @@ void AntiPattern_unchecked_filetime_conversion2(SYSTEMTIME* st) } } +/** + * Positive (Out of Scope) + * SYSTEMTIME.wDay is incremented by one (and no guard exists) +*/ void AntiPattern_unchecked_filetime_conversion2() { SYSTEMTIME st; @@ -304,6 +407,11 @@ void AntiPattern_unchecked_filetime_conversion2() SystemTimeToFileTime(&st, &ft); } +/** + * Positive Cases + * - Anti-pattern 1: [year +-n, month, day] + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion2a() { SYSTEMTIME st; @@ -311,12 +419,17 @@ void AntiPattern_unchecked_filetime_conversion2a() GetSystemTime(&st); // BUG - UncheckedLeapYearAfterYearModification - st.wYear += 2; + st.wYear += 2; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // BUG - UncheckedReturnValueForTimeFunctions SystemTimeToFileTime(&st, &ft); } +/** + * Positive Cases + * - Anti-pattern 1: [year +-n, month, day] + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion2b() { SYSTEMTIME st; @@ -324,23 +437,33 @@ void AntiPattern_unchecked_filetime_conversion2b() GetSystemTime(&st); // BUG - UncheckedLeapYearAfterYearModification - st.wYear++; + st.wYear++; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // BUG - UncheckedReturnValueForTimeFunctions SystemTimeToFileTime(&st, &ft); } +/** + * Positive Cases + * - Anti-pattern 1: [year +-n, month, day] + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion2b(SYSTEMTIME* st) { FILETIME ft; // BUG - UncheckedLeapYearAfterYearModification - st->wYear++; + st->wYear++; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // BUG - UncheckedReturnValueForTimeFunctions SystemTimeToFileTime(st, &ft); } +/** + * Positive Cases + * - Anti-pattern 3: datetime.AddDays(+-28) + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion3() { SYSTEMTIME st; @@ -349,11 +472,12 @@ void AntiPattern_unchecked_filetime_conversion3() if (st.wMonth < 12) { + // Anti-pattern 3: datetime.AddDays(+-28) st.wMonth++; } else { - // Check for leap year, but... + // No check for leap year is required here, as the month is statically set to January. st.wMonth = 1; st.wYear++; } @@ -363,6 +487,11 @@ void AntiPattern_unchecked_filetime_conversion3() } ////////////////////////////////////////////// + +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Year is incremented and if we are on Feb the 29th, set to the 28th if the new year is a common year. +*/ void CorrectPattern_check1() { SYSTEMTIME st; @@ -370,7 +499,7 @@ void CorrectPattern_check1() st.wYear++; - // Guard + // Guard against February the 29th if (st.wMonth == 2 && st.wDay == 29) { // move back a day when landing on Feb 29 in an non-leap year @@ -385,6 +514,10 @@ void CorrectPattern_check1() AntiPattern_unchecked_filetime_conversion(st); } +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer and then the leap year case is correctly guarded and handled. +*/ void CorrectPattern_check2(int yearsToAdd) { SYSTEMTIME st; @@ -400,11 +533,18 @@ void CorrectPattern_check2(int yearsToAdd) AntiPattern_unchecked_filetime_conversion(st); } +/** + * Could give rise to AntiPattern 7: IsLeapYear (Conditional Logic) +*/ bool isLeapYear(SYSTEMTIME& st) { return st.wYear % 4 == 0 && (st.wYear % 100 != 0 || st.wYear % 400 == 0); } +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer and then the leap year case is correctly guarded and handled. +*/ void CorrectPattern_check3() { SYSTEMTIME st; @@ -413,6 +553,9 @@ void CorrectPattern_check3() st.wYear++; // Guard + /** Negative Case - Anti-pattern 7: IsLeapYear + * Body of conditional statement is safe recommended code + */ if (st.wMonth == 2 && st.wDay == 29 && isLeapYear(st)) { // move back a day when landing on Feb 29 in an non-leap year @@ -423,6 +566,9 @@ void CorrectPattern_check3() AntiPattern_unchecked_filetime_conversion(st); } +/** + * Could give rise to AntiPattern 7: IsLeapYear (Conditional Logic) +*/ bool isLeapYear2(int year) { return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); @@ -433,6 +579,10 @@ bool fixDate(int day, int month, int year) return (month == 2 && day == 29 && isLeapYear2(year)); } +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer and then the leap year case is correctly guarded and handled. +*/ void CorrectPattern_check4() { SYSTEMTIME st; @@ -442,18 +592,23 @@ void CorrectPattern_check4() st.wYear++; // Guard + /** Negative Case - Anti-pattern 7: IsLeapYear + * Body of conditional statement is safe recommended code + */ if (fixDate(st.wDay, st.wMonth, st.wYear)) { // move back a day when landing on Feb 29 in an non-leap year - st.wDay = 28; // GOOD [FALSE POSITIVE] + st.wDay = 28; // GOOD [FALSE POSITIVE] Anti-pattern 7 } // Safe to use AntiPattern_unchecked_filetime_conversion(st); } - - +/** + * Negative Case - Generic + * No manipulation is conducted on struct populated from GetSystemTime. +*/ void CorrectPattern_NotManipulated_DateFromAPI_0() { SYSTEMTIME st; @@ -464,6 +619,10 @@ void CorrectPattern_NotManipulated_DateFromAPI_0() SystemTimeToFileTime(&st, &ft); } +/** + * Negative Case - Generic + * No manipulation is conducted on struct populated from GetFileTime. +*/ void CorrectPattern_NotManipulated_DateFromAPI_1(HANDLE hWatchdog) { SYSTEMTIME st; @@ -475,43 +634,56 @@ void CorrectPattern_NotManipulated_DateFromAPI_1(HANDLE hWatchdog) ///////////////////////////////////////////////////////////////// +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Year is incremented by some integer and checked through a conversion through an inter procedural function check +*/ void AntiPattern_1_year_addition() { SYSTEMTIME st; GetSystemTime(&st); - // BUG - UncheckedLeapYearAfterYearModification + // Safe, checked interprocedurally through Correct_filetime_conversion_check st.wYear++; // Usage of potentially invalid date Correct_filetime_conversion_check(st); } + + +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer and checked through a conversion through an inter procedural function check +*/ void AntiPattern_simple_addition(int yearAddition) { SYSTEMTIME st; GetSystemTime(&st); - // BUG - UncheckedLeapYearAfterYearModification st.wYear += yearAddition; // Usage of potentially invalid date Correct_filetime_conversion_check(st); } +/** + * Positive Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer but a leap year is not handled *correctly*. +*/ void AntiPattern_IncorrectGuard(int yearsToAdd) { SYSTEMTIME st; GetSystemTime(&st); // BUG - UncheckedLeapYearAfterYearModification - st.wYear += yearsToAdd; + st.wYear += yearsToAdd; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // Incorrect Guard if (st.wMonth == 2 && st.wDay == 29) { - // Part of a different anti-pattern. + // Part of a different anti-pattern (AntiPattern 5). // Make sure the guard includes the proper check bool isLeapYear = st.wYear % 4 == 0; if (!isLeapYear) @@ -519,9 +691,6 @@ void AntiPattern_IncorrectGuard(int yearsToAdd) st.wDay = 28; } } - - // Potentially Unsafe to use - Correct_filetime_conversion_check(st); } /************************************************* @@ -539,6 +708,10 @@ void CorrectUsageOf_mkgmtime(struct tm& timeinfo) /// _mkgmtime succeeded } +/** + * Positive Case - General (Out of Scope) + * Must Check for return value of _mkgmtime +*/ void AntiPattern_uncheckedUsageOf_mkgmtime(struct tm& timeinfo) { // (out-of-scope) GeneralBug: Must check return value for _mkgmtime @@ -550,6 +723,10 @@ void AntiPattern_uncheckedUsageOf_mkgmtime(struct tm& timeinfo) ////////////////////////////////////////////////////////// +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer and leap year is not handled correctly. +*/ void Correct_year_addition_struct_tm() { time_t rawtime; @@ -567,7 +744,7 @@ void Correct_year_addition_struct_tm() timeinfo.tm_year++; // Guard - // move back a day when landing on Feb 29 in an non-leap year + // move back a day when landing on Feb 29 in an non-leap year bool isLeapYear = timeinfo.tm_year % 4 == 0 && (timeinfo.tm_year % 100 != 0 || (timeinfo.tm_year + 1900) % 400 == 0); timeinfo.tm_mday = timeinfo.tm_mon == 1 && timeinfo.tm_mday == 29 && !isLeapYear ? 28 : timeinfo.tm_mday; @@ -575,7 +752,11 @@ void Correct_year_addition_struct_tm() AntiPattern_uncheckedUsageOf_mkgmtime(timeinfo); } -void Correct_LinuxPattern() +/** + * Positive Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer and leap year is not handled correctly. +*/ +void Incorrect_LinuxPattern() { time_t rawtime; struct tm timeinfo; @@ -584,6 +765,7 @@ void Correct_LinuxPattern() errno_t err = gmtime_s(&timeinfo, &rawtime); /* from 1900 -> from 1980 */ + // BUG - UncheckedLeapYearAfterYearModification timeinfo.tm_year -= 80; /* 0~11 -> 1~12 */ timeinfo.tm_mon++; @@ -596,34 +778,30 @@ void Correct_LinuxPattern() ////////////////////////////////////////// +/** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Years is incremented by some integer and leap year is assumed checked through + * check of a conversion functions return value. +*/ void AntiPattern_year_addition_struct_tm() { time_t rawtime; struct tm timeinfo; time(&rawtime); gmtime_s(&timeinfo, &rawtime); - // BUG - UncheckedLeapYearAfterYearModification timeinfo.tm_year++; - // Usage of potentially invalid date + // mkgmtime result checked in nested call here, assume leap year conversion is potentially handled CorrectUsageOf_mkgmtime(timeinfo); } ///////////////////////////////////////////////////////// -void FalsePositiveTests(int x) -{ - struct tm timeinfo; - SYSTEMTIME st; - timeinfo.tm_year = x; - timeinfo.tm_year = 1970; - - st.wYear = x; - st.wYear = 1900 + x; -} - -void FalseNegativeTests(int x) +/** + * Positive Case - Anti-pattern 1: [year +-n, month, day] +*/ +void test(int x) { struct tm timeinfo; SYSTEMTIME st; @@ -631,106 +809,952 @@ void FalseNegativeTests(int x) timeinfo.tm_year = x; // BUG - UncheckedLeapYearAfterYearModification - timeinfo.tm_year = x + timeinfo.tm_year; - // BUG - UncheckedLeapYearAfterYearModification - timeinfo.tm_year = 1970 + timeinfo.tm_year; + // Positive Case - Anti-pattern 1: [year +-n, month, day] + timeinfo.tm_year = x + timeinfo.tm_year; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] st.wYear = x; // BUG - UncheckedLeapYearAfterYearModification - st.wYear = x + st.wYear; - // BUG - UncheckedLeapYearAfterYearModification - st.wYear = (1986 + st.wYear) - 1; + // Positive Case - Anti-pattern 1: [year +-n, month, day] + st.wYear = x + st.wYear; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] } -// False positive -inline void -IncrementMonth(LPSYSTEMTIME pst) +/** + * Positive AntiPattern 1 NOTE: historically considered positive but mktime checks year validity, needs re-assessment + * Year field is modified but via an intermediary variable. +*/ +void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) { - if (pst->wMonth < 12) + struct tm tm_parsed; + + struct tm tm_now; + time_t t_now; + int year; + + /* + * As the timestamp does not contain the year + * number, daylight saving time information, nor + * a time zone, attempt to infer it. Due to + * clock skews, the timestamp may even be part + * of the next year. Use the last year for which + * the timestamp is at most one week in the + * future. + * + * This loop can only run for at most three + * iterations before terminating. + */ + t_now = now.tv_sec; + localtime_r(&t_now, &tm_now); + + timestamp_remote.tm = tm_parsed; + timestamp_remote.tm.tm_isdst = -1; + timestamp_remote.usec = now.tv_nsec * 0.001; + for (year = tm_now.tm_year + 1;; --year) { - pst->wMonth++; - } - else - { - pst->wMonth = 1; - pst->wYear++; + // assert(year >= tm_now.tm_year - 1); + timestamp_remote.tm.tm_year = year; + if (mktime(×tamp_remote.tm) < t_now + 7 * 24 * 60 * 60) + break; } } -///////////////////////////////////////////////////////// -void mkDateTest(int year) -{ - struct tm t; - - t.tm_sec = 0; - t.tm_min = 0; - t.tm_hour = 0; - t.tm_mday = 1; // day of the month - [1, 31] - t.tm_mon = 0; // months since January - [0, 11] - if (year >= 1900) + // False positive + inline void + IncrementMonth(LPSYSTEMTIME pst) { - // 4-digit year - t.tm_year = year - 1900; // GOOD - } else if ((year >= 0) && (year < 100)) { - // 2-digit year assumed in the range 2000 - 2099 - t.tm_year = year + 100; // GOOD [FALSE POSITIVE] - } else { - // fail + if (pst->wMonth < 12) + { + pst->wMonth++; + } + else + { + pst->wMonth = 1; + pst->wYear++; + } } - // ... + + ///////////////////////////////////////////////////////// + + void mkDateTest(int year) + { + struct tm t; + + t.tm_sec = 0; + t.tm_min = 0; + t.tm_hour = 0; + t.tm_mday = 1; // day of the month - [1, 31] + t.tm_mon = 0; // months since January - [0, 11] + if (year >= 1900) + { + // 4-digit year + t.tm_year = year - 1900; // GOOD + } + else if ((year >= 0) && (year < 100)) + { + // 2-digit year assumed in the range 2000 - 2099 + t.tm_year = year + 100; // GOOD [FALSE POSITIVE] + } + else + { + // fail + } + // ... + } + + /** + * Negative Case - Anti-pattern 1a: [a.year, b.month, b.day] + * False positive: No modification of SYSTEMTIME struct. + */ + void unmodified1() + { + SYSTEMTIME st; + FILETIME ft; + WORD w; + + GetSystemTime(&st); + + w = st.wYear; + + SystemTimeToFileTime(&st, &ft); // GOOD - no modification + } + + /** + * Negative Case - Anti-pattern 1a: [a.year, b.month, b.day] + * False positive: No modification of SYSTEMTIME struct. + */ + void unmodified2() + { + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + w_ptr = &(st.wYear); + + SystemTimeToFileTime(&st, &ft); // GOOD - no modification + } + + /** + * Positive Case - Anti-pattern 1: [year +-n, month, day] + * Modification of SYSTEMTIME struct adding to year but no leap year guard is conducted. + */ + void modified3() + { + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + // BUG - UncheckedLeapYearAfterYearModification + st.wYear = st.wYear + 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + SystemTimeToFileTime(&st, &ft); + } + + /** + * Positive Case - Anti-pattern 1: [year +-n, month, day] + * Modification of SYSTEMTIME struct adding to year but no leap year guard is conducted. + */ + void modified4() + { + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + // BUG - UncheckedLeapYearAfterYearModification + st.wYear++; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + SystemTimeToFileTime(&st, &ft); + } + + /** + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Modification of SYSTEMTIME struct adding to year but value passed to a + * conversion function that can be checked for success, and the result is checked. + */ + void modified5() + { + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + st.wYear++; + + // Presumed safe usage, as if the conversion is incorrect, a user can handle the error. + // NOTE: it doesn't mean the user actually does the correct conversion and it it also + // doesn't mean it will error our in all cases that may be invalid. + // For example, if a leap year and the date is 28, we may want 29 if the time is meant + // to capture the end of the month, but 28 is still valid and will not error out. + if (SystemTimeToFileTime(&st, &ft)) + { + ///... + } + } + +/** +* Negative Case - Anti-pattern 1: [year +-n, month, day] +* Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. +*/ +bool +FMAPITimeToSysTimeW(LPCWSTR wszTime, SYSTEMTIME *psystime) +{ + // if (!wszTime || SafeIsBadReadPtr(wszTime, 1) || lstrlenW(wszTime) != cchMAPITime) + // return false; + // AssertTag(!SafeIsBadWritePtr(psystime, sizeof(SYSTEMTIME)), 0x0004289a /* tag_abc80 */); + // memset(psystime, 0, sizeof(SYSTEMTIME)); + + psystime->wYear = (WORD)_wtoi(wszTime); + psystime->wMonth = (WORD)_wtoi(wszTime+5); + psystime->wDay = (WORD)_wtoi(wszTime+8); + psystime->wHour = (WORD)_wtoi(wszTime+11); + psystime->wMinute = (WORD)_wtoi(wszTime+14); + return true; } -void unmodified1() -{ +/** +* Negative Case - Anti-pattern 1: [year +-n, month, day] +* Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. +*/ +void fp_daymonth_guard(){ SYSTEMTIME st; FILETIME ft; - WORD w; - GetSystemTime(&st); + // FALSE POSITIVE: year is incremented but month is checked and day corrected + // in a ternary operation. It may be possible to fix this with a more sophisticated + // data flow analysis. + st.wYear++; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] - w = st.wYear; - - SystemTimeToFileTime(&st, &ft); // GOOD - no modification -} - -void unmodified2() -{ - SYSTEMTIME st; - FILETIME ft; - WORD *w_ptr; - - GetSystemTime(&st); - - w_ptr = &(st.wYear); - - SystemTimeToFileTime(&st, &ft); // GOOD - no modification -} - -void modified3() -{ - SYSTEMTIME st; - FILETIME ft; - WORD *w_ptr; - - GetSystemTime(&st); - - st.wYear = st.wYear + 1; // BAD + st.wDay = st.wMonth == 2 && st.wDay == 29 ? 28 : st.wDay; SystemTimeToFileTime(&st, &ft); } -void modified4() -{ - SYSTEMTIME st; - FILETIME ft; - WORD *w_ptr; - - GetSystemTime(&st); - - st.wYear++; // BAD - st.wYear++; // BAD - st.wYear++; // BAD - - SystemTimeToFileTime(&st, &ft); +void increment_arg(WORD &x){ + x++; // $ Source +} + +void increment_arg_by_pointer(WORD *x){ + (*x)++; // $ Source +} + + +void fn_year_set_through_out_arg(){ + SYSTEMTIME st; + GetSystemTime(&st); + // BAD, year incremented without check + increment_arg(st.wYear); // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // GetSystemTime(&st); + // Bad, year incremented without check + increment_arg_by_pointer(&st.wYear); // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + +/* TODO: don't alert on simple copies from another struct where all three {year,month,day} are copied +void +GetEpochTime(struct pg_tm *tm) +{ + struct pg_tm *t0; + pg_time_t epoch = 0; + + t0 = pg_gmtime(&epoch); + + tm->tm_year = t0->tm_year; + tm->tm_mon = t0->tm_mon; + tm->tm_mday = t0->tm_mday; + tm->tm_hour = t0->tm_hour; + tm->tm_min = t0->tm_min; + tm->tm_sec = t0->tm_sec; + + tm->tm_year += 1900; + tm->tm_mon++; +} */ + +void +fp_guarded_by_month(struct pg_tm *tm){ + int woy = 52; + int MONTHS_PER_YEAR = 12; + /* + * If it is week 52/53 and the month is January, then the + * week must belong to the previous year. Also, some + * December dates belong to the next year. + */ + if (woy >= 52 && tm->tm_mon == 1) + --tm->tm_year; // Negative Test Case + if (woy <= 1 && tm->tm_mon == MONTHS_PER_YEAR) + ++tm->tm_year; // Negative Test Case +} + +typedef unsigned short CSHORT; + +typedef struct _TIME_FIELDS { + CSHORT Year; + CSHORT Month; + CSHORT Day; + CSHORT Hour; + CSHORT Minute; + CSHORT Second; + CSHORT Milliseconds; + CSHORT Weekday; +} TIME_FIELDS, *PTIME_FIELDS; + +void +tp_ptime(PTIME_FIELDS ptm){ + ptm->Year = ptm->Year - 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + +bool isLeapYearRaw(WORD year) +{ + return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +void leap_year_checked_raw_false_positive1(WORD year, WORD offset, WORD day){ + struct tm tmp; + + year += offset; + + if (isLeapYearRaw(year)){ + // in this simplified example, assume the logic of this function + // can assume a day is 28 by default + // this check is more to establish the leap year guard is present + day += 1; + } + + // Assume the check handled leap year correctly + tmp.tm_year = year; // GOOD + tmp.tm_mday = day; +} + + +void leap_year_checked_raw_false_positive2(WORD year, WORD offset, WORD day){ + struct tm tmp; + + year += offset; + + tmp.tm_year = year; // GOOD, check performed immediately after on raw year + + // Adding some additional checks to resemble cases observed in the wild + if ( day > 0) + { + if (isLeapYearRaw(year)){ + // Assume logic that would adjust the day correctly + } + } + else{ + if (isLeapYearRaw(year)){ + // Assume logic that would adjust the day correctly + } + } + + tmp.tm_mday = day; + + year += offset; // $ Source + + tmp.tm_year = year; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + +} + + +bool isNotLeapYear(struct tm tm) +{ + return !(tm.tm_year % 4 == 0 && (tm.tm_year % 100 != 0 || tm.tm_year % 400 == 0)); +} + +bool isNotLeapYear2(struct tm tm) +{ + return (tm.tm_year % 4 != 0 || (tm.tm_year % 100 == 0 && tm.tm_year % 400 != 0)); +} + + +void inverted_leap_year_check(WORD year, WORD offset, WORD day){ + struct tm tmp; + + tmp.tm_year = year + offset; + + if (isNotLeapYear(tmp)){ + day = 28; + } + + tmp.tm_year = year + offset; + + if(isNotLeapYear2(tmp)){ + day = 28; + } + + + tmp.tm_year = year + offset; + bool isNotLeapYear = (tmp.tm_year % 4 != 0 || (tmp.tm_year % 100 == 0 && tmp.tm_year % 400 != 0)); + + if(isNotLeapYear){ + day = 28; + } + + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + +void simplified_leap_year_check1(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // OK + + bool isLeap = (!((tmp.tm_year + 1900) % 4)) && ((tmp.tm_year + 1900) % 100 || !((tmp.tm_year + 1900) % 400)); + if(isLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void simplified_leap_year_check2(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // OK + + bool isNotLeap = ((tmp.tm_year + 1900) % 4) || (!((tmp.tm_year + 1900) % 100) && ((tmp.tm_year + 1900) % 400)); + if(isNotLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void simplified_leap_year_check3(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // OK + + bool isLeap = (!(tmp.wYear % 4)) && (tmp.wYear % 100 || !(tmp.wYear% 400)); + if(isLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void simplified_leap_year_check4(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // OK + + bool isNotLeap = (tmp.wYear % 4) || (!(tmp.wYear % 100) && (tmp.wYear % 400)); + if(isNotLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void bad_simplified_leap_year_check1(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // incorrect logic, should negate the %4 result + bool isLeap = ((tmp.tm_year + 1900) % 4) && ((tmp.tm_year + 1900) % 100 || !((tmp.tm_year + 1900) % 400)); + if(isLeap){ + // do something + } +} + +void bad_simplified_leap_year_check2(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + + // incorrect logic, should not negate the %4 result + bool isNotLeap = (!((tmp.tm_year + 1900) % 4)) || (!((tmp.tm_year + 1900) % 100) && ((tmp.tm_year + 1900) % 400)); + if(isNotLeap){ + // do something + } +} + +void bad_simplified_leap_year_check3(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // incorrect logic, should negate the %4 result + bool isLeap = (tmp.wYear % 4) && (tmp.wYear % 100 || !(tmp.wYear % 400)); + if(isLeap){ + // do something + } +} + +void bad_simplified_leap_year_check4(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + + // incorrect logic, should not negate the %4 result + bool isNotLeap = (!(tmp.wYear % 4)) || (!(tmp.wYear % 100) && (tmp.wYear % 400)); + if(isNotLeap){ + // do something + } +} + + +void compound_leap_year_check(WORD year, WORD offset, WORD month, WORD day){ + struct tm tmp; + + tmp.tm_year = year + offset; + + bool isLeap = tmp.tm_year % 4 == 0 && (tmp.tm_year % 100 != 0 || tmp.tm_year % 400 == 0) && (month == 2 && day == 29); + + if(isLeap){ + // do something + } + tmp.tm_mday = day; + tmp.tm_mon = month; +} + +void indirect_time_conversion_check(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; + + FILETIME ft; + + // (out-of-scope) GeneralBug: Unchecked call to SystemTimeToFileTime. this may have failed, but we didn't check the return value! + BOOL res = SystemTimeToFileTime(&tmp, &ft); + + // Assume this check of the result is sufficient as an implicit leap year check. + bool x = (res == 0) ? true : false; +} + +void set_time(WORD year, WORD month, WORD day){ + SYSTEMTIME tmp; + + tmp.wYear = year; //$ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + tmp.wMonth = month; + tmp.wDay = day; +} + +void constant_month_on_year_modification1(WORD year, WORD offset, WORD month){ + SYSTEMTIME tmp; + + if(month++ > 12){ + tmp.wMonth = 1; + tmp.wYear = year + 1;// OK since the year is incremented with a known non-leap year month change + } + + if(month++ > 12){ + + set_time(year+1, 1, 31);// OK since the year is incremented with a known non-leap year month change + } +} + +void constant_month_on_year_modification2(WORD year, WORD offset, WORD month){ + SYSTEMTIME tmp; + + if(month++ > 12){ + tmp.wMonth = 1; + tmp.wYear = year + 1;// OK since the year is incremented with a known non-leap year month change + } + + + if(month++ > 12){ + // some heuristics to detect a false positive here rely on variable names + // which is often consistent in the wild. + // This variant uses the variable names yeartmp and monthtmp + WORD yeartmp; + WORD monthtmp; + yeartmp = year + 1; + monthtmp = 1; + set_time(yeartmp, monthtmp, 31);// OK since the year is incremented with a known non-leap year month change + } +} + +typedef struct parent_struct { + SYSTEMTIME t; +} PARENT_STRUCT; + + + +void nested_time_struct(WORD year, WORD offset){ + PARENT_STRUCT ps; + + ps.t.wYear = year + offset; // OK, checked below + + bool isLeap = isLeapYearRaw(ps.t.wYear); + + if(isLeap){ + // do something + } +} + +void intermediate_time_struct(WORD year, WORD offset){ + SYSTEMTIME tm, tm2; + FILETIME ftTime; + + tm.wYear = year + offset; + + tm2.wYear = tm.wYear; + + + while ( !SystemTimeToFileTime( &tm2, &ftTime ) ) + { + /// handle error + } + +} + +void constant_day_on_year_modification1(WORD year, WORD offset, WORD month){ + SYSTEMTIME tmp; + + if(month++ > 12){ + tmp.wDay = 1; + tmp.wYear = year + 1;// OK since the year is incremented with a known non-leap year day + } + + if(month++ > 12){ + + set_time(year+1, month, 1);// OK since the year is incremented with a known non-leap year day + } + + if(month++ > 12){ + + // BAD, year incremented, month unknown in block, and date is set to 31 + // which is dangerous. + set_time(year+1, month, 31);// $ Source + } +} + +void constant_day_on_year_modification2(WORD year, WORD month){ + SYSTEMTIME tmp; + + // FLASE POSITIVE SOURCE: + // flowing into set_time, the set time does pass a constant day + // but the source here and the source of that constant month don't align + // Current heuristics require the source of the constant day align with the + // source and/or the sink of the year modification. + // We could potentially improve this by checking the paths of both the year and day + // flows, but this may be more complex than is warranted for now. + year = year + 1; // $ SPURIOUS: Source + + if(month++ > 12){ + tmp.wDay = 1; + tmp.wYear = year;// OK since the year is incremented with a known non-leap year day + } + + if(month++ > 12){ + + set_time(year, month, 1);// OK since the year is incremented with a known non-leap year day + } + + year = year + 1; // $ Source + + if(month++ > 12){ + + // BAD, year incremented, month unknown in block, and date is set to 31 + // which is dangerous. + set_time(year, month, 31); + } +} + + +void modification_after_conversion1(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year += 1; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +WORD get_civil_year(tm timeinfo){ + return timeinfo.tm_year + 1900; +} + +void modification_after_conversion2(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + year += 1; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void modification_after_conversion_saved_to_other_time_struct1(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year += 1; // $ MISSING: Source + + SYSTEMTIME s; + // FALSE NEGATIVE: missing this because the conversion happens locally before + // the year adjustment, which seems as though it is part of a conversion itself + s.wYear = year; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + + +void modification_after_conversion_saved_to_other_time_struct2(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + + year += 1; // $ Source + + SYSTEMTIME s; + s.wYear = year; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void modification_after_conversion_saved_to_other_time_struct3(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year = year + 1; // $ MISSING: Source + + SYSTEMTIME s; + // FALSE NEGATIVE: missing this because the conversion happens locally before + // the year adjustment, which seems as though it is part of a conversion itself + s.wYear = year; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + +void year_saved_to_variable_then_modified1(tm timeinfo){ + // A modified year is not directly assigned to the year, rather, the year is + // saved to a variable, modified, used, but never assigned back. + WORD year = timeinfo.tm_year; + + // NOTE: should we even try to detect cases like this? + // Our current rationale is that a year in a struct is more dangerous than a year in isolation + // A year in isolation is harder to interpret + year += 1; // MISSING: $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void modification_before_conversion1(tm timeinfo){ + timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; +} + +void modification_before_conversion2(tm timeinfo){ + timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); +} + + + +void year_saved_to_variable_then_modified_with_leap_check1(tm timeinfo){ + // A modified year is not directly assigned to the year, rather, the year is + // saved to a variable, modified, used, but never assigned back. + WORD year = timeinfo.tm_year; + + year += 1; + + // performing a check is considered good enough, even if not used correctly + bool b = (year+1900) % 4 == 0 && ((year+1900) % 100 != 0 || (year+1900) % 400 == 0); +} + + +void modification_after_conversion_with_leap_check1(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year += 1; + + // performing a check is considered good enough, even if not used correctly + bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +void modification_after_conversion_with_leap_check2(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + + year += 1; + + // performing a check is considered good enough, even if not used correctly + bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +void modification_before_conversion_with_leap_check1(tm timeinfo){ + timeinfo.tm_year += 1; + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + // performing a check is considered good enough, even if not used correctly + bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +void modification_before_conversion_with_leap_check2(tm timeinfo){ + timeinfo.tm_year += 1; + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + + // performing a check is considered good enough, even if not used correctly + bool b = (year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0); +} + +void odd_leap_year_check1(tm timeinfo){ + timeinfo.tm_year += 1; + + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + if(((timeinfo.tm_year+1900) & 3) == 0 && ((timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +void odd_leap_year_check2(tm timeinfo){ + timeinfo.tm_year += 1; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + // but also check unrelated conditions on the year as an optimization to rule out irrelevant years + // for gregorian leap years + if(timeinfo.tm_mon == 2 && ((timeinfo.tm_year+1900) & 3) == 0 && ((timeinfo.tm_year+1900) <= 1582 || (timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +void odd_leap_year_check3(tm timeinfo){ + timeinfo.tm_year += 1; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + // but also check unrelated conditions on the year as an optimization to rule out irrelevant years + // for gregorian leap years + if(timeinfo.tm_mon == 2 && ((timeinfo.tm_year+1900) % 4) == 0 && ((timeinfo.tm_year+1900) <= 1582 || (timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +void odd_leap_year_check4(tm timeinfo){ + timeinfo.tm_year += 1; + WORD year = timeinfo.tm_year + 1900; + + if( (year % 4 == 0) && (year % 100 > 0 || (year % 400 == 0))) + { + // do something + } +} + +void odd_leap_year_check5(tm timeinfo){ + timeinfo.tm_year += 1; + WORD year = timeinfo.tm_year + 1900; + + if( (year % 4 > 0) || (year % 100 == 0 && (year % 400 > 0))) + { + // do something + } +} + + +void date_adjusted_through_mkgmtime(tm timeinfo){ + timeinfo.tm_year += 1; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + // but also check unrelated conditions on the year as an optimization to rule out irrelevant years + // for gregorian leap years + if(timeinfo.tm_mon == 2 && ((timeinfo.tm_year+1900) % 4) == 0 && ((timeinfo.tm_year+1900) <= 1582 || (timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +bool data_killer(WORD *d){ + (*d) = 1; + return true; +} + +void interproc_data_killer1(tm timeinfo, WORD delta){ + WORD year = delta + 1; + + if(data_killer(&year)){ + timeinfo.tm_year = year; + } +} + + +void leap_year_check_after_normalization(tm timeinfo, WORD delta){ + WORD year = delta + 1; + + if(data_killer(&year)){ + timeinfo.tm_year = year; + } +} + + +void leap_year_check_call_on_conversion1(tm timeinfo){ + timeinfo.tm_year += 1; + isLeapYearRaw(timeinfo.tm_year + 1900); +} + +void leap_year_check_call_on_conversion2(tm timeinfo){ + timeinfo.tm_year += 1; + WORD year = get_civil_year(timeinfo); + isLeapYearRaw(year); +} + +WORD getDaysInMonth(WORD year, WORD month){ + // simplified + if(month == 2){ + return isLeapYearRaw(year) ? 29 : 28; + } + // else assume logic for every other month, + // returning 30 for simplicity + return 30; +} + +WORD get_civil_year_raw(WORD year){ + return year + 1900; +} + +void leap_year_check_call_on_conversion3(tm timeinfo, WORD year, WORD month, WORD delta){ + year += delta; + WORD days = getDaysInMonth(get_civil_year_raw(year), month); + timeinfo.tm_year = year; +} + +void assumed_maketime_conversion1(tm timeinfo) +{ + //the docs of mktime suggest feb29 is handled, and conversion will occur automatically + //no check required. + timeinfo.tm_year += 1; + + mktime(&timeinfo); +} + + +void bad_leap_year_check_logic1(tm timeinfo){ + timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + WORD year = get_civil_year(timeinfo); + + // expected logic: + //(year % 4) && ((year % 100) || !(year % 400 ))) + WORD days = (!(year % 4) && (!(year % 100) || (year % 400))) ? 366 : 365; } diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp index abc21aa74d8..07e3520fa81 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp @@ -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; +} diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected index d067430aba9..162161e369b 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected @@ -2,10 +2,10 @@ | test.c:33:3:33:19 | call to not_yet_declared2 | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:77:6:77:22 | not_yet_declared2 | not_yet_declared2 | test.c:33:21:33:22 | ca | ca | file://:0:0:0:0 | int[4] | int[4] | test.c:77:24:77:26 | (unnamed parameter 0) | int (unnamed parameter 0) | | test.c:41:3:41:29 | call to declared_empty_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:78:6:78:32 | declared_empty_defined_with | declared_empty_defined_with | test.c:41:31:41:32 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:78:38:78:38 | x | int x | | test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:29:45:31 | 4 | 4 | file://:0:0:0:0 | long long | long long | test.c:81:36:81:36 | x | int x | -| test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:37:45:42 | 2500000000.0 | 2500000000.0 | file://:0:0:0:0 | float | float | test.c:81:50:81:50 | z | int z | -| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | +| test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:37:45:42 | 2.5E9 | 2.5E9 | file://:0:0:0:0 | float | float | test.c:81:50:81:50 | z | int z | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3.5E15 | 3.5E15 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | | test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:34:48:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:93:43:93:43 | y | void * y | -| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3.5E15 | 3.5E15 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | | test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:34:48:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:93:43:93:43 | y | void * y | | test.c:50:3:50:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:6:6:6:24 | declared_with_array | declared_with_array | test.c:50:23:50:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:94:31:94:31 | a | char[6] a | | test.c:50:3:50:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:94:6:94:24 | declared_with_array | declared_with_array | test.c:50:23:50:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:94:31:94:31 | a | char[6] a | @@ -15,4 +15,4 @@ | test.c:58:3:58:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:58:26:58:28 | 99 | 99 | file://:0:0:0:0 | int | int | test.c:104:44:104:45 | ll | long long ll | | test.c:59:3:59:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:59:26:59:26 | 3 | 3 | file://:0:0:0:0 | int | int | test.c:104:44:104:45 | ll | long long ll | | test.c:61:3:61:21 | call to defined_with_double | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:100:8:100:26 | defined_with_double | defined_with_double | test.c:61:23:61:25 | 2 | 2 | file://:0:0:0:0 | long long | long long | test.c:100:35:100:35 | d | double d | -| test.c:62:3:62:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:62:26:62:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:104:44:104:45 | ll | long long ll | +| test.c:62:3:62:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:62:26:62:31 | 3.5E15 | 3.5E15 | file://:0:0:0:0 | double | double | test.c:104:44:104:45 | ll | long long ll | diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs index bbd90989617..c93df9ccc4f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs @@ -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); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs index 254e7c76956..3e8ab9431be 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs @@ -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. + /// /// Gets the event symbol associated with accessor `symbol`, or `null` /// if there is no associated symbol. diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs index 0da8de1e5d5..ed8dae3738f 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs @@ -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)); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PropertyFieldAccess.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PropertyFieldAccess.cs new file mode 100644 index 00000000000..a9d2afa84c9 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PropertyFieldAccess.cs @@ -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 + { + 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); + } + } + } + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs index 9a010aad376..329115f11c7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs @@ -10,7 +10,7 @@ namespace Semmle.Extraction.CSharp.Entities { internal class Field : CachedSymbol, IExpressionParentEntity { - private Field(Context cx, IFieldSymbol init) + protected Field(Context cx, IFieldSymbol init) : base(cx, init) { type = new Lazy(() => Entities.Type.Create(cx, Symbol.Type)); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs new file mode 100644 index 00000000000..9e9b1f41fff --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs @@ -0,0 +1,53 @@ +using System.IO; +using Microsoft.CodeAnalysis; +using Semmle.Extraction.CSharp.Util; +using Semmle.Extraction.Kinds; + +namespace Semmle.Extraction.CSharp.Entities +{ + /// + /// 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. + /// + 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 + { + public static PropertyFieldFactory Instance { get; } = new PropertyFieldFactory(); + + public override PropertyField Create(Context cx, IFieldSymbol init) => new PropertyField(cx, init); + } + } +} diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index bb75fe4cfff..2bf13d256c9 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.59 +version: 1.7.60-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 0ab19080276..780301f353c 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.59 +version: 1.7.60-dev groups: - csharp - solorigate diff --git a/csharp/ql/integration-tests/posix/conftest.py b/csharp/ql/integration-tests/posix/conftest.py new file mode 100644 index 00000000000..543bc046c98 --- /dev/null +++ b/csharp/ql/integration-tests/posix/conftest.py @@ -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 + ) + ) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py index d1c1745d69b..725ded1899c 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py @@ -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" diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py index 6d2058c684c..662178aa3c0 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py @@ -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" diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py index 7f88196097f..d8e8c8055ad 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py @@ -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") diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py index 185fb5201f9..ccd8f61a384 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py @@ -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") diff --git a/csharp/ql/lib/change-notes/2026-02-12-field-keyword.md b/csharp/ql/lib/change-notes/2026-02-12-field-keyword.md new file mode 100644 index 00000000000..7ca6548b27f --- /dev/null +++ b/csharp/ql/lib/change-notes/2026-02-12-field-keyword.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 14: Added support for the `field` keyword in properties. diff --git a/csharp/ql/lib/change-notes/2026-02-16-partial-events.md b/csharp/ql/lib/change-notes/2026-02-16-partial-events.md new file mode 100644 index 00000000000..3bbc1ae829a --- /dev/null +++ b/csharp/ql/lib/change-notes/2026-02-16-partial-events.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 14: Added support for partial events. diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d873c0c3b08..30f75e74304 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.4.7 +version: 5.4.8-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 7986040d2b6..d43afd632c1 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.6.2 +version: 1.6.3-dev groups: - csharp - queries diff --git a/csharp/ql/test/library-tests/dataflow/fields/D.cs b/csharp/ql/test/library-tests/dataflow/fields/D.cs index 7f07cf5ca0b..45dfbffc801 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/D.cs +++ b/csharp/ql/test/library-tests/dataflow/fields/D.cs @@ -89,3 +89,65 @@ public partial class DPartial static T Source(object source) => throw null; } + +public class DFieldProps +{ + object FieldProp0 + { + get { return field; } + set { field = value; } + } = Source(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(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(2); + d2.FieldProp2 = o2; + Sink(d2.FieldProp0); // $ hasValueFlow=0 + Sink(d2.FieldProp1); // no flow + Sink(d2.FieldProp2); // $ hasValueFlow=2 + + var o3 = Source(3); + DFieldProps.StaticFieldProp = o3; + Sink(DFieldProps.StaticFieldProp); // $ hasValueFlow=3 + } + + public static void Sink(object o) { } + + static T Source(object source) => throw null; + +} diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index 4e469e11887..44789d1f847 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -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 | 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 | 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 | D.cs:98:9:98:11 | value : Object | provenance | | +| D.cs:99:9:99:25 | call to method Source : 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 | D.cs:131:13:131:14 | access to local variable o1 : Object | provenance | | +| D.cs:131:18:131:34 | call to method Source : 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 | D.cs:138:13:138:14 | access to local variable o2 : Object | provenance | | +| D.cs:138:18:138:34 | call to method Source : 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 | D.cs:144:13:144:14 | access to local variable o3 : Object | provenance | | +| D.cs:144:18:144:34 | call to method Source : 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 | semmle.label | call to method Source : Object | +| D.cs:99:9:99:25 | call to method Source : Object | semmle.label | call to method Source : 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 | semmle.label | call to method Source : Object | +| D.cs:131:18:131:34 | call to method Source : Object | semmle.label | call to method Source : 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 | semmle.label | call to method Source : Object | +| D.cs:138:18:138:34 | call to method Source : Object | semmle.label | call to method Source : 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 | semmle.label | call to method Source : Object | +| D.cs:144:18:144:34 | call to method Source : Object | semmle.label | call to method Source : 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 | 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 | 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 | D.cs:47:14:47:26 | access to property ComplexProp | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | | D.cs:84:14:84:27 | access to property PartialProp1 | D.cs:78:17:78:33 | call to method Source : Object | D.cs:84:14:84:27 | access to property PartialProp1 | $@ | D.cs:78:17:78:33 | call to method Source : Object | call to method Source : Object | | D.cs:84:14:84:27 | access to property PartialProp1 | D.cs:78:17:78:33 | call to method Source : Object | D.cs:84:14:84:27 | access to property PartialProp1 | $@ | D.cs:78:17:78:33 | call to method Source : Object | call to method Source : Object | +| D.cs:126:14:126:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:126:14:126:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:126:14:126:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:126:14:126:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:133:14:133:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:133:14:133:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:133:14:133:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:133:14:133:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:134:14:134:26 | access to property FieldProp1 | D.cs:131:18:131:34 | call to method Source : Object | D.cs:134:14:134:26 | access to property FieldProp1 | $@ | D.cs:131:18:131:34 | call to method Source : Object | call to method Source : Object | +| D.cs:134:14:134:26 | access to property FieldProp1 | D.cs:131:18:131:34 | call to method Source : Object | D.cs:134:14:134:26 | access to property FieldProp1 | $@ | D.cs:131:18:131:34 | call to method Source : Object | call to method Source : Object | +| D.cs:140:14:140:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:140:14:140:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:140:14:140:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:140:14:140:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:142:14:142:26 | access to property FieldProp2 | D.cs:138:18:138:34 | call to method Source : Object | D.cs:142:14:142:26 | access to property FieldProp2 | $@ | D.cs:138:18:138:34 | call to method Source : Object | call to method Source : Object | +| D.cs:142:14:142:26 | access to property FieldProp2 | D.cs:138:18:138:34 | call to method Source : Object | D.cs:142:14:142:26 | access to property FieldProp2 | $@ | D.cs:138:18:138:34 | call to method Source : Object | call to method Source : Object | +| D.cs:146:14:146:40 | access to property StaticFieldProp | D.cs:144:18:144:34 | call to method Source : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | $@ | D.cs:144:18:144:34 | call to method Source : Object | call to method Source : Object | +| D.cs:146:14:146:40 | access to property StaticFieldProp | D.cs:144:18:144:34 | call to method Source : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | $@ | D.cs:144:18:144:34 | call to method Source : Object | call to method Source : Object | | E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source : Object | call to method Source : Object | | E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source : Object | call to method Source : Object | | E.cs:57:14:57:26 | access to field RefField | E.cs:54:21:54:37 | call to method Source : Object | E.cs:57:14:57:26 | access to field RefField | $@ | E.cs:54:21:54:37 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dispatch/CallGraph.expected b/csharp/ql/test/library-tests/dispatch/CallGraph.expected index 4eed880f0a3..2feb959dd86 100644 --- a/csharp/ql/test/library-tests/dispatch/CallGraph.expected +++ b/csharp/ql/test/library-tests/dispatch/CallGraph.expected @@ -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 | diff --git a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected index b38eed691b9..5d6b4be4f87 100644 --- a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected +++ b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected @@ -518,7 +518,9 @@ | ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution2.M(Int32[]) | | ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution1.M(List) | | ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution2.M(List) | -| 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) | diff --git a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs index 99b4ec54a99..e904eb01a86 100644 --- a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs +++ b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs @@ -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) => { }; } } diff --git a/csharp/ql/test/library-tests/partial/MethodIsPartial.expected b/csharp/ql/test/library-tests/partial/MethodIsPartial.expected index 4c0e905d8c5..a0f1f88fb98 100644 --- a/csharp/ql/test/library-tests/partial/MethodIsPartial.expected +++ b/csharp/ql/test/library-tests/partial/MethodIsPartial.expected @@ -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 | diff --git a/csharp/ql/test/library-tests/partial/Partial.cs b/csharp/ql/test/library-tests/partial/Partial.cs index 5a3e4af2e8c..8dd757fcd24 100644 --- a/csharp/ql/test/library-tests/partial/Partial.cs +++ b/csharp/ql/test/library-tests/partial/Partial.cs @@ -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; } diff --git a/csharp/ql/test/library-tests/partial/Partial1.expected b/csharp/ql/test/library-tests/partial/Partial1.expected index 55dcaabcea7..fe8f5658f48 100644 --- a/csharp/ql/test/library-tests/partial/Partial1.expected +++ b/csharp/ql/test/library-tests/partial/Partial1.expected @@ -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 | diff --git a/csharp/ql/test/library-tests/partial/Partial2.expected b/csharp/ql/test/library-tests/partial/Partial2.expected index 87194dd3f9e..8d608c26011 100644 --- a/csharp/ql/test/library-tests/partial/Partial2.expected +++ b/csharp/ql/test/library-tests/partial/Partial2.expected @@ -1,15 +1,15 @@ -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:1:15:1:26 | | -| 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 | | -| 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 | | -| 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 | | +| 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 | | +| 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 | | +| 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 | | | PartialMultipleFiles2.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | | diff --git a/csharp/ql/test/library-tests/partial/PartialAccessors.expected b/csharp/ql/test/library-tests/partial/PartialAccessors.expected index 2c69ed620ae..a9d70645420 100644 --- a/csharp/ql/test/library-tests/partial/PartialAccessors.expected +++ b/csharp/ql/test/library-tests/partial/PartialAccessors.expected @@ -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 | diff --git a/csharp/ql/test/library-tests/partial/PartialConstructors.expected b/csharp/ql/test/library-tests/partial/PartialConstructors.expected index 01779f1b81e..69cabb244f5 100644 --- a/csharp/ql/test/library-tests/partial/PartialConstructors.expected +++ b/csharp/ql/test/library-tests/partial/PartialConstructors.expected @@ -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 | {...} | diff --git a/csharp/ql/test/library-tests/partial/PartialEvents.expected b/csharp/ql/test/library-tests/partial/PartialEvents.expected new file mode 100644 index 00000000000..b12f8a07a9d --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialEvents.expected @@ -0,0 +1,2 @@ +| Partial.cs:36:39:36:51 | PartialEvent1 | true | +| Partial.cs:54:31:54:35 | Event | false | diff --git a/csharp/ql/test/library-tests/partial/PartialEvents.ql b/csharp/ql/test/library-tests/partial/PartialEvents.ql new file mode 100644 index 00000000000..e9f45250266 --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialEvents.ql @@ -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) diff --git a/csharp/ql/test/library-tests/partial/PartialIndexers.expected b/csharp/ql/test/library-tests/partial/PartialIndexers.expected index 151ed5aad03..be625fc4ad5 100644 --- a/csharp/ql/test/library-tests/partial/PartialIndexers.expected +++ b/csharp/ql/test/library-tests/partial/PartialIndexers.expected @@ -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 | diff --git a/csharp/ql/test/library-tests/partial/PartialMethodBody.expected b/csharp/ql/test/library-tests/partial/PartialMethodBody.expected index b75a105bea0..a91a156cb62 100644 --- a/csharp/ql/test/library-tests/partial/PartialMethodBody.expected +++ b/csharp/ql/test/library-tests/partial/PartialMethodBody.expected @@ -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 | diff --git a/csharp/ql/test/library-tests/partial/PartialProperties.expected b/csharp/ql/test/library-tests/partial/PartialProperties.expected index 8d2dfc01e74..4686bbf087a 100644 --- a/csharp/ql/test/library-tests/partial/PartialProperties.expected +++ b/csharp/ql/test/library-tests/partial/PartialProperties.expected @@ -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 | diff --git a/csharp/ql/test/library-tests/partial/PrintAst.expected b/csharp/ql/test/library-tests/partial/PrintAst.expected index 0729946b18b..315de869fb3 100644 --- a/csharp/ql/test/library-tests/partial/PrintAst.expected +++ b/csharp/ql/test/library-tests/partial/PrintAst.expected @@ -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: diff --git a/csharp/ql/test/library-tests/properties/PrintAst.expected b/csharp/ql/test/library-tests/properties/PrintAst.expected index 2df3ee3f5e8..711e417558e 100644 --- a/csharp/ql/test/library-tests/properties/PrintAst.expected +++ b/csharp/ql/test/library-tests/properties/PrintAst.expected @@ -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 diff --git a/csharp/ql/test/library-tests/properties/Properties17.expected b/csharp/ql/test/library-tests/properties/Properties17.expected index 47b563e2676..ee817a63df9 100644 --- a/csharp/ql/test/library-tests/properties/Properties17.expected +++ b/csharp/ql/test/library-tests/properties/Properties17.expected @@ -1,3 +1,4 @@ +| Prop.field | | caption | | next | | y | diff --git a/csharp/ql/test/library-tests/properties/Properties17.ql b/csharp/ql/test/library-tests/properties/Properties17.ql index ca53f5423aa..6bd668ec118 100644 --- a/csharp/ql/test/library-tests/properties/Properties17.ql +++ b/csharp/ql/test/library-tests/properties/Properties17.ql @@ -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 diff --git a/csharp/ql/test/library-tests/properties/properties.cs b/csharp/ql/test/library-tests/properties/properties.cs index 57ffa7a31a5..2f88214ec75 100644 --- a/csharp/ql/test/library-tests/properties/properties.cs +++ b/csharp/ql/test/library-tests/properties/properties.cs @@ -124,4 +124,13 @@ namespace Properties set { } } } + + class UseFieldKeyword + { + public object Prop + { + get { return field; } + set { field = value; } + } + } } diff --git a/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/NullableTest.cs b/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/NullableTest.cs new file mode 100644 index 00000000000..a66ffbec9a0 --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/NullableTest.cs @@ -0,0 +1,86 @@ +using System; + +#nullable enable + +namespace Test +{ + class TestClass1 : IEquatable + { + 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 + { + 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 + { + 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 + { + 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; + } + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/NullableTest.cs b/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/NullableTest.cs new file mode 100644 index 00000000000..a66ffbec9a0 --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/NullableTest.cs @@ -0,0 +1,86 @@ +using System; + +#nullable enable + +namespace Test +{ + class TestClass1 : IEquatable + { + 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 + { + 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 + { + 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 + { + 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; + } + } +} \ No newline at end of file diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 6216bae08df..566238658f3 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -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. diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 96304fa9a18..6f9302c9ac4 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.42 +version: 1.0.43-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 94a5b04b390..ac5f63a29bc 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 7.0.0 +version: 7.0.1-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 43b5c67bc3f..bbac3ffc212 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.5.6 +version: 1.5.7-dev groups: - go - queries diff --git a/java/ql/lib/change-notes/2026-02-12-jakarta.md b/java/ql/lib/change-notes/2026-02-12-jakarta.md new file mode 100644 index 00000000000..062e202cb8a --- /dev/null +++ b/java/ql/lib/change-notes/2026-02-12-jakarta.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Some modelling which previously only worked for Java EE packages beginning with "javax" will now also work for Java EE packages beginning with "jakarta" as well. This may lead to some alert changes. diff --git a/java/ql/lib/experimental/quantum/JCA.qll b/java/ql/lib/experimental/quantum/JCA.qll index b1b536a3ccb..feac5aaf0ea 100644 --- a/java/ql/lib/experimental/quantum/JCA.qll +++ b/java/ql/lib/experimental/quantum/JCA.qll @@ -295,7 +295,7 @@ module JCAModel { class CipherGetInstanceCall extends MethodCall { CipherGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "Cipher", "getInstance") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", "getInstance") } Expr getAlgorithmArg() { result = this.getArgument(0) } @@ -307,7 +307,8 @@ module JCAModel { private class CipherOperationCall extends MethodCall { CipherOperationCall() { this.getMethod() - .hasQualifiedName("javax.crypto", "Cipher", ["update", "doFinal", "wrap", "unwrap"]) + .hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", + ["update", "doFinal", "wrap", "unwrap"]) } predicate isIntermediate() { this.getMethod().getName() = "update" } @@ -474,7 +475,9 @@ module JCAModel { * An access to the `javax.crypto.Cipher` class. */ private class CipherAccess extends TypeAccess { - CipherAccess() { this.getType().(Class).hasQualifiedName("javax.crypto", "Cipher") } + CipherAccess() { + this.getType().(Class).hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher") + } } /** @@ -708,7 +711,9 @@ module JCAModel { // and through setter methods class IvParameterSpecInstance extends NonceParameterInstantiation { IvParameterSpecInstance() { - super.getConstructedType().hasQualifiedName("javax.crypto.spec", "IvParameterSpec") + super + .getConstructedType() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "IvParameterSpec") } override DataFlow::Node getInputNode() { result.asExpr() = super.getArgument(0) } @@ -717,7 +722,9 @@ module JCAModel { // TODO: this also specifies the tag length for GCM class GCMParameterSpecInstance extends NonceParameterInstantiation { GCMParameterSpecInstance() { - super.getConstructedType().hasQualifiedName("javax.crypto.spec", "GCMParameterSpec") + super + .getConstructedType() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "GCMParameterSpec") } override DataFlow::Node getInputNode() { result.asExpr() = super.getArgument(1) } @@ -725,7 +732,8 @@ module JCAModel { class IvParameterSpecGetIvCall extends MethodCall { IvParameterSpecGetIvCall() { - this.getMethod().hasQualifiedName("javax.crypto.spec", "IvParameterSpec", "getIV") + this.getMethod() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "IvParameterSpec", "getIV") } } @@ -797,7 +805,9 @@ module JCAModel { } class CipherInitCall extends MethodCall { - CipherInitCall() { this.getCallee().hasQualifiedName("javax.crypto", "Cipher", "init") } + CipherInitCall() { + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", "init") + } /** * Returns the mode argument to the `init` method @@ -966,7 +976,9 @@ module JCAModel { class DHGenParameterSpecInstance extends KeyGeneratorParameterSpecClassInstanceExpr { DHGenParameterSpecInstance() { - super.getConstructedType().hasQualifiedName("javax.crypto.spec", "DHGenParameterSpec") + super + .getConstructedType() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "DHGenParameterSpec") } Expr getPrimeSizeArg() { result = this.getArgument(0) } @@ -1067,7 +1079,7 @@ module JCAModel { //TODO: Link getAlgorithm from KeyPairGenerator to algorithm instances or AVCs? High priority. class KeyGeneratorGetInstanceCall extends MethodCall { KeyGeneratorGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyGenerator", "getInstance") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator", "getInstance") or this.getCallee().hasQualifiedName("java.security", "KeyPairGenerator", "getInstance") } @@ -1082,7 +1094,8 @@ module JCAModel { this.getCallee().hasQualifiedName("java.security", "KeyPairGenerator", "initialize") and keyType = Crypto::TAsymmetricKeyType() or - this.getCallee().hasQualifiedName("javax.crypto", "KeyGenerator", ["init", "initialize"]) and + this.getCallee() + .hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator", ["init", "initialize"]) and keyType = Crypto::TSymmetricKeyType() } @@ -1111,7 +1124,7 @@ module JCAModel { Crypto::KeyArtifactType type; KeyGeneratorGenerateCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyGenerator", "generateKey") and + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator", "generateKey") and type instanceof Crypto::TSymmetricKeyType or this.getCallee() @@ -1176,7 +1189,7 @@ module JCAModel { class KeySpecInstantiation extends ClassInstanceExpr { KeySpecInstantiation() { this.getConstructedType() - .hasQualifiedName("javax.crypto.spec", + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", ["PBEKeySpec", "SecretKeySpec", "PBEKeySpec", "DESedeKeySpec"]) } @@ -1227,7 +1240,8 @@ module JCAModel { class SecretKeyFactoryGetInstanceCall extends MethodCall { SecretKeyFactoryGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "SecretKeyFactory", "getInstance") + this.getCallee() + .hasQualifiedName(javaxOrJakarta() + ".crypto", "SecretKeyFactory", "getInstance") } Expr getAlgorithmArg() { result = this.getArgument(0) } @@ -1235,7 +1249,8 @@ module JCAModel { class SecretKeyFactoryGenerateSecretCall extends MethodCall { SecretKeyFactoryGenerateSecretCall() { - this.getCallee().hasQualifiedName("javax.crypto", "SecretKeyFactory", "generateSecret") + this.getCallee() + .hasQualifiedName(javaxOrJakarta() + ".crypto", "SecretKeyFactory", "generateSecret") } Expr getKeySpecArg() { result = this.getArgument(0) } @@ -1430,7 +1445,7 @@ module JCAModel { class KeyAgreementInitCall extends MethodCall { KeyAgreementInitCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyAgreement", "init") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", "init") } Expr getServerKeyArg() { result = this.getArgument(0) } @@ -1438,7 +1453,7 @@ module JCAModel { class KeyAgreementGetInstanceCall extends MethodCall { KeyAgreementGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyAgreement", "getInstance") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", "getInstance") } Expr getAlgorithmArg() { result = super.getArgument(0) } @@ -1482,7 +1497,8 @@ module JCAModel { class KeyAgreementCall extends MethodCall { KeyAgreementCall() { this.getCallee() - .hasQualifiedName("javax.crypto", "KeyAgreement", ["generateSecret", "doPhase"]) + .hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", + ["generateSecret", "doPhase"]) } predicate isIntermediate() { this.getCallee().getName() = "doPhase" } @@ -1647,7 +1663,9 @@ module JCAModel { } class MacGetInstanceCall extends MethodCall { - MacGetInstanceCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "getInstance") } + MacGetInstanceCall() { + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Mac", "getInstance") + } Expr getAlgorithmArg() { result = this.getArgument(0) } @@ -1663,7 +1681,7 @@ module JCAModel { } class MacInitCall extends MethodCall { - MacInitCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "init") } + MacInitCall() { this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Mac", "init") } Expr getKeyArg() { result = this.getArgument(0) and this.getMethod().getParameterType(0).hasName("Key") @@ -1691,7 +1709,7 @@ module JCAModel { Expr output; MacOperationCall() { - super.getMethod().getDeclaringType().hasQualifiedName("javax.crypto", "Mac") and + super.getMethod().getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".crypto", "Mac") and ( super.getMethod().hasStringSignature(["doFinal()", "doFinal(byte[])"]) and this = output or diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 2d891f9ac5f..a1737f2d1cb 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 8.1.0 +version: 8.1.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/lib/semmle/code/java/J2EE.qll b/java/ql/lib/semmle/code/java/J2EE.qll index 4412b3715e3..4cfffcdfa9f 100644 --- a/java/ql/lib/semmle/code/java/J2EE.qll +++ b/java/ql/lib/semmle/code/java/J2EE.qll @@ -6,52 +6,67 @@ module; import Type +/** Gets "java" or "jakarta". */ +string javaxOrJakarta() { result = ["javax", "jakarta"] } + /** An entity bean. */ class EntityBean extends Class { EntityBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EntityBean") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EntityBean") | + this.hasSupertype+(i) + ) } } /** An enterprise bean. */ class EnterpriseBean extends RefType { EnterpriseBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EnterpriseBean") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EnterpriseBean") | + this.hasSupertype+(i) + ) } } /** A local EJB home interface. */ class LocalEjbHomeInterface extends Interface { LocalEjbHomeInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBLocalHome") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBLocalHome") | + this.hasSupertype+(i) + ) } } /** A remote EJB home interface. */ class RemoteEjbHomeInterface extends Interface { RemoteEjbHomeInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBHome") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBHome") | + this.hasSupertype+(i) + ) } } /** A local EJB interface. */ class LocalEjbInterface extends Interface { LocalEjbInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBLocalObject") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBLocalObject") | + this.hasSupertype+(i) + ) } } /** A remote EJB interface. */ class RemoteEjbInterface extends Interface { RemoteEjbInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBObject") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBObject") | + this.hasSupertype+(i) + ) } } /** A message bean. */ class MessageBean extends Class { MessageBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "MessageDrivenBean") | + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "MessageDrivenBean") | this.hasSupertype+(i) ) } @@ -60,6 +75,8 @@ class MessageBean extends Class { /** A session bean. */ class SessionBean extends Class { SessionBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "SessionBean") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "SessionBean") | + this.hasSupertype+(i) + ) } } diff --git a/java/ql/lib/semmle/code/java/JMX.qll b/java/ql/lib/semmle/code/java/JMX.qll index 3f18e0ecf3d..a951b2a7d1a 100644 --- a/java/ql/lib/semmle/code/java/JMX.qll +++ b/java/ql/lib/semmle/code/java/JMX.qll @@ -18,7 +18,7 @@ class MBean extends ManagedBean { class MXBean extends ManagedBean { MXBean() { this.getQualifiedName().matches("%MXBean%") or - this.getAnAnnotation().getType().hasQualifiedName("javax.management", "MXBean") + this.getAnAnnotation().getType().hasQualifiedName(javaxOrJakarta() + ".management", "MXBean") } } @@ -61,7 +61,7 @@ class JmxRegistrationCall extends MethodCall { class JmxRegistrationMethod extends Method { JmxRegistrationMethod() { // A direct registration with the `MBeanServer`. - this.getDeclaringType().hasQualifiedName("javax.management", "MBeanServer") and + this.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".management", "MBeanServer") and this.getName() = "registerMBean" or // The `MBeanServer` is often wrapped by an application specific management class, so identify @@ -78,7 +78,7 @@ class JmxRegistrationMethod extends Method { */ int getObjectPosition() { // Passed as the first argument to `registerMBean`. - this.getDeclaringType().hasQualifiedName("javax.management", "MBeanServer") and + this.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".management", "MBeanServer") and this.getName() = "registerMBean" and result = 0 or @@ -92,16 +92,20 @@ class JmxRegistrationMethod extends Method { /** The class `javax.management.remote.JMXConnectorFactory`. */ class TypeJmxConnectorFactory extends Class { TypeJmxConnectorFactory() { - this.hasQualifiedName("javax.management.remote", "JMXConnectorFactory") + this.hasQualifiedName(javaxOrJakarta() + ".management.remote", "JMXConnectorFactory") } } /** The class `javax.management.remote.JMXServiceURL`. */ class TypeJmxServiceUrl extends Class { - TypeJmxServiceUrl() { this.hasQualifiedName("javax.management.remote", "JMXServiceURL") } + TypeJmxServiceUrl() { + this.hasQualifiedName(javaxOrJakarta() + ".management.remote", "JMXServiceURL") + } } /** The class `javax.management.remote.rmi.RMIConnector`. */ class TypeRmiConnector extends Class { - TypeRmiConnector() { this.hasQualifiedName("javax.management.remote.rmi", "RMIConnector") } + TypeRmiConnector() { + this.hasQualifiedName(javaxOrJakarta() + ".management.remote.rmi", "RMIConnector") + } } diff --git a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll index ec8ad6e2d4f..26444920a7e 100644 --- a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll @@ -316,7 +316,7 @@ class FacesComponentReflectivelyConstructedClass extends ReflectivelyConstructed * Entry point for EJB home interfaces. */ class EjbHome extends Interface, EntryPoint { - EjbHome() { this.getAnAncestor().hasQualifiedName("javax.ejb", "EJBHome") } + EjbHome() { this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBHome") } override Callable getALiveCallable() { result = this.getACallable() } } @@ -325,7 +325,7 @@ class EjbHome extends Interface, EntryPoint { * Entry point for EJB object interfaces. */ class EjbObject extends Interface, EntryPoint { - EjbObject() { this.getAnAncestor().hasQualifiedName("javax.ejb", "EJBObject") } + EjbObject() { this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBObject") } override Callable getALiveCallable() { result = this.getACallable() } } @@ -341,7 +341,9 @@ class GsonDeserializationEntryPoint extends ReflectivelyConstructedClass { class JaxbDeserializationEntryPoint extends ReflectivelyConstructedClass { JaxbDeserializationEntryPoint() { // A class can be deserialized by JAXB if it's an `XmlRootElement`... - this.getAnAnnotation().getType().hasQualifiedName("javax.xml.bind.annotation", "XmlRootElement") + this.getAnAnnotation() + .getType() + .hasQualifiedName(javaxOrJakarta() + ".xml.bind.annotation", "XmlRootElement") or // ... or the type of an `XmlElement` field. exists(Field elementField | diff --git a/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll index df9ef0a7b7c..63b142ae3ad 100644 --- a/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll @@ -45,7 +45,7 @@ class ServletListenerClass extends ReflectivelyConstructedClass { */ class ServletFilterClass extends ReflectivelyConstructedClass { ServletFilterClass() { - this.getAnAncestor().hasQualifiedName("javax.servlet", "Filter") and + this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".servlet", "Filter") and // If we have seen any `web.xml` files, this filter will be considered to be live only if it is // referred to as a filter-class in at least one. If no `web.xml` files are found, we assume // that XML extraction was not enabled, and therefore consider all filter classes as live. diff --git a/java/ql/lib/semmle/code/java/frameworks/JAXB.qll b/java/ql/lib/semmle/code/java/frameworks/JAXB.qll index 1283aa3d21e..c781abdb828 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JAXB.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JAXB.qll @@ -6,20 +6,20 @@ import semmle.code.java.Type class JaxbElement extends Class { JaxbElement() { - this.getAnAncestor().hasQualifiedName("javax.xml.bind", "JAXBElement") or + this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".xml.bind", "JAXBElement") or this.getAnAnnotation().getType().getName() = "XmlRootElement" } } class JaxbMarshalMethod extends Method { JaxbMarshalMethod() { - this.getDeclaringType().hasQualifiedName("javax.xml.bind", "Marshaller") and + this.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".xml.bind", "Marshaller") and this.getName() = "marshal" } } class JaxbAnnotationType extends AnnotationType { - JaxbAnnotationType() { this.getPackage().getName() = "javax.xml.bind.annotation" } + JaxbAnnotationType() { this.getPackage().getName() = javaxOrJakarta() + ".xml.bind.annotation" } } class JaxbAnnotated extends Annotatable { diff --git a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll index 517f55fcc86..3b70c42fbec 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll @@ -14,35 +14,45 @@ import java * A `@javax.annotation.Generated` annotation. */ class GeneratedAnnotation extends Annotation { - GeneratedAnnotation() { this.getType().hasQualifiedName("javax.annotation", "Generated") } + GeneratedAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "Generated") + } } /** * A `@javax.annotation.PostConstruct` annotation. */ class PostConstructAnnotation extends Annotation { - PostConstructAnnotation() { this.getType().hasQualifiedName("javax.annotation", "PostConstruct") } + PostConstructAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "PostConstruct") + } } /** * A `@javax.annotation.PreDestroy` annotation. */ class PreDestroyAnnotation extends Annotation { - PreDestroyAnnotation() { this.getType().hasQualifiedName("javax.annotation", "PreDestroy") } + PreDestroyAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "PreDestroy") + } } /** * A `@javax.annotation.Resource` annotation. */ class ResourceAnnotation extends Annotation { - ResourceAnnotation() { this.getType().hasQualifiedName("javax.annotation", "Resource") } + ResourceAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "Resource") + } } /** * A `@javax.annotation.Resources` annotation. */ class ResourcesAnnotation extends Annotation { - ResourcesAnnotation() { this.getType().hasQualifiedName("javax.annotation", "Resources") } + ResourcesAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "Resources") + } } /** @@ -50,7 +60,7 @@ class ResourcesAnnotation extends Annotation { */ class JavaxManagedBeanAnnotation extends Annotation { JavaxManagedBeanAnnotation() { - this.getType().hasQualifiedName("javax.annotation", "ManagedBean") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "ManagedBean") } } @@ -63,7 +73,7 @@ class JavaxManagedBeanAnnotation extends Annotation { */ class DeclareRolesAnnotation extends Annotation { DeclareRolesAnnotation() { - this.getType().hasQualifiedName("javax.annotation.security", "DeclareRoles") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "DeclareRoles") } } @@ -71,7 +81,9 @@ class DeclareRolesAnnotation extends Annotation { * A `@javax.annotation.security.DenyAll` annotation. */ class DenyAllAnnotation extends Annotation { - DenyAllAnnotation() { this.getType().hasQualifiedName("javax.annotation.security", "DenyAll") } + DenyAllAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "DenyAll") + } } /** @@ -79,7 +91,7 @@ class DenyAllAnnotation extends Annotation { */ class PermitAllAnnotation extends Annotation { PermitAllAnnotation() { - this.getType().hasQualifiedName("javax.annotation.security", "PermitAll") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "PermitAll") } } @@ -88,7 +100,7 @@ class PermitAllAnnotation extends Annotation { */ class RolesAllowedAnnotation extends Annotation { RolesAllowedAnnotation() { - this.getType().hasQualifiedName("javax.annotation.security", "RolesAllowed") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "RolesAllowed") } } @@ -96,7 +108,9 @@ class RolesAllowedAnnotation extends Annotation { * A `@javax.annotation.security.RunAs` annotation. */ class RunAsAnnotation extends Annotation { - RunAsAnnotation() { this.getType().hasQualifiedName("javax.annotation.security", "RunAs") } + RunAsAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "RunAs") + } } /* @@ -107,7 +121,9 @@ class RunAsAnnotation extends Annotation { * A `@javax.interceptor.AroundInvoke` annotation. */ class AroundInvokeAnnotation extends Annotation { - AroundInvokeAnnotation() { this.getType().hasQualifiedName("javax.interceptor", "AroundInvoke") } + AroundInvokeAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "AroundInvoke") + } } /** @@ -115,7 +131,7 @@ class AroundInvokeAnnotation extends Annotation { */ class ExcludeClassInterceptorsAnnotation extends Annotation { ExcludeClassInterceptorsAnnotation() { - this.getType().hasQualifiedName("javax.interceptor", "ExcludeClassInterceptors") + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "ExcludeClassInterceptors") } } @@ -124,7 +140,7 @@ class ExcludeClassInterceptorsAnnotation extends Annotation { */ class ExcludeDefaultInterceptorsAnnotation extends Annotation { ExcludeDefaultInterceptorsAnnotation() { - this.getType().hasQualifiedName("javax.interceptor", "ExcludeDefaultInterceptors") + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "ExcludeDefaultInterceptors") } } @@ -132,7 +148,9 @@ class ExcludeDefaultInterceptorsAnnotation extends Annotation { * A `@javax.interceptor.Interceptors` annotation. */ class InterceptorsAnnotation extends Annotation { - InterceptorsAnnotation() { this.getType().hasQualifiedName("javax.interceptor", "Interceptors") } + InterceptorsAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "Interceptors") + } } /* @@ -143,14 +161,16 @@ class InterceptorsAnnotation extends Annotation { * A `@javax.jws.WebMethod` annotation. */ class WebMethodAnnotation extends Annotation { - WebMethodAnnotation() { this.getType().hasQualifiedName("javax.jws", "WebMethod") } + WebMethodAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".jws", "WebMethod") } } /** * A `@javax.jws.WebService` annotation. */ class WebServiceAnnotation extends Annotation { - WebServiceAnnotation() { this.getType().hasQualifiedName("javax.jws", "WebService") } + WebServiceAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".jws", "WebService") + } } /* @@ -161,7 +181,9 @@ class WebServiceAnnotation extends Annotation { * A `@javax.xml.ws.WebServiceRef` annotation. */ class WebServiceRefAnnotation extends Annotation { - WebServiceRefAnnotation() { this.getType().hasQualifiedName("javax.xml.ws", "WebServiceRef") } + WebServiceRefAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".xml.ws", "WebServiceRef") + } } /* @@ -173,9 +195,7 @@ class WebServiceRefAnnotation extends Annotation { */ class PatternAnnotation extends Annotation, RegexMatch::Range { PatternAnnotation() { - this.getType() - .hasQualifiedName(["javax.validation.constraints", "jakarta.validation.constraints"], - "Pattern") + this.getType().hasQualifiedName(javaxOrJakarta() + ".validation.constraints", "Pattern") } override Expr getRegex() { result = this.getValue("regexp") } diff --git a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll index 8b3ab081ee0..38bac53485b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll @@ -13,7 +13,7 @@ private import semmle.code.java.security.XSS /** * Gets a name for the root package of JAX-RS. */ -string getAJaxRsPackage() { result in ["javax.ws.rs", "jakarta.ws.rs"] } +string getAJaxRsPackage() { result = javaxOrJakarta() + ".ws.rs" } /** * Gets a name for package `subpackage` within the JAX-RS hierarchy. @@ -42,7 +42,7 @@ class JaxWsEndpoint extends Class { result.isPublic() and not result instanceof InitializerMethod and not exists(Annotation a | a = result.getAnAnnotation() | - a.getType().hasQualifiedName(["javax", "jakarta"] + ".jws", "WebMethod") and + a.getType().hasQualifiedName(javaxOrJakarta() + ".jws", "WebMethod") and a.getValue("exclude").(BooleanLiteral).getBooleanValue() = true ) and forex(ParamOrReturn paramOrRet | paramOrRet = result.getAParameter() or paramOrRet = result | @@ -62,8 +62,7 @@ class JaxWsEndpoint extends Class { /** The annotation type `@XmlJavaTypeAdapter`. */ class XmlJavaTypeAdapter extends AnnotationType { XmlJavaTypeAdapter() { - this.hasQualifiedName(["javax", "jakarta"] + ".xml.bind.annotation.adapters", - "XmlJavaTypeAdapter") + this.hasQualifiedName(javaxOrJakarta() + ".xml.bind.annotation.adapters", "XmlJavaTypeAdapter") } } @@ -292,7 +291,7 @@ class JaxRSAnnotation extends Annotation { JaxRSAnnotation() { exists(AnnotationType a | a = this.getType() and - a.getPackage().getName().regexpMatch(["javax\\.ws\\.rs(\\..*)?", "jakarta\\.ws\\.rs(\\..*)?"]) + a.getPackage().getName().regexpMatch(javaxOrJakarta() + "\\.ws\\.rs(\\..*)?") ) } } diff --git a/java/ql/lib/semmle/code/java/frameworks/Jms.qll b/java/ql/lib/semmle/code/java/frameworks/Jms.qll index 3cc76771a77..abee6b3a427 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jms.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jms.qll @@ -7,6 +7,6 @@ import java /** The method `ObjectMessage.getObject`. */ class ObjectMessageGetObjectMethod extends Method { ObjectMessageGetObjectMethod() { - this.hasQualifiedName(["javax", "jakarta"] + ".jms", "ObjectMessage", "getObject") + this.hasQualifiedName(javaxOrJakarta() + ".jms", "ObjectMessage", "getObject") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll index 0d7d481dc1d..d2b14d5f58e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll @@ -9,32 +9,34 @@ import java /*--- Types ---*/ /** The interface `javax.naming.Context`. */ class TypeNamingContext extends Interface { - TypeNamingContext() { this.hasQualifiedName("javax.naming", "Context") } + TypeNamingContext() { this.hasQualifiedName(javaxOrJakarta() + ".naming", "Context") } } /** The class `javax.naming.CompositeName`. */ class TypeCompositeName extends Class { - TypeCompositeName() { this.hasQualifiedName("javax.naming", "CompositeName") } + TypeCompositeName() { this.hasQualifiedName(javaxOrJakarta() + ".naming", "CompositeName") } } /** The class `javax.naming.CompoundName`. */ class TypeCompoundName extends Class { - TypeCompoundName() { this.hasQualifiedName("javax.naming", "CompoundName") } + TypeCompoundName() { this.hasQualifiedName(javaxOrJakarta() + ".naming", "CompoundName") } } /** The interface `javax.naming.directory.DirContext`. */ class TypeDirContext extends Interface { - TypeDirContext() { this.hasQualifiedName("javax.naming.directory", "DirContext") } + TypeDirContext() { this.hasQualifiedName(javaxOrJakarta() + ".naming.directory", "DirContext") } } /** The class `javax.naming.directory.SearchControls` */ class TypeSearchControls extends Class { - TypeSearchControls() { this.hasQualifiedName("javax.naming.directory", "SearchControls") } + TypeSearchControls() { + this.hasQualifiedName(javaxOrJakarta() + ".naming.directory", "SearchControls") + } } /** The class `javax.naming.ldap.LdapName`. */ class TypeLdapName extends Class { - TypeLdapName() { this.hasQualifiedName("javax.naming.ldap", "LdapName") } + TypeLdapName() { this.hasQualifiedName(javaxOrJakarta() + ".naming.ldap", "LdapName") } } /*--- Methods ---*/ diff --git a/java/ql/lib/semmle/code/java/frameworks/Mail.qll b/java/ql/lib/semmle/code/java/frameworks/Mail.qll index c61e5ae34f9..b99220c1737 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Mail.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Mail.qll @@ -8,7 +8,7 @@ import java * The class `javax.mail.Session` or `jakarta.mail.Session`. */ class MailSession extends Class { - MailSession() { this.hasQualifiedName(["javax.mail", "jakarta.mail"], "Session") } + MailSession() { this.hasQualifiedName(javaxOrJakarta() + ".mail", "Session") } } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/Networking.qll b/java/ql/lib/semmle/code/java/frameworks/Networking.qll index 6eeb5aa9024..21df7ae7f8d 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Networking.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Networking.qll @@ -20,7 +20,7 @@ class TypeSocket extends RefType { /** The type `javax.net.SocketFactory` */ class TypeSocketFactory extends RefType { - TypeSocketFactory() { this.hasQualifiedName("javax.net", "SocketFactory") } + TypeSocketFactory() { this.hasQualifiedName(javaxOrJakarta() + ".net", "SocketFactory") } } /** The type `java.net.URL`. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll index 7d7beb74fc3..826636ce073 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll @@ -12,7 +12,7 @@ import semmle.code.java.Type */ class ServletRequest extends RefType { ServletRequest() { - this.hasQualifiedName("javax.servlet", "ServletRequest") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequest") or this instanceof HttpServletRequest } } @@ -21,7 +21,9 @@ class ServletRequest extends RefType { * The interface `javax.servlet.http.HttpServletRequest`. */ class HttpServletRequest extends RefType { - HttpServletRequest() { this.hasQualifiedName("javax.servlet.http", "HttpServletRequest") } + HttpServletRequest() { + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpServletRequest") + } } /** @@ -168,7 +170,7 @@ class ServletRequestGetBodyMethod extends Method { */ class ServletResponse extends RefType { ServletResponse() { - this.hasQualifiedName("javax.servlet", "ServletResponse") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletResponse") or this instanceof HttpServletResponse } } @@ -177,7 +179,9 @@ class ServletResponse extends RefType { * The interface `javax.servlet.http.HttpServletResponse`. */ class HttpServletResponse extends RefType { - HttpServletResponse() { this.hasQualifiedName("javax.servlet.http", "HttpServletResponse") } + HttpServletResponse() { + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpServletResponse") + } } /** @@ -239,7 +243,7 @@ class ServletResponseGetOutputStreamMethod extends Method { /** The class `javax.servlet.http.Cookie`. */ class TypeCookie extends Class { - TypeCookie() { this.hasQualifiedName("javax.servlet.http", "Cookie") } + TypeCookie() { this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "Cookie") } } /** @@ -331,7 +335,7 @@ class ResponseSetContentTypeMethod extends Method { * A class that has `javax.servlet.Servlet` as an ancestor. */ class ServletClass extends Class { - ServletClass() { this.getAnAncestor().hasQualifiedName("javax.servlet", "Servlet") } + ServletClass() { this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".servlet", "Servlet") } } /** @@ -342,13 +346,13 @@ class ServletClass extends Class { */ class ServletWebXmlListenerType extends RefType { ServletWebXmlListenerType() { - this.hasQualifiedName("javax.servlet", "ServletContextAttributeListener") or - this.hasQualifiedName("javax.servlet", "ServletContextListener") or - this.hasQualifiedName("javax.servlet", "ServletRequestAttributeListener") or - this.hasQualifiedName("javax.servlet", "ServletRequestListener") or - this.hasQualifiedName("javax.servlet.http", "HttpSessionAttributeListener") or - this.hasQualifiedName("javax.servlet.http", "HttpSessionIdListener") or - this.hasQualifiedName("javax.servlet.http", "HttpSessionListener") + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletContextAttributeListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletContextListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequestAttributeListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequestListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSessionAttributeListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSessionIdListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSessionListener") // Listeners that are not configured in `web.xml`: // - `HttpSessionActivationListener` // - `HttpSessionBindingListener` @@ -373,8 +377,8 @@ predicate isRequestGetParamMethod(MethodCall ma) { /** The Java EE RequestDispatcher. */ class RequestDispatcher extends RefType { RequestDispatcher() { - this.hasQualifiedName(["javax.servlet", "jakarta.servlet"], "RequestDispatcher") or - this.hasQualifiedName("javax.portlet", "PortletRequestDispatcher") + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "RequestDispatcher") or + this.hasQualifiedName(javaxOrJakarta() + ".portlet", "PortletRequestDispatcher") } } @@ -398,7 +402,7 @@ class RequestDispatchMethod extends Method { * The interface `javax.servlet.ServletContext`. */ class ServletContext extends RefType { - ServletContext() { this.hasQualifiedName("javax.servlet", "ServletContext") } + ServletContext() { this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletContext") } } /** The `getResource` method of `ServletContext`. */ @@ -419,5 +423,5 @@ class GetServletResourceAsStreamMethod extends Method { /** The interface `javax.servlet.http.HttpSession` */ class HttpServletSession extends RefType { - HttpServletSession() { this.hasQualifiedName("javax.servlet.http", "HttpSession") } + HttpServletSession() { this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSession") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll index 2f749962e94..285bd7fd670 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll @@ -61,7 +61,7 @@ class FacesAccessibleType extends RefType { class FacesComponent extends Class { FacesComponent() { // Must extend UIComponent for it to be a valid component. - this.getAnAncestor().hasQualifiedName("javax.faces.component", "UIComponent") and + this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".faces.component", "UIComponent") and ( // Must be registered using either an annotation exists(FacesComponentAnnotation componentAnnotation | diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index b5031d7dff0..a6cedcc3fee 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -9,7 +9,7 @@ import java /** * Gets a JavaEE Persistence API package name. */ -string getAPersistencePackageName() { result = ["javax.persistence", "jakarta.persistence"] } +string getAPersistencePackageName() { result = javaxOrJakarta() + ".persistence" } /** * A `RefType` with the `@Entity` annotation that indicates that it can be persisted using a JPA diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll index 222b778ba58..6943c8023d4 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll @@ -33,7 +33,7 @@ private class ValidatorConfig extends TransformerConfig { /** The class `javax.xml.validation.Validator`. */ private class Validator extends RefType { - Validator() { this.hasQualifiedName("javax.xml.validation", "Validator") } + Validator() { this.hasQualifiedName(javaxOrJakarta() + ".xml.validation", "Validator") } } /** A safely configured `Validator`. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll index a866d84df21..efbd0c0b1eb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll @@ -64,7 +64,7 @@ class SessionEjb extends EJB { result = this.getASupertype() and not result.hasQualifiedName("java.io", "Serializable") and not result.hasQualifiedName("java.io", "Externalizable") and - not result.getPackage().getName() = "javax.ejb" + not result.getPackage().getName() = javaxOrJakarta() + ".ejb" } /** Any remote interfaces of this EJB. */ @@ -216,14 +216,14 @@ abstract class BusinessInterfaceAnnotation extends EjbInterfaceAnnotation { } * An instance of a `@Remote` annotation. */ class RemoteAnnotation extends BusinessInterfaceAnnotation { - RemoteAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Remote") } + RemoteAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Remote") } } /** * An instance of a `@Local` annotation. */ class LocalAnnotation extends BusinessInterfaceAnnotation { - LocalAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Local") } + LocalAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Local") } } /** @@ -330,7 +330,7 @@ class LocalAnnotatedBusinessInterface extends AnnotatedBusinessInterface { * A `@javax.ejb.Init` annotation. */ class InitAnnotation extends Annotation { - InitAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Init") } + InitAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Init") } } /** @@ -383,14 +383,16 @@ abstract class HomeAnnotation extends EjbInterfaceAnnotation { } * An instance of a `@RemoteHome` annotation. */ class RemoteHomeAnnotation extends HomeAnnotation { - RemoteHomeAnnotation() { this.getType().hasQualifiedName("javax.ejb", "RemoteHome") } + RemoteHomeAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "RemoteHome") + } } /** * An instance of a `@LocalHome` annotation. */ class LocalHomeAnnotation extends HomeAnnotation { - LocalHomeAnnotation() { this.getType().hasQualifiedName("javax.ejb", "LocalHome") } + LocalHomeAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "LocalHome") } } /** @@ -748,7 +750,9 @@ Type inheritsMatchingCreateMethodExceptThrows(StatefulSessionEjb ejb, EjbInterfa * A `@javax.ejb.AccessTimeout` annotation. */ class AccessTimeoutAnnotation extends Annotation { - AccessTimeoutAnnotation() { this.getType().hasQualifiedName("javax.ejb", "AccessTimeout") } + AccessTimeoutAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "AccessTimeout") + } } /** @@ -756,7 +760,7 @@ class AccessTimeoutAnnotation extends Annotation { */ class ActivationConfigPropertyAnnotation extends Annotation { ActivationConfigPropertyAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "ActivationConfigProperty") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "ActivationConfigProperty") } } @@ -764,14 +768,18 @@ class ActivationConfigPropertyAnnotation extends Annotation { * A `@javax.ejb.AfterBegin` annotation. */ class AfterBeginAnnotation extends Annotation { - AfterBeginAnnotation() { this.getType().hasQualifiedName("javax.ejb", "AfterBegin") } + AfterBeginAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "AfterBegin") + } } /** * A `@javax.ejb.AfterCompletion` annotation. */ class AfterCompletionAnnotation extends Annotation { - AfterCompletionAnnotation() { this.getType().hasQualifiedName("javax.ejb", "AfterCompletion") } + AfterCompletionAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "AfterCompletion") + } } /** @@ -779,7 +787,7 @@ class AfterCompletionAnnotation extends Annotation { */ class ApplicationExceptionAnnotation extends Annotation { ApplicationExceptionAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "ApplicationException") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "ApplicationException") } } @@ -787,14 +795,18 @@ class ApplicationExceptionAnnotation extends Annotation { * A `@javax.ejb.Asynchronous` annotation. */ class AsynchronousAnnotation extends Annotation { - AsynchronousAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Asynchronous") } + AsynchronousAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Asynchronous") + } } /** * A `@javax.ejb.BeforeCompletion` annotation. */ class BeforeCompletionAnnotation extends Annotation { - BeforeCompletionAnnotation() { this.getType().hasQualifiedName("javax.ejb", "BeforeCompletion") } + BeforeCompletionAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "BeforeCompletion") + } } /** @@ -802,7 +814,7 @@ class BeforeCompletionAnnotation extends Annotation { */ class ConcurrencyManagementAnnotation extends Annotation { ConcurrencyManagementAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "ConcurrencyManagement") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "ConcurrencyManagement") } } @@ -810,119 +822,127 @@ class ConcurrencyManagementAnnotation extends Annotation { * A `@javax.ejb.DependsOn` annotation. */ class DependsOnAnnotation extends Annotation { - DependsOnAnnotation() { this.getType().hasQualifiedName("javax.ejb", "DependsOn") } + DependsOnAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "DependsOn") } } /** * A `@javax.ejb.EJB` annotation. */ class EjbAnnotation extends Annotation { - EjbAnnotation() { this.getType().hasQualifiedName("javax.ejb", "EJB") } + EjbAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJB") } } /** * A `@javax.ejb.EJBs` annotation. */ class EJBsAnnotation extends Annotation { - EJBsAnnotation() { this.getType().hasQualifiedName("javax.ejb", "EJBs") } + EJBsAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBs") } } /** * A `@javax.ejb.LocalBean` annotation. */ class LocalBeanAnnotation extends Annotation { - LocalBeanAnnotation() { this.getType().hasQualifiedName("javax.ejb", "LocalBean") } + LocalBeanAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "LocalBean") } } /** * A `@javax.ejb.Lock` annotation. */ class LockAnnotation extends Annotation { - LockAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Lock") } + LockAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Lock") } } /** * A `@javax.ejb.MessageDriven` annotation. */ class MessageDrivenAnnotation extends Annotation { - MessageDrivenAnnotation() { this.getType().hasQualifiedName("javax.ejb", "MessageDriven") } + MessageDrivenAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "MessageDriven") + } } /** * A `@javax.ejb.PostActivate` annotation. */ class PostActivateAnnotation extends Annotation { - PostActivateAnnotation() { this.getType().hasQualifiedName("javax.ejb", "PostActivate") } + PostActivateAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "PostActivate") + } } /** * A `@javax.ejb.PrePassivate` annotation. */ class PrePassivateAnnotation extends Annotation { - PrePassivateAnnotation() { this.getType().hasQualifiedName("javax.ejb", "PrePassivate") } + PrePassivateAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "PrePassivate") + } } /** * A `@javax.ejb.Remove` annotation. */ class RemoveAnnotation extends Annotation { - RemoveAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Remove") } + RemoveAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Remove") } } /** * A `@javax.ejb.Schedule` annotation. */ class ScheduleAnnotation extends Annotation { - ScheduleAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Schedule") } + ScheduleAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Schedule") } } /** * A `@javax.ejb.Schedules` annotation. */ class SchedulesAnnotation extends Annotation { - SchedulesAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Schedules") } + SchedulesAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Schedules") } } /** * A `@javax.ejb.Singleton` annotation. */ class SingletonAnnotation extends Annotation { - SingletonAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Singleton") } + SingletonAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Singleton") } } /** * A `@javax.ejb.Startup` annotation. */ class StartupAnnotation extends Annotation { - StartupAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Startup") } + StartupAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Startup") } } /** * A `@javax.ejb.Stateful` annotation. */ class StatefulAnnotation extends Annotation { - StatefulAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Stateful") } + StatefulAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Stateful") } } /** * A `@javax.ejb.StatefulTimeout` annotation. */ class StatefulTimeoutAnnotation extends Annotation { - StatefulTimeoutAnnotation() { this.getType().hasQualifiedName("javax.ejb", "StatefulTimeout") } + StatefulTimeoutAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "StatefulTimeout") + } } /** * A `@javax.ejb.Stateless` annotation. */ class StatelessAnnotation extends Annotation { - StatelessAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Stateless") } + StatelessAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Stateless") } } /** * A `@javax.ejb.Timeout` annotation. */ class TimeoutAnnotation extends Annotation { - TimeoutAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Timeout") } + TimeoutAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Timeout") } } /** @@ -930,7 +950,7 @@ class TimeoutAnnotation extends Annotation { */ class TransactionAttributeAnnotation extends Annotation { TransactionAttributeAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "TransactionAttribute") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionAttribute") } } @@ -939,7 +959,7 @@ class TransactionAttributeAnnotation extends Annotation { */ class TransactionManagementAnnotation extends Annotation { TransactionManagementAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "TransactionManagement") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionManagement") } } @@ -951,7 +971,10 @@ class RequiredTransactionAttributeAnnotation extends TransactionAttributeAnnotat RequiredTransactionAttributeAnnotation() { exists(FieldRead fr | this.getValue("value") = fr and - fr.getField().getType().(RefType).hasQualifiedName("javax.ejb", "TransactionAttributeType") and + fr.getField() + .getType() + .(RefType) + .hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionAttributeType") and fr.getField().getName() = "REQUIRED" ) } @@ -965,7 +988,10 @@ class RequiresNewTransactionAttributeAnnotation extends TransactionAttributeAnno RequiresNewTransactionAttributeAnnotation() { exists(FieldRead fr | this.getValue("value") = fr and - fr.getField().getType().(RefType).hasQualifiedName("javax.ejb", "TransactionAttributeType") and + fr.getField() + .getType() + .(RefType) + .hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionAttributeType") and fr.getField().getName() = "REQUIRES_NEW" ) } @@ -999,7 +1025,9 @@ TransactionAttributeAnnotation getInnermostTransactionAttributeAnnotation(Method */ class SetRollbackOnlyMethod extends Method { SetRollbackOnlyMethod() { - this.getDeclaringType().getAnAncestor().hasQualifiedName("javax.ejb", "EJBContext") and + this.getDeclaringType() + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBContext") and this.getName() = "setRollbackOnly" and this.hasNoParameters() } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll index 10b6e7f3df2..47872816825 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll @@ -159,8 +159,8 @@ class GraphicsPackage extends Package { GraphicsPackage() { this.getName() = "java.awt" or this.getName().matches("java.awt.%") or - this.getName() = "javax.swing" or - this.getName().matches("javax.swing.%") + this.getName() = javaxOrJakarta() + ".swing" or + this.getName().matches(javaxOrJakarta() + ".swing.%") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll index 3338fa840ab..f62d9e50b68 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll @@ -9,7 +9,7 @@ import default */ class FacesManagedBeanAnnotation extends Annotation { FacesManagedBeanAnnotation() { - this.getType().hasQualifiedName("javax.faces.bean", "ManagedBean") + this.getType().hasQualifiedName(javaxOrJakarta() + ".faces.bean", "ManagedBean") } /** @@ -25,7 +25,7 @@ class FacesManagedBeanAnnotation extends Annotation { */ class FacesComponentAnnotation extends Annotation { FacesComponentAnnotation() { - this.getType().hasQualifiedName("javax.faces.component", "FacesComponent") + this.getType().hasQualifiedName(javaxOrJakarta() + ".faces.component", "FacesComponent") } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll index df646e8a9a2..21f8fba6785 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -8,9 +8,7 @@ import java * The JSF class `FacesContext` for processing HTTP requests. */ class FacesContext extends RefType { - FacesContext() { - this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "FacesContext") - } + FacesContext() { this.hasQualifiedName(javaxOrJakarta() + ".faces.context", "FacesContext") } } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll index e758811b368..970870f9503 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll @@ -14,7 +14,7 @@ import SpringComponentScan predicate hasInjectAnnotation(Annotatable a) { a.hasAnnotation("org.springframework.beans.factory.annotation", "Autowired") or a.getAnAnnotation() instanceof SpringResourceAnnotation or - a.hasAnnotation("javax.inject", "Inject") + a.hasAnnotation(javaxOrJakarta() + ".inject", "Inject") } /** @@ -292,7 +292,7 @@ class SpringBeanAutowiredField extends Field { class SpringQualifierAnnotationType extends AnnotationType { SpringQualifierAnnotationType() { this.hasQualifiedName("org.springframework.beans.factory.annotation", "Qualifier") or - this.hasQualifiedName("javax.inject", "Qualifier") or + this.hasQualifiedName(javaxOrJakarta() + ".inject", "Qualifier") or this.getAnAnnotation().getType() instanceof SpringQualifierAnnotationType } } @@ -340,7 +340,9 @@ class SpringQualifierAnnotation extends Annotation { * autowired by Spring, and can optionally specify a qualifier in the "name". */ class SpringResourceAnnotation extends Annotation { - SpringResourceAnnotation() { this.getType().hasQualifiedName("javax.inject", "Resource") } + SpringResourceAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".inject", "Resource") + } /** * Gets the specified name value, if any. diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll index a444dc96d5a..a26e4edc277 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll @@ -210,10 +210,22 @@ class SpringRequestMappingParameter extends Parameter { predicate isNotDirectlyTaintedInput() { this.getType().(RefType).getAnAncestor() instanceof SpringWebRequest or this.getType().(RefType).getAnAncestor() instanceof SpringNativeWebRequest or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet", "ServletRequest") or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet", "ServletResponse") or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet.http", "HttpSession") or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet.http", "PushBuilder") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequest") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletResponse") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSession") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "PushBuilder") or this.getType().(RefType).getAnAncestor().hasQualifiedName("java.security", "Principal") or this.getType() .(RefType) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll index 1c99821386d..9f04aff7e40 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll @@ -23,7 +23,9 @@ private class CookieCleartextStorageSink extends CleartextStorageSink { /** The instantiation of a cookie, which can act as storage. */ class Cookie extends Storable, ClassInstanceExpr { Cookie() { - this.getConstructor().getDeclaringType().hasQualifiedName("javax.servlet.http", "Cookie") + this.getConstructor() + .getDeclaringType() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "Cookie") } /** Gets an input, for example `input` in `new Cookie("...", input);`. */ @@ -42,7 +44,8 @@ private predicate cookieStore(DataFlow::Node cookie, Expr store) { exists(MethodCall m, Method def | m.getMethod() = def and def.getName() = "addCookie" and - def.getDeclaringType().hasQualifiedName("javax.servlet.http", "HttpServletResponse") and + def.getDeclaringType() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpServletResponse") and store = m and cookie.asExpr() = m.getAnArgument() ) diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index b948a94962c..b0a0fc72df7 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -9,6 +9,7 @@ import java class SslClass extends RefType { SslClass() { exists(Class c | this.getAnAncestor() = c | + // Note there are no jakarta equivalents of these classes. c.hasQualifiedName("javax.net.ssl", _) or c.hasQualifiedName("javax.rmi.ssl", _) ) diff --git a/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll b/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll index e1c840ce264..88fb540e83b 100644 --- a/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll @@ -25,7 +25,7 @@ class SetMessageInterpolatorCall extends MethodCall { this.getMethod() = m and m.getDeclaringType().getASourceSupertype*() = t and ( - t.hasQualifiedName("javax.validation", ["Configuration", "ValidatorContext"]) and + t.hasQualifiedName(javaxOrJakarta() + ".validation", ["Configuration", "ValidatorContext"]) and m.getName() = "messageInterpolator" or t.hasQualifiedName("org.springframework.validation.beanvalidation", diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index 0d52d480ae7..b094346b753 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -127,7 +127,7 @@ class XssVulnerableWriterSource extends MethodCall { ) or exists(Method m | m = this.getMethod() | - m.hasQualifiedName("javax.servlet.jsp", "JspContext", "getOut") + m.hasQualifiedName(javaxOrJakarta() + ".servlet.jsp", "JspContext", "getOut") ) or this.getMethod() instanceof FacesGetResponseWriterMethod diff --git a/java/ql/lib/semmle/code/java/security/XmlParsers.qll b/java/ql/lib/semmle/code/java/security/XmlParsers.qll index 8bb2a015a14..bd1520034eb 100644 --- a/java/ql/lib/semmle/code/java/security/XmlParsers.qll +++ b/java/ql/lib/semmle/code/java/security/XmlParsers.qll @@ -62,12 +62,14 @@ abstract class ParserConfig extends MethodCall { /** The class `javax.xml.parsers.DocumentBuilderFactory`. */ class DocumentBuilderFactory extends RefType { - DocumentBuilderFactory() { this.hasQualifiedName("javax.xml.parsers", "DocumentBuilderFactory") } + DocumentBuilderFactory() { + this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "DocumentBuilderFactory") + } } /** The class `javax.xml.parsers.DocumentBuilder`. */ class DocumentBuilder extends RefType { - DocumentBuilder() { this.hasQualifiedName("javax.xml.parsers", "DocumentBuilder") } + DocumentBuilder() { this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "DocumentBuilder") } } /** A call to `DocumentBuilder.parse`. */ @@ -174,7 +176,7 @@ class SafeDocumentBuilder extends DocumentBuilderConstruction { /** The class `javax.xml.stream.XMLInputFactory`. */ class XmlInputFactory extends RefType { - XmlInputFactory() { this.hasQualifiedName("javax.xml.stream", "XMLInputFactory") } + XmlInputFactory() { this.hasQualifiedName(javaxOrJakarta() + ".xml.stream", "XMLInputFactory") } } /** A call to `XMLInputFactory.createXMLStreamReader`. */ @@ -243,7 +245,8 @@ class XmlInputFactoryConfig extends ParserConfig { * An `XmlInputFactory` specific expression that indicates whether parsing external entities is supported. */ Expr configOptionIsSupportingExternalEntities() { - result.(ConstantStringExpr).getStringValue() = "javax.xml.stream.isSupportingExternalEntities" + result.(ConstantStringExpr).getStringValue() = + javaxOrJakarta() + ".xml.stream.isSupportingExternalEntities" or exists(Field f | result = f.getAnAccess() and @@ -256,7 +259,7 @@ Expr configOptionIsSupportingExternalEntities() { * An `XmlInputFactory` specific expression that indicates whether DTD is supported. */ Expr configOptionSupportDtd() { - result.(ConstantStringExpr).getStringValue() = "javax.xml.stream.supportDTD" + result.(ConstantStringExpr).getStringValue() = javaxOrJakarta() + ".xml.stream.supportDTD" or exists(Field f | result = f.getAnAccess() and @@ -357,12 +360,14 @@ class SafeSaxBuilder extends VarAccess { * The class `javax.xml.parsers.SAXParser`. */ class SaxParser extends RefType { - SaxParser() { this.hasQualifiedName("javax.xml.parsers", "SAXParser") } + SaxParser() { this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "SAXParser") } } /** The class `javax.xml.parsers.SAXParserFactory`. */ class SaxParserFactory extends RefType { - SaxParserFactory() { this.hasQualifiedName("javax.xml.parsers", "SAXParserFactory") } + SaxParserFactory() { + this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "SAXParserFactory") + } } /** A call to `SAXParser.parse`. */ @@ -635,7 +640,7 @@ class CreatedSafeXmlReader extends Call { /** The class `javax.xml.transform.sax.SAXSource` */ class SaxSource extends RefType { - SaxSource() { this.hasQualifiedName("javax.xml.transform.sax", "SAXSource") } + SaxSource() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.sax", "SAXSource") } } /** A call to the constructor of `SAXSource` with `XmlReader` and `InputSource`. */ @@ -697,7 +702,7 @@ abstract class TransformerConfig extends MethodCall { /** The class `javax.xml.XMLConstants`. */ class XmlConstants extends RefType { - XmlConstants() { this.hasQualifiedName("javax.xml", "XMLConstants") } + XmlConstants() { this.hasQualifiedName(javaxOrJakarta() + ".xml", "XMLConstants") } } /** A configuration specific for transformers and schema. */ @@ -739,14 +744,14 @@ Expr configAccessExternalSchema() { /** The class `javax.xml.transform.TransformerFactory` or `javax.xml.transform.sax.SAXTransformerFactory`. */ class TransformerFactory extends RefType { TransformerFactory() { - this.hasQualifiedName("javax.xml.transform", "TransformerFactory") or - this.hasQualifiedName("javax.xml.transform.sax", "SAXTransformerFactory") + this.hasQualifiedName(javaxOrJakarta() + ".xml.transform", "TransformerFactory") or + this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.sax", "SAXTransformerFactory") } } /** The class `javax.xml.transform.Transformer`. */ class Transformer extends RefType { - Transformer() { this.hasQualifiedName("javax.xml.transform", "Transformer") } + Transformer() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform", "Transformer") } } /** A call to `Transformer.transform`. */ @@ -843,7 +848,8 @@ class SaxTransformerFactoryNewXmlFilter extends XmlParserCall { SaxTransformerFactoryNewXmlFilter() { exists(Method m | this.getMethod() = m and - m.getDeclaringType().hasQualifiedName("javax.xml.transform.sax", "SAXTransformerFactory") and + m.getDeclaringType() + .hasQualifiedName(javaxOrJakarta() + ".xml.transform.sax", "SAXTransformerFactory") and m.hasName("newXMLFilter") ) } @@ -858,7 +864,7 @@ class SaxTransformerFactoryNewXmlFilter extends XmlParserCall { /* Schema: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#schemafactory */ /** The class `javax.xml.validation.SchemaFactory`. */ class SchemaFactory extends RefType { - SchemaFactory() { this.hasQualifiedName("javax.xml.validation", "SchemaFactory") } + SchemaFactory() { this.hasQualifiedName(javaxOrJakarta() + ".xml.validation", "SchemaFactory") } } /** A `ParserConfig` specific to `SchemaFactory`. */ @@ -913,7 +919,7 @@ class SafeSchemaFactory extends VarAccess { /* Unmarshaller: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#jaxb-unmarshaller */ /** The class `javax.xml.bind.Unmarshaller`. */ class XmlUnmarshaller extends RefType { - XmlUnmarshaller() { this.hasQualifiedName("javax.xml.bind", "Unmarshaller") } + XmlUnmarshaller() { this.hasQualifiedName(javaxOrJakarta() + ".xml.bind", "Unmarshaller") } } /** A call to `Unmarshaller.unmarshal`. */ @@ -934,12 +940,12 @@ class XmlUnmarshal extends XmlParserCall { /* XPathExpression: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#xpathexpression */ /** The interface `javax.xml.xpath.XPathExpression`. */ class XPathExpression extends Interface { - XPathExpression() { this.hasQualifiedName("javax.xml.xpath", "XPathExpression") } + XPathExpression() { this.hasQualifiedName(javaxOrJakarta() + ".xml.xpath", "XPathExpression") } } /** The interface `java.xml.xpath.XPath`. */ class XPath extends Interface { - XPath() { this.hasQualifiedName("javax.xml.xpath", "XPath") } + XPath() { this.hasQualifiedName(javaxOrJakarta() + ".xml.xpath", "XPath") } } /** A call to the method `evaluate` of the classes `XPathExpression` or `XPath`. */ diff --git a/java/ql/lib/semmle/code/java/security/XsltInjection.qll b/java/ql/lib/semmle/code/java/security/XsltInjection.qll index d54e9206644..a6b18e1518f 100644 --- a/java/ql/lib/semmle/code/java/security/XsltInjection.qll +++ b/java/ql/lib/semmle/code/java/security/XsltInjection.qll @@ -163,17 +163,17 @@ private predicate xsltPackageStep(DataFlow::Node n1, DataFlow::Node n2) { /** The class `javax.xml.transform.stax.StAXSource`. */ private class TypeStAXSource extends Class { - TypeStAXSource() { this.hasQualifiedName("javax.xml.transform.stax", "StAXSource") } + TypeStAXSource() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.stax", "StAXSource") } } /** The class `javax.xml.transform.dom.DOMSource`. */ private class TypeDomSource extends Class { - TypeDomSource() { this.hasQualifiedName("javax.xml.transform.dom", "DOMSource") } + TypeDomSource() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.dom", "DOMSource") } } /** The interface `javax.xml.transform.Templates`. */ private class TypeTemplates extends Interface { - TypeTemplates() { this.hasQualifiedName("javax.xml.transform", "Templates") } + TypeTemplates() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform", "Templates") } } /** The class `net.sf.saxon.s9api.XsltCompiler`. */ @@ -205,7 +205,7 @@ private class DocumentBuilderParse extends MethodCall { /** The class `javax.xml.parsers.DocumentBuilder`. */ private class DocumentBuilder extends RefType { - DocumentBuilder() { this.hasQualifiedName("javax.xml.parsers", "DocumentBuilder") } + DocumentBuilder() { this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "DocumentBuilder") } } /** A call to `XMLInputFactory.createXMLStreamReader`. */ @@ -232,5 +232,5 @@ private class XmlInputFactoryEventReader extends MethodCall { /** The class `javax.xml.stream.XMLInputFactory`. */ private class XmlInputFactory extends RefType { - XmlInputFactory() { this.hasQualifiedName("javax.xml.stream", "XMLInputFactory") } + XmlInputFactory() { this.hasQualifiedName(javaxOrJakarta() + ".xml.stream", "XMLInputFactory") } } diff --git a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql index 6a2db4b695f..34fd190ccf1 100644 --- a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql +++ b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql @@ -19,7 +19,7 @@ class Adapter extends Class { this.getName().matches("%Adapter") and ( this.getPackage().hasName("java.awt.event") or - this.getPackage().hasName("javax.swing.event") + this.getPackage().hasName(javaxOrJakarta() + ".swing.event") ) } } diff --git a/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql b/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql index 8d49cf1d59e..623470aefc1 100644 --- a/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql +++ b/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql @@ -15,7 +15,12 @@ import java from MethodCall ma, Method m, MainMethod main where - ma.getQualifier().getType().getCompilationUnit().getPackage().getName().matches("javax.swing%") and + ma.getQualifier() + .getType() + .getCompilationUnit() + .getPackage() + .getName() + .matches(javaxOrJakarta() + ".swing%") and ( m.hasName("show") and m.hasNoParameters() or diff --git a/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql index 494e851a533..afa08fb6928 100644 --- a/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql +++ b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql @@ -77,7 +77,9 @@ module MatchesHttpOnlyToRawHeaderFlow = TaintTracking::Global #include -#include "tools/cpp/runfiles/runfiles.h" +#include "rules_cc/cc/runfiles/runfiles.h" -using bazel::tools::cpp::runfiles::Runfiles; +using rules_cc::cc::runfiles::Runfiles; using namespace std::string_literals; namespace fs = std::filesystem; diff --git a/misc/bazel/registry/fix.py b/misc/bazel/registry/fix.py index 863c832be59..57a2bf3b3f9 100755 --- a/misc/bazel/registry/fix.py +++ b/misc/bazel/registry/fix.py @@ -62,10 +62,10 @@ for entry in this_dir.joinpath("modules").iterdir(): patch_json( version / "source.json", patches={ - p.name: sha256(p) for p in patches.iterdir() + p.name: sha256(p) for p in sorted(patches.iterdir()) } if patches.is_dir() else None, patch_strip=1 if patches.is_dir() else None, overlay={ - o.name: sha256(o) for o in overlay.iterdir() + o.name: sha256(o) for o in sorted(overlay.iterdir()) } if overlay.is_dir() else None, ) diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json deleted file mode 100644 index bfa243b5a22..00000000000 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "integrity": "sha256-4STROYYIW8ChW+LIXBQVurVwhEK3jSSf4iv430OlNA0=", - "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.2.0/rules_kotlin-v2.2.0.tar.gz", - "patches": { - "codeql_do_not_emit_jdeps.patch": "sha256-gIlhXEY71vlCkpr5wj2vm3yv6RwcuKLhgbTGqdVvQfU=", - "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=" - }, - "patch_strip": 1 -} diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel similarity index 86% rename from misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/MODULE.bazel rename to misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel index df66ce2051a..ec37914a8f7 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/MODULE.bazel +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel @@ -1,19 +1,21 @@ module( name = "rules_kotlin", - version = "2.2.0-codeql.1", + version = "2.2.2-codeql.1", compatibility_level = 1, repo_name = "rules_kotlin", ) bazel_dep(name = "platforms", version = "0.0.11") bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "rules_java", version = "7.2.0") +bazel_dep(name = "rules_java", version = "8.9.0") bazel_dep(name = "rules_android", version = "0.6.4") bazel_dep(name = "bazel_features", version = "1.25.0") bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") bazel_dep(name = "rules_proto", version = "6.0.2", repo_name = "rules_proto") bazel_dep(name = "abseil-py", version = "2.1.0", repo_name = "py_absl") bazel_dep(name = "rules_cc", version = "0.0.16") +bazel_dep(name = "bazel_worker_api", version = "0.0.8") +bazel_dep(name = "bazel_worker_java", version = "0.0.8") rules_java_toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains") use_repo(rules_java_toolchains, "remote_java_tools") diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_add_language_version_option.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch similarity index 100% rename from misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_add_language_version_option.patch rename to misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch similarity index 93% rename from misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch rename to misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch index e6b71ab0c4f..838750ba12e 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch @@ -1,6 +1,7 @@ Emitting jdeps is broken for the 2.0.0 kotlin extractor, and we don't need those files. Patching it here rather than passing `--@rules_kotlin//kotlin/settings:jvm_emit_jdeps=false` -allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in `semmle-code`. +allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in the +internal repo. --- a/kotlin/settings/BUILD.bazel +++ b/kotlin/settings/BUILD.bazel @@ -16,6 +16,6 @@ release_archive( diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json new file mode 100644 index 00000000000..7025fb00a27 --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json @@ -0,0 +1,9 @@ +{ + "integrity": "sha256-QR2yavs0ksyDUbW1NJkxUir+LFTyZRttEncwoSVtD2A=", + "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.2.2/rules_kotlin-v2.2.2.tar.gz", + "patches": { + "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=", + "codeql_do_not_emit_jdeps.patch": "sha256-cg06knW+Eq13qHCaelbnZka/WnGPvRrcqXHtpXsy/rA=" + }, + "patch_strip": 1 +} diff --git a/misc/bazel/registry/modules/rules_kotlin/metadata.json b/misc/bazel/registry/modules/rules_kotlin/metadata.json index 3609865f4d5..ea756f78364 100644 --- a/misc/bazel/registry/modules/rules_kotlin/metadata.json +++ b/misc/bazel/registry/modules/rules_kotlin/metadata.json @@ -21,7 +21,7 @@ "github:bazelbuild/rules_kotlin" ], "versions": [ - "2.2.0-codeql.1", + "2.2.2-codeql.1" ], "yanked_versions": {} } diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel new file mode 100644 index 00000000000..aedc5a8a242 --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel @@ -0,0 +1,151 @@ +"""bazelbuild/rules_rust""" + +module( + name = "rules_rust", + version = "0.68.1.codeql.1", +) + +############################################################################### +## Core +############################################################################### + +bazel_dep(name = "bazel_features", version = "1.32.0") +bazel_dep(name = "bazel_skylib", version = "1.8.2") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "rules_cc", version = "0.2.4") +bazel_dep(name = "rules_license", version = "1.0.0") +bazel_dep(name = "rules_shell", version = "0.6.1") +bazel_dep(name = "apple_support", version = "1.24.1", repo_name = "build_bazel_apple_support") + +internal_deps = use_extension("//rust/private:internal_extensions.bzl", "i") +use_repo( + internal_deps, + "rrra", + "rrra__anyhow-1.0.71", + "rrra__camino-1.1.9", + "rrra__clap-4.3.11", + "rrra__env_logger-0.10.0", + "rrra__itertools-0.11.0", + "rrra__log-0.4.19", + "rrra__serde-1.0.171", + "rrra__serde_json-1.0.102", + "rules_rust_tinyjson", +) + +cargo_internal_deps = use_extension("//cargo/private:internal_extensions.bzl", "i") +use_repo( + cargo_internal_deps, + "rrc", + "rrc__cargo-util-schemas-0.3.1", + "rrc__cargo_toml-0.20.5", + "rrc__pathdiff-0.1.0", + "rrc__semver-1.0.25", + "rrc__toml-0.8.20", +) + +rust = use_extension("//rust:extensions.bzl", "rust") +rust.toolchain(edition = "2021") +use_repo(rust, "rust_toolchains") + +register_toolchains( + "@rust_toolchains//:all", +) + +rust_host_tools = use_extension("//rust:extensions.bzl", "rust_host_tools") +rust_host_tools.host_tools( + name = "rust_host_tools", +) +use_repo( + rust_host_tools, + "rust_host_tools", +) + +rust_test = use_extension("//test:test_extensions.bzl", "rust_test", dev_dependency = True) +use_repo( + rust_test, + "buildkite_config", + "generated_inputs_in_external_repo", + "libc", + "rtra", + "rtra__serde-1.0.228", + "rtra__serde_json-1.0.145", + "rtvsc", + "rtvsc__serde-1.0.228", + "rtvsc__serde_json-1.0.145", + "rules_rust_test_load_arbitrary_tool", + "rules_rust_toolchain_test_target_json", +) + +bazel_dep(name = "rules_python", version = "0.40.0", dev_dependency = True) +bazel_dep(name = "rules_testing", version = "0.7.0", dev_dependency = True) +bazel_dep(name = "bazel_ci_rules", version = "1.0.0", dev_dependency = True) + +############################################################################### +## Crate Universe +############################################################################### + +crate_universe_internal_deps = use_extension( + "//crate_universe/private:internal_extensions.bzl", + "cu", +) +use_repo( + crate_universe_internal_deps, + "cargo_bazel.buildifier-darwin-amd64", + "cargo_bazel.buildifier-darwin-arm64", + "cargo_bazel.buildifier-linux-amd64", + "cargo_bazel.buildifier-linux-arm64", + "cargo_bazel.buildifier-windows-amd64.exe", + "cui", + "cui__anyhow-1.0.98", + "cui__camino-1.1.9", + "cui__cargo-lock-10.1.0", + "cui__cargo-platform-0.1.9", + "cui__cargo_metadata-0.19.2", + "cui__cargo_toml-0.22.1", + "cui__cfg-expr-0.18.0", + "cui__clap-4.5.37", + "cui__crates-index-3.7.0", + "cui__glob-0.3.2", + "cui__hex-0.4.3", + "cui__indoc-2.0.6", + "cui__itertools-0.14.0", + "cui__maplit-1.0.2", + "cui__normpath-1.3.0", + "cui__once_cell-1.21.3", + "cui__pathdiff-0.2.3", + "cui__regex-1.11.1", + "cui__semver-1.0.26", + "cui__serde-1.0.219", + "cui__serde_json-1.0.140", + "cui__serde_starlark-0.1.17", + "cui__sha2-0.10.8", + "cui__spdx-0.10.8", + "cui__tempfile-3.19.1", + "cui__tera-1.20.0", + "cui__textwrap-0.16.2", + "cui__toml-0.8.21", + "cui__tracing-0.1.41", + "cui__tracing-subscriber-0.3.19", + "cui__url-2.5.4", + "cui__walkdir-2.5.0", +) + +crate_universe_internal_non_repro_deps = use_extension( + "//crate_universe/private:internal_extensions.bzl", + "cu_nr", +) +use_repo( + crate_universe_internal_non_repro_deps, + "cargo_bazel_bootstrap", +) + +crate_universe_internal_dev_deps = use_extension( + "//crate_universe/private:internal_extensions.bzl", + "cu_dev", + dev_dependency = True, +) +use_repo( + crate_universe_internal_dev_deps, + "cross_rs", + "cross_rs_host_bin", +) diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch new file mode 100644 index 00000000000..3707cb51b63 --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch @@ -0,0 +1,12 @@ +diff --git a/rust/private/repository_utils.bzl b/rust/private/repository_utils.bzl +index 05b741947..f88074af6 100644 +--- a/rust/private/repository_utils.bzl ++++ b/rust/private/repository_utils.bzl +@@ -280,6 +280,7 @@ rust_stdlib_filegroup( + srcs = glob( + [ + "lib/rustlib/{target_triple}/lib/*.rlib", ++ "lib/rustlib/{target_triple}/lib/*.rmeta", + "lib/rustlib/{target_triple}/lib/*{dylib_ext}*", + "lib/rustlib/{target_triple}/lib/*{staticlib_ext}", + "lib/rustlib/{target_triple}/lib/self-contained/**", diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json new file mode 100644 index 00000000000..6048521ce2f --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json @@ -0,0 +1,9 @@ +{ + "integrity": "sha256-yKqAbPYGZnmsI0YyQe6ArWkiZdrQRl9RERy74wuJA1I=", + "strip_prefix": "", + "url": "https://github.com/bazelbuild/rules_rust/releases/download/0.68.1/rules_rust-0.68.1.tar.gz", + "patches": { + "include_rmeta_in_stdlib.patch": "sha256-7n8XHpfkLUMEbRG6lKqdhLWydsWlRRG+Ywkxk6LvY9c=" + }, + "patch_strip": 1 +} diff --git a/misc/bazel/registry/modules/rules_rust/metadata.json b/misc/bazel/registry/modules/rules_rust/metadata.json new file mode 100644 index 00000000000..deffe6f6dfa --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/metadata.json @@ -0,0 +1,11 @@ +{ + "homepage": "https://github.com/bazelbuild/rules_rust", + "maintainers": [], + "repository": [ + "github:bazelbuild/rules_rust" + ], + "versions": [ + "0.68.1.codeql.1" + ], + "yanked_versions": {} +} diff --git a/misc/codegen/BUILD.bazel b/misc/codegen/BUILD.bazel index c7b88de96b7..90e9842a941 100644 --- a/misc/codegen/BUILD.bazel +++ b/misc/codegen/BUILD.bazel @@ -5,6 +5,9 @@ py_binary( srcs = ["codegen.py"], data = [ "//misc/codegen/templates:cpp", + "//misc/codegen/templates:dbscheme", + "//misc/codegen/templates:ql", + "//misc/codegen/templates:rust", "//misc/codegen/templates:trap", ], visibility = ["//visibility:public"], diff --git a/misc/codegen/templates/BUILD.bazel b/misc/codegen/templates/BUILD.bazel index a86346245af..9068cc7f66e 100644 --- a/misc/codegen/templates/BUILD.bazel +++ b/misc/codegen/templates/BUILD.bazel @@ -1,5 +1,10 @@ package(default_visibility = ["//misc/codegen:__subpackages__"]) +filegroup( + name = "dbscheme", + srcs = ["dbscheme.mustache"], +) + filegroup( name = "trap", srcs = glob(["trap_*.mustache"]), @@ -9,3 +14,13 @@ filegroup( name = "cpp", srcs = glob(["cpp_*.mustache"]), ) + +filegroup( + name = "ql", + srcs = glob(["ql_*.mustache"]), +) + +filegroup( + name = "rust", + srcs = glob(["rust_*.mustache"]), +) diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index ba00d002da9..48e31175a00 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.42 +version: 1.0.43-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/analysis/DefinitionTracking.qll b/python/ql/lib/analysis/DefinitionTracking.qll index 0d58bd69b7b..21155970375 100644 --- a/python/ql/lib/analysis/DefinitionTracking.qll +++ b/python/ql/lib/analysis/DefinitionTracking.qll @@ -471,11 +471,10 @@ Definition getUniqueDefinition(Expr use) { not result = TLocalDefinition(use) } -/** A helper class to get suitable locations for attributes */ -class NiceLocationExpr extends Expr { - /** Gets a textual representation of this element. */ - override string toString() { result = this.(Expr).toString() } +final class FinalExpr = Expr; +/** A helper class to get suitable locations for attributes */ +class NiceLocationExpr extends FinalExpr { /** * Holds if this element is at the specified location. * The location spans column `bc` of line `bl` to diff --git a/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md b/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md new file mode 100644 index 00000000000..c3b4194e7b8 --- /dev/null +++ b/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added new full SSRF sanitization barrier from the new AntiSSRF library. \ No newline at end of file diff --git a/python/ql/lib/change-notes/2026-02-18-add-overlay-annotations.md b/python/ql/lib/change-notes/2026-02-18-add-overlay-annotations.md new file mode 100644 index 00000000000..5e9ceb0d753 --- /dev/null +++ b/python/ql/lib/change-notes/2026-02-18-add-overlay-annotations.md @@ -0,0 +1,5 @@ +--- +category: majorAnalysis +--- + +- The CodeQL Python libraries have been updated to be compatible with overlay evaluation. This should result in a significant speedup on analyses for which a base database already exists. Note that it may be necessary to add `overlay[local?] module;` to user-managed libraries that extend classes that are now marked as `overlay[local]`. diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index b00b30158be..36b8813f8de 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 6.1.1 +version: 6.1.2-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/lib/semmle/python/ApiGraphs.qll b/python/ql/lib/semmle/python/ApiGraphs.qll index b45c10e1417..efd8141efc6 100644 --- a/python/ql/lib/semmle/python/ApiGraphs.qll +++ b/python/ql/lib/semmle/python/ApiGraphs.qll @@ -451,6 +451,7 @@ module API { * allowing this predicate to be used in a negative * context when constructing new nodes. */ + overlay[local] predicate moduleImportExists(string m) { Impl::isImported(m) and // restrict `moduleImport` so it will never give results for a dotted name. Note @@ -695,6 +696,7 @@ module API { * * This is determined syntactically. */ + overlay[local] cached predicate isImported(string name) { // Ignore the following module name for Python 2, as we alias `__builtin__` to `builtins` elsewhere diff --git a/python/ql/lib/semmle/python/AstExtended.qll b/python/ql/lib/semmle/python/AstExtended.qll index 73292b85c3a..13da4e899a7 100644 --- a/python/ql/lib/semmle/python/AstExtended.qll +++ b/python/ql/lib/semmle/python/AstExtended.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/AstGenerated.qll b/python/ql/lib/semmle/python/AstGenerated.qll index 12f86832387..8805a43bec3 100644 --- a/python/ql/lib/semmle/python/AstGenerated.qll +++ b/python/ql/lib/semmle/python/AstGenerated.qll @@ -3,6 +3,8 @@ * WARNING: Any modifications to this file will be lost. * Relations can be changed by modifying master.py. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Class.qll b/python/ql/lib/semmle/python/Class.qll index 19b81e86a12..cee0e730cb4 100644 --- a/python/ql/lib/semmle/python/Class.qll +++ b/python/ql/lib/semmle/python/Class.qll @@ -1,6 +1,8 @@ /** * Provides classes representing Python classes. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Comment.qll b/python/ql/lib/semmle/python/Comment.qll index 839d700b8cd..c87ccc1521d 100644 --- a/python/ql/lib/semmle/python/Comment.qll +++ b/python/ql/lib/semmle/python/Comment.qll @@ -1,6 +1,8 @@ /** * Provides classes representing comments in Python. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Comprehensions.qll b/python/ql/lib/semmle/python/Comprehensions.qll index 37f07614282..12e71e2d5d1 100644 --- a/python/ql/lib/semmle/python/Comprehensions.qll +++ b/python/ql/lib/semmle/python/Comprehensions.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** The base class for list, set and dictionary comprehensions, and generator expressions. */ diff --git a/python/ql/lib/semmle/python/Constants.qll b/python/ql/lib/semmle/python/Constants.qll index 03254a4bfd0..f86019c0256 100644 --- a/python/ql/lib/semmle/python/Constants.qll +++ b/python/ql/lib/semmle/python/Constants.qll @@ -1,4 +1,6 @@ /** Standard builtin types and modules */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Exprs.qll b/python/ql/lib/semmle/python/Exprs.qll index c374863d684..6ab9f8d8340 100644 --- a/python/ql/lib/semmle/python/Exprs.qll +++ b/python/ql/lib/semmle/python/Exprs.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + private import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/Files.qll b/python/ql/lib/semmle/python/Files.qll index 2da0dd61f88..bb3c504654e 100644 --- a/python/ql/lib/semmle/python/Files.qll +++ b/python/ql/lib/semmle/python/Files.qll @@ -1,4 +1,6 @@ /** Provides classes for working with files and folders. */ +overlay[local] +module; import python private import codeql.util.FileSystem @@ -178,6 +180,7 @@ class Container extends Impl::Container { override Container getParentContainer() { result = super.getParentContainer() } + overlay[global] Container getChildContainer(string baseName) { result = this.getAChildContainer() and result.getBaseName() = baseName diff --git a/python/ql/lib/semmle/python/Flow.qll b/python/ql/lib/semmle/python/Flow.qll index 898cd566ab9..94caf513aa9 100644 --- a/python/ql/lib/semmle/python/Flow.qll +++ b/python/ql/lib/semmle/python/Flow.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.internal.CachedStages private import codeql.controlflow.BasicBlock as BB @@ -191,6 +194,7 @@ class ControlFlowNode extends @py_flow_node { predicate isNormalExit() { py_scope_flow(this, _, 0) or py_scope_flow(this, _, 2) } /** Whether this strictly dominates other. */ + overlay[caller] pragma[inline] predicate strictlyDominates(ControlFlowNode other) { // This predicate is gigantic, so it must be inlined. @@ -204,6 +208,7 @@ class ControlFlowNode extends @py_flow_node { * Whether this dominates other. * Note that all nodes dominate themselves. */ + overlay[caller] pragma[inline] predicate dominates(ControlFlowNode other) { // This predicate is gigantic, so it must be inlined. @@ -213,6 +218,7 @@ class ControlFlowNode extends @py_flow_node { } /** Whether this strictly reaches other. */ + overlay[caller] pragma[inline] predicate strictlyReaches(ControlFlowNode other) { // This predicate is gigantic, even larger than strictlyDominates, diff --git a/python/ql/lib/semmle/python/Function.qll b/python/ql/lib/semmle/python/Function.qll index e15d28d3a12..c133275b8b7 100644 --- a/python/ql/lib/semmle/python/Function.qll +++ b/python/ql/lib/semmle/python/Function.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** diff --git a/python/ql/lib/semmle/python/GuardedControlFlow.qll b/python/ql/lib/semmle/python/GuardedControlFlow.qll index 73ea183850a..3169e4d0c1a 100644 --- a/python/ql/lib/semmle/python/GuardedControlFlow.qll +++ b/python/ql/lib/semmle/python/GuardedControlFlow.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** A basic block which terminates in a condition, splitting the subsequent control flow */ diff --git a/python/ql/lib/semmle/python/Import.qll b/python/ql/lib/semmle/python/Import.qll index c75ef9f0c91..e8a7facccad 100644 --- a/python/ql/lib/semmle/python/Import.qll +++ b/python/ql/lib/semmle/python/Import.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.types.Builtins private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/Keywords.qll b/python/ql/lib/semmle/python/Keywords.qll index b7ecca528bb..da7b582ef16 100644 --- a/python/ql/lib/semmle/python/Keywords.qll +++ b/python/ql/lib/semmle/python/Keywords.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python class KeyValuePair extends KeyValuePair_, DictDisplayItem { diff --git a/python/ql/lib/semmle/python/Module.qll b/python/ql/lib/semmle/python/Module.qll index f22f0d6fe39..a30aab452c3 100644 --- a/python/ql/lib/semmle/python/Module.qll +++ b/python/ql/lib/semmle/python/Module.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/Operations.qll b/python/ql/lib/semmle/python/Operations.qll index e8f5e4799a5..c6318af63e2 100644 --- a/python/ql/lib/semmle/python/Operations.qll +++ b/python/ql/lib/semmle/python/Operations.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** The base class for operators */ diff --git a/python/ql/lib/semmle/python/Patterns.qll b/python/ql/lib/semmle/python/Patterns.qll index 9b4760611d0..fb99a123584 100644 --- a/python/ql/lib/semmle/python/Patterns.qll +++ b/python/ql/lib/semmle/python/Patterns.qll @@ -1,6 +1,8 @@ /** * Wrapping generated AST classes: `Pattern_` and subclasses. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/SSA.qll b/python/ql/lib/semmle/python/SSA.qll index b71bd95de79..77779287734 100644 --- a/python/ql/lib/semmle/python/SSA.qll +++ b/python/ql/lib/semmle/python/SSA.qll @@ -1,4 +1,6 @@ /** SSA library */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Scope.qll b/python/ql/lib/semmle/python/Scope.qll index 4131455299c..66a7170aec7 100644 --- a/python/ql/lib/semmle/python/Scope.qll +++ b/python/ql/lib/semmle/python/Scope.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.dataflow.new.internal.ImportResolution @@ -6,6 +9,7 @@ private import semmle.python.dataflow.new.internal.ImportResolution * * This aims to be the same as m.getAnExport(), but without using the points-to machinery. */ +overlay[global] private string getAModuleExport(Module m) { py_exports(m, result) or @@ -76,6 +80,7 @@ class Scope extends Scope_ { predicate isTopLevel() { this.getEnclosingModule() = this.getEnclosingScope() } /** Holds if this scope is deemed to be public */ + overlay[global] predicate isPublic() { /* Not inside a function */ not this.getEnclosingScope() instanceof Function and diff --git a/python/ql/lib/semmle/python/Stmts.qll b/python/ql/lib/semmle/python/Stmts.qll index ea309227af6..c0dfac10ee8 100644 --- a/python/ql/lib/semmle/python/Stmts.qll +++ b/python/ql/lib/semmle/python/Stmts.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** A statement */ diff --git a/python/ql/lib/semmle/python/Variables.qll b/python/ql/lib/semmle/python/Variables.qll index 1249fd020ca..d2baf04a5bf 100644 --- a/python/ql/lib/semmle/python/Variables.qll +++ b/python/ql/lib/semmle/python/Variables.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** A variable, either a global or local variable (including parameters) */ diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index f83870ab050..f9a95124187 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -25,6 +25,7 @@ deprecated module SummaryComponentStack = Impl::Private::SummaryComponentStack; class Provenance = Impl::Public::Provenance; /** Provides the `Range` class used to define the extent of `SummarizedCallable`. */ +overlay[local] module SummarizedCallable { /** A callable with a flow summary, identified by a unique string. */ abstract class Range extends LibraryCallable, Impl::Public::SummarizedCallable { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll index e9bcc5e6785..8778ae28866 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll @@ -1,4 +1,6 @@ /** This module provides an API for attribute reads and writes. */ +overlay[local] +module; private import python import DataFlowUtil diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll index 9ed9e7d7a2b..6a66d241083 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll @@ -1,4 +1,6 @@ /** Provides predicates for reasoning about built-ins in Python. */ +overlay[local] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index b04b83be83e..d4444c6795b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -31,6 +31,8 @@ * Note: This hasn't been 100% realized yet, so we don't currently expose a predicate to * ask what targets any data-flow node has. But it's still the plan to do this! */ +overlay[local?] +module; private import python private import DataFlowPublic @@ -39,6 +41,7 @@ private import FlowSummaryImpl as FlowSummaryImpl private import semmle.python.internal.CachedStages private import semmle.python.dataflow.new.internal.TypeTrackingImpl::CallGraphConstruction as CallGraphConstruction +overlay[local] newtype TParameterPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfParameterPosition() or @@ -84,6 +87,7 @@ newtype TParameterPosition = TSynthDictSplatParameterPosition() /** A parameter position. */ +overlay[local] class ParameterPosition extends TParameterPosition { /** Holds if this position represents a `self`/`cls` parameter. */ predicate isSelf() { this = TSelfParameterPosition() } @@ -146,6 +150,7 @@ class ParameterPosition extends TParameterPosition { } } +overlay[local] newtype TArgumentPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfArgumentPosition() or @@ -180,6 +185,7 @@ newtype TArgumentPosition = TDictSplatArgumentPosition() /** An argument position. */ +overlay[local] class ArgumentPosition extends TArgumentPosition { /** Holds if this position represents a `self`/`cls` argument. */ predicate isSelf() { this = TSelfArgumentPosition() } @@ -248,6 +254,7 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { * `@staticmethod` decorator or by convention * (like a `__new__` method on a class is a classmethod even without the decorator). */ +overlay[local] predicate isStaticmethod(Function func) { exists(NameNode id | id.getId() = "staticmethod" and id.isGlobal() | func.getADecorator() = id.getNode() @@ -259,6 +266,7 @@ predicate isStaticmethod(Function func) { * `@classmethod` decorator or by convention * (like a `__new__` method on a class is a classmethod even without the decorator). */ +overlay[local] predicate isClassmethod(Function func) { exists(NameNode id | id.getId() = "classmethod" and id.isGlobal() | func.getADecorator() = id.getNode() @@ -275,6 +283,7 @@ predicate isClassmethod(Function func) { } /** Holds if the function `func` has a `property` decorator. */ +overlay[local] predicate hasPropertyDecorator(Function func) { exists(NameNode id | id.getId() = "property" and id.isGlobal() | func.getADecorator() = id.getNode() @@ -284,6 +293,7 @@ predicate hasPropertyDecorator(Function func) { /** * Holds if the function `func` has a `contextlib.contextmanager`. */ +overlay[local] predicate hasContextmanagerDecorator(Function func) { exists(ControlFlowNode contextmanager | contextmanager.(NameNode).getId() = "contextmanager" and contextmanager.(NameNode).isGlobal() @@ -298,20 +308,25 @@ predicate hasContextmanagerDecorator(Function func) { // Callables // ============================================================================= /** A callable defined in library code, identified by a unique string. */ +overlay[local] abstract class LibraryCallable extends string { bindingset[this] LibraryCallable() { any() } /** Gets a call to this library callable. */ + overlay[global] abstract CallCfgNode getACall(); /** Same as `getACall` but without referring to the call graph or API graph. */ + overlay[global] CallCfgNode getACallSimple() { none() } /** Gets a data-flow node, where this library callable is used as a call-back. */ + overlay[global] abstract ArgumentNode getACallback(); } +overlay[local] newtype TDataFlowCallable = /** * Is used as the target for all calls: plain functions, lambdas, methods on classes, @@ -329,6 +344,7 @@ newtype TDataFlowCallable = TLibraryCallable(LibraryCallable callable) /** A callable. */ +overlay[local] abstract class DataFlowCallable extends TDataFlowCallable { /** Gets a textual representation of this element. */ abstract string toString(); @@ -350,6 +366,7 @@ abstract class DataFlowCallable extends TDataFlowCallable { } /** A callable function. */ +overlay[local] abstract class DataFlowFunction extends DataFlowCallable, TFunction { Function func; @@ -370,6 +387,7 @@ abstract class DataFlowFunction extends DataFlowCallable, TFunction { /** Gets the positional parameter offset, to take into account self/cls parameters. */ int positionalOffset() { result = 0 } + overlay[local] override ParameterNode getParameter(ParameterPosition ppos) { // Do not handle lower bound positions (such as `[1..]`) here // they are handled by parameter matching and would create @@ -408,11 +426,13 @@ abstract class DataFlowFunction extends DataFlowCallable, TFunction { } /** A plain (non-method) function. */ +overlay[local] class DataFlowPlainFunction extends DataFlowFunction { DataFlowPlainFunction() { not this instanceof DataFlowMethod } } /** A method. */ +overlay[local] class DataFlowMethod extends DataFlowFunction { Class cls; @@ -431,11 +451,13 @@ class DataFlowMethod extends DataFlowFunction { } /** A classmethod. */ +overlay[local] class DataFlowClassmethod extends DataFlowMethod { DataFlowClassmethod() { isClassmethod(func) } } /** A staticmethod. */ +overlay[local] class DataFlowStaticmethod extends DataFlowMethod, DataFlowFunction { DataFlowStaticmethod() { isStaticmethod(func) } @@ -450,6 +472,7 @@ class DataFlowStaticmethod extends DataFlowMethod, DataFlowFunction { * A module. This is not actually a callable, but we need this so a * `ModuleVariableNode` have an enclosing callable. */ +overlay[local] class DataFlowModuleScope extends DataFlowCallable, TModule { Module mod; @@ -466,6 +489,7 @@ class DataFlowModuleScope extends DataFlowCallable, TModule { override ParameterNode getParameter(ParameterPosition ppos) { none() } } +overlay[local] class LibraryCallableValue extends DataFlowCallable, TLibraryCallable { LibraryCallable callable; @@ -476,6 +500,7 @@ class LibraryCallableValue extends DataFlowCallable, TLibraryCallable { override string getQualifiedName() { result = callable.toString() } /** Gets a data-flow node, where this library callable is used as a call-back. */ + overlay[global] ArgumentNode getACallback() { result = callable.getACallback() } override Scope getScope() { none() } @@ -1210,6 +1235,7 @@ predicate resolveCall(CallNode call, Function target, CallType type) { * Holds if the argument of `call` at position `apos` is `arg`. This is just a helper * predicate that maps ArgumentPositions to the arguments of the underlying `CallNode`. */ +overlay[local] cached predicate normalCallArg(CallNode call, Node arg, ArgumentPosition apos) { exists(int index | @@ -1589,6 +1615,7 @@ class SummaryCall extends DataFlowCall, TSummaryCall { * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ +overlay[local] abstract class ParameterNodeImpl extends Node { /** Gets the `Parameter` this `ParameterNode` represents. */ abstract Parameter getParameter(); @@ -1610,6 +1637,7 @@ abstract class ParameterNodeImpl extends Node { * * This is used for tracking flow through captured variables. */ +overlay[local] class SynthCapturedVariablesParameterNode extends ParameterNodeImpl, TSynthCapturedVariablesParameterNode { @@ -1634,6 +1662,7 @@ class SynthCapturedVariablesParameterNode extends ParameterNodeImpl, } /** A parameter for a library callable with a flow summary. */ +overlay[local] class SummaryParameterNode extends ParameterNodeImpl, FlowSummaryNode { SummaryParameterNode() { FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), _) @@ -1684,6 +1713,7 @@ private class SummaryReturnNode extends FlowSummaryNode, ReturnNode { override ReturnKind getKind() { result = rk } } +overlay[global] private class SummaryArgumentNode extends FlowSummaryNode, ArgumentNode { private SummaryCall call_; private ArgumentPosition pos_; @@ -1737,6 +1767,7 @@ class SynthCapturedVariablesArgumentNode extends Node, TSynthCapturedVariablesAr class CapturedVariablesArgumentNodeAsArgumentNode extends ArgumentNode, SynthCapturedVariablesArgumentNode { + overlay[global] override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { exists(CallNode callNode | callNode = this.getCallNode() | callNode = call.getNode() and @@ -1773,6 +1804,7 @@ class SynthCapturedVariablesArgumentPostUpdateNode extends PostUpdateNodeImpl, } /** A synthetic node representing the values of variables captured by a comprehension. */ +overlay[local] class SynthCompCapturedVariablesArgumentNode extends Node, TSynthCompCapturedVariablesArgumentNode { Comp comp; @@ -1790,6 +1822,7 @@ class SynthCompCapturedVariablesArgumentNode extends Node, TSynthCompCapturedVar class SynthCompCapturedVariablesArgumentNodeAsArgumentNode extends SynthCompCapturedVariablesArgumentNode, ArgumentNode { + overlay[global] override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { call.(ComprehensionCall).getComprehension() = comp and pos.isLambdaSelf() @@ -1834,12 +1867,14 @@ DataFlowCallable viableCallable(DataFlowCall call) { // ============================================================================= // Remaining required data-flow things // ============================================================================= +overlay[local] private newtype TReturnKind = TNormalReturnKind() /** * A return kind. A return kind describes how a value can be returned * from a callable. For Python, this is simply a method return. */ +overlay[local] class ReturnKind extends TReturnKind { /** Gets a textual representation of this element. */ string toString() { result = "return" } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 9866bd00964..fffd0150008 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import python private import DataFlowPublic private import semmle.python.essa.SsaCompute @@ -39,6 +42,7 @@ predicate isArgumentNode(ArgumentNode arg, DataFlowCall c, ArgumentPosition pos) //-------- // Nodes //-------- +overlay[local] predicate isExpressionNode(ControlFlowNode node) { node.getNode() instanceof Expr } // ============================================================================= @@ -111,6 +115,7 @@ class SyntheticPreUpdateNode extends Node, TSyntheticPreUpdateNode { * func = foo if else bar * func(1, 2, 3) */ +overlay[local] class SynthStarArgsElementParameterNode extends ParameterNodeImpl, TSynthStarArgsElementParameterNode { @@ -241,6 +246,7 @@ private predicate dictSplatParameterNodeClearStep(ParameterNode n, DictionaryEle * (c) since the synthesized nodes are hidden, the reported data-flow paths will be * collapsed anyway. */ +overlay[local] class SynthDictSplatParameterNode extends ParameterNodeImpl, TSynthDictSplatParameterNode { DataFlowCallable callable; diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index de26d988c06..f63d24a300c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -1,6 +1,8 @@ /** * Provides Python-specific definitions for use in the data flow library. */ +overlay[local] +module; private import python private import DataFlowPrivate @@ -22,6 +24,7 @@ private import semmle.python.frameworks.data.ModelsAsData * - Module variable nodes: These represent global variables and act as canonical targets for reads and writes of these. * - Synthetic nodes: These handle flow in various special cases. */ +overlay[local] newtype TNode = /** A node corresponding to a control flow node. */ TCfgNode(ControlFlowNode node) { @@ -157,6 +160,7 @@ private import semmle.python.internal.CachedStages * An element, viewed as a node in a data flow graph. Either an SSA variable * (`EssaNode`) or a control flow node (`CfgNode`). */ +overlay[local] class Node extends TNode { /** Gets a textual representation of this element. */ cached @@ -324,6 +328,7 @@ class ScopeEntryDefinitionNode extends Node, TScopeEntryDefinitionNode { * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ +overlay[local] class ParameterNode extends Node instanceof ParameterNodeImpl { /** Gets the parameter corresponding to this node, if any. */ final Parameter getParameter() { result = super.getParameter() } @@ -345,6 +350,7 @@ class LocalSourceParameterNode extends ExtractedParameterNode, LocalSourceNode { ExtractedParameterNode parameterNode(Parameter p) { result.getParameter() = p } /** A data flow node that represents a call argument. */ +overlay[global] abstract class ArgumentNode extends Node { /** Holds if this argument occurs at the given position in the given call. */ abstract predicate argumentOf(DataFlowCall call, ArgumentPosition pos); @@ -383,6 +389,7 @@ private Node implicitArgumentNode() { /** * A data flow node that represents a call argument found in the source code. */ +overlay[global] class ExtractedArgumentNode extends ArgumentNode { ExtractedArgumentNode() { this = getCallArgApproximation() @@ -469,6 +476,7 @@ class ModuleVariableNode extends Node, TModuleVariableNode { GlobalVariable getVariable() { result = var } /** Gets a node that reads this variable. */ + overlay[global] Node getARead() { result = this.getALocalRead() or @@ -500,10 +508,12 @@ class ModuleVariableNode extends Node, TModuleVariableNode { override Location getLocation() { result = mod.getLocation() } } +overlay[global] private ModuleVariableNode import_star_read(Node n) { resolved_import_star_module(result.getModule(), result.getVariable().getId(), n) } +overlay[global] pragma[nomagic] private predicate resolved_import_star_module(Module m, string name, Node n) { exists(NameNode nn | nn = n.asCfgNode() | @@ -625,6 +635,7 @@ signature predicate guardChecksSig(GuardNode g, ControlFlowNode node, boolean br * This is expected to be used in `isBarrier`/`isSanitizer` definitions * in data flow and taint tracking. */ +overlay[global] module BarrierGuard { /** Gets a node that is safely guarded by the given guard check. */ ExprNode getABarrierNode() { @@ -652,6 +663,7 @@ private module WithParam { */ module ParameterizedBarrierGuard::guardChecksSig/4 guardChecks> { /** Gets a node that is safely guarded by the given guard check with parameter `param`. */ + overlay[global] ExprNode getABarrierNode(P param) { exists(GuardNode g, EssaDefinition def, ControlFlowNode node, boolean branch | AdjacentUses::useOfDef(def, node) and @@ -671,6 +683,7 @@ module ParameterizedBarrierGuard::guardChecksSig/4 guar module ExternalBarrierGuard { private import semmle.python.ApiGraphs + overlay[global] private predicate guardCheck(GuardNode g, ControlFlowNode node, boolean branch, string kind) { exists(API::CallNode call, API::Node parameter | parameter = call.getAParameter() and @@ -689,6 +702,7 @@ module ExternalBarrierGuard { * * INTERNAL: Do not use. */ + overlay[global] ExprNode getAnExternalBarrierNode(string kind) { result = ParameterizedBarrierGuard::getABarrierNode(kind) } @@ -698,6 +712,7 @@ module ExternalBarrierGuard { * Algebraic datatype for tracking data content associated with values. * Content can be collection elements or object attributes. */ +overlay[local] newtype TContent = /** An element of a list. */ TListElementContent() or @@ -769,6 +784,7 @@ newtype TContent = * If the value is a collection, it can have elements, * if it is an object, it can have attribute values. */ +overlay[local] class Content extends TContent { /** Gets a textual representation of this element. */ string toString() { result = "Content" } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll index 449b51565a8..41cb0368b50 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll @@ -1,6 +1,8 @@ /** * Provides classes and predicates for defining flow summaries. */ +overlay[local] +module; private import python private import codeql.dataflow.internal.FlowSummaryImpl @@ -99,6 +101,7 @@ module Input implements InputSig private import Make as Impl private module StepsInput implements Impl::Private::StepsInputSig { + overlay[global] DataFlowCall getACall(Public::SummarizedCallable sc) { result = TPotentialLibraryCall([ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll b/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll index 564630c47db..83f8ee862c3 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll @@ -1,4 +1,6 @@ /** Provides predicates for reasoning about uses of `import *` in Python. */ +overlay[local] +module; private import python private import semmle.python.dataflow.new.internal.Builtins @@ -11,6 +13,7 @@ module ImportStar { * Holds if `n` is an access of a variable called `name` (which is _not_ the name of a * built-in, and which is _not_ a global defined in the enclosing module) inside the scope `s`. */ + overlay[local] cached predicate namePossiblyDefinedInImportStar(NameNode n, string name, Scope s) { n.isLoad() and @@ -61,6 +64,7 @@ module ImportStar { * Holds if `n` may refer to a global variable of the same name in the module `m`, accessible * from the scope of `n` by a chain of `import *` imports. */ + overlay[global] cached predicate importStarResolvesTo(NameNode n, Module m) { m = getStarImported+(n.getEnclosingModule()) and @@ -71,6 +75,7 @@ module ImportStar { /** * Gets a module that is imported from `m` via `import *`. */ + overlay[global] cached Module getStarImported(Module m) { exists(ImportStar i, DataFlow::CfgNode imported_module | @@ -92,6 +97,7 @@ module ImportStar { * * this would return the data-flow nodes corresponding to `foo.bar` and `quux`. */ + overlay[local] cached ControlFlowNode potentialImportStarBase(Scope s) { result = any(ImportStarNode n | n.getScope() = s).getModule() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll b/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll index e83e789c2fb..5def15fa3c8 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll @@ -166,6 +166,8 @@ * * `c`: [ListElementContent] */ +overlay[local] +module; private import python private import DataFlowPublic diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll index 7752846ae1f..5cbe7b44ab3 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll @@ -5,6 +5,8 @@ * Note that unlike `TypeTracker.qll`, this library only performs * local tracking within a function. */ +overlay[local] +module; private import python import DataFlowPublic @@ -77,6 +79,7 @@ class LocalSourceNode extends Node { } /** Holds if this `LocalSourceNode` can flow to `nodeTo` in one or more local flow steps. */ + overlay[caller] pragma[inline] predicate flowsTo(Node nodeTo) { Cached::hasLocalSource(nodeTo, this) } @@ -149,6 +152,7 @@ class LocalSourceNode extends Node { * * See `TypeTracker` for more details about how to use this. */ + overlay[global] pragma[inline] LocalSourceNode track(TypeTracker t2, TypeTracker t) { t = t2.step(this, result) } @@ -157,6 +161,7 @@ class LocalSourceNode extends Node { * * See `TypeBackTracker` for more details about how to use this. */ + overlay[global] pragma[inline] LocalSourceNode backtrack(TypeBackTracker t2, TypeBackTracker t) { t = t2.step(result, this) } } @@ -210,6 +215,7 @@ private module FutureWork { * * See `TypeTracker` for more details about how to use this. */ + overlay[global] pragma[inline] TypeTrackingNode track(TypeTracker t2, TypeTracker t) { t = t2.step(this, result) } @@ -218,6 +224,7 @@ private module FutureWork { * * See `TypeBackTracker` for more details about how to use this. */ + overlay[global] pragma[inline] TypeTrackingNode backtrack(TypeBackTracker t2, TypeBackTracker t) { t2 = t.step(result, this) } } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll b/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll index 8064c34d921..e72e378da52 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll @@ -50,6 +50,8 @@ * keyword arguments using the `__match_args__` attribute on the class. We do not * currently model this. */ +overlay[local] +module; private import python private import DataFlowPublic diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 2f98ab70719..95434b05451 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -202,11 +202,18 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { */ predicate returnStep(Node nodeFrom, LocalSourceNode nodeTo) { exists(DataFlowPrivate::ExtractedDataFlowCall call | - nodeFrom.(DataFlowPrivate::ReturnNode).getEnclosingCallable() = call.getCallable() and + returnNodeEnclosingCallable(nodeFrom) = call.getCallable() and nodeTo.(DataFlowPublic::CfgNode).getNode() = call.getNode() ) } + pragma[nomagic] + private DataFlowDispatch::DataFlowCallable returnNodeEnclosingCallable( + DataFlowPrivate::ReturnNode returnNode + ) { + result = returnNode.getEnclosingCallable() + } + /** * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. */ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll index 5ed365a8e56..fbe05979328 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -1,4 +1,6 @@ /** Provides logic related to captured variables. */ +overlay[local] +module; private import python private import DataFlowPublic diff --git a/python/ql/lib/semmle/python/essa/Definitions.qll b/python/ql/lib/semmle/python/essa/Definitions.qll index aca6991b9f6..6e7b8d5b376 100644 --- a/python/ql/lib/semmle/python/essa/Definitions.qll +++ b/python/ql/lib/semmle/python/essa/Definitions.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /* * Classification of variables. These should be non-overlapping and complete. diff --git a/python/ql/lib/semmle/python/essa/Essa.qll b/python/ql/lib/semmle/python/essa/Essa.qll index 384bfd2f91f..ebc22beedf3 100644 --- a/python/ql/lib/semmle/python/essa/Essa.qll +++ b/python/ql/lib/semmle/python/essa/Essa.qll @@ -1,6 +1,8 @@ /** * Library for SSA representation (Static Single Assignment form). */ +overlay[local] +module; import python private import SsaCompute diff --git a/python/ql/lib/semmle/python/essa/SsaCompute.qll b/python/ql/lib/semmle/python/essa/SsaCompute.qll index d2512eecded..fb030b6250e 100644 --- a/python/ql/lib/semmle/python/essa/SsaCompute.qll +++ b/python/ql/lib/semmle/python/essa/SsaCompute.qll @@ -88,6 +88,8 @@ * ``` * and thus it falls out that `g3` must be `1`. */ +overlay[local] +module; import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/essa/SsaDefinitions.qll b/python/ql/lib/semmle/python/essa/SsaDefinitions.qll index 6c87af102fa..827bee34474 100644 --- a/python/ql/lib/semmle/python/essa/SsaDefinitions.qll +++ b/python/ql/lib/semmle/python/essa/SsaDefinitions.qll @@ -2,6 +2,8 @@ * Provides classes and predicates for determining the uses and definitions of * variables for ESSA form. */ +overlay[local] +module; import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/frameworks/Flask.qll b/python/ql/lib/semmle/python/frameworks/Flask.qll index b9bba675ac0..f819e867907 100644 --- a/python/ql/lib/semmle/python/frameworks/Flask.qll +++ b/python/ql/lib/semmle/python/frameworks/Flask.qll @@ -2,6 +2,8 @@ * Provides classes modeling security-relevant aspects of the `flask` PyPI package. * See https://flask.palletsprojects.com/en/1.1.x/. */ +overlay[local?] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/frameworks/Requests.qll b/python/ql/lib/semmle/python/frameworks/Requests.qll index 4c8038787c9..30980d47322 100644 --- a/python/ql/lib/semmle/python/frameworks/Requests.qll +++ b/python/ql/lib/semmle/python/frameworks/Requests.qll @@ -24,6 +24,18 @@ private import semmle.python.frameworks.data.ModelsAsData * - https://requests.readthedocs.io/en/latest/ */ module Requests { + /** Join-order helper for `OutgoingRequestCall`. */ + pragma[nomagic] + private API::Node sessionInstance() { + exists(API::Node moduleExporting | + moduleExporting in [ + API::moduleImport("requests"), // + API::moduleImport("requests").getMember("sessions") + ] and + result = moduleExporting.getMember(["Session", "session"]).getReturn() + ) + } + /** * An outgoing HTTP request, from the `requests` library. * @@ -37,15 +49,7 @@ module Requests { ( this = API::moduleImport("requests").getMember(methodName).getACall() or - exists(API::Node moduleExporting, API::Node sessionInstance | - moduleExporting in [ - API::moduleImport("requests"), // - API::moduleImport("requests").getMember("sessions") - ] and - sessionInstance = moduleExporting.getMember(["Session", "session"]).getReturn() - | - this = sessionInstance.getMember(methodName).getACall() - ) + this = sessionInstance().getMember(methodName).getACall() ) } diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index e749ab66f8b..5d3b994880a 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -2,6 +2,8 @@ * Provides classes modeling security-relevant aspects of the standard libraries. * Note: some modeling is done internally in the dataflow/taint tracking implementation. */ +overlay[local?] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll b/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll index e66f2c01d70..542f8c995e9 100644 --- a/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll +++ b/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll @@ -8,6 +8,8 @@ * The package name refers to the top-level module the import comes from, and not a PyPI package. * So for `from foo.bar import baz`, the package will be `foo`. */ +overlay[local?] +module; private import python private import internal.ApiGraphModels as Shared diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll index 7adc24bab14..3136f87569c 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -30,6 +30,7 @@ import semmle.python.dataflow.new.DataFlow::DataFlow as DataFlow * Holds if models describing `type` may be relevant for the analysis of this database. */ bindingset[type] +overlay[local] predicate isTypeUsed(string type) { // If `type` is a path, then it is the first component that should be imported. API::moduleImportExists(type.splitAt(".", 0)) @@ -39,6 +40,7 @@ predicate isTypeUsed(string type) { * Holds if `type` can be obtained from an instance of `otherType` due to * language semantics modeled by `getExtraNodeFromType`. */ +overlay[local] predicate hasImplicitTypeModel(string type, string otherType) { none() } /** Gets a Python-specific interpretation of the `(type, path)` tuple after resolving the first `n` access path tokens. */ diff --git a/python/ql/lib/semmle/python/internal/Awaited.qll b/python/ql/lib/semmle/python/internal/Awaited.qll index cd5162e6151..43affdf95a4 100644 --- a/python/ql/lib/semmle/python/internal/Awaited.qll +++ b/python/ql/lib/semmle/python/internal/Awaited.qll @@ -3,6 +3,8 @@ * * Provides helper class for defining additional API graph edges. */ +overlay[local] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/internal/CachedStages.qll b/python/ql/lib/semmle/python/internal/CachedStages.qll index 687cabeceae..7379cc51372 100644 --- a/python/ql/lib/semmle/python/internal/CachedStages.qll +++ b/python/ql/lib/semmle/python/internal/CachedStages.qll @@ -35,6 +35,7 @@ module Stages { * Computes predicates based on the AST. * These include SSA and basic-blocks. */ + overlay[local] cached module AST { /** @@ -176,6 +177,7 @@ module Stages { * Always holds. * Ensures that a predicate is evaluated as part of the DataFlow stage. */ + overlay[local] cached predicate ref() { 1 = 1 } diff --git a/python/ql/lib/semmle/python/objects/TObject.qll b/python/ql/lib/semmle/python/objects/TObject.qll index c041827ff5a..cfa8cb5aa07 100644 --- a/python/ql/lib/semmle/python/objects/TObject.qll +++ b/python/ql/lib/semmle/python/objects/TObject.qll @@ -397,6 +397,12 @@ private predicate neither_class_nor_static_method(Function f) { ) } +/** Join-order helper for `missing_imported_module`. */ +pragma[nomagic] +private predicate module_has_syntaxerror(Module m) { + exists(SyntaxError se | se.getFile() = m.getFile()) +} + predicate missing_imported_module(ControlFlowNode imp, Context ctx, string name) { ctx.isImport() and imp.(ImportExprNode).getNode().getAnImportedModuleName() = name and @@ -404,9 +410,9 @@ predicate missing_imported_module(ControlFlowNode imp, Context ctx, string name) not exists(Module m | m.getName() = name) and not exists(Builtin b | b.isModule() and b.getName() = name) or - exists(Module m, SyntaxError se | + exists(Module m | m.getName() = name and - se.getFile() = m.getFile() + module_has_syntaxerror(m) ) ) or diff --git a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll index 274e7ee57ad..3fb260e425d 100644 --- a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll @@ -176,4 +176,36 @@ module ServerSideRequestForgery { strNode = [call.getArg(0), call.getArgByName("string")] ) } + + /** A validation of a URI using the `AntiSSRF` library, considered as a full-ssrf sanitizer. */ + private class UriValidator extends FullUrlControlSanitizer { + UriValidator() { this = DataFlow::BarrierGuard::getABarrierNode() } + } + + import semmle.python.dataflow.new.internal.DataFlowPublic + + private predicate uri_validator(DataFlow::GuardNode g, ControlFlowNode node, boolean branch) { + exists(DataFlow::CallCfgNode call, string funcs | + funcs in ["in_domain", "in_azure_keyvault_domain", "in_azure_storage_domain"] and + call = API::moduleImport("AntiSSRF").getMember("URIValidator").getMember(funcs).getACall() and + call.getArg(0).asCfgNode() = node + | + // validator call directly (e.g., if URIValidator.in_domain(...) ) + g = call.asCfgNode() and + branch = true + or + // validator used in a comparison + exists(Cmpop op, Node n, ControlFlowNode l | + n.getALocalSource() = call and g.(CompareNode).operands(n.asCfgNode(), op, l) + | + // validator == true or validator == false or validator is True or validator is False + (op instanceof Eq or op instanceof Is) and + branch = l.getNode().(BooleanLiteral).booleanValue() + or + // validator != false or validator != true or validator is not True or validator is not False + (op instanceof NotEq or op instanceof IsNot) and + branch = l.getNode().(BooleanLiteral).booleanValue().booleanNot() + ) + ) + } } diff --git a/python/ql/lib/semmle/python/types/Builtins.qll b/python/ql/lib/semmle/python/types/Builtins.qll index 796397f72cd..371cf758d5c 100644 --- a/python/ql/lib/semmle/python/types/Builtins.qll +++ b/python/ql/lib/semmle/python/types/Builtins.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + import python private import LegacyPointsTo diff --git a/python/ql/lib/semmle/python/types/ImportTime.qll b/python/ql/lib/semmle/python/types/ImportTime.qll index 1604013d7ff..27f70b09aa4 100644 --- a/python/ql/lib/semmle/python/types/ImportTime.qll +++ b/python/ql/lib/semmle/python/types/ImportTime.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** diff --git a/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll b/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll index 7f25701cac8..987740236f2 100644 --- a/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll +++ b/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll @@ -3,8 +3,10 @@ import python import semmle.python.dataflow.new.DataFlow +final class FinalAstNode = AstNode; + /** A looping construct. */ -abstract class Loop extends AstNode { +abstract class Loop extends FinalAstNode { /** * Gets a loop variable of this loop. * For example, `x` and `y` in `for x,y in pairs: print(x+y)` @@ -13,9 +15,9 @@ abstract class Loop extends AstNode { } /** A `for` loop. */ -private class ForLoop extends Loop, For { +private class ForLoop extends Loop instanceof For { override Variable getALoopVariable() { - this.getTarget() = result.getAnAccess().getParentNode*() and + this.(For).getTarget() = result.getAnAccess().getParentNode*() and result.getScope() = this.getScope() } } diff --git a/python/ql/src/analysis/ImportFailure.ql b/python/ql/src/analysis/ImportFailure.ql index c9289a8b474..71967e6e04f 100644 --- a/python/ql/src/analysis/ImportFailure.ql +++ b/python/ql/src/analysis/ImportFailure.ql @@ -59,7 +59,9 @@ predicate ok_to_fail(ImportExpr ie) { os_specific_import(ie) != get_os() } -class VersionTest extends ControlFlowNode { +final class FinalControlFlowNode = ControlFlowNode; + +class VersionTest extends FinalControlFlowNode { VersionTest() { exists(string name | name.matches("%version%") and @@ -70,7 +72,7 @@ class VersionTest extends ControlFlowNode { ) } - override string toString() { result = "VersionTest" } + string toString() { result = "VersionTest" } } /** A guard on the version of the Python interpreter */ diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index dea81a83817..c6b7d29f631 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.7.7 +version: 1.7.8-dev groups: - python - queries diff --git a/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll b/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll index 11b9c0ef09e..14d68455d62 100644 --- a/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll +++ b/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import python private import semmle.python.dataflow.new.FlowSummary private import semmle.python.ApiGraphs diff --git a/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll b/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll index c4c4096c686..57e0013b6e0 100644 --- a/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll +++ b/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import python private import semmle.python.dataflow.new.FlowSummary private import semmle.python.ApiGraphs diff --git a/python/ql/test/library-tests/frameworks/data/warnings.ql b/python/ql/test/library-tests/frameworks/data/warnings.ql index f0968413235..07c746547dd 100644 --- a/python/ql/test/library-tests/frameworks/data/warnings.ql +++ b/python/ql/test/library-tests/frameworks/data/warnings.ql @@ -2,6 +2,7 @@ import python import semmle.python.frameworks.data.internal.ApiGraphModels as ApiGraphModels import semmle.python.frameworks.data.ModelsAsData +overlay[local] class IsTesting extends ApiGraphModels::TestAllModels { IsTesting() { this = this } } diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected index 33970318461..7434eca6978 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected @@ -1,156 +1,263 @@ +#select +| full_partial_test.py:11:5:11:28 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:15:5:15:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:15:18:15:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:22:5:22:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:22:18:22:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:27:5:27:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:27:18:27:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:47:5:47:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:47:18:47:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:51:5:51:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:55:5:55:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:55:18:55:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:59:5:59:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:59:18:59:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:63:5:63:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:63:18:63:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:72:5:72:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:72:18:72:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:76:5:76:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:89:5:89:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:93:5:93:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:93:18:93:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:97:5:97:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:97:18:97:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:16:5:16:59 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:18:5:18:43 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:20:5:20:35 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:22:5:22:85 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:25:5:25:104 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:15:5:15:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:15:5:15:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:21:5:21:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:21:5:21:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:21:9:21:63 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:37:9:37:60 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:53:9:53:47 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:64:9:64:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:71:9:71:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:74:9:74:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:79:9:79:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:87:9:87:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:90:9:90:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:95:9:95:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:102:9:102:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:107:9:107:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:110:9:110:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:115:9:115:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:122:9:122:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:125:9:125:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:132:9:132:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_requests.py:9:5:9:28 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_requests.py:17:5:17:27 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_requests.py:22:5:22:44 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | edges | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:41:18:41:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:66:18:66:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:83:18:83:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:13:5:13:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:20:5:20:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:25:5:25:7 | ControlFlowNode for url | provenance | | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:7:19:7:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:10:18:10:24 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:11:19:11:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | provenance | | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | full_partial_test.py:15:18:15:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | full_partial_test.py:22:18:22:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | full_partial_test.py:27:18:27:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:45:5:45:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:49:5:49:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:57:5:57:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | full_partial_test.py:47:18:47:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:55:18:55:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | full_partial_test.py:59:18:59:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:63:18:63:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:70:5:70:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:74:5:74:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | full_partial_test.py:72:18:72:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:87:5:87:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:91:5:91:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:95:5:95:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | full_partial_test.py:93:18:93:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | full_partial_test.py:97:18:97:20 | ControlFlowNode for url | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:6:19:6:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:3 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:5 | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | provenance | | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | provenance | AdditionalTaintStep | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | provenance | | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:5:19:5:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | -| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | provenance | | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | provenance | | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:20:18:20:24 | ControlFlowNode for request | provenance | | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | provenance | | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | provenance | | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | provenance | | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +models +| 1 | Sink: azure.keyvault.keys.KeyClient!; Call.Argument[0,vault_url:]; request-forgery | +| 2 | Sink: azure.keyvault.secrets.SecretClient!; Call.Argument[0,vault_url:]; request-forgery | +| 3 | Sink: azure.storage.blob.ContainerClient!; Member[from_container_url].Argument[0,container_url:]; request-forgery | +| 4 | Sink: azure.storage.fileshare.ShareFileClient!; Member[from_file_url].Argument[0,file_url:]; request-forgery | +| 5 | Sink: azure; Member[storage].Member[blob].Member[download_blob_from_url].Argument[0,blob_url:]; request-forgery | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:13:18:13:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:19:18:19:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:23:18:23:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:42:18:42:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:45:18:45:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:48:18:48:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:15:18:15:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:22:18:22:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:27:18:27:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:47:18:47:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:54:18:54:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:55:18:55:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:59:18:59:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:62:18:62:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:65:18:65:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:63:18:63:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:72:18:72:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:79:18:79:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:82:18:82:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:89:18:89:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:93:18:93:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:97:18:97:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:64:32:64:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:71:32:71:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:74:32:74:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:79:32:79:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:87:32:87:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:90:32:90:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:95:32:95:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:102:32:102:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:107:32:107:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:110:32:110:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:115:32:115:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:122:32:122:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:125:32:125:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:132:32:132:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_requests.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:8:18:8:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:9:18:9:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:17:17:17:26 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:22:34:22:43 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths -#select -| full_partial_test.py:10:5:10:28 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:13:5:13:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:19:5:19:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:23:5:23:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:42:5:42:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:45:5:45:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:48:5:48:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:51:5:51:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:54:5:54:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:62:5:62:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:65:5:65:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:76:5:76:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:79:5:79:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:82:5:82:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:17:9:17:63 | ControlFlowNode for SecretClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:19:9:19:47 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:21:9:21:39 | ControlFlowNode for KeyClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:23:9:23:89 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:31:5:36:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:14:5:14:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:14:5:14:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:19:5:19:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:19:5:19:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_requests.py:8:5:8:28 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref index 50d53b5f47e..f0a8d1e6b15 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref @@ -1 +1,4 @@ -Security/CWE-918/FullServerSideRequestForgery.ql +query: Security/CWE-918/FullServerSideRequestForgery.ql +postprocess: +- utils/test/InlineExpectationsTestQuery.ql +- utils/test/PrettyPrintModels.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index bdcac746538..0b875607157 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -1,124 +1,242 @@ +#select +| full_partial_test.py:80:5:80:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:80:18:80:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:105:5:105:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:105:18:105:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:112:5:112:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:112:18:112:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:119:5:119:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:119:18:119:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:126:5:126:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:126:18:126:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:136:5:136:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:136:18:136:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:143:5:143:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:143:18:143:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:15:5:15:54 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:15:28:15:30 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:17:5:17:38 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:17:35:17:37 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:19:5:19:30 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:19:15:19:17 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:21:5:21:80 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:21:54:21:56 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:24:5:24:100 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:25:5:25:31 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:30:5:30:31 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:34:5:34:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:39:5:39:29 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:39:25:39:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:44:5:44:29 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:44:25:44:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:14:9:14:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:14:32:14:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:16:9:16:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:16:32:16:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:19:9:19:63 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:30:9:30:55 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:30:29:30:31 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:32:9:32:55 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:32:29:32:31 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:35:9:35:60 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:46:9:46:42 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:46:39:46:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:48:9:48:42 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:48:39:48:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:51:9:51:47 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:66:9:66:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:66:32:66:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:69:9:69:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:69:32:69:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:76:9:76:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:76:32:76:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:81:9:81:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:81:32:81:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:85:9:85:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:85:32:85:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:92:9:92:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:92:32:92:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:97:9:97:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:97:32:97:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:100:9:100:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:100:32:100:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:105:9:105:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:105:32:105:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:112:9:112:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:112:32:112:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:117:9:117:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:117:32:117:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:120:9:120:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:120:32:120:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:127:9:127:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:127:32:127:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:130:9:130:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:130:32:130:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | edges | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:38:17:38:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:58:17:58:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:72:17:72:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:86:18:86:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:92:18:92:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:98:18:98:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:104:18:104:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:110:18:110:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:119:18:119:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:41:18:41:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:42:17:42:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:66:18:66:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:67:17:67:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:83:18:83:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:84:17:84:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:101:18:101:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:108:18:108:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:115:18:115:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:122:18:122:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:129:18:129:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:139:18:139:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:13:5:13:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:20:5:20:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:25:5:25:7 | ControlFlowNode for url | provenance | | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | full_partial_test.py:25:5:25:7 | ControlFlowNode for url | provenance | | | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:38:17:38:23 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:58:17:58:23 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:67:5:67:7 | ControlFlowNode for url | full_partial_test.py:68:18:68:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:72:17:72:23 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | full_partial_test.py:88:5:88:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:86:18:86:24 | ControlFlowNode for request | full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:88:5:88:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | full_partial_test.py:94:5:94:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:92:18:92:24 | ControlFlowNode for request | full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:94:5:94:7 | ControlFlowNode for url | full_partial_test.py:95:18:95:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | full_partial_test.py:100:5:100:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:98:18:98:24 | ControlFlowNode for request | full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:100:5:100:7 | ControlFlowNode for url | full_partial_test.py:101:18:101:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | full_partial_test.py:106:5:106:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:104:18:104:24 | ControlFlowNode for request | full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:106:5:106:7 | ControlFlowNode for url | full_partial_test.py:107:18:107:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | full_partial_test.py:115:5:115:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:110:18:110:24 | ControlFlowNode for request | full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:115:5:115:7 | ControlFlowNode for url | full_partial_test.py:116:18:116:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | full_partial_test.py:121:5:121:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:119:18:119:24 | ControlFlowNode for request | full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:121:5:121:7 | ControlFlowNode for url | full_partial_test.py:122:18:122:20 | ControlFlowNode for url | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:7:19:7:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:10:18:10:24 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:11:19:11:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:10:5:10:14 | ControlFlowNode for user_input | test_azure_client.py:13:5:13:7 | ControlFlowNode for url | provenance | | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | provenance | | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:16:32:16:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:18:39:18:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:20:19:20:21 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:22:58:22:60 | ControlFlowNode for url | provenance | Sink:MaD:26 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:26:18:26:20 | ControlFlowNode for url | provenance | Sink:MaD:27 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:11:18:11:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | full_partial_test.py:15:18:15:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | full_partial_test.py:22:18:22:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | full_partial_test.py:27:18:27:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:45:5:45:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:49:5:49:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:57:5:57:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:42:17:42:23 | ControlFlowNode for request | full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | full_partial_test.py:47:18:47:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:55:18:55:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | full_partial_test.py:59:18:59:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:63:18:63:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:70:5:70:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:74:5:74:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:67:17:67:23 | ControlFlowNode for request | full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | full_partial_test.py:72:18:72:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:80:18:80:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:87:5:87:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:91:5:91:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:95:5:95:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | full_partial_test.py:95:5:95:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:84:17:84:23 | ControlFlowNode for request | full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | full_partial_test.py:93:18:93:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | full_partial_test.py:97:18:97:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:101:5:101:14 | ControlFlowNode for user_input | full_partial_test.py:103:5:103:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:101:18:101:24 | ControlFlowNode for request | full_partial_test.py:101:5:101:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:103:5:103:7 | ControlFlowNode for url | full_partial_test.py:105:18:105:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:108:5:108:14 | ControlFlowNode for user_input | full_partial_test.py:110:5:110:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:108:18:108:24 | ControlFlowNode for request | full_partial_test.py:108:5:108:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:110:5:110:7 | ControlFlowNode for url | full_partial_test.py:112:18:112:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:115:5:115:14 | ControlFlowNode for user_input | full_partial_test.py:117:5:117:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:115:18:115:24 | ControlFlowNode for request | full_partial_test.py:115:5:115:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:117:5:117:7 | ControlFlowNode for url | full_partial_test.py:119:18:119:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:122:5:122:14 | ControlFlowNode for user_input | full_partial_test.py:124:5:124:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:122:18:122:24 | ControlFlowNode for request | full_partial_test.py:122:5:122:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:124:5:124:7 | ControlFlowNode for url | full_partial_test.py:126:18:126:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:129:5:129:14 | ControlFlowNode for user_input | full_partial_test.py:134:5:134:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:129:18:129:24 | ControlFlowNode for request | full_partial_test.py:129:5:129:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:134:5:134:7 | ControlFlowNode for url | full_partial_test.py:136:18:136:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:139:5:139:14 | ControlFlowNode for user_input | full_partial_test.py:141:5:141:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:139:18:139:24 | ControlFlowNode for request | full_partial_test.py:139:5:139:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:141:5:141:7 | ControlFlowNode for url | full_partial_test.py:143:18:143:20 | ControlFlowNode for url | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:6:19:6:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:9:5:9:14 | ControlFlowNode for user_input | test_azure_client.py:12:5:12:7 | ControlFlowNode for url | provenance | | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:9:5:9:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:15:28:15:30 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:17:35:17:37 | ControlFlowNode for url | provenance | Sink:MaD:4 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:19:15:19:17 | ControlFlowNode for url | provenance | Sink:MaD:1 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:21:54:21:56 | ControlFlowNode for url | provenance | Sink:MaD:3 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | provenance | Sink:MaD:5 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:3 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:5 | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:11:18:11:24 | ControlFlowNode for request | provenance | | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | provenance | | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | provenance | AdditionalTaintStep | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | provenance | | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:31:5:31:8 | ControlFlowNode for path | provenance | | -| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:35:5:35:8 | ControlFlowNode for path | provenance | | +| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:36:5:36:8 | ControlFlowNode for path | provenance | | +| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:41:5:41:8 | ControlFlowNode for path | provenance | | | test_http_client.py:11:18:11:24 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_http_client.py:31:5:31:8 | ControlFlowNode for path | test_http_client.py:33:25:33:28 | ControlFlowNode for path | provenance | | -| test_http_client.py:35:5:35:8 | ControlFlowNode for path | test_http_client.py:37:25:37:28 | ControlFlowNode for path | provenance | | +| test_http_client.py:36:5:36:8 | ControlFlowNode for path | test_http_client.py:39:25:39:28 | ControlFlowNode for path | provenance | | +| test_http_client.py:41:5:41:8 | ControlFlowNode for path | test_http_client.py:44:25:44:28 | ControlFlowNode for path | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:5:19:5:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:8:5:8:14 | ControlFlowNode for user_input | test_path_validation.py:10:5:10:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:8:5:8:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:14:32:14:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:16:32:16:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | test_path_validation.py:26:5:26:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:30:29:30:31 | ControlFlowNode for url | provenance | Sink:MaD:1 | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:32:29:32:31 | ControlFlowNode for url | provenance | Sink:MaD:1 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | test_path_validation.py:42:5:42:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:46:39:46:41 | ControlFlowNode for url | provenance | Sink:MaD:4 | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:48:39:48:41 | ControlFlowNode for url | provenance | Sink:MaD:4 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:66:32:66:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:69:32:69:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:76:32:76:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:81:32:81:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:85:32:85:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:92:32:92:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:97:32:97:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:100:32:100:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:105:32:105:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:112:32:112:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:117:32:117:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:120:32:120:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:127:32:127:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:130:32:130:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | -| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | provenance | | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | provenance | | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:20:18:20:24 | ControlFlowNode for request | provenance | | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | provenance | | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | provenance | | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | provenance | | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +models +| 1 | Sink: azure.keyvault.keys.KeyClient!; Call.Argument[0,vault_url:]; request-forgery | +| 2 | Sink: azure.keyvault.secrets.SecretClient!; Call.Argument[0,vault_url:]; request-forgery | +| 3 | Sink: azure.storage.blob.ContainerClient!; Member[from_container_url].Argument[0,container_url:]; request-forgery | +| 4 | Sink: azure.storage.fileshare.ShareFileClient!; Member[from_file_url].Argument[0,file_url:]; request-forgery | +| 5 | Sink: azure; Member[storage].Member[blob].Member[download_blob_from_url].Argument[0,blob_url:]; request-forgery | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | @@ -126,91 +244,91 @@ nodes | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:13:18:13:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:19:18:19:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:23:18:23:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | -| full_partial_test.py:38:17:38:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:42:18:42:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:45:18:45:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:48:18:48:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:15:18:15:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:22:18:22:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:27:18:27:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | +| full_partial_test.py:42:17:42:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:47:18:47:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:54:18:54:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | -| full_partial_test.py:58:17:58:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:55:18:55:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:59:18:59:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:62:18:62:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:65:18:65:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:67:5:67:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:68:18:68:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | -| full_partial_test.py:72:17:72:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:63:18:63:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | +| full_partial_test.py:67:17:67:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:72:18:72:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:79:18:79:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:82:18:82:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:86:18:86:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:88:5:88:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:80:18:80:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | +| full_partial_test.py:84:17:84:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:92:18:92:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:94:5:94:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:95:18:95:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:98:18:98:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:100:5:100:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:101:18:101:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:104:18:104:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:106:5:106:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:107:18:107:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:110:18:110:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:115:5:115:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:116:18:116:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:119:18:119:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:121:5:121:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:122:18:122:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:10:5:10:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:16:32:16:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:18:39:18:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:20:19:20:21 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:22:58:22:60 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:26:18:26:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:93:18:93:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:97:18:97:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:101:5:101:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:101:18:101:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:103:5:103:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:105:18:105:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:108:5:108:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:108:18:108:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:110:5:110:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:112:18:112:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:115:5:115:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:115:18:115:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:117:5:117:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:119:18:119:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:122:5:122:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:122:18:122:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:124:5:124:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:126:18:126:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:129:5:129:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:129:18:129:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:134:5:134:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:136:18:136:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:139:5:139:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:139:18:139:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:141:5:141:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:143:18:143:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:9:5:9:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:15:28:15:30 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:17:35:17:37 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:19:15:19:17 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:21:54:21:56 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:24:37:24:39 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | @@ -218,36 +336,87 @@ nodes | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_http_client.py:11:18:11:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:31:5:31:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | -| test_http_client.py:33:25:33:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | -| test_http_client.py:35:5:35:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | -| test_http_client.py:37:25:37:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:36:5:36:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:39:25:39:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:41:5:41:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:44:25:44:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:8:5:8:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:14:32:14:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:16:32:16:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:30:29:30:31 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:32:29:32:31 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:46:39:46:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:48:39:48:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:64:32:64:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:66:32:66:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:69:32:69:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:71:32:71:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:74:32:74:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:76:32:76:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:79:32:79:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:81:32:81:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:85:32:85:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:87:32:87:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:90:32:90:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:92:32:92:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:95:32:95:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:97:32:97:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:100:32:100:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:102:32:102:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:105:32:105:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:107:32:107:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:110:32:110:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:112:32:112:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:115:32:115:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:117:32:117:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:120:32:120:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:122:32:122:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:125:32:125:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:127:32:127:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:130:32:130:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:132:32:132:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_requests.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:8:18:8:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:9:18:9:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:17:17:17:26 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:22:34:22:43 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths -#select -| full_partial_test.py:68:5:68:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:68:18:68:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:89:5:89:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:95:5:95:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:95:18:95:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:101:5:101:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:101:18:101:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:107:5:107:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:107:18:107:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:116:5:116:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:116:18:116:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:122:5:122:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:122:18:122:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:16:9:16:58 | ControlFlowNode for SecretClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:16:32:16:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:18:9:18:42 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:18:39:18:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:20:9:20:34 | ControlFlowNode for KeyClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:20:19:20:21 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:22:9:22:84 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:22:58:22:60 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:25:5:30:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:26:18:26:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:22:5:22:31 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:26:5:26:31 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:29:5:29:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:33:5:33:29 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:33:25:33:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:37:5:37:29 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:37:25:37:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref index 88de9285e5e..1161c990e22 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref @@ -1 +1,4 @@ -Security/CWE-918/PartialServerSideRequestForgery.ql +query: Security/CWE-918/PartialServerSideRequestForgery.ql +postprocess: +- utils/test/InlineExpectationsTestQuery.ql +- utils/test/PrettyPrintModels.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py index 95ff9d64944..7b7d067b611 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py @@ -1,4 +1,4 @@ -from flask import request +from flask import request # $ Source import requests import re @@ -7,20 +7,24 @@ def full_ssrf(): user_input = request.args['untrusted_input'] query_val = request.args['query_val'] - requests.get(user_input) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(user_input) # $ Alert[py/full-ssrf] url = "https://" + user_input - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] # although the path `/foo` is added here, this can be circumvented such that the # final URL is `https://evil.com/#/foo" -- since the fragment (#) is not sent to the # server. url = "https://" + user_input + "/foo" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] # this might seem like a dummy test, but it serves to check how our sanitizers work. url = "https://" + user_input + "/foo?key=" + query_val - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] # taint-steps are added as `fromNode -> toNode`, but when adding a sanitizer it's # currently only possible to so on either `fromNode` or `toNode` (either all edges in @@ -39,19 +43,24 @@ def full_ssrf_format(): # using .format url = "https://{}".format(user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{}/foo".format(user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{}/foo?key={}".format(user_input, query_val) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{x}".format(x=user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{1}".format(0, user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] def full_ssrf_percent_format(): user_input = request.args['untrusted_input'] @@ -59,13 +68,16 @@ def full_ssrf_percent_format(): # using %-formatting url = "https://%s" % user_input - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://%s/foo" % user_input - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://%s/foo/key=%s" % (user_input, query_val) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full and partial control + requests.get(url) # $ Alert[py/partial-ssrf] $ MISSING: Alert[py/full-ssrf] def full_ssrf_f_strings(): user_input = request.args['untrusted_input'] @@ -73,38 +85,45 @@ def full_ssrf_f_strings(): # using f-strings url = f"https://{user_input}" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = f"https://{user_input}/foo" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = f"https://{user_input}/foo?key={query_val}" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] def partial_ssrf_1(): user_input = request.args['untrusted_input'] url = "https://example.com/foo?" + user_input - requests.get(url) # NOT OK -- user controls query parameters + # NOT OK -- user controls query parameters + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_2(): user_input = request.args['untrusted_input'] url = "https://example.com/" + user_input - requests.get(url) # NOT OK -- user controls path + # NOT OK -- user controls path + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_3(): user_input = request.args['untrusted_input'] url = "https://example.com/" + user_input - requests.get(url) # NOT OK -- user controls path + # NOT OK -- user controls path + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_4(): user_input = request.args['untrusted_input'] url = "https://example.com/foo#{}".format(user_input) - requests.get(url) # NOT OK -- user contollred fragment + # NOT OK -- user controlled fragment + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_5(): user_input = request.args['untrusted_input'] @@ -113,20 +132,22 @@ def partial_ssrf_5(): # controlled url = "https://example.com/foo#%s" % user_input - requests.get(url) # NOT OK -- user contollred fragment + # NOT OK -- user controlled fragment + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_6(): user_input = request.args['untrusted_input'] url = f"https://example.com/foo#{user_input}" - requests.get(url) # NOT OK -- user only controlled fragment + # NOT OK -- user only controlled fragment + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_7(): user_input = request.args['untrusted_input'] if user_input.isalnum(): url = f"https://example.com/foo#{user_input}" - requests.get(url) # OK - user input can only contain alphanumerical characters + requests.get(url) # OK - user input can only contain alphanumerical characters if user_input.isalpha(): url = f"https://example.com/foo#{user_input}" @@ -154,7 +175,8 @@ def partial_ssrf_7(): if re.fullmatch(r'.*[a-zA-Z0-9]+.*', user_input): url = f"https://example.com/foo#{user_input}" - requests.get(url) # NOT OK, but NOT FOUND - user input can contain arbitrary characters + # NOT OK, but NOT FOUND - user input can contain arbitrary characters + requests.get(url) # $ MISSING: Alert[py/partial-ssrf] if re.match(r'^[a-zA-Z0-9]+$', user_input): @@ -163,7 +185,8 @@ def partial_ssrf_7(): if re.match(r'[a-zA-Z0-9]+', user_input): url = f"https://example.com/foo#{user_input}" - requests.get(url) # NOT OK, but NOT FOUND - user input can contain arbitrary character as a suffix. + # NOT OK, but NOT FOUND - user input can contain arbitrary character as a suffix. + requests.get(url) # $ MISSING: Alert[py/partial-ssrf] reg = re.compile(r'^[a-zA-Z0-9]+$') diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py index d8de2092a2e..ac4ff4d365e 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py @@ -3,8 +3,7 @@ from azure.storage.fileshare import ShareFileClient from azure.keyvault.keys import KeyClient from azure.storage.blob import ContainerClient from azure.storage.blob import download_blob_from_url - -from flask import request +from flask import request # $ Source def azure_sdk_test(credential, output_path): user_input = request.args['untrusted_input'] @@ -13,24 +12,14 @@ def azure_sdk_test(credential, output_path): url = f"https://example.com/foo#{user_input}" full_url = f"https://{user_input2}" # Testing Azure sink - c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment - c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control - c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment - c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control - c = KeyClient(url, credential)# NOT OK -- user only controlled fragment - c = KeyClient(full_url, credential) # NOT OK -- user has full control - c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment - c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] + KeyClient(url, credential) # $ Alert[py/partial-ssrf] + KeyClient(full_url, credential) # $ Alert[py/full-ssrf] + ContainerClient.from_container_url(container_url=url, credential=credential) # $ Alert[py/partial-ssrf] + ContainerClient.from_container_url(container_url=full_url, credential=credential) # $ Alert[py/full-ssrf] - download_blob_from_url( - blob_url=url, # NOT OK -- user only controlled fragment - output=output_path, - credential=credential, - overwrite=True - ) - download_blob_from_url( - blob_url=full_url, # NOT OK -- user has full control - output=output_path, - credential=credential, - overwrite=True - ) + download_blob_from_url(blob_url=url, output=output_path, credential=credential, overwrite=True ) # $ Alert[py/partial-ssrf] + download_blob_from_url(blob_url=full_url, output=output_path, credential=credential, overwrite=True) # $ Alert[py/full-ssrf] diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py index c833907d843..da812eb6c54 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py @@ -1,5 +1,5 @@ -from flask import Flask, request - +from flask import request # $ Source +from flask import Flask from http.client import HTTPConnection app = Flask(__name__) @@ -10,28 +10,35 @@ def ssrf_test(): unsafe_path = request.args["path"] user_input = request.args['untrusted_input'] - conn = HTTPConnection(unsafe_host) - conn.request("GET", unsafe_path) # NOT OK -- user has full control + conn = HTTPConnection(unsafe_host) # $ Sink[py/full-ssrf] + # NOT OK -- user has full control + conn.request("GET", unsafe_path) # $ Alert[py/full-ssrf] - # Full SSRF variant, where there is ALSO made a request with fixed URL on the same + # Full SSRF variant, where there is also a request with fixed URL on the same # connection later on. This should not change anything on the overall SSRF alerts. - conn = HTTPConnection(unsafe_host) - conn.request("GET", unsafe_path) # NOT OK -- user has full control + conn = HTTPConnection(unsafe_host) # $ Sink + # NOT OK -- user has full control + conn.request("GET", unsafe_path) # $ Alert[py/full-ssrf] # partial SSRF on SAME connection - conn.request("GET", "/foo") # NOT OK -- user has control of host + # NOT OK -- user has control of host + conn.request("GET", "/foo") # $ Alert[py/partial-ssrf] # the rest are partial SSRF - conn = HTTPConnection(unsafe_host) - conn.request("GET", "/foo") # NOT OK -- user controlled domain + conn = HTTPConnection(unsafe_host) # $ Sink[py/partial-ssrf] + # NOT OK -- user controlled domain + conn.request("GET", "/foo") # $ Alert[py/partial-ssrf] conn = HTTPConnection("example.com") - conn.request("GET", unsafe_path) # NOT OK -- user controlled path + # NOT OK -- user controlled path + conn.request("GET", unsafe_path) # $ Alert[py/partial-ssrf] path = "foo?" + user_input conn = HTTPConnection("example.com") - conn.request("GET", path) # NOT OK -- user controlled query parameters + # NOT OK -- user controlled query parameters + conn.request("GET", path) # $ Alert[py/partial-ssrf] path = "foo#" + user_input conn = HTTPConnection("example.com") - conn.request("GET", path) # NOT OK -- user controlled fragment + # NOT OK -- user controlled fragment + conn.request("GET", path) # $ Alert[py/partial-ssrf] \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py new file mode 100644 index 00000000000..ce5a6d33833 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py @@ -0,0 +1,132 @@ +from azure.keyvault.secrets import SecretClient +from azure.storage.fileshare import ShareFileClient +from azure.keyvault.keys import KeyClient +from AntiSSRF import URIValidator +from flask import request # $ Source + +def urivalidator_path_in_domain_validation(credential, trusted_domain): + user_input = request.args['untrusted_input'] + user_input2 = request.args['untrusted_input2'] + url = f"https://example.com/foo#{user_input}" + full_url = f"https://{user_input2}" + + if URIValidator.in_domain(url, trusted_domain): + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_domain(full_url, trusted_domain): + SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + +def urivalidator_path_in_azure_keyvault_domain_validation(credential): + user_input = request.args['untrusted_input'] + user_input2 = request.args['untrusted_input2'] + url = f"https://example.com/foo#{user_input}" + full_url = f"https://{user_input2}" + + if URIValidator.in_azure_keyvault_domain(url): + KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_azure_keyvault_domain(full_url): + KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] + else: + KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + +def urivalidator_path_in_azure_storage_domain_validation(credential): + user_input = request.args['untrusted_input'] + user_input2 = request.args['untrusted_input2'] + url = f"https://example.com/foo#{user_input}" + full_url = f"https://{user_input2}" + + if URIValidator.in_azure_storage_domain(url): + ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + else: + ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + + if URIValidator.in_azure_storage_domain(full_url): + ShareFileClient.from_file_url(full_url) # $ Alert[py/partial-ssrf] + else: + ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] + + +def complex_urivalidator_checks(credential, trusted_domain): + user_input = request.args['untrusted_input'] + # Focus on in_domain only here for simplicity + # It is assumed that the logic underlying path checking would apply + # similarly to other validator methods. + url = f"https://{user_input}" + + if not URIValidator.in_domain(url, trusted_domain): + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com": + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if not (URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com"): + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if not not not URIValidator.in_domain(url, trusted_domain): + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + + if URIValidator.in_domain(url, trusted_domain) == True: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if URIValidator.in_domain(url, trusted_domain) == False: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_domain(url, trusted_domain) != True: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_domain(url, trusted_domain) != False: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if URIValidator.in_domain(url, trusted_domain) is True: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if URIValidator.in_domain(url, trusted_domain) is False: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_domain(url, trusted_domain) is not True: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_domain(url, trusted_domain) is not False: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if not URIValidator.in_domain(url, trusted_domain) is True: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if not URIValidator.in_domain(url, trusted_domain) is False: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py index 443f5c3b81f..6489096c969 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py @@ -1,11 +1,51 @@ -from flask import request +from flask import request # $ Source[py/full-ssrf] +from AntiSSRF import AntiSSRFPolicy import requests -def ssrf_test(): +def ssrf_test1(): user_input = request.args['untrusted_input'] - - requests.get(user_input) # NOT OK -- user has full control - + # NOT OK -- user has full control + requests.get(user_input) # $ Alert[py/full-ssrf] # since `requests`` always uses complete URLs, it's not interesting to test more of # the framework directly. See `full_partial_test.py` for different ways to do SSRF. + +def ssrf_test2(): + user_input = request.args['untrusted_input'] + # NOT OK -- user has full control + session = requests.Session() + session.get(user_input) # $ Alert[py/full-ssrf] + +def ssrf_test3(): + user_input = request.args['untrusted_input'] + # NOT OK -- user has full control + requests.request('', user_input) # $ Alert[py/full-ssrf] + +def ssrf_test_with_policy1(): + user_input = request.args['untrusted_input'] + policy = AntiSSRFPolicy() + session = policy.get_antissrf_session() + # OK -- dangerous user input is filtered by AntiSSRFPolicy + session.get(user_input) + +def ssrf_test_with_policy2(): + user_input = request.args['untrusted_input'] + policy = AntiSSRFPolicy() + session = policy.get_antissrf_session() + # overwriting the HTTPAdapter to default requests adapter + # this makes the session unsafe again + session.mount("http://", requests.adapters.HTTPAdapter()) + # NOT OK -- dangerous user input is no longer filtered by AntiSSRFPolicy + # TODO: not currently a scenario we detect. + session.get(user_input) # $ MISSING: Alert[py/full-ssrf] + +def ssrf_test_with_policy3(adapter): + user_input = request.args['untrusted_input'] + policy = AntiSSRFPolicy() + session = policy.get_antissrf_session() + # overwriting the HTTPAdapter to a custom requests adapter + # this could make the session unsafe again + session.mount("http://", adapter) + # NOT OK -- dangerous user input is no longer filtered by AntiSSRFPolicy + # TODO: not currently a scenario we detect. + session.get(user_input) # $ MISSING: Alert[py/full-ssrf] \ No newline at end of file diff --git a/ruby/ql/lib/change-notes/2026-02-17-flow-through-shellwords-escape-shellescape.md b/ruby/ql/lib/change-notes/2026-02-17-flow-through-shellwords-escape-shellescape.md new file mode 100644 index 00000000000..43042f553f6 --- /dev/null +++ b/ruby/ql/lib/change-notes/2026-02-17-flow-through-shellwords-escape-shellescape.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* We now track taint flow through `Shellwords.escape` and `Shellwords.shellescape` for all queries except command injection, for which they are sanitizers. diff --git a/ruby/ql/lib/codeql/ruby/Concepts.qll b/ruby/ql/lib/codeql/ruby/Concepts.qll index 2ddcb433e1b..642a2fd0b1b 100644 --- a/ruby/ql/lib/codeql/ruby/Concepts.qll +++ b/ruby/ql/lib/codeql/ruby/Concepts.qll @@ -9,6 +9,7 @@ private import codeql.ruby.CFG private import codeql.ruby.DataFlow private import codeql.ruby.dataflow.internal.DataFlowImplSpecific private import codeql.ruby.Frameworks +private import codeql.ruby.frameworks.data.internal.ApiGraphModels private import codeql.ruby.dataflow.RemoteFlowSources private import codeql.ruby.ApiGraphs private import codeql.ruby.Regexp as RE @@ -95,6 +96,10 @@ module SqlSanitization { abstract class Range extends DataFlow::Node { } } +private class ExternalSqlInjectionSanitizer extends SqlSanitization::Range { + ExternalSqlInjectionSanitizer() { ModelOutput::barrierNode(this, "sql-injection") } +} + /** * A data-flow node that executes a regular expression. * diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml new file mode 100644 index 00000000000..1b6c8c754f5 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml @@ -0,0 +1,11 @@ +extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - ['Mysql2::Client!', 'Method[escape]', 'Argument[0]', 'ReturnValue', 'taint'] + - addsTo: + pack: codeql/ruby-all + extensible: barrierModel + data: + - ['Mysql2::Client!', 'Method[escape].ReturnValue', 'sql-injection'] diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll index baca5bba95f..67cf762f985 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll @@ -48,26 +48,4 @@ module Mysql2 { override DataFlow::Node getSql() { result = query } } - - /** - * A call to `Mysql2::Client.escape`, considered as a sanitizer for SQL statements. - */ - private class Mysql2EscapeSanitization extends SqlSanitization::Range { - Mysql2EscapeSanitization() { - this = API::getTopLevelMember("Mysql2").getMember("Client").getAMethodCall("escape") - } - } - - /** - * Flow summary for `Mysql2::Client.escape()`. - */ - private class EscapeSummary extends SummarizedCallable::Range { - EscapeSummary() { this = "Mysql2::Client.escape()" } - - override MethodCall getACall() { result = any(Mysql2EscapeSanitization c).asExpr().getExpr() } - - override predicate propagatesFlow(string input, string output, boolean preservesValue) { - input = "Argument[0]" and output = "ReturnValue" and preservesValue = false - } - } } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml new file mode 100644 index 00000000000..13b7b5b4871 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml @@ -0,0 +1,11 @@ +extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - ['SQLite3::Database!', 'Method[quote]', 'Argument[0]', 'ReturnValue', 'taint'] + - addsTo: + pack: codeql/ruby-all + extensible: barrierModel + data: + - ['SQLite3::Database!', 'Method[quote].ReturnValue', 'sql-injection'] diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll index f3e7626f733..1cf167baa72 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll @@ -76,26 +76,4 @@ module Sqlite3 { override DataFlow::Node getSql() { result = this.getArgument(0) } } - - /** - * A call to `SQLite3::Database.quote`, considered as a sanitizer for SQL statements. - */ - private class SQLite3QuoteSanitization extends SqlSanitization { - SQLite3QuoteSanitization() { - this = API::getTopLevelMember("SQLite3").getMember("Database").getAMethodCall("quote") - } - } - - /** - * Flow summary for `SQLite3::Database.quote()`. - */ - private class QuoteSummary extends SummarizedCallable::Range { - QuoteSummary() { this = "SQLite3::Database.quote()" } - - override MethodCall getACall() { result = any(SQLite3QuoteSanitization c).asExpr().getExpr() } - - override predicate propagatesFlow(string input, string output, boolean preservesValue) { - input = "Argument[0]" and output = "ReturnValue" and preservesValue = false - } - } } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml new file mode 100644 index 00000000000..283b1daa8fa --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml @@ -0,0 +1,12 @@ +extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - ['Shellwords!', 'Method[escape,shellescape]', 'Argument[0]', 'ReturnValue', 'taint'] + + - addsTo: + pack: codeql/ruby-all + extensible: barrierModel + data: + - ['Shellwords!', 'Method[escape,shellescape].ReturnValue', 'command-injection'] diff --git a/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll index ca79a079a10..0e84aa710b5 100644 --- a/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll @@ -118,4 +118,8 @@ module CodeInjection { private class ExternalCodeInjectionSink extends Sink { ExternalCodeInjectionSink() { ModelOutput::sinkNode(this, "code-injection") } } + + private class ExternalCodeInjectionSanitizer extends Sanitizer { + ExternalCodeInjectionSanitizer() { ModelOutput::barrierNode(this, "code-injection") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll index f36b72ae6b7..479907d2052 100644 --- a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll @@ -43,13 +43,11 @@ module CommandInjection { } /** - * A call to `Shellwords.escape` or `Shellwords.shellescape` sanitizes its input. + * A call to `String#shellescape` sanitizes its input. */ class ShellwordsEscapeAsSanitizer extends Sanitizer { ShellwordsEscapeAsSanitizer() { - this = API::getTopLevelMember("Shellwords").getAMethodCall(["escape", "shellescape"]) - or - // The method is also added as `String#shellescape`. + // The `Shellwords.shellescape` method is also added as `String#shellescape`. this.(DataFlow::CallNode).getMethodName() = "shellescape" } } @@ -57,4 +55,8 @@ module CommandInjection { private class ExternalCommandInjectionSink extends Sink { ExternalCommandInjectionSink() { ModelOutput::sinkNode(this, "command-injection") } } + + private class ExternalCommandInjectionSanitizer extends Sanitizer { + ExternalCommandInjectionSanitizer() { ModelOutput::barrierNode(this, "command-injection") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll b/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll index 8111932c7df..a5230a8b845 100644 --- a/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll @@ -67,6 +67,10 @@ class HtmlEscapingAsSanitizer extends Sanitizer { HtmlEscapingAsSanitizer() { this = any(HtmlEscaping esc).getOutput() } } +private class ExternalLogInjectionSanitizer extends Sanitizer { + ExternalLogInjectionSanitizer() { ModelOutput::barrierNode(this, "log-injection") } +} + private module LogInjectionConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source } diff --git a/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll index 8a8b916f627..beab1af5dc4 100644 --- a/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll @@ -57,4 +57,8 @@ module PathInjection { private class ExternalPathInjectionSink extends Sink { ExternalPathInjectionSink() { ModelOutput::sinkNode(this, "path-injection") } } + + private class ExternalPathInjectionSanitizer extends Sanitizer { + ExternalPathInjectionSanitizer() { ModelOutput::barrierNode(this, "path-injection") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll index 509900a12e1..e64abe413b8 100644 --- a/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll @@ -46,4 +46,8 @@ module ServerSideRequestForgery { private class ExternalRequestForgerySink extends Sink { ExternalRequestForgerySink() { ModelOutput::sinkNode(this, "request-forgery") } } + + private class ExternalRequestForgerySanitizer extends Sanitizer { + ExternalRequestForgerySanitizer() { ModelOutput::barrierNode(this, "request-forgery") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll index 4e02b3181e3..0cef83070a6 100644 --- a/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll @@ -125,6 +125,10 @@ module UrlRedirect { */ class StringInterpolationAsSanitizer extends PrefixedStringInterpolation, Sanitizer { } + private class ExternalUrlRedirectSanitizer extends Sanitizer { + ExternalUrlRedirectSanitizer() { ModelOutput::barrierNode(this, "url-redirection") } + } + /** * These methods return a new `ActionController::Parameters` or a `Hash` containing a subset of * the original values. This may still contain user input, so the results are tainted. diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index a9e713a73e7..1d14ca0e3d2 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.1.10 +version: 5.1.11-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 20706f6f0ac..b027389bc63 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.5.7 +version: 1.5.8-dev groups: - ruby - queries diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index 4fa46d163b4..353edd203f9 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -2921,13 +2921,11 @@ | file://:0:0:0:0 | [summary param] position 0 in File.realdirpath | file://:0:0:0:0 | [summary] to write: ReturnValue in File.realdirpath | | file://:0:0:0:0 | [summary param] position 0 in File.realpath | file://:0:0:0:0 | [summary] to write: ReturnValue in File.realpath | | file://:0:0:0:0 | [summary param] position 0 in Hash[] | file://:0:0:0:0 | [summary] read: Argument[0].Element[any] in Hash[] | -| file://:0:0:0:0 | [summary param] position 0 in Mysql2::Client.escape() | file://:0:0:0:0 | [summary] to write: ReturnValue in Mysql2::Client.escape() | | file://:0:0:0:0 | [summary param] position 0 in Mysql2::Client.new() | file://:0:0:0:0 | [summary] to write: ReturnValue in Mysql2::Client.new() | | file://:0:0:0:0 | [summary param] position 0 in Net::LDAP.new | file://:0:0:0:0 | [summary] to write: ReturnValue in Net::LDAP.new | | file://:0:0:0:0 | [summary param] position 0 in Net::LDAP::Filter | file://:0:0:0:0 | [summary] to write: ReturnValue in Net::LDAP::Filter | | file://:0:0:0:0 | [summary param] position 0 in PG.new() | file://:0:0:0:0 | [summary] to write: ReturnValue in PG.new() | | file://:0:0:0:0 | [summary param] position 0 in Rack::Utils.parse_query | file://:0:0:0:0 | [summary] to write: ReturnValue in Rack::Utils.parse_query | -| file://:0:0:0:0 | [summary param] position 0 in SQLite3::Database.quote() | file://:0:0:0:0 | [summary] to write: ReturnValue in SQLite3::Database.quote() | | file://:0:0:0:0 | [summary param] position 0 in Sequel.connect | file://:0:0:0:0 | [summary] to write: ReturnValue in Sequel.connect | | file://:0:0:0:0 | [summary param] position 0 in String.try_convert | file://:0:0:0:0 | [summary] to write: ReturnValue in String.try_convert | | file://:0:0:0:0 | [summary param] position 0 in \| | file://:0:0:0:0 | [summary] read: Argument[0].Element[any] in \| | diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb b/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb index b9b3b5a7b57..1294f161475 100644 --- a/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb +++ b/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb @@ -1,6 +1,6 @@ class UsersController < ActionController::Base def mysql2_handler(event:, context:) - name = params[:user_name] + name = params[:user_name] # $ Source[rb/sql-injection] conn = Mysql2::Client.new( host: "127.0.0.1", @@ -10,7 +10,7 @@ class UsersController < ActionController::Base results1 = conn.query("SELECT * FROM users") # BAD: SQL statement constructed from user input - results2 = conn.query("SELECT * FROM users WHERE username='#{name}'") + results2 = conn.query("SELECT * FROM users WHERE username='#{name}'") # $ Alert[rb/sql-injection] # GOOD: user input is escaped escaped = Mysql2::Client.escape(name) @@ -21,10 +21,10 @@ class UsersController < ActionController::Base results4 = statement1.execute(1, name, :as => :array) # BAD: SQL statement constructed from user input - statement2 = conn.prepare("SELECT * FROM users WHERE username='#{name}' AND password = ?") + statement2 = conn.prepare("SELECT * FROM users WHERE username='#{name}' AND password = ?") # $ Alert[rb/sql-injection] results4 = statement2.execute("password", :as => :array) # NOT EXECUTED statement3 = conn.prepare("SELECT * FROM users WHERE username = ?") end -end \ No newline at end of file +end diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected new file mode 100644 index 00000000000..f29b1738394 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected @@ -0,0 +1,15 @@ +#select +| Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | +| Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | +edges +| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | +| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | +| Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:3:12:3:29 | ...[...] | provenance | | +| Mysql2.rb:3:12:3:29 | ...[...] | Mysql2.rb:3:5:3:8 | name | provenance | | +nodes +| Mysql2.rb:3:5:3:8 | name | semmle.label | name | +| Mysql2.rb:3:12:3:17 | call to params | semmle.label | call to params | +| Mysql2.rb:3:12:3:29 | ...[...] | semmle.label | ...[...] | +| Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | +| Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | +subpaths diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.qlref b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.qlref new file mode 100644 index 00000000000..ff400a718e2 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.qlref @@ -0,0 +1,4 @@ +query: queries/security/cwe-089/SqlInjection.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected new file mode 100644 index 00000000000..e094f9603c8 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected @@ -0,0 +1,12 @@ +#select +| sqlite3.rb:29:16:29:67 | "select * from table where cat..." | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | This SQL query depends on a $@. | sqlite3.rb:25:16:25:21 | call to params | user-provided value | +edges +| sqlite3.rb:25:5:25:12 | category | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | provenance | AdditionalTaintStep | +| sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:25:16:25:32 | ...[...] | provenance | | +| sqlite3.rb:25:16:25:32 | ...[...] | sqlite3.rb:25:5:25:12 | category | provenance | | +nodes +| sqlite3.rb:25:5:25:12 | category | semmle.label | category | +| sqlite3.rb:25:16:25:21 | call to params | semmle.label | call to params | +| sqlite3.rb:25:16:25:32 | ...[...] | semmle.label | ...[...] | +| sqlite3.rb:29:16:29:67 | "select * from table where cat..." | semmle.label | "select * from table where cat..." | +subpaths diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.qlref b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.qlref new file mode 100644 index 00000000000..ff400a718e2 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.qlref @@ -0,0 +1,4 @@ +query: queries/security/cwe-089/SqlInjection.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected b/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected index 9e7263aa3bb..b3573ed217e 100644 --- a/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected @@ -2,9 +2,11 @@ sqlite3SqlConstruction | sqlite3.rb:5:1:5:17 | call to execute | sqlite3.rb:5:12:5:17 | <<-SQL | | sqlite3.rb:12:8:12:41 | call to prepare | sqlite3.rb:12:19:12:41 | "select * from numbers" | | sqlite3.rb:17:3:19:5 | call to execute | sqlite3.rb:17:15:17:35 | "select * from table" | -| sqlite3.rb:29:7:29:40 | call to execute | sqlite3.rb:29:19:29:39 | "select * from table" | +| sqlite3.rb:29:5:29:68 | call to execute | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | +| sqlite3.rb:33:5:33:78 | call to execute | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | sqlite3SqlExecution | sqlite3.rb:5:1:5:17 | call to execute | sqlite3.rb:5:12:5:17 | <<-SQL | | sqlite3.rb:14:1:14:12 | call to execute | sqlite3.rb:12:19:12:41 | "select * from numbers" | | sqlite3.rb:17:3:19:5 | call to execute | sqlite3.rb:17:15:17:35 | "select * from table" | -| sqlite3.rb:29:7:29:40 | call to execute | sqlite3.rb:29:19:29:39 | "select * from table" | +| sqlite3.rb:29:5:29:68 | call to execute | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | +| sqlite3.rb:33:5:33:78 | call to execute | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb b/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb index 465bb708598..36b146abe8d 100644 --- a/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb @@ -20,12 +20,16 @@ SQLite3::Database.new( "data.db" ) do |db| end -class MyDatabaseWrapper - def initialize(filename) - @db = SQLite3::Database.new(filename, results_as_hash: true) - end +class SqliteController < ActionController::Base + def sqlite3_handler + category = params[:category] # $ Source[rb/sql-injection] + db = SQLite3::Database.new "test.db" - def select_rows(category) - @db.execute("select * from table") - end + # BAD: SQL injection vulnerability + db.execute("select * from table where category = '#{category}'") # $ Alert[rb/sql-injection] + + # GOOD: Sanitized by SQLite3::Database.quote + sanitized_category = SQLite3::Database.quote(category) + db.execute("select * from table where category = '#{sanitized_category}'") + end end diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected index f598d37e32a..07febf8cda6 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected @@ -1,3 +1,46 @@ +#select +| CodeInjection.rb:8:10:8:13 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:8:10:8:13 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | This code execution depends on a $@. | CodeInjection.rb:11:10:11:15 | call to params | user-provided value | +| CodeInjection.rb:20:20:20:23 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:20:20:20:23 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:23:21:23:24 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:23:21:23:24 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:29:15:29:18 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:29:15:29:18 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:32:19:32:22 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:32:19:32:22 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:38:10:38:28 | call to escape | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:38:10:38:28 | call to escape | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:41:40:41:43 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:41:40:41:43 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:81:16:81:19 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:81:16:81:19 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:90:10:90:37 | ... + ... | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:90:10:90:37 | ... + ... | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:96:10:96:13 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:96:10:96:13 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:118:10:118:13 | @foo | CodeInjection.rb:111:12:111:17 | call to params | CodeInjection.rb:118:10:118:13 | @foo | This code execution depends on a $@. | CodeInjection.rb:111:12:111:17 | call to params | user-provided value | +edges +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:29:15:29:18 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:32:19:32:22 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:41:40:41:43 | code | provenance | | +| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | provenance | | +| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | provenance | | +| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | MaD:1 | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:81:16:81:19 | code | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:37 | ... + ... | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:22:90:25 | code | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | provenance | AdditionalTaintStep | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:96:10:96:13 | code | provenance | | +| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | provenance | | +| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | +| CodeInjection.rb:90:10:90:25 | ... + ... : [collection] [element] | CodeInjection.rb:90:10:90:37 | ... + ... | provenance | | +| CodeInjection.rb:90:22:90:25 | code | CodeInjection.rb:90:10:90:25 | ... + ... : [collection] [element] | provenance | | +| CodeInjection.rb:107:3:108:5 | self in index : PostsController [@foo] | CodeInjection.rb:117:3:119:5 | self in baz : PostsController [@foo] | provenance | | +| CodeInjection.rb:111:5:111:8 | [post] self [@foo] | CodeInjection.rb:114:3:115:5 | self in bar : PostsController [@foo] | provenance | | +| CodeInjection.rb:111:12:111:17 | call to params | CodeInjection.rb:111:12:111:23 | ...[...] | provenance | | +| CodeInjection.rb:111:12:111:23 | ...[...] | CodeInjection.rb:111:5:111:8 | [post] self [@foo] | provenance | | +| CodeInjection.rb:114:3:115:5 | self in bar : PostsController [@foo] | CodeInjection.rb:107:3:108:5 | self in index : PostsController [@foo] | provenance | | +| CodeInjection.rb:117:3:119:5 | self in baz : PostsController [@foo] | CodeInjection.rb:118:10:118:13 | self : PostsController [@foo] | provenance | | +| CodeInjection.rb:118:10:118:13 | self : PostsController [@foo] | CodeInjection.rb:118:10:118:13 | @foo | provenance | | +models +| 1 | Summary: Regexp!; Method[escape,quote]; Argument[0]; ReturnValue; taint | nodes | CodeInjection.rb:5:5:5:8 | code | semmle.label | code | | CodeInjection.rb:5:12:5:17 | call to params | semmle.label | call to params | @@ -14,59 +57,18 @@ nodes | CodeInjection.rb:78:5:78:8 | code | semmle.label | code | | CodeInjection.rb:78:12:78:17 | call to params | semmle.label | call to params | | CodeInjection.rb:78:12:78:24 | ...[...] | semmle.label | ...[...] | -| CodeInjection.rb:80:16:80:19 | code | semmle.label | code | -| CodeInjection.rb:86:10:86:25 | ... + ... : [collection] [element] | semmle.label | ... + ... : [collection] [element] | -| CodeInjection.rb:86:10:86:37 | ... + ... | semmle.label | ... + ... | -| CodeInjection.rb:86:22:86:25 | code | semmle.label | code | -| CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | semmle.label | "prefix_#{...}_suffix" | -| CodeInjection.rb:90:10:90:13 | code | semmle.label | code | -| CodeInjection.rb:101:3:102:5 | self in index : PostsController [@foo] | semmle.label | self in index : PostsController [@foo] | -| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | -| CodeInjection.rb:105:12:105:17 | call to params | semmle.label | call to params | -| CodeInjection.rb:105:12:105:23 | ...[...] | semmle.label | ...[...] | -| CodeInjection.rb:108:3:109:5 | self in bar : PostsController [@foo] | semmle.label | self in bar : PostsController [@foo] | -| CodeInjection.rb:111:3:113:5 | self in baz : PostsController [@foo] | semmle.label | self in baz : PostsController [@foo] | -| CodeInjection.rb:112:10:112:13 | @foo | semmle.label | @foo | -| CodeInjection.rb:112:10:112:13 | self : PostsController [@foo] | semmle.label | self : PostsController [@foo] | -edges -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:29:15:29:18 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:32:19:32:22 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:41:40:41:43 | code | provenance | | -| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | provenance | | -| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | provenance | | -| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | MaD:21 | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:80:16:80:19 | code | provenance | | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:22:86:25 | code | provenance | | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | provenance | AdditionalTaintStep | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:13 | code | provenance | | -| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | provenance | | -| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | -| CodeInjection.rb:86:10:86:25 | ... + ... : [collection] [element] | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | -| CodeInjection.rb:86:22:86:25 | code | CodeInjection.rb:86:10:86:25 | ... + ... : [collection] [element] | provenance | | -| CodeInjection.rb:101:3:102:5 | self in index : PostsController [@foo] | CodeInjection.rb:111:3:113:5 | self in baz : PostsController [@foo] | provenance | | -| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | CodeInjection.rb:108:3:109:5 | self in bar : PostsController [@foo] | provenance | | -| CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:105:12:105:23 | ...[...] | provenance | | -| CodeInjection.rb:105:12:105:23 | ...[...] | CodeInjection.rb:105:5:105:8 | [post] self [@foo] | provenance | | -| CodeInjection.rb:108:3:109:5 | self in bar : PostsController [@foo] | CodeInjection.rb:101:3:102:5 | self in index : PostsController [@foo] | provenance | | -| CodeInjection.rb:111:3:113:5 | self in baz : PostsController [@foo] | CodeInjection.rb:112:10:112:13 | self : PostsController [@foo] | provenance | | -| CodeInjection.rb:112:10:112:13 | self : PostsController [@foo] | CodeInjection.rb:112:10:112:13 | @foo | provenance | | +| CodeInjection.rb:81:16:81:19 | code | semmle.label | code | +| CodeInjection.rb:90:10:90:25 | ... + ... : [collection] [element] | semmle.label | ... + ... : [collection] [element] | +| CodeInjection.rb:90:10:90:37 | ... + ... | semmle.label | ... + ... | +| CodeInjection.rb:90:22:90:25 | code | semmle.label | code | +| CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | semmle.label | "prefix_#{...}_suffix" | +| CodeInjection.rb:96:10:96:13 | code | semmle.label | code | +| CodeInjection.rb:107:3:108:5 | self in index : PostsController [@foo] | semmle.label | self in index : PostsController [@foo] | +| CodeInjection.rb:111:5:111:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | +| CodeInjection.rb:111:12:111:17 | call to params | semmle.label | call to params | +| CodeInjection.rb:111:12:111:23 | ...[...] | semmle.label | ...[...] | +| CodeInjection.rb:114:3:115:5 | self in bar : PostsController [@foo] | semmle.label | self in bar : PostsController [@foo] | +| CodeInjection.rb:117:3:119:5 | self in baz : PostsController [@foo] | semmle.label | self in baz : PostsController [@foo] | +| CodeInjection.rb:118:10:118:13 | @foo | semmle.label | @foo | +| CodeInjection.rb:118:10:118:13 | self : PostsController [@foo] | semmle.label | self : PostsController [@foo] | subpaths -#select -| CodeInjection.rb:8:10:8:13 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:8:10:8:13 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | This code execution depends on a $@. | CodeInjection.rb:11:10:11:15 | call to params | user-provided value | -| CodeInjection.rb:20:20:20:23 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:20:20:20:23 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:23:21:23:24 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:23:21:23:24 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:29:15:29:18 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:29:15:29:18 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:32:19:32:22 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:32:19:32:22 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:38:10:38:28 | call to escape | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:38:10:38:28 | call to escape | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:41:40:41:43 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:41:40:41:43 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:80:16:80:19 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:80:16:80:19 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:86:10:86:37 | ... + ... | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:86:10:86:37 | ... + ... | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:90:10:90:13 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:90:10:90:13 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:112:10:112:13 | @foo | CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:112:10:112:13 | @foo | This code execution depends on a $@. | CodeInjection.rb:105:12:105:17 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref index 6dcbcb4448e..c62d0af0a1b 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref @@ -1 +1,4 @@ -queries/security/cwe-094/CodeInjection.ql +query: queries/security/cwe-094/CodeInjection.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb index a8ed4a71613..f9c69d08e13 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb @@ -2,13 +2,13 @@ require 'active_job' class UsersController < ActionController::Base def create - code = params[:code] + code = params[:code] # $ Source # BAD - eval(code) + eval(code) # $ Alert # BAD - eval(params) + eval(params) # $ Alert # GOOD - user input is in second argument, which is not evaluated as Ruby code send(:sanitize, params[:code]) @@ -17,28 +17,28 @@ class UsersController < ActionController::Base Foo.new.bar(code) # BAD - Foo.class_eval(code) + Foo.class_eval(code) # $ Alert # BAD - Foo.module_eval(code) + Foo.module_eval(code) # $ Alert # GOOD Bar.class_eval(code) # BAD - const_get(code) + const_get(code) # $ Alert # BAD - Foo.const_get(code) + Foo.const_get(code) # $ Alert # GOOD Bar.const_get(code) # BAD - eval(Regexp.escape(code)) + eval(Regexp.escape(code)) # $ Alert # BAD - ActiveJob::Serializers.deserialize(code) + ActiveJob::Serializers.deserialize(code) # $ Alert end def update @@ -75,19 +75,25 @@ end class UsersController < ActionController::Base def create - code = params[:code] + code = params[:code] # $ Source - obj().send(code, "foo"); # BAD + # BAD + obj().send(code, "foo"); # $ Alert - obj().send("prefix_" + code + "_suffix", "foo"); # GOOD + # GOOD + obj().send("prefix_" + code + "_suffix", "foo"); - obj().send("prefix_#{code}_suffix", "foo"); # GOOD + # GOOD + obj().send("prefix_#{code}_suffix", "foo"); - eval("prefix_" + code + "_suffix"); # BAD + # BAD + eval("prefix_" + code + "_suffix"); # $ Alert - eval("prefix_#{code}_suffix"); # BAD + # BAD + eval("prefix_#{code}_suffix"); # $ Alert - eval(code); # BAD + # BAD + eval(code); # $ Alert end end @@ -102,13 +108,13 @@ class PostsController < ActionController::Base end def foo - @foo = params[:foo] + @foo = params[:foo] # $ Source end def bar end def baz - eval(@foo) + eval(@foo) # $ Alert end end diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 432608f6f9d..76c15485bb9 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -107,7 +107,7 @@ class SuccessorKind extends TSuccessorKind { } pragma[nomagic] -private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind kind) { +private ItemNode getAChildSuccessor0(ItemNode item, string name, SuccessorKind kind) { item = result.getImmediateParent() and name = result.getName() and // Associated items in `impl` and `trait` blocks are handled elsewhere @@ -116,7 +116,7 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki if result instanceof TypeParam then kind.isInternal() else - if result.isPublic() + if result.isPublic() or item instanceof SourceFile then kind.isBoth() else kind.isInternal() or @@ -130,6 +130,41 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki result = item } +pragma[nomagic] +private NamedItemNode getANamedNonModuleChildSuccessor( + ItemNode item, string name, Namespace ns, int startline, int startcolumn, int endline, + int endcolumn +) { + result.getLocation().hasLocationInfo(_, startline, startcolumn, endline, endcolumn) and + result = getAChildSuccessor0(item, name, _) and + ns = result.getNamespace() and + not result instanceof ModuleItemNode +} + +pragma[nomagic] +private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind kind) { + result = getAChildSuccessor0(item, name, kind) and + // In valid Rust code, there cannot be multiple children with the same name and namespace, + // but to safeguard against combinatorial explosions in invalid code, we always pick the + // last child, except for modules, where we take the union. + ( + not result instanceof NamedItemNode + or + result instanceof ModuleItemNode + or + exists(Namespace ns | + result = + max(NamedItemNode i, int startline, int startcolumn, int endline, int endcolumn | + i = + getANamedNonModuleChildSuccessor(item, name, ns, startline, startcolumn, endline, + endcolumn) + | + i order by startline, startcolumn, endline, endcolumn + ) + ) + ) +} + private module UseOption = Option; private class UseOption = UseOption::Option; @@ -288,10 +323,6 @@ abstract class ItemNode extends Locatable { cached ItemNode getASuccessor(string name, SuccessorKind kind, UseOption useOpt) { Stages::PathResolutionStage::ref() and - sourceFileEdge(this, name, result) and - kind.isBoth() and - useOpt.isNone() - or result = getAChildSuccessor(this, name, kind) and useOpt.isNone() or @@ -471,6 +502,8 @@ abstract class ItemNode extends Locatable { Location getLocation() { result = super.getLocation() } } +abstract class NamedItemNode extends ItemNode { } + abstract class TypeItemNode extends ItemNode { } /** A module or a source file. */ @@ -509,7 +542,7 @@ private class SourceFileItemNode extends ModuleLikeNode instanceof SourceFile { override string getCanonicalPath(Crate c) { none() } } -class CrateItemNode extends ItemNode instanceof Crate { +class CrateItemNode extends NamedItemNode instanceof Crate { /** * Gets the source file that defines this crate. */ @@ -565,7 +598,7 @@ class CrateItemNode extends ItemNode instanceof Crate { override string getCanonicalPath(Crate c) { c = this and result = Crate.super.getName() } } -class ExternCrateItemNode extends ItemNode instanceof ExternCrate { +class ExternCrateItemNode extends NamedItemNode instanceof ExternCrate { override string getName() { result = super.getRename().getName().getText() or @@ -573,7 +606,7 @@ class ExternCrateItemNode extends ItemNode instanceof ExternCrate { result = super.getIdentifier().getText() } - override Namespace getNamespace() { none() } + override Namespace getNamespace() { result.isType() } override Visibility getVisibility() { result = ExternCrate.super.getVisibility() } @@ -587,7 +620,7 @@ class ExternCrateItemNode extends ItemNode instanceof ExternCrate { } /** An item that can occur in a trait or an `impl` block. */ -abstract private class AssocItemNode extends ItemNode instanceof AssocItem { +abstract private class AssocItemNode extends NamedItemNode instanceof AssocItem { /** Holds if this associated item has an implementation. */ abstract predicate hasImplementation(); @@ -626,7 +659,7 @@ private class ConstItemNode extends AssocItemNode instanceof Const { override TypeParam getTypeParam(int i) { none() } } -private class TypeItemTypeItemNode extends TypeItemNode instanceof TypeItem { +private class TypeItemTypeItemNode extends NamedItemNode, TypeItemNode instanceof TypeItem { override string getName() { result = TypeItem.super.getName().getText() } override Namespace getNamespace() { result.isType() } @@ -659,7 +692,7 @@ private class TypeItemTypeItemNode extends TypeItemNode instanceof TypeItem { } /** An item that can be referenced with arguments. */ -abstract class ParameterizableItemNode extends ItemNode { +abstract class ParameterizableItemNode extends NamedItemNode { /** Gets the arity this item. */ abstract int getArity(); } @@ -911,7 +944,7 @@ private class ImplTraitTypeReprItemNodeImpl extends ImplTraitTypeReprItemNode { ItemNode resolveABoundCand() { result = resolvePathCand(this.getABoundPath()) } } -private class ModuleItemNode extends ModuleLikeNode instanceof Module { +private class ModuleItemNode extends NamedItemNode, ModuleLikeNode instanceof Module { override string getName() { result = Module.super.getName().getText() } override Namespace getNamespace() { result.isType() } @@ -929,7 +962,7 @@ private class ModuleItemNode extends ModuleLikeNode instanceof Module { ( exists(SourceFile f | fileImport(this, f) and - sourceFileEdge(f, _, child) + child = getAChildSuccessor(f, _, _) ) or this = child.getImmediateParent() @@ -1001,7 +1034,7 @@ private class StructItemNode extends TypeItemTypeItemNode, ParameterizableItemNo } } -final class TraitItemNode extends ImplOrTraitItemNode, TypeItemNode instanceof Trait { +final class TraitItemNode extends ImplOrTraitItemNode, NamedItemNode, TypeItemNode instanceof Trait { pragma[nomagic] Path getABoundPath() { result = super.getATypeBound().getTypeRepr().(PathTypeRepr).getPath() } @@ -1126,7 +1159,7 @@ private class BlockExprItemNode extends ItemNode instanceof BlockExpr { pragma[nomagic] private Path getWherePredPath(WherePred wp) { result = wp.getTypeRepr().(PathTypeRepr).getPath() } -final class TypeParamItemNode extends TypeItemNode instanceof TypeParam { +final class TypeParamItemNode extends NamedItemNode, TypeItemNode instanceof TypeParam { /** Gets a where predicate for this type parameter, if any */ pragma[nomagic] private WherePred getAWherePred() { @@ -1214,7 +1247,7 @@ final private class TypeParamItemNodeImpl extends TypeParamItemNode instanceof T ItemNode resolveABoundCand() { result = resolvePathCand(this.getABoundPathCand()) } } -abstract private class MacroItemNode extends ItemNode { +abstract private class MacroItemNode extends NamedItemNode { override Namespace getNamespace() { result.isMacro() } override TypeParam getTypeParam(int i) { none() } @@ -1256,12 +1289,6 @@ private class MacroDefItemNode extends MacroItemNode instanceof MacroDef { override Attr getAnAttr() { result = MacroDef.super.getAnAttr() } } -/** Holds if `item` has the name `name` and is a top-level item inside `f`. */ -private predicate sourceFileEdge(SourceFile f, string name, ItemNode item) { - item = f.(ItemNode).getADescendant() and - name = item.getName() -} - /** Holds if `f` is available as `mod name;` inside `folder`. */ pragma[nomagic] private predicate fileModule(SourceFile f, string name, Folder folder) { diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index aeb186c0cdc..74d8385bdf2 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -419,14 +419,21 @@ module ArgsAreInstantiationsOf { private module ArgIsInstantiationOfToIndex = ArgIsInstantiationOf; + pragma[nomagic] + private predicate argIsInstantiationOf( + Input::Call call, FunctionPosition pos, ImplOrTraitItemNode i, Function f, int rnk + ) { + ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPos(call, pos), i, _) and + toCheckRanked(i, f, _, pos, rnk) + } + pragma[nomagic] private predicate argsAreInstantiationsOfToIndex( Input::Call call, ImplOrTraitItemNode i, Function f, int rnk ) { exists(FunctionPosition pos | - ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPos(call, pos), i, _) and - call.hasTargetCand(i, f) and - toCheckRanked(i, f, _, pos, rnk) + argIsInstantiationOf(call, pos, i, f, rnk) and + call.hasTargetCand(i, f) | rnk = 0 or diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index c23251f51ef..f7428ef1087 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.2.6 +version: 0.2.7-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/change-notes/2026-02-18-database-quality.md b/rust/ql/src/change-notes/2026-02-18-database-quality.md new file mode 100644 index 00000000000..ef2f1b3139c --- /dev/null +++ b/rust/ql/src/change-notes/2026-02-18-database-quality.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The macro resolution metric has been removed from `rust/diagnostic/database-quality`. This metric was found to be an unreliable indicator of database quality in many cases, leading to false alarms on the tool status page. diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 3ce8fab18ff..21011bd93d5 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.27 +version: 0.1.28-dev groups: - rust - queries diff --git a/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql b/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql index 02933b3bd5f..9cd244c8c5d 100644 --- a/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql +++ b/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql @@ -12,8 +12,6 @@ import codeql.util.Unit private predicate diagnostic(string msg, float value, float threshold) { CallTargetStatsReport::percentageOfOk(msg, value) and threshold = 50 or - MacroCallTargetStatsReport::percentageOfOk(msg, value) and threshold = 50 - or ExprTypeStatsReport::percentageOfOk(msg, value) and threshold = 20 } diff --git a/rust/ql/test/library-tests/path-resolution/invalid/main.rs b/rust/ql/test/library-tests/path-resolution/invalid/main.rs new file mode 100644 index 00000000000..b58fcb2d934 --- /dev/null +++ b/rust/ql/test/library-tests/path-resolution/invalid/main.rs @@ -0,0 +1,6 @@ +// The code in this file is not valid Rust code + +struct A; // A1 +struct A; // A2 + +fn f(x: A) {} // $ item=A2 (the latter occurence takes precedence) diff --git a/rust/ql/test/library-tests/path-resolution/invalid/options.yml b/rust/ql/test/library-tests/path-resolution/invalid/options.yml new file mode 100644 index 00000000000..cf148dd35f8 --- /dev/null +++ b/rust/ql/test/library-tests/path-resolution/invalid/options.yml @@ -0,0 +1 @@ +qltest_cargo_check: false diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 153d80db4cc..e85bb7876da 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -51,6 +51,7 @@ mod | my/nested.rs:1:1:17:1 | mod nested1 | | my/nested.rs:2:5:11:5 | mod nested2 | resolvePath +| invalid/main.rs:6:9:6:9 | A | invalid/main.rs:3:11:4:9 | struct A | | main.rs:4:8:4:9 | my | main.rs:1:1:1:7 | mod my | | main.rs:4:14:4:17 | self | main.rs:1:1:1:7 | mod my | | main.rs:6:5:6:6 | my | main.rs:1:1:1:7 | mod my | diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index fcce8c5cac3..240ee962cfd 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.16 +version: 0.0.17-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 99b79514512..6ae58a799e6 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.26 +version: 2.0.27-dev groups: shared library: true dependencies: diff --git a/shared/cpp/BUILD.bazel b/shared/cpp/BUILD.bazel index 5debed90086..f78c4ede92f 100644 --- a/shared/cpp/BUILD.bazel +++ b/shared/cpp/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_cc//cc:defs.bzl", "cc_library") + cc_library( name = "extractor_shared", srcs = glob(["*.cpp"]), diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 243db1c539c..d16d8379bbb 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.26 +version: 2.0.27-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 358b90c92b5..9adf5d48ad5 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 84b0091c243..91774b4db2d 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.20 +version: 0.0.21-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 0220e237065..a5e5998c4a7 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 915c2fb7c34..2dd53258318 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 2c51888e512..5e567790cfe 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.18 +version: 2.0.19-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 197379a2b2f..65539cd3c1b 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.42 +version: 1.0.43-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index f7d1592cc2f..d632d0426b4 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 717d5e5c9a5..19f16908768 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index e740633b852..cd15cfac986 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.23 +version: 0.0.24-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a8b74e13d69..41e4b42ff3b 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.26 +version: 2.0.27-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index c339ed16159..cf3df223c88 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 81efc5bf9af..18d1315e0da 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.29 +version: 2.0.30-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index e84e83a927e..63b5786ba44 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 263fd7d87a7..1ecff982de7 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/logging/BUILD.bazel b/swift/logging/BUILD.bazel index 1d6192b3c13..e72a7071d06 100644 --- a/swift/logging/BUILD.bazel +++ b/swift/logging/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_cc//cc:defs.bzl", "cc_library") + cc_library( name = "logging", srcs = glob(["*.cpp"]), diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 0f240082bf7..da06170849b 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.2.2 +version: 6.2.3-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index d6128248bd7..58dd667f57b 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.16 +version: 1.2.17-dev groups: - swift - queries diff --git a/swift/rules.bzl b/swift/rules.bzl index cb16ca4382a..d479f6bff11 100644 --- a/swift/rules.bzl +++ b/swift/rules.bzl @@ -1,3 +1,4 @@ +load("@rules_cc//cc:defs.bzl", "CcInfo", "cc_binary", "cc_library") load("//misc/bazel:os.bzl", "os_select") # TODO: make a shared library with the internal repos for transitions @@ -124,7 +125,7 @@ def _wrap_cc(rule, kwargs): ) def swift_cc_binary(**kwargs): - _wrap_cc(native.cc_binary, kwargs) + _wrap_cc(cc_binary, kwargs) def swift_cc_library(**kwargs): - _wrap_cc(native.cc_library, kwargs) + _wrap_cc(cc_library, kwargs)