diff --git a/.bazelrc b/.bazelrc
index 449345bfb62..679eeec77a3 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -30,6 +30,9 @@ common --registry=https://bcr.bazel.build
common --@rules_dotnet//dotnet/settings:strict_deps=false
+# we only configure a nightly toolchain
+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"
diff --git a/Cargo.lock b/Cargo.lock
index 263b16482a9..b712c4f8d24 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -40,9 +40,9 @@ dependencies = [
[[package]]
name = "anstream"
-version = "0.6.18"
+version = "0.6.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
+checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933"
dependencies = [
"anstyle",
"anstyle-parse",
@@ -55,44 +55,44 @@ dependencies = [
[[package]]
name = "anstyle"
-version = "1.0.10"
+version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
+checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
[[package]]
name = "anstyle-parse"
-version = "0.2.6"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
+checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
-version = "1.1.2"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
+checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9"
dependencies = [
"windows-sys 0.59.0",
]
[[package]]
name = "anstyle-wincon"
-version = "3.0.7"
+version = "3.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
+checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882"
dependencies = [
"anstyle",
- "once_cell",
+ "once_cell_polyfill",
"windows-sys 0.59.0",
]
[[package]]
name = "anyhow"
-version = "1.0.98"
+version = "1.0.99"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
+checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
[[package]]
name = "argfile"
@@ -136,9 +136,9 @@ dependencies = [
[[package]]
name = "autocfg"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "base64"
@@ -160,9 +160,9 @@ checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
[[package]]
name = "borsh"
-version = "1.5.5"
+version = "1.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc"
+checksum = "ad8646f98db542e39fc66e68a20b2144f6a732636df7c2354e74645faaa433ce"
dependencies = [
"cfg_aliases",
]
@@ -185,9 +185,9 @@ dependencies = [
[[package]]
name = "bumpalo"
-version = "3.16.0"
+version = "3.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
[[package]]
name = "bytemuck"
@@ -195,12 +195,6 @@ version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3"
-[[package]]
-name = "byteorder"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
-
[[package]]
name = "camino"
version = "1.1.10"
@@ -221,25 +215,25 @@ dependencies = [
[[package]]
name = "cargo-util-schemas"
-version = "0.2.0"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e63d2780ac94487eb9f1fea7b0d56300abc9eb488800854ca217f102f5caccca"
+checksum = "7dc1a6f7b5651af85774ae5a34b4e8be397d9cf4bc063b7e6dbd99a841837830"
dependencies = [
"semver",
"serde",
"serde-untagged",
"serde-value",
- "thiserror 1.0.69",
- "toml",
+ "thiserror",
+ "toml 0.8.23",
"unicode-xid",
"url",
]
[[package]]
name = "cargo_metadata"
-version = "0.20.0"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f7835cfc6135093070e95eb2b53e5d9b5c403dc3a6be6040ee026270aa82502"
+checksum = "5cfca2aaa699835ba88faf58a06342a314a950d2b9686165e038286c30316868"
dependencies = [
"camino",
"cargo-platform",
@@ -247,14 +241,14 @@ dependencies = [
"semver",
"serde",
"serde_json",
- "thiserror 2.0.12",
+ "thiserror",
]
[[package]]
name = "cc"
-version = "1.2.7"
+version = "1.2.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7"
+checksum = "5c1599538de2394445747c8cf7935946e3cc27e9625f889d979bfb2aaf569362"
dependencies = [
"jobserver",
"libc",
@@ -285,6 +279,18 @@ dependencies = [
"synstructure",
]
+[[package]]
+name = "chalk-derive"
+version = "0.104.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea9b1e80910f66ae87c772247591432032ef3f6a67367ff17f8343db05beafa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "synstructure",
+]
+
[[package]]
name = "chalk-ir"
version = "0.103.0"
@@ -292,7 +298,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90a37d2ab99352b4caca135061e7b4ac67024b648c28ed0b787feec4bea4caed"
dependencies = [
"bitflags 2.9.1",
- "chalk-derive",
+ "chalk-derive 0.103.0",
+]
+
+[[package]]
+name = "chalk-ir"
+version = "0.104.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7047a516de16226cd17344d41a319d0ea1064bf9e60bd612ab341ab4a34bbfa8"
+dependencies = [
+ "bitflags 2.9.1",
+ "chalk-derive 0.104.0",
]
[[package]]
@@ -301,8 +317,8 @@ version = "0.103.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c855be60e646664bc37c2496d3dc81ca5ef60520930e5e0f0057a0575aff6c19"
dependencies = [
- "chalk-derive",
- "chalk-ir",
+ "chalk-derive 0.103.0",
+ "chalk-ir 0.103.0",
"chalk-solve",
"rustc-hash 1.1.0",
"tracing",
@@ -314,10 +330,10 @@ version = "0.103.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "477ac6cdfd2013e9f93b09b036c2b607a67b2e728f4777b8422d55a79e9e3a34"
dependencies = [
- "chalk-derive",
- "chalk-ir",
+ "chalk-derive 0.103.0",
+ "chalk-ir 0.103.0",
"ena",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"itertools 0.12.1",
"petgraph",
"rustc-hash 1.1.0",
@@ -341,9 +357,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.5.40"
+version = "4.5.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f"
+checksum = "1c1f056bae57e3e54c3375c41ff79619ddd13460a17d7438712bd0d83fda4ff8"
dependencies = [
"clap_builder",
"clap_derive",
@@ -351,9 +367,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.5.40"
+version = "4.5.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e"
+checksum = "b3e7f4214277f3c7aa526a59dd3fbe306a370daee1f8b7b8c987069cd8e888a8"
dependencies = [
"anstream",
"anstyle",
@@ -363,9 +379,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.5.40"
+version = "4.5.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce"
+checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491"
dependencies = [
"heck",
"proc-macro2",
@@ -375,9 +391,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.7.4"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
+checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675"
[[package]]
name = "codeql-autobuilder-rust"
@@ -433,7 +449,7 @@ version = "0.1.0"
dependencies = [
"anyhow",
"argfile",
- "chalk-ir",
+ "chalk-ir 0.104.0",
"chrono",
"clap",
"codeql-extractor",
@@ -462,7 +478,7 @@ dependencies = [
"serde",
"serde_json",
"serde_with",
- "toml",
+ "toml 0.9.5",
"tracing",
"tracing-flame",
"tracing-subscriber",
@@ -471,9 +487,9 @@ dependencies = [
[[package]]
name = "colorchoice"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
+checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
[[package]]
name = "core-foundation-sys"
@@ -547,9 +563,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "darling"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
dependencies = [
"darling_core",
"darling_macro",
@@ -557,9 +573,9 @@ dependencies = [
[[package]]
name = "darling_core"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
dependencies = [
"fnv",
"ident_case",
@@ -571,9 +587,9 @@ dependencies = [
[[package]]
name = "darling_macro"
-version = "0.20.10"
+version = "0.20.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core",
"quote",
@@ -596,9 +612,9 @@ dependencies = [
[[package]]
name = "deranged"
-version = "0.3.11"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
dependencies = [
"powerfmt",
"serde",
@@ -817,21 +833,21 @@ checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a"
[[package]]
name = "getrandom"
-version = "0.3.1"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8"
+checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [
"cfg-if",
"libc",
- "wasi 0.13.3+wasi-0.2.2",
- "windows-targets 0.52.6",
+ "r-efi",
+ "wasi 0.14.2+wasi-0.2.4",
]
[[package]]
name = "glob"
-version = "0.3.2"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
+checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
[[package]]
name = "globset"
@@ -860,9 +876,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
[[package]]
name = "hashbrown"
-version = "0.15.2"
+version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
+checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5"
dependencies = [
"allocator-api2",
"equivalent",
@@ -875,7 +891,7 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
dependencies = [
- "hashbrown 0.15.2",
+ "hashbrown 0.15.4",
]
[[package]]
@@ -907,14 +923,15 @@ dependencies = [
[[package]]
name = "iana-time-zone"
-version = "0.1.61"
+version = "0.1.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
+checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
+ "log 0.4.27",
"wasm-bindgen",
"windows-core",
]
@@ -1054,12 +1071,12 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.9.0"
+version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
+checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661"
dependencies = [
"equivalent",
- "hashbrown 0.15.2",
+ "hashbrown 0.15.4",
"serde",
]
@@ -1089,6 +1106,15 @@ dependencies = [
"libc",
]
+[[package]]
+name = "intrusive-collections"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86"
+dependencies = [
+ "memoffset",
+]
+
[[package]]
name = "is_terminal_polyfill"
version = "1.70.1"
@@ -1136,9 +1162,9 @@ checksum = "a037eddb7d28de1d0fc42411f501b53b75838d313908078d6698d064f3029b24"
[[package]]
name = "js-sys"
-version = "0.3.76"
+version = "0.3.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7"
+checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -1146,9 +1172,9 @@ dependencies = [
[[package]]
name = "kqueue"
-version = "1.0.8"
+version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
+checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a"
dependencies = [
"kqueue-sys",
"libc",
@@ -1184,9 +1210,9 @@ checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
[[package]]
name = "libredox"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
+checksum = "1580801010e535496706ba011c15f8532df6b42297d2e471fec38ceadd8c0638"
dependencies = [
"bitflags 2.9.1",
"libc",
@@ -1211,9 +1237,9 @@ checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
[[package]]
name = "lock_api"
-version = "0.4.12"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
dependencies = [
"autocfg",
"scopeguard",
@@ -1269,14 +1295,14 @@ dependencies = [
[[package]]
name = "mio"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
+checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
dependencies = [
"libc",
"log 0.4.27",
- "wasi 0.11.0+wasi-snapshot-preview1",
- "windows-sys 0.52.0",
+ "wasi 0.11.1+wasi-snapshot-preview1",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1366,9 +1392,15 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.20.3"
+version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+
+[[package]]
+name = "once_cell_polyfill"
+version = "1.70.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
[[package]]
name = "oorandom"
@@ -1401,10 +1433,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]]
-name = "parking_lot"
-version = "0.12.3"
+name = "papaya"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+checksum = "f92dd0b07c53a0a0c764db2ace8c541dc47320dad97c2200c2a637ab9dd2328f"
+dependencies = [
+ "equivalent",
+ "seize",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
dependencies = [
"lock_api",
"parking_lot_core",
@@ -1412,9 +1454,9 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.10"
+version = "0.9.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
dependencies = [
"cfg-if",
"libc",
@@ -1478,7 +1520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
dependencies = [
"fixedbitset",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
]
[[package]]
@@ -1495,9 +1537,9 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "portable-atomic"
-version = "1.11.0"
+version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
+checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
[[package]]
name = "potential_utf"
@@ -1516,18 +1558,18 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
-version = "0.2.20"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
dependencies = [
- "zerocopy 0.7.35",
+ "zerocopy",
]
[[package]]
name = "proc-macro2"
-version = "1.0.95"
+version = "1.0.97"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
+checksum = "d61789d7719defeb74ea5fe81f2fdfdbd28a803847077cecce2ff14e1472f6f1"
dependencies = [
"unicode-ident",
]
@@ -1555,10 +1597,16 @@ dependencies = [
]
[[package]]
-name = "ra-ap-rustc_abi"
-version = "0.116.0"
+name = "r-efi"
+version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a967e3a9cd3e38b543f503978e0eccee461e3aea3f7b10e944959bff41dbe612"
+checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
+
+[[package]]
+name = "ra-ap-rustc_abi"
+version = "0.123.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f18c877575c259d127072e9bfc41d985202262fb4d6bfdae3d1252147c2562c2"
dependencies = [
"bitflags 2.9.1",
"ra-ap-rustc_hashes",
@@ -1568,18 +1616,18 @@ dependencies = [
[[package]]
name = "ra-ap-rustc_hashes"
-version = "0.116.0"
+version = "0.123.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ea4c755ecbbffa5743c251344f484ebe571ec7bc5b36d80b2a8ae775d1a7a40"
+checksum = "2439ed1df3472443133b66949f81080dff88089b42f825761455463709ee1cad"
dependencies = [
"rustc-stable-hash",
]
[[package]]
name = "ra-ap-rustc_index"
-version = "0.116.0"
+version = "0.123.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aca7ad7cf911538c619caa2162339fe98637e9e46f11bb0484ef96735df4d64a"
+checksum = "57a24fe0be21be1f8ebc21dcb40129214fb4cefb0f2753f3d46b6dbe656a1a45"
dependencies = [
"ra-ap-rustc_index_macros",
"smallvec",
@@ -1587,9 +1635,9 @@ dependencies = [
[[package]]
name = "ra-ap-rustc_index_macros"
-version = "0.116.0"
+version = "0.123.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8767ba551c9355bc3031be072cc4bb0381106e5e7cd275e72b7a8c76051c4070"
+checksum = "844a27ddcad0116facae2df8e741fd788662cf93dc13029cd864f2b8013b81f9"
dependencies = [
"proc-macro2",
"quote",
@@ -1598,9 +1646,20 @@ dependencies = [
[[package]]
name = "ra-ap-rustc_lexer"
-version = "0.116.0"
+version = "0.121.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6101374afb267e6c27e4e2eb0b1352e9f3504c1a8f716f619cd39244e2ed92ab"
+checksum = "22944e31fb91e9b3e75bcbc91e37d958b8c0825a6160927f2856831d2ce83b36"
+dependencies = [
+ "memchr",
+ "unicode-properties",
+ "unicode-xid",
+]
+
+[[package]]
+name = "ra-ap-rustc_lexer"
+version = "0.123.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b734cfcb577d09877799a22742f1bd398be6c00bc428d9de56d48d11ece5771"
dependencies = [
"memchr",
"unicode-properties",
@@ -1609,19 +1668,19 @@ dependencies = [
[[package]]
name = "ra-ap-rustc_parse_format"
-version = "0.116.0"
+version = "0.121.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecd88a19f00da4f43e6727d5013444cbc399804b5046dfa2bbcd28ebed3970ce"
+checksum = "81057891bc2063ad9e353f29462fbc47a0f5072560af34428ae9313aaa5e9d97"
dependencies = [
- "ra-ap-rustc_lexer",
- "rustc-literal-escaper 0.0.2",
+ "ra-ap-rustc_lexer 0.121.0",
+ "rustc-literal-escaper",
]
[[package]]
name = "ra-ap-rustc_pattern_analysis"
-version = "0.116.0"
+version = "0.123.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bb332dd32d7850a799862533b1c021e6062558861a4ad57817bf522499fbb892"
+checksum = "75b0ee1f059b9dea0818c6c7267478926eee95ba4c7dcf89c8db32fa165d3904"
dependencies = [
"ra-ap-rustc_index",
"rustc-hash 2.1.1",
@@ -1632,12 +1691,12 @@ dependencies = [
[[package]]
name = "ra_ap_base_db"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "edf27fccb119fe85faf51f51847df9695d3cca30c2427fed9b4d71e6adebb54f"
+checksum = "47cac371778785196064f1a347fbbac0aafb1053786f17378bb138be59e57fc2"
dependencies = [
"dashmap",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"la-arena",
"ra_ap_cfg",
"ra_ap_intern",
@@ -1655,9 +1714,9 @@ dependencies = [
[[package]]
name = "ra_ap_cfg"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3cea86a5d6e84fd73824c26f52442807af911db038db821124b2ac65fac24209"
+checksum = "6789ed14467e6625bef45b29555844d0168d8af1bea9edb0f1d44f0a9b69f398"
dependencies = [
"ra_ap_intern",
"ra_ap_tt",
@@ -1667,19 +1726,19 @@ dependencies = [
[[package]]
name = "ra_ap_edition"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5538d534eeb8526071610664dc64b71ca336b78f6933ff7241d10c1f37e91b"
+checksum = "637b74c692dc9d9b44394f8c0f91c063e1b6223c6e54f4ee89c943db2f2ee26e"
[[package]]
name = "ra_ap_hir"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44796828650900565917ddcc944fecdf6c7d5c3a8a31141f17268ea8c1d2e6f0"
+checksum = "a94c69a3830f0b6fbc36c1d098fcc9430f63c8d47ee6f93e3d6810c3bf440296"
dependencies = [
"arrayvec",
"either",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"itertools 0.14.0",
"ra_ap_base_db",
"ra_ap_cfg",
@@ -1699,9 +1758,9 @@ dependencies = [
[[package]]
name = "ra_ap_hir_def"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8949b2fb362a1e4eab4d90c7299f0fad3f2c887d9f7d9c286ac6530da4141f85"
+checksum = "7d94fcf7743db2f4f7e2c2911563847eb8efe2b7fb9fa430c107f0ac05962254"
dependencies = [
"arrayvec",
"bitflags 2.9.1",
@@ -1709,7 +1768,7 @@ dependencies = [
"drop_bomb",
"either",
"fst",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"itertools 0.14.0",
"la-arena",
"ra-ap-rustc_abi",
@@ -1737,9 +1796,9 @@ dependencies = [
[[package]]
name = "ra_ap_hir_expand"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22457a431b5eeb67517e03266fddefe48839b060a674a6b18bd84269012ede1e"
+checksum = "67ea3f6a0ba0c1e8b63f4a41bc596c07aeb2db2f99b67fa077820cfb5fce58bd"
dependencies = [
"cov-mark",
"either",
@@ -1765,20 +1824,20 @@ dependencies = [
[[package]]
name = "ra_ap_hir_ty"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a4b7a7531414203e11ae447627e2909250eff392c06278ab53ae2a022ecc9fc"
+checksum = "eccf6c291a88892e59e7591e081da8b9158f8c0b1ed9cb9b73d02d29a0d3d6d9"
dependencies = [
"arrayvec",
"bitflags 2.9.1",
- "chalk-derive",
- "chalk-ir",
+ "chalk-derive 0.103.0",
+ "chalk-ir 0.103.0",
"chalk-recursive",
"chalk-solve",
"cov-mark",
"either",
"ena",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"itertools 0.14.0",
"la-arena",
"oorandom",
@@ -1806,9 +1865,9 @@ dependencies = [
[[package]]
name = "ra_ap_ide_db"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77741ceb096d4f5ecf5384210ea5a2b46878125047c6b0df2bdcfac08a20ea0c"
+checksum = "0bbbc97cc9837f91100711b65fb0d8ce9d7ed8da0dc418e08678d973d53da6a3"
dependencies = [
"arrayvec",
"bitflags 2.9.1",
@@ -1816,7 +1875,7 @@ dependencies = [
"crossbeam-channel",
"either",
"fst",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"itertools 0.14.0",
"line-index",
"memchr",
@@ -1840,9 +1899,9 @@ dependencies = [
[[package]]
name = "ra_ap_intern"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a1872cd5a425db6d5247a7deca11526e3104757f6732447ac6ee93c3e795725"
+checksum = "10f4785a674a41f9f52414fb7f19ab9a1d6886cad572e68721a883b0b85c256b"
dependencies = [
"dashmap",
"hashbrown 0.14.5",
@@ -1852,9 +1911,9 @@ dependencies = [
[[package]]
name = "ra_ap_load-cargo"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f30f5433f056594b02f1879c5c2ce76ea9fd395f21e2a55df6ce3229db993caa"
+checksum = "f3be9990782fd2c2d90b67e2e0b4a86e7412ec8a0719950d9a68292924e85691"
dependencies = [
"anyhow",
"crossbeam-channel",
@@ -1873,13 +1932,13 @@ dependencies = [
[[package]]
name = "ra_ap_mbe"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "222a993acaec35e90c08357aecd530b7170cc3a7f13b3ddfd15a200029ccd555"
+checksum = "5b713f4d927f9d86391f66237019b8e5dbcad4ddbbe37c91c2e21adca258b9aa"
dependencies = [
"arrayvec",
"cov-mark",
- "ra-ap-rustc_lexer",
+ "ra-ap-rustc_lexer 0.123.0",
"ra_ap_intern",
"ra_ap_parser",
"ra_ap_span",
@@ -1892,33 +1951,33 @@ dependencies = [
[[package]]
name = "ra_ap_parser"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c5693f5efd27832e1ac572ea756a1a4a3f7eba07f1287268ca111710971c2e5"
+checksum = "0d3fb8a5891c1c1d6fba5e58caa86b88f831990c878e361c54c1c1ff44ca8401"
dependencies = [
"drop_bomb",
- "ra-ap-rustc_lexer",
+ "ra-ap-rustc_lexer 0.123.0",
"ra_ap_edition",
- "rustc-literal-escaper 0.0.3",
+ "rustc-literal-escaper",
"tracing",
]
[[package]]
name = "ra_ap_paths"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39418eff64e59d4bf90dd825ac7d242576e9554669824ebc55a6628bde0aaf10"
+checksum = "9ccd5cfd0dae89ab2c70c4e5aa646f64bb8b5591622477342863c23a5f32dabc"
dependencies = [
"camino",
]
[[package]]
name = "ra_ap_proc_macro_api"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14a315af8c4a9379c26abe7baa143d62e3975ff26f27c65332f9a5edccc56d38"
+checksum = "dae43c707bfb78f1b841ffb3731cc7876550463306c3b3986c20abd31033e7a2"
dependencies = [
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"ra_ap_intern",
"ra_ap_paths",
"ra_ap_span",
@@ -1933,9 +1992,9 @@ dependencies = [
[[package]]
name = "ra_ap_profile"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08274a0adbf8255f8b2672302452e31bbb2ed4d38324da9c72a7bf9cf1428483"
+checksum = "95a7b93ca94cf0821e8bcac6bf8464cc94d7b3cbe63ffb74946a58ad03991fae"
dependencies = [
"cfg-if",
"libc",
@@ -1945,9 +2004,9 @@ dependencies = [
[[package]]
name = "ra_ap_project_model"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33deecb3724faf91f13b0f1b5115af7c4f5c9dc1dfbbf45f55261aa28f874838"
+checksum = "0751b9433a0dd49c6ae58c9572faf9557d2b53818370d72112b3adeaae5eabc4"
dependencies = [
"anyhow",
"cargo_metadata",
@@ -1965,15 +2024,16 @@ dependencies = [
"serde",
"serde_derive",
"serde_json",
+ "temp-dir",
"tracing",
"triomphe",
]
[[package]]
name = "ra_ap_query-group-macro"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fdefdc9c8d6fd7d85ac572649378e83266262e09400bfdb7c8a7407d3cc2a3e"
+checksum = "5a82732eb8f5dc592d1d8d9bee23c1d66532e39293f02e23c7a546b60b35072b"
dependencies = [
"proc-macro2",
"quote",
@@ -1982,9 +2042,9 @@ dependencies = [
[[package]]
name = "ra_ap_span"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c20071c89e1f7dd63c803130634f4bb6ce7783dc0e7ff90839d1d0f4e625b7a8"
+checksum = "c498ddf2d71705dcef9fb142269c0027c959a5eb17c435eea5466af7c3b9c47c"
dependencies = [
"hashbrown 0.14.5",
"la-arena",
@@ -1998,9 +2058,9 @@ dependencies = [
[[package]]
name = "ra_ap_stdx"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "552df390b26624eca7936aea1dbbb3786d7a12477e26ef917ffabba19f75ad44"
+checksum = "26ade567b0d692c7efd4ceb921cdbe182beca0b5af9a5cf05c07cf0e14db512a"
dependencies = [
"crossbeam-channel",
"crossbeam-utils",
@@ -2014,9 +2074,9 @@ dependencies = [
[[package]]
name = "ra_ap_syntax"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a78db1a9966c0fa05446b8185da35a325680741119366c6246e4a9800f29143a"
+checksum = "dba62d25b0296eb095d9db77e56d096417a89db4f4de1956add0d472ebcaf922"
dependencies = [
"either",
"itertools 0.14.0",
@@ -2024,7 +2084,7 @@ dependencies = [
"ra_ap_stdx",
"rowan",
"rustc-hash 2.1.1",
- "rustc-literal-escaper 0.0.3",
+ "rustc-literal-escaper",
"smol_str",
"tracing",
"triomphe",
@@ -2032,9 +2092,9 @@ dependencies = [
[[package]]
name = "ra_ap_syntax-bridge"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e69ef7fad8598d5c9f14a375d56ec12200fa927bc805b600af419611f4642fdb"
+checksum = "664466f2e824e285b671366f81128aa4a91b501fedbf7956a6bfb1f13d8b0b39"
dependencies = [
"ra_ap_intern",
"ra_ap_parser",
@@ -2047,9 +2107,9 @@ dependencies = [
[[package]]
name = "ra_ap_toolchain"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "628f3f190def67b1116d8bdd6ec4f6f206fada2c93b84ba71086d60c63429282"
+checksum = "2ef82cfc5eb8f9d4a3be9876ce019b78fbfdb8ff4f7e4dee9e384d65122096ab"
dependencies = [
"camino",
"home",
@@ -2057,12 +2117,12 @@ dependencies = [
[[package]]
name = "ra_ap_tt"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e050f4ad13df59e90e38332860304a3e85ff2fa8d4585b8cc44fc982923c82b1"
+checksum = "cbc858f5208f0d00f8638d14ab5ffab5d1bc79ad7fe1db5c5e0d478b9a02155c"
dependencies = [
"arrayvec",
- "ra-ap-rustc_lexer",
+ "ra-ap-rustc_lexer 0.123.0",
"ra_ap_intern",
"ra_ap_stdx",
"text-size",
@@ -2070,13 +2130,13 @@ dependencies = [
[[package]]
name = "ra_ap_vfs"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62082190f0b3551e4d941bcaaac51a7c39c85b2e193bcc50d0807e1701da4083"
+checksum = "e065b27829f5281d2ffc41de72551a0e4c4f49a9989ba7721676f414100c8af2"
dependencies = [
"crossbeam-channel",
"fst",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"nohash-hasher",
"ra_ap_paths",
"ra_ap_stdx",
@@ -2086,9 +2146,9 @@ dependencies = [
[[package]]
name = "ra_ap_vfs-notify"
-version = "0.0.288"
+version = "0.0.300"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd7cfa1095b81bd1994ab70e5543c97a8733987eb0ddf390cf3ad58d4e2dc57"
+checksum = "5a3c795e86c9b5fcdbb99145e401a0d6348ed471ac96f1b7de151c0abe07a5af"
dependencies = [
"crossbeam-channel",
"notify",
@@ -2103,9 +2163,9 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.9.1"
+version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
+checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
dependencies = [
"rand_chacha",
"rand_core",
@@ -2123,12 +2183,11 @@ dependencies = [
[[package]]
name = "rand_core"
-version = "0.9.2"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c"
+checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
dependencies = [
"getrandom",
- "zerocopy 0.8.20",
]
[[package]]
@@ -2153,9 +2212,9 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.5.8"
+version = "0.5.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834"
+checksum = "0d04b7d0ee6b4a0207a0a7adb104d23ecb0b47d6beae7152d0fa34b692b29fd6"
dependencies = [
"bitflags 2.9.1",
]
@@ -2259,21 +2318,15 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
[[package]]
name = "rustc-literal-escaper"
-version = "0.0.2"
+version = "0.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0041b6238913c41fe704213a4a9329e2f685a156d1781998128b4149c230ad04"
-
-[[package]]
-name = "rustc-literal-escaper"
-version = "0.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78744cd17f5d01c75b709e49807d1363e02a940ccee2e9e72435843fdb0d076e"
+checksum = "ab03008eb631b703dd16978282ae36c73282e7922fe101a4bd072a40ecea7b8b"
[[package]]
name = "rustc-stable-hash"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2febf9acc5ee5e99d1ad0afcdbccc02d87aa3f857a1f01f825b80eacf8edfcd1"
+checksum = "781442f29170c5c93b7185ad559492601acdc71d5bb0706f5868094f45cfcd08"
[[package]]
name = "rustc_apfloat"
@@ -2286,23 +2339,31 @@ dependencies = [
]
[[package]]
-name = "ryu"
-version = "1.0.19"
+name = "rustversion"
+version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd"
+checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d"
+
+[[package]]
+name = "ryu"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "salsa"
-version = "0.22.0"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8fff508e3d6ef42a32607f7538e17171a877a12015e32036f46e99d00c95781"
+checksum = "2e235afdb8e510f38a07138fbe5a0b64691894358a9c0cbd813b1aade110efc9"
dependencies = [
"boxcar",
"crossbeam-queue",
- "dashmap",
- "hashbrown 0.15.2",
+ "crossbeam-utils",
+ "hashbrown 0.15.4",
"hashlink",
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
+ "intrusive-collections",
+ "papaya",
"parking_lot",
"portable-atomic",
"rayon",
@@ -2316,17 +2377,16 @@ dependencies = [
[[package]]
name = "salsa-macro-rules"
-version = "0.22.0"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ea72b3c06f2ce6350fe3a0eeb7aaaf842d1d8352b706973c19c4f02e298a87c"
+checksum = "2edb86a7e9c91f6d30c9ce054312721dbe773a162db27bbfae834d16177b30ce"
[[package]]
name = "salsa-macros"
-version = "0.22.0"
+version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ce92025bc160b27814a207cb78d680973af17f863c7f4fc56cf3a535e22f378"
+checksum = "d0778d6e209051bc4e75acfe83bcd7848601ec3dbe9c3dbb982829020e9128af"
dependencies = [
- "heck",
"proc-macro2",
"quote",
"syn",
@@ -2354,6 +2414,18 @@ dependencies = [
"serde_json",
]
+[[package]]
+name = "schemars"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
+dependencies = [
+ "dyn-clone",
+ "ref-cast",
+ "serde",
+ "serde_json",
+]
+
[[package]]
name = "scoped-tls"
version = "1.0.1"
@@ -2366,6 +2438,16 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+[[package]]
+name = "seize"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4b8d813387d566f627f3ea1b914c068aac94c40ae27ec43f5f33bde65abefe7"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
[[package]]
name = "semver"
version = "1.0.26"
@@ -2418,9 +2500,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.140"
+version = "1.0.142"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
+checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7"
dependencies = [
"itoa",
"memchr",
@@ -2438,17 +2520,27 @@ dependencies = [
]
[[package]]
-name = "serde_with"
-version = "3.13.0"
+name = "serde_spanned"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf65a400f8f66fb7b0552869ad70157166676db75ed8181f8104ea91cf9d0b42"
+checksum = "40734c41988f7306bb04f0ecf60ec0f3f1caa34290e4e8ea471dcd3346483b83"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
dependencies = [
"base64",
"chrono",
"hex",
"indexmap 1.9.3",
- "indexmap 2.9.0",
- "schemars",
+ "indexmap 2.10.0",
+ "schemars 0.9.0",
+ "schemars 1.0.4",
"serde",
"serde_derive",
"serde_json",
@@ -2458,9 +2550,9 @@ dependencies = [
[[package]]
name = "serde_with_macros"
-version = "3.13.0"
+version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81679d9ed988d5e9a5e6531dc3f2c28efbd639cbd1dfb628df08edea6004da77"
+checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
dependencies = [
"darling",
"proc-macro2",
@@ -2474,7 +2566,7 @@ version = "0.9.34+deprecated"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
dependencies = [
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"itoa",
"ryu",
"serde",
@@ -2532,9 +2624,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
-version = "2.0.103"
+version = "2.0.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8"
+checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40"
dependencies = [
"proc-macro2",
"quote",
@@ -2543,15 +2635,21 @@ dependencies = [
[[package]]
name = "synstructure"
-version = "0.13.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
+checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
+[[package]]
+name = "temp-dir"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83176759e9416cf81ee66cb6508dbfe9c96f20b8b56265a39917551c23c70964"
+
[[package]]
name = "text-size"
version = "1.1.1"
@@ -2564,33 +2662,13 @@ version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d"
-[[package]]
-name = "thiserror"
-version = "1.0.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
-dependencies = [
- "thiserror-impl 1.0.69",
-]
-
[[package]]
name = "thiserror"
version = "2.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
dependencies = [
- "thiserror-impl 2.0.12",
-]
-
-[[package]]
-name = "thiserror-impl"
-version = "1.0.69"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
+ "thiserror-impl",
]
[[package]]
@@ -2616,9 +2694,9 @@ dependencies = [
[[package]]
name = "time"
-version = "0.3.37"
+version = "0.3.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21"
+checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40"
dependencies = [
"deranged",
"itoa",
@@ -2631,15 +2709,15 @@ dependencies = [
[[package]]
name = "time-core"
-version = "0.1.2"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c"
[[package]]
name = "time-macros"
-version = "0.2.19"
+version = "0.2.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de"
+checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49"
dependencies = [
"num-conv",
"time-core",
@@ -2662,11 +2740,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
dependencies = [
"serde",
- "serde_spanned",
- "toml_datetime",
+ "serde_spanned 0.6.9",
+ "toml_datetime 0.6.11",
"toml_edit",
]
+[[package]]
+name = "toml"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75129e1dc5000bfbaa9fee9d1b21f974f9fbad9daec557a521ee6e080825f6e8"
+dependencies = [
+ "indexmap 2.10.0",
+ "serde",
+ "serde_spanned 1.0.0",
+ "toml_datetime 0.7.0",
+ "toml_parser",
+ "toml_writer",
+ "winnow",
+]
+
[[package]]
name = "toml_datetime"
version = "0.6.11"
@@ -2676,26 +2769,50 @@ dependencies = [
"serde",
]
+[[package]]
+name = "toml_datetime"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bade1c3e902f58d73d3f294cd7f20391c1cb2fbcb643b73566bc773971df91e3"
+dependencies = [
+ "serde",
+]
+
[[package]]
name = "toml_edit"
version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
- "indexmap 2.9.0",
+ "indexmap 2.10.0",
"serde",
- "serde_spanned",
- "toml_datetime",
+ "serde_spanned 0.6.9",
+ "toml_datetime 0.6.11",
"toml_write",
"winnow",
]
+[[package]]
+name = "toml_parser"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10"
+dependencies = [
+ "winnow",
+]
+
[[package]]
name = "toml_write"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
+[[package]]
+name = "toml_writer"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc842091f2def52017664b53082ecbbeb5c7731092bad69d2c63050401dfd64"
+
[[package]]
name = "tracing"
version = "0.1.41"
@@ -2709,9 +2826,9 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.28"
+version = "0.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
+checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
@@ -2720,9 +2837,9 @@ dependencies = [
[[package]]
name = "tracing-core"
-version = "0.1.33"
+version = "0.1.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
+checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
dependencies = [
"once_cell",
"valuable",
@@ -2866,9 +2983,9 @@ checksum = "a3e5df347f0bf3ec1d670aad6ca5c6a1859cd9ea61d2113125794654ccced68f"
[[package]]
name = "unicode-ident"
-version = "1.0.17"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe"
+checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
[[package]]
name = "unicode-properties"
@@ -2913,9 +3030,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "valuable"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
[[package]]
name = "version_check"
@@ -2935,35 +3052,36 @@ dependencies = [
[[package]]
name = "wasi"
-version = "0.11.0+wasi-snapshot-preview1"
+version = "0.11.1+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasi"
-version = "0.13.3+wasi-0.2.2"
+version = "0.14.2+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2"
+checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
dependencies = [
"wit-bindgen-rt",
]
[[package]]
name = "wasm-bindgen"
-version = "0.2.99"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396"
+checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
dependencies = [
"cfg-if",
"once_cell",
+ "rustversion",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
-version = "0.2.99"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79"
+checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
dependencies = [
"bumpalo",
"log 0.4.27",
@@ -2975,9 +3093,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.99"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe"
+checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -2985,9 +3103,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.99"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2"
+checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [
"proc-macro2",
"quote",
@@ -2998,9 +3116,12 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.99"
+version = "0.2.100"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6"
+checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
+dependencies = [
+ "unicode-ident",
+]
[[package]]
name = "winapi"
@@ -3035,18 +3156,62 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-core"
-version = "0.52.0"
+version = "0.61.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
dependencies = [
- "windows-targets 0.52.6",
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "windows-interface"
+version = "0.59.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
]
[[package]]
name = "windows-link"
-version = "0.1.1"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
+checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
+
+[[package]]
+name = "windows-result"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
+dependencies = [
+ "windows-link",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
+dependencies = [
+ "windows-link",
+]
[[package]]
name = "windows-sys"
@@ -3280,9 +3445,9 @@ dependencies = [
[[package]]
name = "wit-bindgen-rt"
-version = "0.33.0"
+version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c"
+checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [
"bitflags 2.9.1",
]
@@ -3325,39 +3490,18 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.7.35"
+version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
dependencies = [
- "byteorder",
- "zerocopy-derive 0.7.35",
-]
-
-[[package]]
-name = "zerocopy"
-version = "0.8.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dde3bb8c68a8f3f1ed4ac9221aad6b10cece3e60a8e2ea54a6a2dec806d0084c"
-dependencies = [
- "zerocopy-derive 0.8.20",
+ "zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.7.35"
+version = "0.8.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "zerocopy-derive"
-version = "0.8.20"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eea57037071898bf96a6da35fd626f4f27e9cee3ead2a6c703cf09d472b2e700"
+checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
dependencies = [
"proc-macro2",
"quote",
diff --git a/MODULE.bazel b/MODULE.bazel
index 3b2532b08af..2f7a18b35fa 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -14,8 +14,8 @@ local_path_override(
# see https://registry.bazel.build/ for a list of available packages
-bazel_dep(name = "platforms", version = "0.0.11")
-bazel_dep(name = "rules_go", version = "0.50.1")
+bazel_dep(name = "platforms", version = "1.0.0")
+bazel_dep(name = "rules_go", version = "0.56.1")
bazel_dep(name = "rules_pkg", version = "1.0.1")
bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1")
bazel_dep(name = "rules_python", version = "0.40.0")
@@ -28,7 +28,7 @@ bazel_dep(name = "rules_kotlin", version = "2.1.3-codeql.1")
bazel_dep(name = "gazelle", version = "0.40.0")
bazel_dep(name = "rules_dotnet", version = "0.17.4")
bazel_dep(name = "googletest", version = "1.14.0.bcr.1")
-bazel_dep(name = "rules_rust", version = "0.58.0")
+bazel_dep(name = "rules_rust", version = "0.63.0")
bazel_dep(name = "zstd", version = "1.5.5.bcr.1")
bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True)
@@ -38,7 +38,10 @@ bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True
RUST_EDITION = "2024"
# run buildutils-internal/scripts/fill-rust-sha256s.py when updating (internal repo)
-RUST_VERSION = "1.86.0"
+# 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 = use_extension("@rules_rust//rust:extensions.bzl", "rust")
rust.toolchain(
@@ -50,26 +53,26 @@ rust.toolchain(
],
# generated by buildutils-internal/scripts/fill-rust-sha256s.py (internal repo)
sha256s = {
- "rustc-1.86.0-x86_64-unknown-linux-gnu.tar.xz": "4438b809ce4a083af31ed17aeeedcc8fc60ccffc0625bef1926620751b6989d7",
- "rustc-1.86.0-x86_64-apple-darwin.tar.xz": "42b76253626febb7912541a30d3379f463dec89581aad4cb72c6c04fb5a71dc5",
- "rustc-1.86.0-aarch64-apple-darwin.tar.xz": "23b8f52102249a47ab5bc859d54c9a3cb588a3259ba3f00f557d50edeca4fde9",
- "rustc-1.86.0-x86_64-pc-windows-msvc.tar.xz": "fdde839fea274529a31e51eb85c6df1782cc8479c9d1bc24e2914d66a0de41ab",
- "clippy-1.86.0-x86_64-unknown-linux-gnu.tar.xz": "02aaff2c1407d2da8dba19aa4970dd873e311902b120a66cbcdbe51eb8836edf",
- "clippy-1.86.0-x86_64-apple-darwin.tar.xz": "bb85efda7bbffaf124867f5ca36d50932b1e8f533c62ee923438afb32ff8fe9a",
- "clippy-1.86.0-aarch64-apple-darwin.tar.xz": "239fa3a604b124f0312f2af08537874a1227dba63385484b468cca62e7c4f2f2",
- "clippy-1.86.0-x86_64-pc-windows-msvc.tar.xz": "d00498f47d49219f032e2c5eeebdfc3d32317c0dc3d3fd7125327445bc482cb4",
- "cargo-1.86.0-x86_64-unknown-linux-gnu.tar.xz": "c5c1590f7e9246ad9f4f97cfe26ffa92707b52a769726596a9ef81565ebd908b",
- "cargo-1.86.0-x86_64-apple-darwin.tar.xz": "af163eb02d1a178044d1b4f2375960efd47130f795f6e33d09e345454bb26f4e",
- "cargo-1.86.0-aarch64-apple-darwin.tar.xz": "3cb13873d48c3e1e4cc684d42c245226a11fba52af6b047c3346ed654e7a05c0",
- "cargo-1.86.0-x86_64-pc-windows-msvc.tar.xz": "e57a9d89619b5604899bac443e68927bdd371e40f2e03e18950b6ceb3eb67966",
- "llvm-tools-1.86.0-x86_64-unknown-linux-gnu.tar.xz": "282145ab7a63c98b625856f44b905b4dc726b497246b824632a5790debe95a78",
- "llvm-tools-1.86.0-x86_64-apple-darwin.tar.xz": "b55706e92f7da989207c50c13c7add483a9fedd233bc431b106eca2a8f151ec9",
- "llvm-tools-1.86.0-aarch64-apple-darwin.tar.xz": "04d3618c686845853585f036e3211eb9e18f2d290f4610a7a78bdc1fcce1ebd9",
- "llvm-tools-1.86.0-x86_64-pc-windows-msvc.tar.xz": "721a17cc8dc219177e4277a3592253934ef08daa1e1b12eda669a67d15fad8dd",
- "rust-std-1.86.0-x86_64-unknown-linux-gnu.tar.xz": "67be7184ea388d8ce0feaf7fdea46f1775cfc2970930264343b3089898501d37",
- "rust-std-1.86.0-x86_64-apple-darwin.tar.xz": "3b1140d54870a080080e84700143f4a342fbd02a410a319b05d9c02e7dcf44cc",
- "rust-std-1.86.0-aarch64-apple-darwin.tar.xz": "0fb121fb3b8fa9027d79ff598500a7e5cd086ddbc3557482ed3fdda00832c61b",
- "rust-std-1.86.0-x86_64-pc-windows-msvc.tar.xz": "3d5354b7b9cb950b58bff3fce18a652aa374bb30c8f70caebd3bd0b43cb41a33",
+ "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",
},
versions = [RUST_VERSION],
)
@@ -95,49 +98,49 @@ use_repo(
tree_sitter_extractors_deps = use_extension("//misc/bazel/3rdparty:tree_sitter_extractors_extension.bzl", "r")
use_repo(
tree_sitter_extractors_deps,
- "vendor_ts__anyhow-1.0.98",
+ "vendor_ts__anyhow-1.0.99",
"vendor_ts__argfile-0.2.1",
- "vendor_ts__chalk-ir-0.103.0",
+ "vendor_ts__chalk-ir-0.104.0",
"vendor_ts__chrono-0.4.41",
- "vendor_ts__clap-4.5.40",
+ "vendor_ts__clap-4.5.44",
"vendor_ts__dunce-1.0.5",
"vendor_ts__either-1.15.0",
"vendor_ts__encoding-0.2.33",
"vendor_ts__figment-0.10.19",
"vendor_ts__flate2-1.1.0",
- "vendor_ts__glob-0.3.2",
+ "vendor_ts__glob-0.3.3",
"vendor_ts__globset-0.4.15",
"vendor_ts__itertools-0.14.0",
"vendor_ts__lazy_static-1.5.0",
"vendor_ts__mustache-0.9.0",
"vendor_ts__num-traits-0.2.19",
"vendor_ts__num_cpus-1.17.0",
- "vendor_ts__proc-macro2-1.0.95",
+ "vendor_ts__proc-macro2-1.0.97",
"vendor_ts__quote-1.0.40",
- "vendor_ts__ra_ap_base_db-0.0.288",
- "vendor_ts__ra_ap_cfg-0.0.288",
- "vendor_ts__ra_ap_hir-0.0.288",
- "vendor_ts__ra_ap_hir_def-0.0.288",
- "vendor_ts__ra_ap_hir_expand-0.0.288",
- "vendor_ts__ra_ap_hir_ty-0.0.288",
- "vendor_ts__ra_ap_ide_db-0.0.288",
- "vendor_ts__ra_ap_intern-0.0.288",
- "vendor_ts__ra_ap_load-cargo-0.0.288",
- "vendor_ts__ra_ap_parser-0.0.288",
- "vendor_ts__ra_ap_paths-0.0.288",
- "vendor_ts__ra_ap_project_model-0.0.288",
- "vendor_ts__ra_ap_span-0.0.288",
- "vendor_ts__ra_ap_stdx-0.0.288",
- "vendor_ts__ra_ap_syntax-0.0.288",
- "vendor_ts__ra_ap_vfs-0.0.288",
- "vendor_ts__rand-0.9.1",
+ "vendor_ts__ra_ap_base_db-0.0.300",
+ "vendor_ts__ra_ap_cfg-0.0.300",
+ "vendor_ts__ra_ap_hir-0.0.300",
+ "vendor_ts__ra_ap_hir_def-0.0.300",
+ "vendor_ts__ra_ap_hir_expand-0.0.300",
+ "vendor_ts__ra_ap_hir_ty-0.0.300",
+ "vendor_ts__ra_ap_ide_db-0.0.300",
+ "vendor_ts__ra_ap_intern-0.0.300",
+ "vendor_ts__ra_ap_load-cargo-0.0.300",
+ "vendor_ts__ra_ap_parser-0.0.300",
+ "vendor_ts__ra_ap_paths-0.0.300",
+ "vendor_ts__ra_ap_project_model-0.0.300",
+ "vendor_ts__ra_ap_span-0.0.300",
+ "vendor_ts__ra_ap_stdx-0.0.300",
+ "vendor_ts__ra_ap_syntax-0.0.300",
+ "vendor_ts__ra_ap_vfs-0.0.300",
+ "vendor_ts__rand-0.9.2",
"vendor_ts__rayon-1.10.0",
"vendor_ts__regex-1.11.1",
"vendor_ts__serde-1.0.219",
- "vendor_ts__serde_json-1.0.140",
- "vendor_ts__serde_with-3.13.0",
- "vendor_ts__syn-2.0.103",
- "vendor_ts__toml-0.8.23",
+ "vendor_ts__serde_json-1.0.142",
+ "vendor_ts__serde_with-3.14.0",
+ "vendor_ts__syn-2.0.104",
+ "vendor_ts__toml-0.9.5",
"vendor_ts__tracing-0.1.41",
"vendor_ts__tracing-flame-0.2.0",
"vendor_ts__tracing-subscriber-0.3.19",
@@ -260,7 +263,7 @@ use_repo(
)
go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk")
-go_sdk.download(version = "1.24.0")
+go_sdk.download(version = "1.25.0")
go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps")
go_deps.from_file(go_mod = "//go/extractor:go.mod")
diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md
index dffad0539b0..bd6b24ef487 100644
--- a/actions/ql/lib/CHANGELOG.md
+++ b/actions/ql/lib/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.15
+
+No user-facing changes.
+
## 0.4.14
No user-facing changes.
diff --git a/actions/ql/lib/change-notes/released/0.4.15.md b/actions/ql/lib/change-notes/released/0.4.15.md
new file mode 100644
index 00000000000..364e11a8706
--- /dev/null
+++ b/actions/ql/lib/change-notes/released/0.4.15.md
@@ -0,0 +1,3 @@
+## 0.4.15
+
+No user-facing changes.
diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml
index 3841668fe04..613c98e4872 100644
--- a/actions/ql/lib/codeql-pack.release.yml
+++ b/actions/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.4.14
+lastReleaseVersion: 0.4.15
diff --git a/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll
index 1d461cca3df..679b8977cf9 100644
--- a/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll
+++ b/actions/ql/lib/codeql/actions/security/ArgumentInjectionQuery.qll
@@ -1,6 +1,7 @@
private import actions
private import codeql.actions.TaintTracking
private import codeql.actions.dataflow.ExternalFlow
+private import codeql.actions.security.ControlChecks
import codeql.actions.dataflow.FlowSources
import codeql.actions.DataFlow
@@ -65,6 +66,16 @@ class ArgumentInjectionFromMaDSink extends ArgumentInjectionSink {
override string getCommand() { result = "unknown" }
}
+/**
+ * Gets the event that is relevant for the given node in the context of argument injection.
+ *
+ * This is used to highlight the event in the query results when an alert is raised.
+ */
+Event getRelevantEventInPrivilegedContext(DataFlow::Node node) {
+ inPrivilegedContext(node.asExpr(), result) and
+ not exists(ControlCheck check | check.protects(node.asExpr(), result, "argument-injection"))
+}
+
/**
* A taint-tracking configuration for unsafe user input
* that is used to construct and evaluate a code script.
@@ -88,6 +99,16 @@ private module ArgumentInjectionConfig implements DataFlow::ConfigSig {
run.getScript().getAnEnvReachingArgumentInjectionSink(var, _, _)
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = getRelevantEventInPrivilegedContext(sink).getLocation()
+ }
}
/** Tracks flow of unsafe user input that is used to construct and evaluate a code script. */
diff --git a/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll b/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll
index f0649bb8174..76025a9ba0d 100644
--- a/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll
+++ b/actions/ql/lib/codeql/actions/security/ArtifactPoisoningQuery.qll
@@ -4,6 +4,7 @@ import codeql.actions.DataFlow
import codeql.actions.dataflow.FlowSources
import codeql.actions.security.PoisonableSteps
import codeql.actions.security.UntrustedCheckoutQuery
+import codeql.actions.security.ControlChecks
string unzipRegexp() { result = "(unzip|tar)\\s+.*" }
@@ -292,6 +293,16 @@ class ArtifactPoisoningSink extends DataFlow::Node {
string getPath() { result = download.getPath() }
}
+/**
+ * Gets the event that is relevant for the given node in the context of artifact poisoning.
+ *
+ * This is used to highlight the event in the query results when an alert is raised.
+ */
+Event getRelevantEventInPrivilegedContext(DataFlow::Node node) {
+ inPrivilegedContext(node.asExpr(), result) and
+ not exists(ControlCheck check | check.protects(node.asExpr(), result, "artifact-poisoning"))
+}
+
/**
* A taint-tracking configuration for unsafe artifacts
* that is used may lead to artifact poisoning
@@ -318,6 +329,16 @@ private module ArtifactPoisoningConfig implements DataFlow::ConfigSig {
exists(run.getScript().getAFileReadCommand())
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = getRelevantEventInPrivilegedContext(sink).getLocation()
+ }
}
/** Tracks flow of unsafe artifacts that is used in an insecure way. */
diff --git a/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll
index fac498f72da..c58e3949a02 100644
--- a/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll
+++ b/actions/ql/lib/codeql/actions/security/CodeInjectionQuery.qll
@@ -3,6 +3,8 @@ private import codeql.actions.TaintTracking
private import codeql.actions.dataflow.ExternalFlow
import codeql.actions.dataflow.FlowSources
import codeql.actions.DataFlow
+import codeql.actions.security.ControlChecks
+import codeql.actions.security.CachePoisoningQuery
class CodeInjectionSink extends DataFlow::Node {
CodeInjectionSink() {
@@ -11,6 +13,46 @@ class CodeInjectionSink extends DataFlow::Node {
}
}
+/**
+ * Get the relevant event for the sink in CodeInjectionCritical.ql.
+ */
+Event getRelevantCriticalEventForSink(DataFlow::Node sink) {
+ inPrivilegedContext(sink.asExpr(), result) and
+ not exists(ControlCheck check | check.protects(sink.asExpr(), result, "code-injection")) and
+ // exclude cases where the sink is a JS script and the expression uses toJson
+ not exists(UsesStep script |
+ script.getCallee() = "actions/github-script" and
+ script.getArgumentExpr("script") = sink.asExpr() and
+ exists(getAToJsonReferenceExpression(sink.asExpr().(Expression).getExpression(), _))
+ )
+}
+
+/**
+ * Get the relevant event for the sink in CachePoisoningViaCodeInjection.ql.
+ */
+Event getRelevantCachePoisoningEventForSink(DataFlow::Node sink) {
+ exists(LocalJob job |
+ job = sink.asExpr().getEnclosingJob() and
+ job.getATriggerEvent() = result and
+ // job can be triggered by an external user
+ result.isExternallyTriggerable() and
+ // excluding privileged workflows since they can be exploited in easier circumstances
+ // which is covered by `actions/code-injection/critical`
+ not job.isPrivilegedExternallyTriggerable(result) and
+ (
+ // the workflow runs in the context of the default branch
+ runsOnDefaultBranch(result)
+ or
+ // the workflow caller runs in the context of the default branch
+ result.getName() = "workflow_call" and
+ exists(ExternalJob caller |
+ caller.getCallee() = job.getLocation().getFile().getRelativePath() and
+ runsOnDefaultBranch(caller.getATriggerEvent())
+ )
+ )
+ )
+}
+
/**
* A taint-tracking configuration for unsafe user input
* that is used to construct and evaluate a code script.
@@ -35,6 +77,18 @@ private module CodeInjectionConfig implements DataFlow::ConfigSig {
exists(run.getScript().getAFileReadCommand())
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = getRelevantCriticalEventForSink(sink).getLocation()
+ or
+ result = getRelevantCachePoisoningEventForSink(sink).getLocation()
+ }
}
/** Tracks flow of unsafe user input that is used to construct and evaluate a code script. */
diff --git a/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll
index 59d523cd582..ffa16b0f940 100644
--- a/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll
+++ b/actions/ql/lib/codeql/actions/security/CommandInjectionQuery.qll
@@ -3,11 +3,20 @@ private import codeql.actions.TaintTracking
private import codeql.actions.dataflow.ExternalFlow
import codeql.actions.dataflow.FlowSources
import codeql.actions.DataFlow
+import codeql.actions.security.ControlChecks
private class CommandInjectionSink extends DataFlow::Node {
CommandInjectionSink() { madSink(this, "command-injection") }
}
+/** Get the relevant event for the sink in CommandInjectionCritical.ql. */
+Event getRelevantEventInPrivilegedContext(DataFlow::Node sink) {
+ inPrivilegedContext(sink.asExpr(), result) and
+ not exists(ControlCheck check |
+ check.protects(sink.asExpr(), result, ["command-injection", "code-injection"])
+ )
+}
+
/**
* A taint-tracking configuration for unsafe user input
* that is used to construct and evaluate a system command.
@@ -16,6 +25,16 @@ private module CommandInjectionConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource }
predicate isSink(DataFlow::Node sink) { sink instanceof CommandInjectionSink }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = getRelevantEventInPrivilegedContext(sink).getLocation()
+ }
}
/** Tracks flow of unsafe user input that is used to construct and evaluate a system command. */
diff --git a/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll
index 33efc9b1bc8..46c1c4d3200 100644
--- a/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll
+++ b/actions/ql/lib/codeql/actions/security/EnvPathInjectionQuery.qll
@@ -72,6 +72,25 @@ class EnvPathInjectionFromMaDSink extends EnvPathInjectionSink {
EnvPathInjectionFromMaDSink() { madSink(this, "envpath-injection") }
}
+/**
+ * Get the relevant event for a sink in EnvPathInjectionCritical.ql where the source type is "artifact".
+ */
+Event getRelevantArtifactEventInPrivilegedContext(DataFlow::Node sink) {
+ inPrivilegedContext(sink.asExpr(), result) and
+ not exists(ControlCheck check |
+ check.protects(sink.asExpr(), result, ["untrusted-checkout", "artifact-poisoning"])
+ ) and
+ sink instanceof EnvPathInjectionFromFileReadSink
+}
+
+/**
+ * Get the relevant event for a sink in EnvPathInjectionCritical.ql where the source type is not "artifact".
+ */
+Event getRelevantNonArtifactEventInPrivilegedContext(DataFlow::Node sink) {
+ inPrivilegedContext(sink.asExpr(), result) and
+ not exists(ControlCheck check | check.protects(sink.asExpr(), result, "code-injection"))
+}
+
/**
* A taint-tracking configuration for unsafe user input
* that is used to construct and evaluate an environment variable.
@@ -108,6 +127,18 @@ private module EnvPathInjectionConfig implements DataFlow::ConfigSig {
exists(run.getScript().getAFileReadCommand())
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = getRelevantArtifactEventInPrivilegedContext(sink).getLocation()
+ or
+ result = getRelevantNonArtifactEventInPrivilegedContext(sink).getLocation()
+ }
}
/** Tracks flow of unsafe user input that is used to construct and evaluate the PATH environment variable. */
diff --git a/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll b/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll
index 656ea1207b5..2022e3dca99 100644
--- a/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll
+++ b/actions/ql/lib/codeql/actions/security/EnvVarInjectionQuery.qll
@@ -126,6 +126,32 @@ class EnvVarInjectionFromMaDSink extends EnvVarInjectionSink {
EnvVarInjectionFromMaDSink() { madSink(this, "envvar-injection") }
}
+/**
+ * Get the relevant event for a sink in EnvVarInjectionCritical.ql where the source type is "artifact".
+ */
+Event getRelevantArtifactEventInPrivilegedContext(DataFlow::Node sink) {
+ inPrivilegedContext(sink.asExpr(), result) and
+ not exists(ControlCheck check |
+ check
+ .protects(sink.asExpr(), result,
+ ["envvar-injection", "untrusted-checkout", "artifact-poisoning"])
+ ) and
+ (
+ sink instanceof EnvVarInjectionFromFileReadSink or
+ madSink(sink, "envvar-injection")
+ )
+}
+
+/**
+ * Get the relevant event for a sink in EnvVarInjectionCritical.ql where the source type is not "artifact".
+ */
+Event getRelevantNonArtifactEventInPrivilegedContext(DataFlow::Node sink) {
+ inPrivilegedContext(sink.asExpr(), result) and
+ not exists(ControlCheck check |
+ check.protects(sink.asExpr(), result, ["envvar-injection", "code-injection"])
+ )
+}
+
/**
* A taint-tracking configuration for unsafe user input
* that is used to construct and evaluate an environment variable.
@@ -163,6 +189,18 @@ private module EnvVarInjectionConfig implements DataFlow::ConfigSig {
exists(run.getScript().getAFileReadCommand())
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = getRelevantArtifactEventInPrivilegedContext(sink).getLocation()
+ or
+ result = getRelevantNonArtifactEventInPrivilegedContext(sink).getLocation()
+ }
}
/** Tracks flow of unsafe user input that is used to construct and evaluate an environment variable. */
diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml
index dd2723b0315..c10bedbaef6 100644
--- a/actions/ql/lib/qlpack.yml
+++ b/actions/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/actions-all
-version: 0.4.15-dev
+version: 0.4.16-dev
library: true
warnOnImplicitThis: true
dependencies:
diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md
index 09fb20778fc..769ce155451 100644
--- a/actions/ql/src/CHANGELOG.md
+++ b/actions/ql/src/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.7
+
+No user-facing changes.
+
## 0.6.6
No user-facing changes.
diff --git a/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql b/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql
index 3e6d63a4604..30bb0fd366f 100644
--- a/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql
+++ b/actions/ql/src/Security/CWE-077/EnvPathInjectionCritical.ql
@@ -21,18 +21,12 @@ import codeql.actions.security.ControlChecks
from EnvPathInjectionFlow::PathNode source, EnvPathInjectionFlow::PathNode sink, Event event
where
EnvPathInjectionFlow::flowPath(source, sink) and
- inPrivilegedContext(sink.getNode().asExpr(), event) and
(
not source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and
- not exists(ControlCheck check |
- check.protects(sink.getNode().asExpr(), event, "code-injection")
- )
+ event = getRelevantNonArtifactEventInPrivilegedContext(sink.getNode())
or
source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and
- not exists(ControlCheck check |
- check.protects(sink.getNode().asExpr(), event, ["untrusted-checkout", "artifact-poisoning"])
- ) and
- sink.getNode() instanceof EnvPathInjectionFromFileReadSink
+ event = getRelevantArtifactEventInPrivilegedContext(sink.getNode())
)
select sink.getNode(), source, sink,
"Potential PATH environment variable injection in $@, which may be controlled by an external user ($@).",
diff --git a/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql b/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql
index 28ad3b5b5d2..6f0d9729d6d 100644
--- a/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql
+++ b/actions/ql/src/Security/CWE-077/EnvVarInjectionCritical.ql
@@ -22,26 +22,15 @@ import codeql.actions.security.ControlChecks
from EnvVarInjectionFlow::PathNode source, EnvVarInjectionFlow::PathNode sink, Event event
where
EnvVarInjectionFlow::flowPath(source, sink) and
- inPrivilegedContext(sink.getNode().asExpr(), event) and
// exclude paths to file read sinks from non-artifact sources
(
// source is text
not source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and
- not exists(ControlCheck check |
- check.protects(sink.getNode().asExpr(), event, ["envvar-injection", "code-injection"])
- )
+ event = getRelevantNonArtifactEventInPrivilegedContext(sink.getNode())
or
// source is an artifact or a file from an untrusted checkout
source.getNode().(RemoteFlowSource).getSourceType() = "artifact" and
- not exists(ControlCheck check |
- check
- .protects(sink.getNode().asExpr(), event,
- ["envvar-injection", "untrusted-checkout", "artifact-poisoning"])
- ) and
- (
- sink.getNode() instanceof EnvVarInjectionFromFileReadSink or
- madSink(sink.getNode(), "envvar-injection")
- )
+ event = getRelevantArtifactEventInPrivilegedContext(sink.getNode())
)
select sink.getNode(), source, sink,
"Potential environment variable injection in $@, which may be controlled by an external user ($@).",
diff --git a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql
index c4ab00837ca..ed30e4da71c 100644
--- a/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql
+++ b/actions/ql/src/Security/CWE-094/CodeInjectionCritical.ql
@@ -22,15 +22,8 @@ import codeql.actions.security.ControlChecks
from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, Event event
where
CodeInjectionFlow::flowPath(source, sink) and
- inPrivilegedContext(sink.getNode().asExpr(), event) and
- source.getNode().(RemoteFlowSource).getEventName() = event.getName() and
- not exists(ControlCheck check | check.protects(sink.getNode().asExpr(), event, "code-injection")) and
- // exclude cases where the sink is a JS script and the expression uses toJson
- not exists(UsesStep script |
- script.getCallee() = "actions/github-script" and
- script.getArgumentExpr("script") = sink.getNode().asExpr() and
- exists(getAToJsonReferenceExpression(sink.getNode().asExpr().(Expression).getExpression(), _))
- )
+ event = getRelevantCriticalEventForSink(sink.getNode()) and
+ source.getNode().(RemoteFlowSource).getEventName() = event.getName()
select sink.getNode(), source, sink,
"Potential code injection in $@, which may be controlled by an external user ($@).", sink,
sink.getNode().asExpr().(Expression).getRawExpression(), event, event.getName()
diff --git a/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql b/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql
index 23e1f223073..2fe792aba1e 100644
--- a/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql
+++ b/actions/ql/src/Security/CWE-349/CachePoisoningViaCodeInjection.ql
@@ -18,30 +18,13 @@ import codeql.actions.security.CachePoisoningQuery
import CodeInjectionFlow::PathGraph
import codeql.actions.security.ControlChecks
-from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, LocalJob job, Event event
+from CodeInjectionFlow::PathNode source, CodeInjectionFlow::PathNode sink, Event event
where
CodeInjectionFlow::flowPath(source, sink) and
- job = sink.getNode().asExpr().getEnclosingJob() and
- job.getATriggerEvent() = event and
- // job can be triggered by an external user
- event.isExternallyTriggerable() and
+ event = getRelevantCachePoisoningEventForSink(sink.getNode()) and
// the checkout is not controlled by an access check
not exists(ControlCheck check |
check.protects(source.getNode().asExpr(), event, "code-injection")
- ) and
- // excluding privileged workflows since they can be exploited in easier circumstances
- // which is covered by `actions/code-injection/critical`
- not job.isPrivilegedExternallyTriggerable(event) and
- (
- // the workflow runs in the context of the default branch
- runsOnDefaultBranch(event)
- or
- // the workflow caller runs in the context of the default branch
- event.getName() = "workflow_call" and
- exists(ExternalJob caller |
- caller.getCallee() = job.getLocation().getFile().getRelativePath() and
- runsOnDefaultBranch(caller.getATriggerEvent())
- )
)
select sink.getNode(), source, sink,
"Unprivileged code injection in $@, which may lead to cache poisoning ($@).", sink,
diff --git a/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql b/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql
index afef7bdd82b..24ecb4b0339 100644
--- a/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql
+++ b/actions/ql/src/Security/CWE-829/ArtifactPoisoningCritical.ql
@@ -19,10 +19,7 @@ import codeql.actions.security.ControlChecks
from ArtifactPoisoningFlow::PathNode source, ArtifactPoisoningFlow::PathNode sink, Event event
where
ArtifactPoisoningFlow::flowPath(source, sink) and
- inPrivilegedContext(sink.getNode().asExpr(), event) and
- not exists(ControlCheck check |
- check.protects(sink.getNode().asExpr(), event, "artifact-poisoning")
- )
+ event = getRelevantEventInPrivilegedContext(sink.getNode())
select sink.getNode(), source, sink,
"Potential artifact poisoning in $@, which may be controlled by an external user ($@).", sink,
sink.getNode().toString(), event, event.getName()
diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md
index 50e81cc240c..de3307550ad 100644
--- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md
+++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.md
@@ -1,6 +1,6 @@
## Overview
-GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job.
+GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job.
## Recommendation
@@ -32,7 +32,7 @@ jobs:
- uses: actions/setup-node@v1
- run: |
- npm install
+ npm install #Â scripts in package.json from PR would be executed here
npm build
- uses: completely/fakeaction@v2
diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md
index 50e81cc240c..de3307550ad 100644
--- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md
+++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutHigh.md
@@ -1,6 +1,6 @@
## Overview
-GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job.
+GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job.
## Recommendation
@@ -32,7 +32,7 @@ jobs:
- uses: actions/setup-node@v1
- run: |
- npm install
+ npm install #Â scripts in package.json from PR would be executed here
npm build
- uses: completely/fakeaction@v2
diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md
index 50e81cc240c..de3307550ad 100644
--- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md
+++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutMedium.md
@@ -1,6 +1,6 @@
## Overview
-GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed in a privileged job.
+GitHub workflows can be triggered through various repository events, including incoming pull requests (PRs) or comments on Issues/PRs. A potentially dangerous misuse of the triggers such as `pull_request_target` or `issue_comment` followed by an explicit checkout of untrusted code (Pull Request HEAD) may lead to repository compromise if untrusted code gets executed (e.g., due to a modified build script) in a privileged job.
## Recommendation
@@ -32,7 +32,7 @@ jobs:
- uses: actions/setup-node@v1
- run: |
- npm install
+ npm install #Â scripts in package.json from PR would be executed here
npm build
- uses: completely/fakeaction@v2
diff --git a/actions/ql/src/change-notes/released/0.6.7.md b/actions/ql/src/change-notes/released/0.6.7.md
new file mode 100644
index 00000000000..c185761a60f
--- /dev/null
+++ b/actions/ql/src/change-notes/released/0.6.7.md
@@ -0,0 +1,3 @@
+## 0.6.7
+
+No user-facing changes.
diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml
index f4cae0a77ad..a6d2952e5fb 100644
--- a/actions/ql/src/codeql-pack.release.yml
+++ b/actions/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.6.6
+lastReleaseVersion: 0.6.7
diff --git a/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql b/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql
index 7d45b25b1a2..2ed98d714da 100644
--- a/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql
+++ b/actions/ql/src/experimental/Security/CWE-078/CommandInjectionCritical.ql
@@ -21,10 +21,7 @@ import codeql.actions.security.ControlChecks
from CommandInjectionFlow::PathNode source, CommandInjectionFlow::PathNode sink, Event event
where
CommandInjectionFlow::flowPath(source, sink) and
- inPrivilegedContext(sink.getNode().asExpr(), event) and
- not exists(ControlCheck check |
- check.protects(sink.getNode().asExpr(), event, ["command-injection", "code-injection"])
- )
+ event = getRelevantEventInPrivilegedContext(sink.getNode())
select sink.getNode(), source, sink,
"Potential command injection in $@, which may be controlled by an external user ($@).", sink,
sink.getNode().asExpr().(Expression).getRawExpression(), event, event.getName()
diff --git a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql
index 6930e2f684a..ecab01dd114 100644
--- a/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql
+++ b/actions/ql/src/experimental/Security/CWE-088/ArgumentInjectionCritical.ql
@@ -20,10 +20,7 @@ import codeql.actions.security.ControlChecks
from ArgumentInjectionFlow::PathNode source, ArgumentInjectionFlow::PathNode sink, Event event
where
ArgumentInjectionFlow::flowPath(source, sink) and
- inPrivilegedContext(sink.getNode().asExpr(), event) and
- not exists(ControlCheck check |
- check.protects(sink.getNode().asExpr(), event, "argument-injection")
- )
+ event = getRelevantEventInPrivilegedContext(sink.getNode())
select sink.getNode(), source, sink,
"Potential argument injection in $@ command, which may be controlled by an external user ($@).",
sink, sink.getNode().(ArgumentInjectionSink).getCommand(), event, event.getName()
diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml
index 911d1e19168..11e5bb790b7 100644
--- a/actions/ql/src/qlpack.yml
+++ b/actions/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/actions-queries
-version: 0.6.7-dev
+version: 0.6.8-dev
library: false
warnOnImplicitThis: true
groups: [actions, queries]
diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md
index def048bdd3c..7abedf38ee1 100644
--- a/cpp/ql/lib/CHANGELOG.md
+++ b/cpp/ql/lib/CHANGELOG.md
@@ -1,3 +1,11 @@
+## 5.4.1
+
+### Minor Analysis Improvements
+
+* The guards libraries (`semmle.code.cpp.controlflow.Guards` and `semmle.code.cpp.controlflow.IRGuards`) have been improved to recognize more guards.
+* Improved dataflow through global variables in the new dataflow library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables.
+* The global value numbering library (`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and `semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number.
+
## 5.4.0
### New Features
diff --git a/cpp/ql/lib/Customizations.qll b/cpp/ql/lib/Customizations.qll
new file mode 100644
index 00000000000..c9d899e07e0
--- /dev/null
+++ b/cpp/ql/lib/Customizations.qll
@@ -0,0 +1,11 @@
+/**
+ * Contains customizations to the standard library.
+ *
+ * This module is imported by `cpp.qll`, so any customizations defined here automatically
+ * apply to all queries.
+ *
+ * Typical examples of customizations include adding new subclasses of abstract classes such as
+ * the `RemoteFlowSource` class to model frameworks that are not covered by the standard library.
+ */
+
+import cpp
diff --git a/cpp/ql/lib/change-notes/2025-08-02-gvn.md b/cpp/ql/lib/change-notes/2025-08-02-gvn.md
deleted file mode 100644
index 70c9f7dbb15..00000000000
--- a/cpp/ql/lib/change-notes/2025-08-02-gvn.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: minorAnalysis
----
-* The global value numbering library (`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and `semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number.
\ No newline at end of file
diff --git a/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md b/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md
deleted file mode 100644
index c140570df31..00000000000
--- a/cpp/ql/lib/change-notes/2025-08-11-global-variable-flow.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: minorAnalysis
----
-* Improved dataflow through global variables in the new dataflow library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables.
\ No newline at end of file
diff --git a/cpp/ql/lib/change-notes/2025-08-19-virtual-dispatch.md b/cpp/ql/lib/change-notes/2025-08-19-virtual-dispatch.md
new file mode 100644
index 00000000000..4342bb7f62d
--- /dev/null
+++ b/cpp/ql/lib/change-notes/2025-08-19-virtual-dispatch.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* The new dataflow/taint-tracking library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`) now resolves virtual function calls more precisely. This results in fewer false positives when running dataflow/taint-tracking queries on C++ projects.
\ No newline at end of file
diff --git a/cpp/ql/lib/change-notes/released/5.4.1.md b/cpp/ql/lib/change-notes/released/5.4.1.md
new file mode 100644
index 00000000000..ae345bbf8d8
--- /dev/null
+++ b/cpp/ql/lib/change-notes/released/5.4.1.md
@@ -0,0 +1,7 @@
+## 5.4.1
+
+### Minor Analysis Improvements
+
+* The guards libraries (`semmle.code.cpp.controlflow.Guards` and `semmle.code.cpp.controlflow.IRGuards`) have been improved to recognize more guards.
+* Improved dataflow through global variables in the new dataflow library (`semmle.code.cpp.dataflow.new.DataFlow` and `semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables.
+* The global value numbering library (`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and `semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number.
diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml
index afb2156eaa2..7adcb16ea28 100644
--- a/cpp/ql/lib/codeql-pack.release.yml
+++ b/cpp/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 5.4.0
+lastReleaseVersion: 5.4.1
diff --git a/cpp/ql/lib/cpp.qll b/cpp/ql/lib/cpp.qll
index ccd32c368e4..c8afac1c7ae 100644
--- a/cpp/ql/lib/cpp.qll
+++ b/cpp/ql/lib/cpp.qll
@@ -13,6 +13,7 @@
* https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
*/
+import Customizations
import semmle.code.cpp.File
import semmle.code.cpp.Linkage
import semmle.code.cpp.Location
diff --git a/cpp/ql/lib/ext/ComPtr.model.yml b/cpp/ql/lib/ext/ComPtr.model.yml
new file mode 100644
index 00000000000..e6dbc781f95
--- /dev/null
+++ b/cpp/ql/lib/ext/ComPtr.model.yml
@@ -0,0 +1,21 @@
+extensions:
+ - addsTo:
+ pack: codeql/cpp-all
+ extensible: summaryModel
+ data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
+ - ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(T *)", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(const ComPtr &)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "ComPtr", "(ComPtr &&)", "", "Argument[*0].Element[@]", "Argument[-1].Element[@]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "As", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "AsIID", "", "", "Argument[-1]", "Argument[*1]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "AsWeak", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "Attach", "", "", "Argument[*@0]", "Argument[-1].Element[@]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "CopyTo", "(T **)", "", "Argument[-1].Element[@]", "Argument[**@0]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "CopyTo", "(T **)", "", "Argument[-1].Element[@]", "Argument[**@0]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "CopyTo", "(REFIID,void **)", "", "Argument[-1].Element[@]", "Argument[**@1]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "Detach", "", "", "Argument[-1].Element[@]", "ReturnValue[*]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "Get", "", "", "Argument[-1].Element[@]", "ReturnValue[*]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "GetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[**]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "ReleaseAndGetAddressOf", "", "", "Argument[-1].Element[@]", "ReturnValue[**]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "Swap", "", "", "Argument[-1]", "Argument[*0]", "value", "manual"]
+ - ["Microsoft::WRL", "ComPtr", True, "Swap", "", "", "Argument[*0]", "Argument[-1]", "value", "manual"]
diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml
index 7c1fb8aad1c..68f412126f4 100644
--- a/cpp/ql/lib/qlpack.yml
+++ b/cpp/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/cpp-all
-version: 5.4.1-dev
+version: 5.4.2-dev
groups: cpp
dbscheme: semmlecode.cpp.dbscheme
extractor: cpp
diff --git a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll
index 19723d93e90..533df517af5 100644
--- a/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll
+++ b/cpp/ql/lib/semmle/code/cpp/controlflow/IRGuards.qll
@@ -936,6 +936,77 @@ private module Cached {
ValueNumber getUnary() { result.getAnInstruction() = instr.getUnary() }
}
+ signature predicate sinkSig(Instruction instr);
+
+ private module BooleanInstruction {
+ /**
+ * Holds if `i1` flows to `i2` in a single step and `i2` is not an
+ * instruction that produces a value of Boolean type.
+ */
+ private predicate stepToNonBoolean(Instruction i1, Instruction i2) {
+ not i2.getResultIRType() instanceof IRBooleanType and
+ (
+ i2.(CopyInstruction).getSourceValue() = i1
+ or
+ i2.(ConvertInstruction).getUnary() = i1
+ or
+ i2.(BuiltinExpectCallInstruction).getArgument(0) = i1
+ )
+ }
+
+ private predicate rev(Instruction instr) {
+ isSink(instr)
+ or
+ exists(Instruction instr1 |
+ rev(instr1) and
+ stepToNonBoolean(instr, instr1)
+ )
+ }
+
+ private predicate hasBooleanType(Instruction instr) {
+ instr.getResultIRType() instanceof IRBooleanType
+ }
+
+ private predicate fwd(Instruction instr) {
+ rev(instr) and
+ (
+ hasBooleanType(instr)
+ or
+ exists(Instruction instr0 |
+ fwd(instr0) and
+ stepToNonBoolean(instr0, instr)
+ )
+ )
+ }
+
+ private predicate prunedStep(Instruction i1, Instruction i2) {
+ fwd(i1) and
+ fwd(i2) and
+ stepToNonBoolean(i1, i2)
+ }
+
+ private predicate stepsPlus(Instruction i1, Instruction i2) =
+ doublyBoundedFastTC(prunedStep/2, hasBooleanType/1, isSink/1)(i1, i2)
+
+ /**
+ * Gets the Boolean-typed instruction that defines `instr` before any
+ * integer conversions are applied, if any.
+ */
+ Instruction get(Instruction instr) {
+ isSink(instr) and
+ (
+ result = instr
+ or
+ stepsPlus(result, instr)
+ ) and
+ hasBooleanType(result)
+ }
+ }
+
+ private predicate isUnaryComparesEqLeft(Instruction instr) {
+ unary_compares_eq(_, instr.getAUse(), 0, _, _)
+ }
+
/**
* Holds if `left == right + k` is `areEqual` given that test is `testIsTrue`.
*
@@ -966,14 +1037,19 @@ private module Cached {
)
or
compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), left, right, k, areEqual, value)
- }
-
- private predicate isConvertedBool(Instruction instr) {
- instr.getResultIRType() instanceof IRBooleanType
or
- isConvertedBool(instr.(ConvertInstruction).getUnary())
- or
- isConvertedBool(instr.(BuiltinExpectCallInstruction).getCondition())
+ exists(Operand l, BooleanValue bv |
+ // 1. test = value -> int(l) = 0 is !bv
+ unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and
+ // 2. l = bv -> left + right is areEqual
+ compares_eq(valueNumber(BooleanInstruction::get(l.getDef())), left,
+ right, k, areEqual, bv)
+ // We want this to hold:
+ // `test = value -> left + right is areEqual`
+ // Applying 2 we need to show:
+ // `test = value -> l = bv`
+ // And `l = bv` holds by `int(l) = 0 is !bv`
+ )
}
/**
@@ -1006,19 +1082,11 @@ private module Cached {
k = k1 + k2
)
or
- exists(CompareValueNumber cmp, Operand left, Operand right, AbstractValue v |
- test = cmp and
- pragma[only_bind_into](cmp)
- .hasOperands(pragma[only_bind_into](left), pragma[only_bind_into](right)) and
- isConvertedBool(left.getDef()) and
- int_value(right.getDef()) = 0 and
- unary_compares_eq(valueNumberOfOperand(left), op, k, areEqual, v)
- |
- cmp instanceof CompareNEValueNumber and
- v = value
- or
- cmp instanceof CompareEQValueNumber and
- v.getDualValue() = value
+ // See argument for why this is correct in compares_eq
+ exists(Operand l, BooleanValue bv |
+ unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and
+ unary_compares_eq(valueNumber(BooleanInstruction::get(l.getDef())),
+ op, k, areEqual, bv)
)
or
unary_compares_eq(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, areEqual, value)
@@ -1116,70 +1184,26 @@ private module Cached {
)
}
+ private predicate isBuiltInExpectArg(Instruction instr) {
+ instr = any(BuiltinExpectCallInstruction buildinExpect).getArgument(0)
+ }
+
/** A call to the builtin operation `__builtin_expect`. */
private class BuiltinExpectCallInstruction extends CallInstruction {
BuiltinExpectCallInstruction() { this.getStaticCallTarget().hasName("__builtin_expect") }
/** Gets the condition of this call. */
- Instruction getCondition() { result = this.getConditionOperand().getDef() }
-
- Operand getConditionOperand() {
- // The first parameter of `__builtin_expect` has type `long`. So we skip
- // the conversion when inferring guards.
- result = this.getArgument(0).(ConvertInstruction).getUnaryOperand()
+ Instruction getCondition() {
+ result = BooleanInstruction::get(this.getArgument(0))
}
}
- /**
- * Holds if `left == right + k` is `areEqual` if `cmp` evaluates to `value`,
- * and `cmp` is an instruction that compares the value of
- * `__builtin_expect(left == right + k, _)` to `0`.
- */
- private predicate builtin_expect_eq(
- CompareValueNumber cmp, Operand left, Operand right, int k, boolean areEqual,
- AbstractValue value
- ) {
- exists(BuiltinExpectCallValueNumber call, Instruction const, AbstractValue innerValue |
- int_value(const) = 0 and
- cmp.hasOperands(call.getAUse(), const.getAUse()) and
- compares_eq(call.getCondition(), left, right, k, areEqual, innerValue)
- |
- cmp instanceof CompareNEValueNumber and
- value = innerValue
- or
- cmp instanceof CompareEQValueNumber and
- value.getDualValue() = innerValue
- )
- }
-
private predicate complex_eq(
ValueNumber cmp, Operand left, Operand right, int k, boolean areEqual, AbstractValue value
) {
sub_eq(cmp, left, right, k, areEqual, value)
or
add_eq(cmp, left, right, k, areEqual, value)
- or
- builtin_expect_eq(cmp, left, right, k, areEqual, value)
- }
-
- /**
- * Holds if `op == k` is `areEqual` if `cmp` evaluates to `value`, and `cmp` is
- * an instruction that compares the value of `__builtin_expect(op == k, _)` to `0`.
- */
- private predicate unary_builtin_expect_eq(
- CompareValueNumber cmp, Operand op, int k, boolean areEqual, AbstractValue value
- ) {
- exists(BuiltinExpectCallValueNumber call, Instruction const, AbstractValue innerValue |
- int_value(const) = 0 and
- cmp.hasOperands(call.getAUse(), const.getAUse()) and
- unary_compares_eq(call.getCondition(), op, k, areEqual, innerValue)
- |
- cmp instanceof CompareNEValueNumber and
- value = innerValue
- or
- cmp instanceof CompareEQValueNumber and
- value.getDualValue() = innerValue
- )
}
private predicate unary_complex_eq(
@@ -1188,8 +1212,6 @@ private module Cached {
unary_sub_eq(test, op, k, areEqual, value)
or
unary_add_eq(test, op, k, areEqual, value)
- or
- unary_builtin_expect_eq(test, op, k, areEqual, value)
}
/*
@@ -1215,6 +1237,15 @@ private module Cached {
exists(AbstractValue dual | value = dual.getDualValue() |
compares_lt(test.(LogicalNotValueNumber).getUnary(), left, right, k, isLt, dual)
)
+ or
+ compares_lt(test.(BuiltinExpectCallValueNumber).getCondition(), left, right, k, isLt, value)
+ or
+ // See argument for why this is correct in compares_eq
+ exists(Operand l, BooleanValue bv |
+ unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and
+ compares_lt(valueNumber(BooleanInstruction::get(l.getDef())), left,
+ right, k, isLt, bv)
+ )
}
/** Holds if `op < k` evaluates to `isLt` given that `test` evaluates to `value`. */
@@ -1234,6 +1265,15 @@ private module Cached {
int_value(const) = k1 and
k = k1 + k2
)
+ or
+ compares_lt(test.(BuiltinExpectCallValueNumber).getCondition(), op, k, isLt, value)
+ or
+ // See argument for why this is correct in compares_eq
+ exists(Operand l, BooleanValue bv |
+ unary_compares_eq(test, l, 0, bv.getValue().booleanNot(), value) and
+ compares_lt(valueNumber(BooleanInstruction::get(l.getDef())), op, k,
+ isLt, bv)
+ )
}
/** `(a < b + k) => (b > a - k) => (b >= a + (1-k))` */
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll
index b5e899bf0aa..0d63558c956 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowDispatch.qll
@@ -1,218 +1,21 @@
private import cpp
private import semmle.code.cpp.ir.IR
-private import DataFlowPrivate
+private import semmle.code.cpp.ir.dataflow.DataFlow
+private import DataFlowPrivate as DataFlowPrivate
private import DataFlowUtil
private import DataFlowImplCommon as DataFlowImplCommon
+private import codeql.typetracking.TypeTracking
+private import SsaImpl as SsaImpl
/**
- * Gets a function that might be called by `call`.
- *
- * This predicate does not take additional call targets
- * from `AdditionalCallTarget` into account.
+ * Holds if `f` has name `qualifiedName` and `nparams` parameter count. This is
+ * an approximation of its signature for the purpose of matching functions that
+ * might be the same across link targets.
*/
-cached
-DataFlowCallable defaultViableCallable(DataFlowCall call) {
- DataFlowImplCommon::forceCachingInSameStage() and
- result = call.getStaticCallTarget()
- or
- // If the target of the call does not have a body in the snapshot, it might
- // be because the target is just a header declaration, and the real target
- // will be determined at run time when the caller and callee are linked
- // together by the operating system's dynamic linker. In case a _unique_
- // function with the right signature is present in the database, we return
- // that as a potential callee.
- exists(string qualifiedName, int nparams |
- callSignatureWithoutBody(qualifiedName, nparams, call.asCallInstruction()) and
- functionSignatureWithBody(qualifiedName, nparams, result.getUnderlyingCallable()) and
- strictcount(Function other | functionSignatureWithBody(qualifiedName, nparams, other)) = 1
- )
- or
- // Virtual dispatch
- result.asSourceCallable() = call.(VirtualDispatch::DataSensitiveCall).resolve()
-}
-
-/**
- * Gets a function that might be called by `call`.
- */
-cached
-DataFlowCallable viableCallable(DataFlowCall call) {
- result = defaultViableCallable(call)
- or
- // Additional call targets
- result.getUnderlyingCallable() =
- any(AdditionalCallTarget additional)
- .viableTarget(call.asCallInstruction().getUnconvertedResultExpression())
-}
-
-/**
- * Provides virtual dispatch support compatible with the original
- * implementation of `semmle.code.cpp.security.TaintTracking`.
- */
-private module VirtualDispatch {
- /** A call that may dispatch differently depending on the qualifier value. */
- abstract class DataSensitiveCall extends DataFlowCall {
- /**
- * Gets the node whose value determines the target of this call. This node
- * could be the qualifier of a virtual dispatch or the function-pointer
- * expression in a call to a function pointer. What they have in common is
- * that we need to find out which data flows there, and then it's up to the
- * `resolve` predicate to stitch that information together and resolve the
- * call.
- */
- abstract Node getDispatchValue();
-
- /** Gets a candidate target for this call. */
- abstract Function resolve();
-
- /**
- * Whether `src` can flow to this call.
- *
- * Searches backwards from `getDispatchValue()` to `src`. The `allowFromArg`
- * parameter is true when the search is allowed to continue backwards into
- * a parameter; non-recursive callers should pass `_` for `allowFromArg`.
- */
- predicate flowsFrom(Node src, boolean allowFromArg) {
- src = this.getDispatchValue() and allowFromArg = true
- or
- exists(Node other, boolean allowOtherFromArg | this.flowsFrom(other, allowOtherFromArg) |
- // Call argument
- exists(DataFlowCall call, Position i |
- other.(ParameterNode).isParameterOf(pragma[only_bind_into](call).getStaticCallTarget(), i) and
- src.(ArgumentNode).argumentOf(call, pragma[only_bind_into](pragma[only_bind_out](i)))
- ) and
- allowOtherFromArg = true and
- allowFromArg = true
- or
- // Call return
- exists(DataFlowCall call, ReturnKind returnKind |
- other = getAnOutNode(call, returnKind) and
- returnNodeWithKindAndEnclosingCallable(src, returnKind, call.getStaticCallTarget())
- ) and
- allowFromArg = false
- or
- // Local flow
- localFlowStep(src, other) and
- allowFromArg = allowOtherFromArg
- or
- // Flow from global variable to load.
- exists(LoadInstruction load, GlobalOrNamespaceVariable var |
- var = src.asVariable() and
- other.asInstruction() = load and
- addressOfGlobal(load.getSourceAddress(), var) and
- // The `allowFromArg` concept doesn't play a role when `src` is a
- // global variable, so we just set it to a single arbitrary value for
- // performance.
- allowFromArg = true
- )
- or
- // Flow from store to global variable.
- exists(StoreInstruction store, GlobalOrNamespaceVariable var |
- var = other.asVariable() and
- store = src.asInstruction() and
- storeIntoGlobal(store, var) and
- // Setting `allowFromArg` to `true` like in the base case means we
- // treat a store to a global variable like the dispatch itself: flow
- // may come from anywhere.
- allowFromArg = true
- )
- )
- }
- }
-
- pragma[noinline]
- private predicate storeIntoGlobal(StoreInstruction store, GlobalOrNamespaceVariable var) {
- addressOfGlobal(store.getDestinationAddress(), var)
- }
-
- /** Holds if `addressInstr` is an instruction that produces the address of `var`. */
- private predicate addressOfGlobal(Instruction addressInstr, GlobalOrNamespaceVariable var) {
- // Access directly to the global variable
- addressInstr.(VariableAddressInstruction).getAstVariable() = var
- or
- // Access to a field on a global union
- exists(FieldAddressInstruction fa |
- fa = addressInstr and
- fa.getObjectAddress().(VariableAddressInstruction).getAstVariable() = var and
- fa.getField().getDeclaringType() instanceof Union
- )
- }
-
- /**
- * A ReturnNode with its ReturnKind and its enclosing callable.
- *
- * Used to fix a join ordering issue in flowsFrom.
- */
- pragma[noinline]
- private predicate returnNodeWithKindAndEnclosingCallable(
- ReturnNode node, ReturnKind kind, DataFlowCallable callable
- ) {
- node.getKind() = kind and
- node.getFunction() = callable.getUnderlyingCallable()
- }
-
- /** Call through a function pointer. */
- private class DataSensitiveExprCall extends DataSensitiveCall {
- DataSensitiveExprCall() { not exists(this.getStaticCallTarget()) }
-
- override Node getDispatchValue() { result.asOperand() = this.getCallTargetOperand() }
-
- override Function resolve() {
- exists(FunctionInstruction fi |
- this.flowsFrom(instructionNode(fi), _) and
- result = fi.getFunctionSymbol()
- ) and
- (
- this.getNumberOfArguments() <= result.getEffectiveNumberOfParameters() and
- this.getNumberOfArguments() >= result.getEffectiveNumberOfParameters()
- or
- result.isVarargs()
- )
- }
- }
-
- /** Call to a virtual function. */
- private class DataSensitiveOverriddenFunctionCall extends DataSensitiveCall {
- DataSensitiveOverriddenFunctionCall() {
- exists(
- this.getStaticCallTarget()
- .getUnderlyingCallable()
- .(VirtualFunction)
- .getAnOverridingFunction()
- )
- }
-
- override Node getDispatchValue() { result.asInstruction() = this.getArgument(-1) }
-
- override MemberFunction resolve() {
- exists(Class overridingClass |
- this.overrideMayAffectCall(overridingClass, result) and
- this.hasFlowFromCastFrom(overridingClass)
- )
- }
-
- /**
- * Holds if `this` is a virtual function call whose static target is
- * overridden by `overridingFunction` in `overridingClass`.
- */
- pragma[noinline]
- private predicate overrideMayAffectCall(Class overridingClass, MemberFunction overridingFunction) {
- overridingFunction.getAnOverriddenFunction+() =
- this.getStaticCallTarget().getUnderlyingCallable().(VirtualFunction) and
- overridingFunction.getDeclaringType() = overridingClass
- }
-
- /**
- * Holds if the qualifier of `this` has flow from an upcast from
- * `derivedClass`.
- */
- pragma[noinline]
- private predicate hasFlowFromCastFrom(Class derivedClass) {
- exists(ConvertToBaseInstruction toBase |
- this.flowsFrom(instructionNode(toBase), _) and
- derivedClass = toBase.getDerivedClass()
- )
- }
- }
+private predicate functionSignature(Function f, string qualifiedName, int nparams) {
+ qualifiedName = f.getQualifiedName() and
+ nparams = f.getNumberOfParameters() and
+ not f.isStatic()
}
/**
@@ -238,34 +41,319 @@ private predicate callSignatureWithoutBody(string qualifiedName, int nparams, Ca
}
/**
- * Holds if `f` has name `qualifiedName` and `nparams` parameter count. This is
- * an approximation of its signature for the purpose of matching functions that
- * might be the same across link targets.
+ * Gets a function that might be called by `call`.
+ *
+ * This predicate does not take additional call targets
+ * from `AdditionalCallTarget` into account.
*/
-private predicate functionSignature(Function f, string qualifiedName, int nparams) {
- qualifiedName = f.getQualifiedName() and
- nparams = f.getNumberOfParameters() and
- not f.isStatic()
+cached
+DataFlowPrivate::DataFlowCallable defaultViableCallable(DataFlowPrivate::DataFlowCall call) {
+ result = defaultViableCallableWithoutLambda(call)
+ or
+ result = DataFlowImplCommon::viableCallableLambda(call, _)
+}
+
+private DataFlowPrivate::DataFlowCallable defaultViableCallableWithoutLambda(
+ DataFlowPrivate::DataFlowCall call
+) {
+ DataFlowImplCommon::forceCachingInSameStage() and
+ result = call.getStaticCallTarget()
+ or
+ // If the target of the call does not have a body in the snapshot, it might
+ // be because the target is just a header declaration, and the real target
+ // will be determined at run time when the caller and callee are linked
+ // together by the operating system's dynamic linker. In case a _unique_
+ // function with the right signature is present in the database, we return
+ // that as a potential callee.
+ exists(string qualifiedName, int nparams |
+ callSignatureWithoutBody(qualifiedName, nparams, call.asCallInstruction()) and
+ functionSignatureWithBody(qualifiedName, nparams, result.getUnderlyingCallable()) and
+ strictcount(Function other | functionSignatureWithBody(qualifiedName, nparams, other)) = 1
+ )
+}
+
+/**
+ * Gets a function that might be called by `call`.
+ */
+private DataFlowPrivate::DataFlowCallable nonVirtualDispatch(DataFlowPrivate::DataFlowCall call) {
+ result = defaultViableCallableWithoutLambda(call)
+ or
+ // Additional call targets
+ result.getUnderlyingCallable() =
+ any(AdditionalCallTarget additional)
+ .viableTarget(call.asCallInstruction().getUnconvertedResultExpression())
+}
+
+private class RelevantNode extends Node {
+ RelevantNode() { this.getType().stripType() instanceof Class }
+}
+
+private signature DataFlowPrivate::DataFlowCallable methodDispatchSig(
+ DataFlowPrivate::DataFlowCall c
+);
+
+private predicate ignoreConstructor(Expr e) {
+ e instanceof ConstructorDirectInit or
+ e instanceof ConstructorVirtualInit or
+ e instanceof ConstructorDelegationInit or
+ exists(ConstructorFieldInit init | init.getExpr() = e)
+}
+
+/**
+ * Holds if `n` is either:
+ * - the post-update node of a qualifier after a call to a constructor which
+ * constructs an object containing at least one virtual function.
+ * - a node which represents a derived-to-base instruction that converts from `c`.
+ */
+private predicate qualifierSourceImpl(RelevantNode n, Class c) {
+ // Object construction
+ exists(CallInstruction call, ThisArgumentOperand qualifier, Call e |
+ qualifier = call.getThisArgumentOperand() and
+ n.(PostUpdateNode).getPreUpdateNode().asOperand() = qualifier and
+ call.getStaticCallTarget() instanceof Constructor and
+ qualifier.getType().stripType() = c and
+ c.getABaseClass*().getAMemberFunction().isVirtual() and
+ e = call.getUnconvertedResultExpression() and
+ not ignoreConstructor(e)
+ |
+ exists(c.getABaseClass())
+ or
+ exists(c.getADerivedClass())
+ )
+ or
+ // Conversion to a base class
+ exists(ConvertToBaseInstruction convert |
+ // Only keep the most specific cast
+ not convert.getUnary() instanceof ConvertToBaseInstruction and
+ n.asInstruction() = convert and
+ convert.getDerivedClass() = c and
+ c.getABaseClass*().getAMemberFunction().isVirtual()
+ )
+}
+
+private module TrackVirtualDispatch {
+ /**
+ * Gets a possible runtime target of `c` using both static call-target
+ * information, and call-target resolution from `virtualDispatch0`.
+ */
+ private DataFlowPrivate::DataFlowCallable dispatch(DataFlowPrivate::DataFlowCall c) {
+ result = nonVirtualDispatch(c) or
+ result = virtualDispatch0(c)
+ }
+
+ private module TtInput implements TypeTrackingInput {
+ final class Node = RelevantNode;
+
+ class LocalSourceNode extends Node {
+ LocalSourceNode() {
+ this instanceof ParameterNode
+ or
+ this instanceof DataFlowPrivate::OutNode
+ or
+ DataFlowPrivate::readStep(_, _, this)
+ or
+ DataFlowPrivate::storeStep(_, _, this)
+ or
+ DataFlowPrivate::jumpStep(_, this)
+ or
+ qualifierSourceImpl(this, _)
+ }
+ }
+
+ final private class ContentSetFinal = ContentSet;
+
+ class Content extends ContentSetFinal {
+ Content() {
+ exists(DataFlow::Content c |
+ this.isSingleton(c) and
+ c.getIndirectionIndex() = 1
+ )
+ }
+ }
+
+ class ContentFilter extends Content {
+ Content getAMatchingContent() { result = this }
+ }
+
+ predicate compatibleContents(Content storeContents, Content loadContents) {
+ storeContents = loadContents
+ }
+
+ predicate simpleLocalSmallStep(Node nodeFrom, Node nodeTo) {
+ nodeFrom.getFunction() instanceof Function and
+ simpleLocalFlowStep(nodeFrom, nodeTo, _)
+ }
+
+ predicate levelStepNoCall(Node n1, LocalSourceNode n2) { none() }
+
+ predicate levelStepCall(Node n1, LocalSourceNode n2) { none() }
+
+ predicate storeStep(Node n1, Node n2, Content f) { DataFlowPrivate::storeStep(n1, f, n2) }
+
+ predicate callStep(Node n1, LocalSourceNode n2) {
+ exists(DataFlowPrivate::DataFlowCall call, DataFlowPrivate::Position pos |
+ n1.(DataFlowPrivate::ArgumentNode).argumentOf(call, pos) and
+ n2.(ParameterNode).isParameterOf(dispatch(call), pos)
+ )
+ }
+
+ predicate returnStep(Node n1, LocalSourceNode n2) {
+ exists(DataFlowPrivate::DataFlowCallable callable, DataFlowPrivate::DataFlowCall call |
+ n1.(DataFlowPrivate::ReturnNode).getEnclosingCallable() = callable and
+ callable = dispatch(call) and
+ n2 = DataFlowPrivate::getAnOutNode(call, n1.(DataFlowPrivate::ReturnNode).getKind())
+ )
+ }
+
+ predicate loadStep(Node n1, LocalSourceNode n2, Content f) {
+ DataFlowPrivate::readStep(n1, f, n2)
+ }
+
+ predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content f1, Content f2) { none() }
+
+ predicate withContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() }
+
+ predicate withoutContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() }
+
+ predicate jumpStep(Node n1, LocalSourceNode n2) { DataFlowPrivate::jumpStep(n1, n2) }
+
+ predicate hasFeatureBacktrackStoreTarget() { none() }
+ }
+
+ private predicate qualifierSource(RelevantNode n) { qualifierSourceImpl(n, _) }
+
+ /**
+ * Holds if `n` is the qualifier of `call` which targets the virtual member
+ * function `mf`.
+ */
+ private predicate qualifierOfVirtualCallImpl(
+ RelevantNode n, CallInstruction call, MemberFunction mf
+ ) {
+ n.asOperand() = call.getThisArgumentOperand() and
+ call.getStaticCallTarget() = mf and
+ mf.isVirtual()
+ }
+
+ private predicate qualifierOfVirtualCall(RelevantNode n) { qualifierOfVirtualCallImpl(n, _, _) }
+
+ private import TypeTracking::TypeTrack::Graph
+
+ private predicate edgePlus(PathNode n1, PathNode n2) = fastTC(edges/2)(n1, n2)
+
+ /**
+ * Gets the most specific implementation of `mf` that may be called when the
+ * qualifier has runtime type `c`.
+ */
+ private MemberFunction mostSpecific(MemberFunction mf, Class c) {
+ qualifierOfVirtualCallImpl(_, _, mf) and
+ mf.getAnOverridingFunction*() = result and
+ (
+ result.getDeclaringType() = c
+ or
+ not c.getAMemberFunction().getAnOverriddenFunction*() = mf and
+ result = mostSpecific(mf, c.getABaseClass())
+ )
+ }
+
+ /**
+ * Gets a possible pair of end-points `(p1, p2)` where:
+ * - `p1` is a derived-to-base conversion that converts from some
+ * class `derived`, and
+ * - `p2` is the qualifier of a call to a virtual function that may
+ * target `callable`, and
+ * - `callable` is the most specific implementation that may be called when
+ * the qualifier has type `derived`.
+ */
+ private predicate pairCand(
+ PathNode p1, PathNode p2, DataFlowPrivate::DataFlowCallable callable,
+ DataFlowPrivate::DataFlowCall call
+ ) {
+ exists(Class derived, MemberFunction mf |
+ qualifierSourceImpl(p1.getNode(), derived) and
+ qualifierOfVirtualCallImpl(p2.getNode(), call.asCallInstruction(), mf) and
+ p1.isSource() and
+ p2.isSink() and
+ callable.asSourceCallable() = mostSpecific(mf, derived)
+ )
+ }
+
+ /** Gets a possible run-time target of `call`. */
+ DataFlowPrivate::DataFlowCallable virtualDispatch(DataFlowPrivate::DataFlowCall call) {
+ exists(PathNode p1, PathNode p2 | p1 = p2 or edgePlus(p1, p2) | pairCand(p1, p2, result, call))
+ }
+}
+
+private DataFlowPrivate::DataFlowCallable noDisp(DataFlowPrivate::DataFlowCall call) { none() }
+
+pragma[nomagic]
+private DataFlowPrivate::DataFlowCallable d1(DataFlowPrivate::DataFlowCall call) {
+ result = TrackVirtualDispatch::virtualDispatch(call)
+}
+
+pragma[nomagic]
+private DataFlowPrivate::DataFlowCallable d2(DataFlowPrivate::DataFlowCall call) {
+ result = TrackVirtualDispatch::virtualDispatch(call)
+}
+
+pragma[nomagic]
+private DataFlowPrivate::DataFlowCallable d3(DataFlowPrivate::DataFlowCall call) {
+ result = TrackVirtualDispatch::virtualDispatch(call)
+}
+
+pragma[nomagic]
+private DataFlowPrivate::DataFlowCallable d4(DataFlowPrivate::DataFlowCall call) {
+ result = TrackVirtualDispatch::virtualDispatch(call)
+}
+
+pragma[nomagic]
+private DataFlowPrivate::DataFlowCallable d5(DataFlowPrivate::DataFlowCall call) {
+ result = TrackVirtualDispatch::virtualDispatch(call)
+}
+
+pragma[nomagic]
+private DataFlowPrivate::DataFlowCallable d6(DataFlowPrivate::DataFlowCall call) {
+ result = TrackVirtualDispatch::virtualDispatch(call)
+}
+
+/** Gets a function that might be called by `call`. */
+cached
+DataFlowPrivate::DataFlowCallable viableCallable(DataFlowPrivate::DataFlowCall call) {
+ not exists(d6(call)) and
+ result = nonVirtualDispatch(call)
+ or
+ result = d6(call)
}
/**
* Holds if the set of viable implementations that can be called by `call`
* might be improved by knowing the call context.
*/
-predicate mayBenefitFromCallContext(DataFlowCall call) { mayBenefitFromCallContext(call, _, _) }
+predicate mayBenefitFromCallContext(DataFlowPrivate::DataFlowCall call) {
+ mayBenefitFromCallContext(call, _, _)
+}
+
+private predicate localLambdaFlowStep(Node nodeFrom, Node nodeTo) {
+ localFlowStep(nodeFrom, nodeTo)
+ or
+ DataFlowPrivate::additionalLambdaFlowStep(nodeFrom, nodeTo, _)
+}
/**
* Holds if `call` is a call through a function pointer, and the pointer
* value is given as the `arg`'th argument to `f`.
*/
private predicate mayBenefitFromCallContext(
- VirtualDispatch::DataSensitiveCall call, DataFlowCallable f, int arg
+ DataFlowPrivate::DataFlowCall call, DataFlowPrivate::DataFlowCallable f, int arg
) {
f = pragma[only_bind_out](call).getEnclosingCallable() and
exists(InitializeParameterInstruction init |
- not exists(call.getStaticCallTarget()) and
+ not exists(call.getStaticCallTarget())
+ or
+ exists(call.getStaticCallSourceTarget().(VirtualFunction).getAnOverridingFunction())
+ |
init.getEnclosingFunction() = f.getUnderlyingCallable() and
- call.flowsFrom(instructionNode(init), _) and
+ localLambdaFlowStep+(instructionNode(init),
+ operandNode(call.asCallInstruction().getCallTargetOperand())) and
init.getParameter().getIndex() = arg
)
}
@@ -274,9 +362,11 @@ private predicate mayBenefitFromCallContext(
* Gets a viable dispatch target of `call` in the context `ctx`. This is
* restricted to those `call`s for which a context might make a difference.
*/
-DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) {
+DataFlowPrivate::DataFlowCallable viableImplInCallContext(
+ DataFlowPrivate::DataFlowCall call, DataFlowPrivate::DataFlowCall ctx
+) {
result = viableCallable(call) and
- exists(int i, DataFlowCallable f |
+ exists(int i, DataFlowPrivate::DataFlowCallable f |
mayBenefitFromCallContext(pragma[only_bind_into](call), f, i) and
f = ctx.getStaticCallTarget() and
result.asSourceCallable() =
@@ -286,4 +376,8 @@ DataFlowCallable viableImplInCallContext(DataFlowCall call, DataFlowCall ctx) {
/** Holds if arguments at position `apos` match parameters at position `ppos`. */
pragma[inline]
-predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { ppos = apos }
+predicate parameterMatch(
+ DataFlowPrivate::ParameterPosition ppos, DataFlowPrivate::ArgumentPosition apos
+) {
+ ppos = apos
+}
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll
index a03042a77ff..3aa8994a449 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll
@@ -1492,7 +1492,14 @@ predicate lambdaCall(DataFlowCall call, LambdaCallKind kind, Node receiver) {
}
/** Extra data-flow steps needed for lambda flow analysis. */
-predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue) { none() }
+predicate additionalLambdaFlowStep(Node nodeFrom, Node nodeTo, boolean preservesValue) {
+ preservesValue = false and
+ exists(ContentSet cs | cs.isSingleton(any(UnionContent uc)) |
+ storeStep(nodeFrom, cs, nodeTo)
+ or
+ readStep(nodeFrom, cs, nodeTo)
+ )
+}
predicate knownSourceModel(Node source, string model) { External::sourceNode(source, _, model) }
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll
index a0a99711552..ef4051171af 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowUtil.qll
@@ -795,7 +795,7 @@ class FinalGlobalValue extends Node, TFinalGlobalValue {
override DataFlowType getType() {
exists(int indirectionIndex |
indirectionIndex = globalUse.getIndirectionIndex() and
- result = getTypeImpl(globalUse.getUnderlyingType(), indirectionIndex - 1)
+ result = getTypeImpl(globalUse.getUnderlyingType(), indirectionIndex)
)
}
diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll
index b9f320e57b2..1cf45439d8b 100644
--- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll
+++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaImpl.qll
@@ -756,9 +756,9 @@ private predicate modeledFlowBarrier(Node n) {
partialFlowFunc = call.getStaticCallTarget() and
not partialFlowFunc.isPartialWrite(output)
|
- call.getStaticCallTarget().(DataFlow::DataFlowFunction).hasDataFlow(_, output)
+ partialFlowFunc.(DataFlow::DataFlowFunction).hasDataFlow(_, output)
or
- call.getStaticCallTarget().(Taint::TaintFunction).hasTaintFlow(_, output)
+ partialFlowFunc.(Taint::TaintFunction).hasTaintFlow(_, output)
)
or
exists(Operand operand, Instruction instr, Node n0, int indirectionIndex |
diff --git a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll
index ce65a65319a..757db13fe8c 100644
--- a/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll
+++ b/cpp/ql/lib/semmle/code/cpp/models/interfaces/FormattingFunction.qll
@@ -170,6 +170,16 @@ abstract class FormattingFunction extends ArrayFunction, TaintFunction {
output.isParameterDeref(this.getOutputParameterIndex(_))
)
}
+
+ final override predicate isPartialWrite(FunctionOutput output) {
+ exists(int outputParameterIndex |
+ output.isParameterDeref(outputParameterIndex) and
+ // We require the output to be a stream since that definitely means that
+ // it's a partial write. If it's not a stream then it will most likely
+ // fill the whole buffer.
+ outputParameterIndex = this.getOutputParameterIndex(true)
+ )
+ }
}
/**
diff --git a/cpp/ql/src/Best Practices/SloppyGlobal.ql b/cpp/ql/src/Best Practices/SloppyGlobal.ql
index 4c1935627d5..b20e0271db8 100644
--- a/cpp/ql/src/Best Practices/SloppyGlobal.ql
+++ b/cpp/ql/src/Best Practices/SloppyGlobal.ql
@@ -14,6 +14,9 @@ import semmle.code.cpp.ConfigurationTestFile
from GlobalVariable gv
where
gv.getName().length() <= 3 and
+ // We will give an alert for the TemplateVariable, so we don't
+ // need to also give one for each instantiation
+ not gv instanceof VariableTemplateInstantiation and
not gv.isStatic() and
not gv.getFile() instanceof ConfigurationTestFile // variables in files generated during configuration are likely false positives
select gv,
diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md
index 589dfb68e1e..e3c013b76c7 100644
--- a/cpp/ql/src/CHANGELOG.md
+++ b/cpp/ql/src/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 1.4.6
+
+### Minor Analysis Improvements
+
+* The `cpp/short-global-name` query will no longer give alerts for instantiations of template variables, only for the template itself.
+* Fixed a false positive in `cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type.
+
## 1.4.5
### Minor Analysis Improvements
diff --git a/cpp/ql/src/Critical/OverflowDestination.ql b/cpp/ql/src/Critical/OverflowDestination.ql
index 4cfaaf8981b..df14cafd152 100644
--- a/cpp/ql/src/Critical/OverflowDestination.ql
+++ b/cpp/ql/src/Critical/OverflowDestination.ql
@@ -82,6 +82,16 @@ module OverflowDestinationConfig implements DataFlow::ConfigSig {
nodeIsBarrierEqualityCandidate(node, access, checkedVar)
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(FunctionCall fc | result = fc.getLocation() |
+ sourceSized(fc, sink.asIndirectConvertedExpr())
+ )
+ }
}
module OverflowDestination = TaintTracking::Global;
diff --git a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql
index 62c3c98e197..34817ff9229 100644
--- a/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql
+++ b/cpp/ql/src/Likely Bugs/Format/NonConstantFormat.ql
@@ -168,6 +168,19 @@ module NonConstFlowConfig implements DataFlow::ConfigSig {
cannotContainString(t)
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ exists(FormattingFunctionCall call, Expr formatString | result = call.getLocation() |
+ isSinkImpl(sink, formatString) and
+ call.getArgument(call.getFormatParameterIndex()) = formatString
+ )
+ }
}
module NonConstFlow = TaintTracking::Global;
diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll
index 3cff86412e4..863fd1e6120 100644
--- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll
+++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll
@@ -215,6 +215,10 @@ private module LeapYearCheckConfig implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) {
exists(ChecksForLeapYearFunctionCall fc | sink.asExpr() = fc.getAnArgument())
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // only used negatively in UncheckedLeapYearAfterYearModification.ql
+ }
}
module LeapYearCheckFlow = DataFlow::Global;
@@ -285,6 +289,14 @@ private module PossibleYearArithmeticOperationCheckConfig implements DataFlow::C
aexpr.getLValue() = fa
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ result = source.asExpr().getLocation()
+ }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) { result = sink.asExpr().getLocation() }
}
module PossibleYearArithmeticOperationCheckFlow =
diff --git a/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql b/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql
index 94a9cacf9f4..1a15f6c3a15 100644
--- a/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql
+++ b/cpp/ql/src/Security/CWE/CWE-022/TaintedPath.ql
@@ -93,6 +93,12 @@ module TaintedPathConfig implements DataFlow::ConfigSig {
// make sinks barriers so that we only report the closest instance
isSink(node)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.asIndirectArgument().getLocation()
+ }
}
module TaintedPath = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
index a609724937a..9119f5271fe 100644
--- a/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
+++ b/cpp/ql/src/Security/CWE/CWE-078/ExecTainted.ql
@@ -147,8 +147,19 @@ module ExecTaintConfig implements DataFlow::StateConfigSig {
predicate isBarrier(DataFlow::Node node) { isBarrierImpl(node) }
- predicate isBarrierOut(DataFlow::Node node) {
- isSink(node, _) // Prevent duplicates along a call chain, since `shellCommand` will include wrappers
+ predicate isBarrierOut(DataFlow::Node node, FlowState state) {
+ isSink(node, state) // Prevent duplicates along a call chain, since `shellCommand` will include wrappers
+ }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(DataFlow::Node concatResult, Expr command, ExecState state |
+ result = [concatResult.getLocation(), command.getLocation()] and
+ isSink(sink, state) and
+ isSinkImpl(sink, command, _) and
+ concatResult = state.getOutgoingNode()
+ )
}
}
diff --git a/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql b/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql
index 9b27e95fd65..994aba733d2 100644
--- a/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql
+++ b/cpp/ql/src/Security/CWE/CWE-079/CgiXss.ql
@@ -39,6 +39,12 @@ module Config implements DataFlow::ConfigSig {
or
node.asCertainDefinition().getUnspecifiedType() instanceof ArithmeticType
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ exists(QueryString query | result = query.getLocation() | query = source.asIndirectExpr())
+ }
}
module Flow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql
index 0ea4ce2e95f..5a823b8672c 100644
--- a/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql
+++ b/cpp/ql/src/Security/CWE/CWE-089/SqlTainted.ql
@@ -54,6 +54,12 @@ module SqlTaintedConfig implements DataFlow::ConfigSig {
sql.barrierSqlArgument(input, _)
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(Expr taintedArg | result = taintedArg.getLocation() | taintedArg = asSinkExpr(sink))
+ }
}
module SqlTainted = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql b/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql
index ec3543c1992..2cce72bc2ae 100644
--- a/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql
+++ b/cpp/ql/src/Security/CWE/CWE-120/UnboundedWrite.ql
@@ -124,6 +124,12 @@ module Config implements DataFlow::ConfigSig {
// Block flow if the node is guarded by any <, <= or = operations.
node = DataFlow::BarrierGuard::getABarrierNode()
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(BufferWrite bw | result = bw.getLocation() | isSink(sink, bw, _))
+ }
}
module Flow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql b/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql
index 9b595657fce..2f051776dbe 100644
--- a/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql
+++ b/cpp/ql/src/Security/CWE/CWE-170/ImproperNullTerminationTainted.ql
@@ -43,6 +43,12 @@ private module Config implements DataFlow::ConfigSig {
}
predicate isSink(DataFlow::Node sink) { isSink(sink, _) }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(VariableAccess va | result = va.getLocation() | isSink(sink, va))
+ }
}
module Flow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql
index c9efaf9f695..86806c0b776 100644
--- a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql
+++ b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticTainted.ql
@@ -106,6 +106,12 @@ module Config implements DataFlow::ConfigSig {
not iTo instanceof PointerArithmeticInstruction
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(Expr e | result = e.getLocation() | isSink(sink, _, e))
+ }
}
module Flow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql
index 54c3b013471..64705f078c6 100644
--- a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql
+++ b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticUncontrolled.ql
@@ -120,6 +120,12 @@ module UncontrolledArithConfig implements DataFlow::ConfigSig {
// block unintended flow to pointers
node.asExpr().getUnspecifiedType() instanceof PointerType
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ result = getExpr(source).getLocation()
+ }
}
module UncontrolledArith = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql
index 15fd2cbca15..50cef092600 100644
--- a/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql
+++ b/cpp/ql/src/Security/CWE/CWE-190/ArithmeticWithExtremeValues.ql
@@ -113,6 +113,12 @@ module Config implements DataFlow::ConfigSig {
not iTo instanceof PointerArithmeticInstruction
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(VariableAccess va | result = va.getLocation() | isSink(sink, va, _))
+ }
}
module Flow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql b/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql
index 6307ddf5fe6..0149f483cc1 100644
--- a/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql
+++ b/cpp/ql/src/Security/CWE/CWE-190/TaintedAllocationSize.ql
@@ -91,6 +91,12 @@ module TaintedAllocationSizeConfig implements DataFlow::ConfigSig {
// to duplicate results)
any(HeuristicAllocationFunction f).getAParameter() = node.asParameter()
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(Expr alloc | result = alloc.getLocation() | allocSink(alloc, sink))
+ }
}
module TaintedAllocationSize = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql b/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql
index ada0180668e..74386b30bba 100644
--- a/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql
+++ b/cpp/ql/src/Security/CWE/CWE-290/AuthenticationBypass.ql
@@ -72,6 +72,12 @@ module Config implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { isSource(source, _) }
predicate isSink(DataFlow::Node sink) { isSink(sink, _) }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(Expr condition | result = condition.getLocation() | isSink(sink, condition))
+ }
}
module Flow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql b/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
index 8a3c2f3664d..379c20f51ba 100644
--- a/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
+++ b/cpp/ql/src/Security/CWE/CWE-295/SSLResultConflation.ql
@@ -31,6 +31,14 @@ module VerifyResultConfig implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) {
exists(GuardCondition guard | guard.getAChild*() = sink.asExpr())
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(GuardCondition guard | result = guard.getLocation() |
+ guard.comparesEq(sink.asExpr(), _, 0, false, _)
+ )
+ }
}
module VerifyResult = DataFlow::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
index f2754c5811f..c671ad5af7f 100644
--- a/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
+++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextBufferWrite.ql
@@ -47,6 +47,12 @@ module ToBufferConfig implements DataFlow::ConfigSig {
}
predicate isSink(DataFlow::Node sink) { isSinkImpl(sink, _) }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(SensitiveBufferWrite w | result = w.getLocation() | isSinkImpl(sink, w))
+ }
}
module ToBufferFlow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql
index c04ceae7ada..6aff19ceb4a 100644
--- a/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql
+++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextFileWrite.ql
@@ -31,6 +31,16 @@ module FromSensitiveConfig implements DataFlow::ConfigSig {
predicate isBarrier(DataFlow::Node node) {
node.asExpr().getUnspecifiedType() instanceof IntegralType
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node sourceNode) {
+ exists(SensitiveExpr source | result = source.getLocation() | isSourceImpl(sourceNode, source))
+ }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(FileWrite w | result = w.getLocation() | isSinkImpl(sink, w, _))
+ }
}
module FromSensitiveFlow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql
index 09db3f21602..10bb10d6a2b 100644
--- a/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql
+++ b/cpp/ql/src/Security/CWE/CWE-311/CleartextTransmission.ql
@@ -245,6 +245,14 @@ module FromSensitiveConfig implements DataFlow::ConfigSig {
// sources to not get path duplication.
isSource(node)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(NetworkSendRecv networkSendRecv | result = networkSendRecv.getLocation() |
+ isSinkSendRecv(sink, networkSendRecv)
+ )
+ }
}
module FromSensitiveFlow = TaintTracking::Global;
@@ -266,6 +274,10 @@ module ToEncryptionConfig implements DataFlow::ConfigSig {
// sources to not get path duplication.
isSource(node)
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // only used negatively
+ }
}
module ToEncryptionFlow = TaintTracking::Global;
@@ -281,6 +293,10 @@ module FromEncryptionConfig implements DataFlow::ConfigSig {
predicate isBarrier(DataFlow::Node node) {
node.asExpr().getUnspecifiedType() instanceof IntegralType
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // only used negatively
+ }
}
module FromEncryptionFlow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql b/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql
index 0c060befeff..a6f567600f9 100644
--- a/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql
+++ b/cpp/ql/src/Security/CWE/CWE-313/CleartextSqliteDatabase.ql
@@ -123,6 +123,20 @@ module FromSensitiveConfig implements DataFlow::ConfigSig {
content.(DataFlow::FieldContent).getField() = getRecField(t.stripType())
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ exists(SensitiveExpr sensitive | result = sensitive.getLocation() |
+ isSourceImpl(source, sensitive)
+ )
+ }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(SqliteFunctionCall sqliteCall | result = sqliteCall.getLocation() |
+ isSinkImpl(sink, sqliteCall, _)
+ )
+ }
}
module FromSensitiveFlow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql b/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql
index 423ed57dd98..d12340035bd 100644
--- a/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql
+++ b/cpp/ql/src/Security/CWE/CWE-319/UseOfHttp.ql
@@ -87,6 +87,14 @@ module HttpStringToUrlOpenConfig implements DataFlow::ConfigSig {
sink.asIndirectExpr() = fc.getArgument(3)
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ result = source.asIndirectExpr().getLocation()
+ }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) { none() }
}
module HttpStringToUrlOpen = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql b/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql
index 3cc10b7ad19..9f75475854d 100644
--- a/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql
+++ b/cpp/ql/src/Security/CWE/CWE-326/InsufficientKeySize.ql
@@ -44,6 +44,12 @@ module KeyStrengthFlowConfig implements DataFlow::ConfigSig {
exists(getMinimumKeyStrength(name, param))
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(FunctionCall fc | result = fc.getLocation() | sink.asExpr() = fc.getArgument(_))
+ }
}
module KeyStrengthFlow = DataFlow::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql b/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql
index 11d628c1aff..c386cb1da4d 100644
--- a/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql
+++ b/cpp/ql/src/Security/CWE/CWE-416/IteratorToExpiredContainer.ql
@@ -145,6 +145,18 @@ module Config implements DataFlow::StateConfigSig {
// ```
result instanceof DataFlow::FeatureHasSinkCallContext
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(DataFlow::Node mid, FlowState state | result = mid.getLocation() |
+ destroyedToBeginSink(sink) and
+ isSink(sink, state) and
+ state = Config::DestroyedToBegin(mid)
+ )
+ }
}
module Flow = DataFlow::GlobalWithState;
diff --git a/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql b/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql
index 2703f819b54..f0851b7d807 100644
--- a/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql
+++ b/cpp/ql/src/Security/CWE/CWE-428/UnsafeCreateProcessCall.ql
@@ -62,6 +62,16 @@ module NullAppNameCreateProcessFunctionConfig implements DataFlow::ConfigSig {
val = call.getArgument(call.getApplicationNameArgumentId())
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(CreateProcessFunctionCall call | result = call.getLocation() |
+ sink.asExpr() = call.getArgument(call.getApplicationNameArgumentId())
+ )
+ }
}
module NullAppNameCreateProcessFunction = DataFlow::Global;
@@ -82,6 +92,16 @@ module QuotedCommandInCreateProcessFunctionConfig implements DataFlow::ConfigSig
val = call.getArgument(call.getCommandLineArgumentId())
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(CreateProcessFunctionCall call | result = call.getLocation() |
+ sink.asExpr() = call.getArgument(call.getCommandLineArgumentId())
+ )
+ }
}
module QuotedCommandInCreateProcessFunction =
diff --git a/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql b/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql
index 5ed30e19bb3..a0096f410c5 100644
--- a/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql
+++ b/cpp/ql/src/Security/CWE/CWE-732/UnsafeDaclSecurityDescriptor.ql
@@ -37,6 +37,16 @@ module NullDaclConfig implements DataFlow::ConfigSig {
val = call.getArgument(2)
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(SetSecurityDescriptorDaclFunctionCall call | result = call.getLocation() |
+ sink.asExpr() = call.getArgument(2)
+ )
+ }
}
module NullDaclFlow = DataFlow::Global;
@@ -68,6 +78,10 @@ module NonNullDaclConfig implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) {
exists(SetSecurityDescriptorDaclFunctionCall call | sink.asExpr() = call.getArgument(2))
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // only used negatively
+ }
}
module NonNullDaclFlow = DataFlow::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql b/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql
index 7eaa5df849d..171fbd26dd9 100644
--- a/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql
+++ b/cpp/ql/src/Security/CWE/CWE-807/TaintedCondition.ql
@@ -65,6 +65,16 @@ module Config implements DataFlow::ConfigSig {
iFrom1 != iFrom2
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ exists(Expr raise | result = raise.getLocation() |
+ sensitiveCondition([sink.asExpr(), sink.asIndirectExpr()], raise)
+ )
+ }
}
module Flow = TaintTracking::Global;
diff --git a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql
index acfd27cc45b..4ca30c3e916 100644
--- a/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql
+++ b/cpp/ql/src/Security/CWE/CWE-843/TypeConfusion.ql
@@ -178,6 +178,10 @@ module Config implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) { sink.asExpr() = any(UnsafeCast cast).getUnconverted() }
int fieldFlowBranchLimit() { result = 0 }
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // used both positively and negatively
+ }
}
module Flow = DataFlow::Global;
diff --git a/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md b/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md
deleted file mode 100644
index 02c73804c9f..00000000000
--- a/cpp/ql/src/change-notes/2025-08-08-overflow-buffer.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: minorAnalysis
----
-* Fixed a false positive in `cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type.
\ No newline at end of file
diff --git a/cpp/ql/src/change-notes/2025-08-20-add-customizations.md b/cpp/ql/src/change-notes/2025-08-20-add-customizations.md
new file mode 100644
index 00000000000..3a01298283c
--- /dev/null
+++ b/cpp/ql/src/change-notes/2025-08-20-add-customizations.md
@@ -0,0 +1,4 @@
+---
+category: fix
+---
+* Fixed an inconsistency across languages where most have a `Customizations.qll` file for adding customizations, but not all did.
\ No newline at end of file
diff --git a/cpp/ql/src/change-notes/released/1.4.6.md b/cpp/ql/src/change-notes/released/1.4.6.md
new file mode 100644
index 00000000000..6f6c9bbc385
--- /dev/null
+++ b/cpp/ql/src/change-notes/released/1.4.6.md
@@ -0,0 +1,6 @@
+## 1.4.6
+
+### Minor Analysis Improvements
+
+* The `cpp/short-global-name` query will no longer give alerts for instantiations of template variables, only for the template itself.
+* Fixed a false positive in `cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type.
diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml
index a74b6b08d86..3b00bbce928 100644
--- a/cpp/ql/src/codeql-pack.release.yml
+++ b/cpp/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.4.5
+lastReleaseVersion: 1.4.6
diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql
index c38a012b27b..b7b2de6000a 100644
--- a/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql
+++ b/cpp/ql/src/experimental/Security/CWE/CWE-193/ConstantSizeArrayOffByOne.ql
@@ -183,6 +183,20 @@ module ArrayAddressToDerefConfig implements DataFlow::StateConfigSig {
pointerArithOverflow(pai, _)
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ exists(Variable v | result = v.getLocation() | isSourceImpl(source, v))
+ }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(PointerArithmeticInstruction pai, Instruction deref |
+ result = [pai, deref].getLocation() and
+ isInvalidPointerDerefSink2(sink, deref, _) and
+ isSink(sink, ArrayAddressToDerefConfig::TOverflowArithmetic(pai))
+ )
+ }
}
module ArrayAddressToDerefFlow = DataFlow::GlobalWithState;
diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql
index bfa11e65b06..fbeb4cde5fd 100644
--- a/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql
+++ b/cpp/ql/src/experimental/Security/CWE/CWE-409/DecompressionBombs.ql
@@ -28,6 +28,14 @@ module DecompressionTaintConfig implements DataFlow::ConfigSig {
predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) {
any(DecompressionFlowStep s).isAdditionalFlowStep(node1, node2)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(FunctionCall fc | result = [sink.getLocation(), fc.getLocation()] | isSink(fc, sink))
+ }
}
module DecompressionTaint = TaintTracking::Global;
diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml
index ad3dc6c91f9..3e64a19c68b 100644
--- a/cpp/ql/src/qlpack.yml
+++ b/cpp/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/cpp-queries
-version: 1.4.6-dev
+version: 1.4.7-dev
groups:
- cpp
- queries
diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected
index e848b76946f..70290c7e226 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected
@@ -44,6 +44,8 @@
| test.c:198:8:198:8 | b |
| test.c:206:7:206:8 | ! ... |
| test.c:206:8:206:8 | c |
+| test.c:215:6:215:18 | call to __builtin_expect |
+| test.c:219:9:219:22 | call to __builtin_expect |
| test.cpp:18:8:18:10 | call to get |
| test.cpp:31:7:31:13 | ... == ... |
| test.cpp:42:13:42:20 | call to getABool |
@@ -92,3 +94,15 @@
| test.cpp:241:9:241:43 | ... && ... |
| test.cpp:241:22:241:30 | ... == ... |
| test.cpp:241:35:241:43 | ... == ... |
+| test.cpp:247:6:247:18 | ... == ... |
+| test.cpp:253:6:253:18 | ... != ... |
+| test.cpp:260:6:260:18 | ... == ... |
+| test.cpp:266:6:266:18 | ... != ... |
+| test.cpp:273:6:273:17 | ... == ... |
+| test.cpp:279:6:279:17 | ... != ... |
+| test.cpp:287:6:287:19 | ... == ... |
+| test.cpp:293:6:293:19 | ... != ... |
+| test.cpp:300:6:300:19 | ... == ... |
+| test.cpp:306:6:306:19 | ... != ... |
+| test.cpp:312:6:312:18 | ... == ... |
+| test.cpp:318:6:318:18 | ... != ... |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected
index 1ae797bfe1e..5d3232d50fa 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected
@@ -1,768 +1,1039 @@
-| 7 | 0 < x+0 when ... > ... is true |
-| 7 | 0 >= x+0 when ... > ... is false |
-| 7 | ... > ... != 0 when ... > ... is true |
-| 7 | ... > ... != 1 when ... > ... is false |
-| 7 | ... > ... == 0 when ... > ... is false |
-| 7 | ... > ... == 1 when ... > ... is true |
-| 7 | x < 0+1 when ... > ... is false |
-| 7 | x < 1 when ... > ... is false |
-| 7 | x >= 0+1 when ... > ... is true |
-| 7 | x >= 1 when ... > ... is true |
-| 17 | 0 < x+1 when ... < ... is false |
-| 17 | 0 >= x+1 when ... && ... is true |
-| 17 | 0 >= x+1 when ... < ... is true |
-| 17 | 1 < y+0 when ... && ... is true |
-| 17 | 1 < y+0 when ... > ... is true |
-| 17 | 1 >= y+0 when ... > ... is false |
-| 17 | ... < ... != 0 when ... && ... is true |
-| 17 | ... < ... != 0 when ... < ... is true |
-| 17 | ... < ... != 1 when ... < ... is false |
-| 17 | ... < ... == 0 when ... < ... is false |
-| 17 | ... < ... == 1 when ... && ... is true |
-| 17 | ... < ... == 1 when ... < ... is true |
-| 17 | ... > ... != 0 when ... && ... is true |
-| 17 | ... > ... != 0 when ... > ... is true |
-| 17 | ... > ... != 1 when ... > ... is false |
-| 17 | ... > ... == 0 when ... > ... is false |
-| 17 | ... > ... == 1 when ... && ... is true |
-| 17 | ... > ... == 1 when ... > ... is true |
-| 17 | x < 0 when ... && ... is true |
-| 17 | x < 0 when ... < ... is true |
-| 17 | x < 0+0 when ... && ... is true |
-| 17 | x < 0+0 when ... < ... is true |
-| 17 | x >= 0 when ... < ... is false |
-| 17 | x >= 0+0 when ... < ... is false |
-| 17 | y < 1+1 when ... > ... is false |
-| 17 | y < 2 when ... > ... is false |
-| 17 | y >= 1+1 when ... && ... is true |
-| 17 | y >= 1+1 when ... > ... is true |
-| 17 | y >= 2 when ... && ... is true |
-| 17 | y >= 2 when ... > ... is true |
-| 18 | call to get != 0 when call to get is true |
-| 18 | call to get != 1 when call to get is false |
-| 18 | call to get == 0 when call to get is false |
-| 18 | call to get == 1 when call to get is true |
-| 26 | 0 < x+0 when ... > ... is true |
-| 26 | 0 >= x+0 when ... > ... is false |
-| 26 | ... > ... != 0 when ... > ... is true |
-| 26 | ... > ... != 1 when ... > ... is false |
-| 26 | ... > ... == 0 when ... > ... is false |
-| 26 | ... > ... == 1 when ... > ... is true |
-| 26 | x < 0+1 when ... > ... is false |
-| 26 | x < 1 when ... > ... is false |
-| 26 | x >= 0+1 when ... > ... is true |
-| 26 | x >= 1 when ... > ... is true |
-| 31 | - ... != x+0 when ... == ... is false |
-| 31 | - ... == x+0 when ... == ... is true |
-| 31 | ... == ... != 0 when ... == ... is true |
-| 31 | ... == ... != 1 when ... == ... is false |
-| 31 | ... == ... == 0 when ... == ... is false |
-| 31 | ... == ... == 1 when ... == ... is true |
-| 31 | x != -1 when ... == ... is false |
-| 31 | x != - ...+0 when ... == ... is false |
-| 31 | x == -1 when ... == ... is true |
-| 31 | x == - ...+0 when ... == ... is true |
-| 34 | 10 < j+1 when ... < ... is false |
-| 34 | 10 >= j+1 when ... < ... is true |
-| 34 | ... < ... != 0 when ... < ... is true |
-| 34 | ... < ... != 1 when ... < ... is false |
-| 34 | ... < ... == 0 when ... < ... is false |
-| 34 | ... < ... == 1 when ... < ... is true |
-| 34 | j < 10 when ... < ... is true |
-| 34 | j < 10+0 when ... < ... is true |
-| 34 | j >= 10 when ... < ... is false |
-| 34 | j >= 10+0 when ... < ... is false |
-| 42 | 10 < j+1 when ... < ... is false |
-| 42 | 10 >= j+1 when ... < ... is true |
-| 42 | ... < ... != 0 when ... < ... is true |
-| 42 | ... < ... != 1 when ... < ... is false |
-| 42 | ... < ... == 0 when ... < ... is false |
-| 42 | ... < ... == 1 when ... < ... is true |
-| 42 | call to getABool != 0 when call to getABool is true |
-| 42 | call to getABool != 1 when call to getABool is false |
-| 42 | call to getABool == 0 when call to getABool is false |
-| 42 | call to getABool == 1 when call to getABool is true |
-| 42 | j < 10 when ... < ... is true |
-| 42 | j < 10+0 when ... < ... is true |
-| 42 | j >= 10 when ... < ... is false |
-| 42 | j >= 10+0 when ... < ... is false |
-| 44 | 0 < z+0 when ... > ... is true |
-| 44 | 0 >= z+0 when ... > ... is false |
-| 44 | ... > ... != 0 when ... > ... is true |
-| 44 | ... > ... != 1 when ... > ... is false |
-| 44 | ... > ... == 0 when ... > ... is false |
-| 44 | ... > ... == 1 when ... > ... is true |
-| 44 | z < 0+1 when ... > ... is false |
-| 44 | z < 1 when ... > ... is false |
-| 44 | z >= 0+1 when ... > ... is true |
-| 44 | z >= 1 when ... > ... is true |
-| 45 | 0 < y+0 when ... > ... is true |
-| 45 | 0 >= y+0 when ... > ... is false |
-| 45 | ... > ... != 0 when ... > ... is true |
-| 45 | ... > ... != 1 when ... > ... is false |
-| 45 | ... > ... == 0 when ... > ... is false |
-| 45 | ... > ... == 1 when ... > ... is true |
-| 45 | y < 0+1 when ... > ... is false |
-| 45 | y < 1 when ... > ... is false |
-| 45 | y >= 0+1 when ... > ... is true |
-| 45 | y >= 1 when ... > ... is true |
-| 58 | 0 != x+0 when ... == ... is false |
-| 58 | 0 != x+0 when ... \|\| ... is false |
-| 58 | 0 < y+1 when ... < ... is false |
-| 58 | 0 < y+1 when ... \|\| ... is false |
-| 58 | 0 == x+0 when ... == ... is true |
-| 58 | 0 >= y+1 when ... < ... is true |
-| 58 | ... < ... != 0 when ... < ... is true |
-| 58 | ... < ... != 1 when ... < ... is false |
-| 58 | ... < ... != 1 when ... \|\| ... is false |
-| 58 | ... < ... == 0 when ... < ... is false |
-| 58 | ... < ... == 0 when ... \|\| ... is false |
-| 58 | ... < ... == 1 when ... < ... is true |
-| 58 | ... == ... != 0 when ... == ... is true |
-| 58 | ... == ... != 1 when ... == ... is false |
-| 58 | ... == ... != 1 when ... \|\| ... is false |
-| 58 | ... == ... == 0 when ... == ... is false |
-| 58 | ... == ... == 0 when ... \|\| ... is false |
-| 58 | ... == ... == 1 when ... == ... is true |
-| 58 | x != 0 when ... == ... is false |
-| 58 | x != 0 when ... \|\| ... is false |
-| 58 | x != 0+0 when ... == ... is false |
-| 58 | x != 0+0 when ... \|\| ... is false |
-| 58 | x == 0 when ... == ... is true |
-| 58 | x == 0+0 when ... == ... is true |
-| 58 | y < 0 when ... < ... is true |
-| 58 | y < 0+0 when ... < ... is true |
-| 58 | y >= 0 when ... < ... is false |
-| 58 | y >= 0 when ... \|\| ... is false |
-| 58 | y >= 0+0 when ... < ... is false |
-| 58 | y >= 0+0 when ... \|\| ... is false |
-| 61 | i == 0 when i is Case[0] |
-| 61 | i == 1 when i is Case[1] |
-| 61 | i == 2 when i is Case[2] |
-| 74 | i < 11 when i is Case[0..10] |
-| 74 | i < 21 when i is Case[11..20] |
-| 74 | i >= 0 when i is Case[0..10] |
-| 74 | i >= 11 when i is Case[11..20] |
-| 75 | 0 != x+0 when ... == ... is false |
-| 75 | 0 == x+0 when ... == ... is true |
-| 75 | ... == ... != 0 when ... == ... is true |
-| 75 | ... == ... != 1 when ... == ... is false |
-| 75 | ... == ... == 0 when ... == ... is false |
-| 75 | ... == ... == 1 when ... == ... is true |
-| 75 | x != 0 when ... == ... is false |
-| 75 | x != 0+0 when ... == ... is false |
-| 75 | x == 0 when ... == ... is true |
-| 75 | x == 0+0 when ... == ... is true |
-| 85 | 0 != x+0 when ... == ... is false |
-| 85 | 0 != y+0 when ... != ... is true |
-| 85 | 0 != y+0 when ... && ... is true |
-| 85 | 0 == x+0 when ... && ... is true |
-| 85 | 0 == x+0 when ... == ... is true |
-| 85 | 0 == y+0 when ... != ... is false |
-| 85 | ... != ... != 0 when ... != ... is true |
-| 85 | ... != ... != 0 when ... && ... is true |
-| 85 | ... != ... != 1 when ... != ... is false |
-| 85 | ... != ... == 0 when ... != ... is false |
-| 85 | ... != ... == 1 when ... != ... is true |
-| 85 | ... != ... == 1 when ... && ... is true |
-| 85 | ... == ... != 0 when ... && ... is true |
-| 85 | ... == ... != 0 when ... == ... is true |
-| 85 | ... == ... != 1 when ... == ... is false |
-| 85 | ... == ... == 0 when ... == ... is false |
-| 85 | ... == ... == 1 when ... && ... is true |
-| 85 | ... == ... == 1 when ... == ... is true |
-| 85 | x != 0 when ... == ... is false |
-| 85 | x != 0+0 when ... == ... is false |
-| 85 | x == 0 when ... && ... is true |
-| 85 | x == 0 when ... == ... is true |
-| 85 | x == 0+0 when ... && ... is true |
-| 85 | x == 0+0 when ... == ... is true |
-| 85 | y != 0 when ... != ... is true |
-| 85 | y != 0 when ... && ... is true |
-| 85 | y != 0+0 when ... != ... is true |
-| 85 | y != 0+0 when ... && ... is true |
-| 85 | y == 0 when ... != ... is false |
-| 85 | y == 0+0 when ... != ... is false |
-| 93 | c != 0 when c is true |
-| 93 | c != 1 when c is false |
-| 93 | c == 0 when c is false |
-| 93 | c == 1 when c is true |
-| 94 | 0 != x+0 when ... != ... is true |
-| 94 | 0 == x+0 when ... != ... is false |
-| 94 | ... != ... != 0 when ... != ... is true |
-| 94 | ... != ... != 1 when ... != ... is false |
-| 94 | ... != ... == 0 when ... != ... is false |
-| 94 | ... != ... == 1 when ... != ... is true |
-| 94 | x != 0 when ... != ... is true |
-| 94 | x != 0+0 when ... != ... is true |
-| 94 | x == 0 when ... != ... is false |
-| 94 | x == 0+0 when ... != ... is false |
-| 99 | f != 0 when f is true |
-| 99 | f != 1 when f is false |
-| 99 | f == 0 when f is false |
-| 99 | f == 1 when f is true |
-| 102 | 10 < j+1 when ... < ... is false |
-| 102 | 10 >= j+1 when ... < ... is true |
-| 102 | ... < ... != 0 when ... < ... is true |
-| 102 | ... < ... != 1 when ... < ... is false |
-| 102 | ... < ... == 0 when ... < ... is false |
-| 102 | ... < ... == 1 when ... < ... is true |
-| 102 | j < 10 when ... < ... is true |
-| 102 | j < 10+0 when ... < ... is true |
-| 102 | j >= 10 when ... < ... is false |
-| 102 | j >= 10+0 when ... < ... is false |
-| 105 | 0.0 != f+0 when ... != ... is true |
-| 105 | 0.0 == f+0 when ... != ... is false |
-| 105 | ... != ... != 0 when ... != ... is true |
-| 105 | ... != ... != 1 when ... != ... is false |
-| 105 | ... != ... == 0 when ... != ... is false |
-| 105 | ... != ... == 1 when ... != ... is true |
-| 105 | f != 0.0+0 when ... != ... is true |
-| 105 | f == 0.0+0 when ... != ... is false |
-| 109 | 0 != x+0 when ... == ... is false |
-| 109 | 0 != x+0 when ... \|\| ... is false |
-| 109 | 0 < y+1 when ... < ... is false |
-| 109 | 0 < y+1 when ... \|\| ... is false |
-| 109 | 0 == x+0 when ... == ... is true |
-| 109 | 0 >= y+1 when ... < ... is true |
-| 109 | ... < ... != 0 when ... < ... is true |
-| 109 | ... < ... != 1 when ... < ... is false |
-| 109 | ... < ... != 1 when ... \|\| ... is false |
-| 109 | ... < ... == 0 when ... < ... is false |
-| 109 | ... < ... == 0 when ... \|\| ... is false |
-| 109 | ... < ... == 1 when ... < ... is true |
-| 109 | ... == ... != 0 when ... == ... is true |
-| 109 | ... == ... != 1 when ... == ... is false |
-| 109 | ... == ... != 1 when ... \|\| ... is false |
-| 109 | ... == ... == 0 when ... == ... is false |
-| 109 | ... == ... == 0 when ... \|\| ... is false |
-| 109 | ... == ... == 1 when ... == ... is true |
-| 109 | x != 0 when ... == ... is false |
-| 109 | x != 0 when ... \|\| ... is false |
-| 109 | x != 0+0 when ... == ... is false |
-| 109 | x != 0+0 when ... \|\| ... is false |
-| 109 | x == 0 when ... == ... is true |
-| 109 | x == 0+0 when ... == ... is true |
-| 109 | y < 0 when ... < ... is true |
-| 109 | y < 0+0 when ... < ... is true |
-| 109 | y >= 0 when ... < ... is false |
-| 109 | y >= 0 when ... \|\| ... is false |
-| 109 | y >= 0+0 when ... < ... is false |
-| 109 | y >= 0+0 when ... \|\| ... is false |
-| 111 | 0.0 != i+0 when ... != ... is true |
-| 111 | 0.0 == i+0 when ... != ... is false |
-| 111 | ... != ... != 0 when ... != ... is true |
-| 111 | ... != ... != 1 when ... != ... is false |
-| 111 | ... != ... == 0 when ... != ... is false |
-| 111 | ... != ... == 1 when ... != ... is true |
-| 111 | i != 0.0+0 when ... != ... is true |
-| 111 | i == 0.0+0 when ... != ... is false |
-| 122 | b != 0 when b is true |
-| 122 | b != 1 when b is false |
-| 122 | b == 0 when b is false |
-| 122 | b == 1 when b is true |
-| 125 | ! ... != 0 when ! ... is true |
-| 125 | ! ... != 0 when call to safe is false |
-| 125 | ! ... != 1 when ! ... is false |
-| 125 | ! ... != 1 when call to safe is true |
-| 125 | ! ... == 0 when ! ... is false |
-| 125 | ! ... == 0 when call to safe is true |
-| 125 | ! ... == 1 when ! ... is true |
-| 125 | ! ... == 1 when call to safe is false |
-| 125 | call to safe != 0 when ! ... is false |
-| 125 | call to safe != 0 when call to safe is true |
-| 125 | call to safe != 1 when ! ... is true |
-| 125 | call to safe != 1 when call to safe is false |
-| 125 | call to safe == 0 when ! ... is true |
-| 125 | call to safe == 0 when call to safe is false |
-| 125 | call to safe == 1 when ! ... is false |
-| 125 | call to safe == 1 when call to safe is true |
-| 126 | 1 != 0 when 1 is true |
-| 126 | 1 != 0 when ... && ... is true |
-| 126 | 1 != 1 when 1 is false |
-| 126 | 1 == 0 when 1 is false |
-| 126 | 1 == 1 when 1 is true |
-| 126 | 1 == 1 when ... && ... is true |
-| 126 | call to test3_condition != 0 when ... && ... is true |
-| 126 | call to test3_condition != 0 when call to test3_condition is true |
-| 126 | call to test3_condition != 1 when call to test3_condition is false |
-| 126 | call to test3_condition == 0 when call to test3_condition is false |
-| 126 | call to test3_condition == 1 when ... && ... is true |
-| 126 | call to test3_condition == 1 when call to test3_condition is true |
-| 131 | ... + ... != a+0 when call to __builtin_expect is false |
-| 131 | ... + ... == a+0 when call to __builtin_expect is true |
-| 131 | a != ... + ...+0 when call to __builtin_expect is false |
-| 131 | a != b+42 when call to __builtin_expect is false |
-| 131 | a == ... + ...+0 when call to __builtin_expect is true |
-| 131 | a == b+42 when call to __builtin_expect is true |
-| 131 | b != 0 when b is true |
-| 131 | b != 1 when b is false |
-| 131 | b != a+-42 when call to __builtin_expect is false |
-| 131 | b == 0 when b is false |
-| 131 | b == 1 when b is true |
-| 131 | b == a+-42 when call to __builtin_expect is true |
-| 131 | call to __builtin_expect != 0 when call to __builtin_expect is true |
-| 131 | call to __builtin_expect != 1 when call to __builtin_expect is false |
-| 131 | call to __builtin_expect == 0 when call to __builtin_expect is false |
-| 131 | call to __builtin_expect == 1 when call to __builtin_expect is true |
-| 135 | ... + ... != a+0 when call to __builtin_expect is true |
-| 135 | ... + ... == a+0 when call to __builtin_expect is false |
-| 135 | a != ... + ...+0 when call to __builtin_expect is true |
-| 135 | a != b+42 when call to __builtin_expect is true |
-| 135 | a == ... + ...+0 when call to __builtin_expect is false |
-| 135 | a == b+42 when call to __builtin_expect is false |
-| 135 | b != a+-42 when call to __builtin_expect is true |
-| 135 | b == a+-42 when call to __builtin_expect is false |
-| 135 | call to __builtin_expect != 0 when call to __builtin_expect is true |
-| 135 | call to __builtin_expect != 1 when call to __builtin_expect is false |
-| 135 | call to __builtin_expect == 0 when call to __builtin_expect is false |
-| 135 | call to __builtin_expect == 1 when call to __builtin_expect is true |
-| 137 | 0 != 0 when 0 is true |
-| 137 | 0 != 1 when 0 is false |
-| 137 | 0 == 0 when 0 is false |
-| 137 | 0 == 1 when 0 is true |
-| 141 | 42 != a+0 when call to __builtin_expect is false |
-| 141 | 42 == a+0 when call to __builtin_expect is true |
-| 141 | a != 42 when call to __builtin_expect is false |
-| 141 | a != 42+0 when call to __builtin_expect is false |
-| 141 | a == 42 when call to __builtin_expect is true |
-| 141 | a == 42+0 when call to __builtin_expect is true |
-| 141 | call to __builtin_expect != 0 when call to __builtin_expect is true |
-| 141 | call to __builtin_expect != 1 when call to __builtin_expect is false |
-| 141 | call to __builtin_expect == 0 when call to __builtin_expect is false |
-| 141 | call to __builtin_expect == 1 when call to __builtin_expect is true |
-| 145 | 42 != a+0 when call to __builtin_expect is true |
-| 145 | 42 == a+0 when call to __builtin_expect is false |
-| 145 | a != 42 when call to __builtin_expect is true |
-| 145 | a != 42+0 when call to __builtin_expect is true |
-| 145 | a == 42 when call to __builtin_expect is false |
-| 145 | a == 42+0 when call to __builtin_expect is false |
-| 145 | call to __builtin_expect != 0 when call to __builtin_expect is true |
-| 145 | call to __builtin_expect != 1 when call to __builtin_expect is false |
-| 145 | call to __builtin_expect == 0 when call to __builtin_expect is false |
-| 145 | call to __builtin_expect == 1 when call to __builtin_expect is true |
-| 146 | ! ... != 0 when ! ... is true |
-| 146 | ! ... != 0 when x is false |
-| 146 | ! ... != 1 when ! ... is false |
-| 146 | ! ... != 1 when x is true |
-| 146 | ! ... == 0 when ! ... is false |
-| 146 | ! ... == 0 when x is true |
-| 146 | ! ... == 1 when ! ... is true |
-| 146 | ! ... == 1 when x is false |
-| 146 | x != 0 when ! ... is false |
-| 146 | x != 0 when x is true |
-| 146 | x == 0 when ! ... is true |
-| 146 | x == 0 when x is false |
-| 152 | 10 < a+1 when ! ... is true |
-| 152 | 10 < a+1 when b is false |
-| 152 | 10 >= a+1 when ! ... is false |
-| 152 | 10 >= a+1 when b is true |
-| 152 | ! ... != 0 when ! ... is true |
-| 152 | ! ... != 0 when b is false |
-| 152 | ! ... != 1 when ! ... is false |
-| 152 | ! ... != 1 when b is true |
-| 152 | ! ... == 0 when ! ... is false |
-| 152 | ! ... == 0 when b is true |
-| 152 | ! ... == 1 when ! ... is true |
-| 152 | ! ... == 1 when b is false |
-| 152 | ... < ... != 0 when ! ... is false |
-| 152 | ... < ... != 0 when b is true |
-| 152 | ... < ... != 1 when ! ... is true |
-| 152 | ... < ... != 1 when b is false |
-| 152 | ... < ... == 0 when ! ... is true |
-| 152 | ... < ... == 0 when b is false |
-| 152 | ... < ... == 1 when ! ... is false |
-| 152 | ... < ... == 1 when b is true |
-| 152 | a < 10 when ! ... is false |
-| 152 | a < 10 when b is true |
-| 152 | a < 10+0 when ! ... is false |
-| 152 | a < 10+0 when b is true |
-| 152 | a >= 10 when ! ... is true |
-| 152 | a >= 10 when b is false |
-| 152 | a >= 10+0 when ! ... is true |
-| 152 | a >= 10+0 when b is false |
-| 152 | b != 0 when ! ... is false |
-| 152 | b != 0 when b is true |
-| 152 | b != 1 when ! ... is true |
-| 152 | b != 1 when b is false |
-| 152 | b == 0 when ! ... is true |
-| 152 | b == 0 when b is false |
-| 152 | b == 1 when ! ... is false |
-| 152 | b == 1 when b is true |
-| 152 | p != 0 when p is true |
-| 152 | p != 1 when p is false |
-| 152 | p == 0 when p is false |
-| 152 | p == 1 when p is true |
-| 158 | ! ... != 0 when ! ... is true |
-| 158 | ! ... != 0 when p is false |
-| 158 | ! ... != 1 when ! ... is false |
-| 158 | ! ... != 1 when p is true |
-| 158 | ! ... == 0 when ! ... is false |
-| 158 | ! ... == 0 when p is true |
-| 158 | ! ... == 1 when ! ... is true |
-| 158 | ! ... == 1 when p is false |
-| 158 | p != 0 when ! ... is false |
-| 158 | p != 0 when p is true |
-| 158 | p == 0 when ! ... is true |
-| 158 | p == 0 when p is false |
-| 160 | ! ... != 0 when ! ... is true |
-| 160 | ! ... != 0 when c is false |
-| 160 | ! ... != 1 when ! ... is false |
-| 160 | ! ... != 1 when c is true |
-| 160 | ! ... == 0 when ! ... is false |
-| 160 | ! ... == 0 when c is true |
-| 160 | ! ... == 1 when ! ... is true |
-| 160 | ! ... == 1 when c is false |
-| 160 | ... != ... != 0 when ! ... is false |
-| 160 | ... != ... != 0 when c is true |
-| 160 | ... != ... != 1 when ! ... is true |
-| 160 | ... != ... != 1 when c is false |
-| 160 | ... != ... == 0 when ! ... is true |
-| 160 | ... != ... == 0 when c is false |
-| 160 | ... != ... == 1 when ! ... is false |
-| 160 | ... != ... == 1 when c is true |
-| 160 | a != b+0 when ! ... is false |
-| 160 | a != b+0 when c is true |
-| 160 | a == b+0 when ! ... is true |
-| 160 | a == b+0 when c is false |
-| 160 | b != a+0 when ! ... is false |
-| 160 | b != a+0 when c is true |
-| 160 | b == a+0 when ! ... is true |
-| 160 | b == a+0 when c is false |
-| 160 | c != 0 when ! ... is false |
-| 160 | c != 0 when c is true |
-| 160 | c != 1 when ! ... is true |
-| 160 | c != 1 when c is false |
-| 160 | c == 0 when ! ... is true |
-| 160 | c == 0 when c is false |
-| 160 | c == 1 when ! ... is false |
-| 160 | c == 1 when c is true |
-| 164 | s != 0 when s is true |
-| 164 | s != 1 when s is false |
-| 164 | s == 0 when s is false |
-| 164 | s == 1 when s is true |
-| 168 | 10 < a+0 when ! ... is false |
-| 168 | 10 < a+0 when b is true |
-| 168 | 10 >= a+0 when ! ... is true |
-| 168 | 10 >= a+0 when b is false |
-| 168 | ! ... != 0 when ! ... is true |
-| 168 | ! ... != 0 when b is false |
-| 168 | ! ... != 1 when ! ... is false |
-| 168 | ! ... != 1 when b is true |
-| 168 | ! ... == 0 when ! ... is false |
-| 168 | ! ... == 0 when b is true |
-| 168 | ! ... == 1 when ! ... is true |
-| 168 | ! ... == 1 when b is false |
-| 168 | ... > ... != 0 when ! ... is false |
-| 168 | ... > ... != 0 when b is true |
-| 168 | ... > ... != 1 when ! ... is true |
-| 168 | ... > ... != 1 when b is false |
-| 168 | ... > ... == 0 when ! ... is true |
-| 168 | ... > ... == 0 when b is false |
-| 168 | ... > ... == 1 when ! ... is false |
-| 168 | ... > ... == 1 when b is true |
-| 168 | a < 10+1 when ! ... is true |
-| 168 | a < 10+1 when b is false |
-| 168 | a < 11 when ! ... is true |
-| 168 | a < 11 when b is false |
-| 168 | a >= 10+1 when ! ... is false |
-| 168 | a >= 10+1 when b is true |
-| 168 | a >= 11 when ! ... is false |
-| 168 | a >= 11 when b is true |
-| 168 | b != 0 when ! ... is false |
-| 168 | b != 0 when b is true |
-| 168 | b != 1 when ! ... is true |
-| 168 | b != 1 when b is false |
-| 168 | b == 0 when ! ... is true |
-| 168 | b == 0 when b is false |
-| 168 | b == 1 when ! ... is false |
-| 168 | b == 1 when b is true |
-| 170 | ! ... != 0 when ! ... is true |
-| 170 | ! ... != 0 when s is false |
-| 170 | ! ... != 1 when ! ... is false |
-| 170 | ! ... != 1 when s is true |
-| 170 | ! ... == 0 when ! ... is false |
-| 170 | ! ... == 0 when s is true |
-| 170 | ! ... == 1 when ! ... is true |
-| 170 | ! ... == 1 when s is false |
-| 170 | s != 0 when ! ... is false |
-| 170 | s != 0 when s is true |
-| 170 | s == 0 when ! ... is true |
-| 170 | s == 0 when s is false |
-| 176 | ! ... != 0 when ! ... is true |
-| 176 | ! ... != 0 when ... < ... is false |
-| 176 | ! ... != 0 when c is false |
-| 176 | ! ... != 1 when ! ... is false |
-| 176 | ! ... != 1 when ... < ... is true |
-| 176 | ! ... != 1 when c is true |
-| 176 | ! ... == 0 when ! ... is false |
-| 176 | ! ... == 0 when ... < ... is true |
-| 176 | ! ... == 0 when c is true |
-| 176 | ! ... == 1 when ! ... is true |
-| 176 | ! ... == 1 when ... < ... is false |
-| 176 | ! ... == 1 when c is false |
-| 176 | ... < ... != 0 when ! ... is false |
-| 176 | ... < ... != 0 when ... < ... is true |
-| 176 | ... < ... == 0 when ! ... is true |
-| 176 | ... < ... == 0 when ... < ... is false |
-| 176 | ... > ... != 0 when ! ... is false |
-| 176 | ... > ... != 0 when c is true |
-| 176 | ... > ... != 1 when ! ... is true |
-| 176 | ... > ... != 1 when c is false |
-| 176 | ... > ... == 0 when ! ... is true |
-| 176 | ... > ... == 0 when c is false |
-| 176 | ... > ... == 1 when ! ... is false |
-| 176 | ... > ... == 1 when c is true |
-| 176 | a < b+1 when ! ... is true |
-| 176 | a < b+1 when c is false |
-| 176 | a >= b+1 when ! ... is false |
-| 176 | a >= b+1 when c is true |
-| 176 | b < a+0 when ! ... is false |
-| 176 | b < a+0 when c is true |
-| 176 | b >= a+0 when ! ... is true |
-| 176 | b >= a+0 when c is false |
-| 176 | c != 0 when ! ... is false |
-| 176 | c != 0 when c is true |
-| 176 | c != 1 when ! ... is true |
-| 176 | c != 1 when c is false |
-| 176 | c == 0 when ! ... is true |
-| 176 | c == 0 when c is false |
-| 176 | c == 1 when ! ... is false |
-| 176 | c == 1 when c is true |
-| 182 | 1.0 < foo+1 when ... < ... is false |
-| 182 | 1.0 >= foo+1 when ... && ... is true |
-| 182 | 1.0 >= foo+1 when ... < ... is true |
-| 182 | 9.999999999999999547e-07 < foo+1 when ... && ... is true |
-| 182 | 9.999999999999999547e-07 < foo+1 when ... >= ... is true |
-| 182 | 9.999999999999999547e-07 >= foo+1 when ... >= ... is false |
-| 182 | ! ... != 0 when ! ... is true |
-| 182 | ! ... != 0 when ... && ... is false |
-| 182 | ! ... != 1 when ! ... is false |
-| 182 | ! ... != 1 when ... && ... is true |
-| 182 | ! ... == 0 when ! ... is false |
-| 182 | ! ... == 0 when ... && ... is true |
-| 182 | ! ... == 1 when ! ... is true |
-| 182 | ! ... == 1 when ... && ... is false |
-| 182 | ... && ... != 0 when ! ... is false |
-| 182 | ... && ... != 0 when ... && ... is true |
-| 182 | ... && ... != 1 when ! ... is true |
-| 182 | ... && ... != 1 when ... && ... is false |
-| 182 | ... && ... == 0 when ! ... is true |
-| 182 | ... && ... == 0 when ... && ... is false |
-| 182 | ... && ... == 1 when ! ... is false |
-| 182 | ... && ... == 1 when ... && ... is true |
-| 182 | ... < ... != 0 when ... && ... is true |
-| 182 | ... < ... != 0 when ... < ... is true |
-| 182 | ... < ... != 1 when ... < ... is false |
-| 182 | ... < ... == 0 when ... < ... is false |
-| 182 | ... < ... == 1 when ... && ... is true |
-| 182 | ... < ... == 1 when ... < ... is true |
-| 182 | ... >= ... != 0 when ... && ... is true |
-| 182 | ... >= ... != 0 when ... >= ... is true |
-| 182 | ... >= ... != 1 when ... >= ... is false |
-| 182 | ... >= ... == 0 when ... >= ... is false |
-| 182 | ... >= ... == 1 when ... && ... is true |
-| 182 | ... >= ... == 1 when ... >= ... is true |
-| 182 | b1 != 0 when ! ... is false |
-| 182 | b1 != 0 when ... && ... is true |
-| 182 | b1 != 0 when b1 is true |
-| 182 | b1 != 1 when b1 is false |
-| 182 | b1 == 0 when b1 is false |
-| 182 | b1 == 1 when ! ... is false |
-| 182 | b1 == 1 when ... && ... is true |
-| 182 | b1 == 1 when b1 is true |
-| 182 | b2 != 0 when ! ... is false |
-| 182 | b2 != 0 when ... && ... is true |
-| 182 | b2 != 0 when b2 is true |
-| 182 | b2 != 1 when b2 is false |
-| 182 | b2 == 0 when b2 is false |
-| 182 | b2 == 1 when ! ... is false |
-| 182 | b2 == 1 when ... && ... is true |
-| 182 | b2 == 1 when b2 is true |
-| 182 | foo < 1.0+0 when ... && ... is true |
-| 182 | foo < 1.0+0 when ... < ... is true |
-| 182 | foo < 9.999999999999999547e-07+0 when ... >= ... is false |
-| 182 | foo >= 1.0+0 when ... < ... is false |
-| 182 | foo >= 9.999999999999999547e-07+0 when ... && ... is true |
-| 182 | foo >= 9.999999999999999547e-07+0 when ... >= ... is true |
-| 190 | ! ... != 0 when ! ... is true |
-| 190 | ! ... != 0 when c is false |
-| 190 | ! ... != 1 when ! ... is false |
-| 190 | ! ... != 1 when c is true |
-| 190 | ! ... == 0 when ! ... is false |
-| 190 | ! ... == 0 when c is true |
-| 190 | ! ... == 1 when ! ... is true |
-| 190 | ! ... == 1 when c is false |
-| 190 | c != 0 when ! ... is false |
-| 190 | c != 0 when c is true |
-| 190 | c == 0 when ! ... is true |
-| 190 | c == 0 when c is false |
-| 193 | ! ... != 0 when ! ... is true |
-| 193 | ! ... != 0 when ... \|\| ... is false |
-| 193 | ! ... != 1 when ! ... is false |
-| 193 | ! ... != 1 when ... \|\| ... is true |
-| 193 | ! ... == 0 when ! ... is false |
-| 193 | ! ... == 0 when ... \|\| ... is true |
-| 193 | ! ... == 1 when ! ... is true |
-| 193 | ! ... == 1 when ... \|\| ... is false |
-| 193 | ... \|\| ... != 0 when ! ... is false |
-| 193 | ... \|\| ... != 0 when ... \|\| ... is true |
-| 193 | ... \|\| ... != 1 when ! ... is true |
-| 193 | ... \|\| ... != 1 when ... \|\| ... is false |
-| 193 | ... \|\| ... == 0 when ! ... is true |
-| 193 | ... \|\| ... == 0 when ... \|\| ... is false |
-| 193 | ... \|\| ... == 1 when ! ... is false |
-| 193 | ... \|\| ... == 1 when ... \|\| ... is true |
-| 193 | b1 != 0 when b1 is true |
-| 193 | b1 != 1 when ! ... is true |
-| 193 | b1 != 1 when ... \|\| ... is false |
-| 193 | b1 != 1 when b1 is false |
-| 193 | b1 == 0 when ! ... is true |
-| 193 | b1 == 0 when ... \|\| ... is false |
-| 193 | b1 == 0 when b1 is false |
-| 193 | b1 == 1 when b1 is true |
-| 193 | b2 != 0 when b2 is true |
-| 193 | b2 != 1 when ! ... is true |
-| 193 | b2 != 1 when ... \|\| ... is false |
-| 193 | b2 != 1 when b2 is false |
-| 193 | b2 == 0 when ! ... is true |
-| 193 | b2 == 0 when ... \|\| ... is false |
-| 193 | b2 == 0 when b2 is false |
-| 193 | b2 == 1 when b2 is true |
-| 198 | ! ... != 0 when ! ... is true |
-| 198 | ! ... != 0 when b is false |
-| 198 | ! ... != 1 when ! ... is false |
-| 198 | ! ... != 1 when b is true |
-| 198 | ! ... == 0 when ! ... is false |
-| 198 | ! ... == 0 when b is true |
-| 198 | ! ... == 1 when ! ... is true |
-| 198 | ! ... == 1 when b is false |
-| 198 | b != 0 when ! ... is false |
-| 198 | b != 0 when b is true |
-| 198 | b == 0 when ! ... is true |
-| 198 | b == 0 when b is false |
-| 206 | ! ... != 0 when ! ... is true |
-| 206 | ! ... != 0 when c is false |
-| 206 | ! ... != 1 when ! ... is false |
-| 206 | ! ... != 1 when c is true |
-| 206 | ! ... == 0 when ! ... is false |
-| 206 | ! ... == 0 when c is true |
-| 206 | ! ... == 1 when ! ... is true |
-| 206 | ! ... == 1 when c is false |
-| 206 | c != 0 when ! ... is false |
-| 206 | c != 0 when c is true |
-| 206 | c == 0 when ! ... is true |
-| 206 | c == 0 when c is false |
-| 211 | 0 != sc+0 when ... == ... is false |
-| 211 | 0 == sc+0 when ... == ... is true |
-| 211 | ... == ... != 0 when ... == ... is true |
-| 211 | ... == ... != 1 when ... == ... is false |
-| 211 | ... == ... == 0 when ... == ... is false |
-| 211 | ... == ... == 1 when ... == ... is true |
-| 211 | sc != 0 when ... == ... is false |
-| 211 | sc != 0+0 when ... == ... is false |
-| 211 | sc == 0 when ... == ... is true |
-| 211 | sc == 0+0 when ... == ... is true |
-| 214 | 0 != sc+0 when ... == ... is false |
-| 214 | 0 == sc+0 when ... == ... is true |
-| 214 | ... == ... != 0 when ... == ... is true |
-| 214 | ... == ... != 1 when ... == ... is false |
-| 214 | ... == ... == 0 when ... == ... is false |
-| 214 | ... == ... == 1 when ... == ... is true |
-| 214 | sc != 0 when ... == ... is false |
-| 214 | sc != 0+0 when ... == ... is false |
-| 214 | sc == 0 when ... == ... is true |
-| 214 | sc == 0+0 when ... == ... is true |
-| 217 | 0 != ul+0 when ... == ... is false |
-| 217 | 0 == ul+0 when ... == ... is true |
-| 217 | ... == ... != 0 when ... == ... is true |
-| 217 | ... == ... != 1 when ... == ... is false |
-| 217 | ... == ... == 0 when ... == ... is false |
-| 217 | ... == ... == 1 when ... == ... is true |
-| 217 | ul != 0 when ... == ... is false |
-| 217 | ul != 0+0 when ... == ... is false |
-| 217 | ul == 0 when ... == ... is true |
-| 217 | ul == 0+0 when ... == ... is true |
-| 220 | 0 != f+0 when ... == ... is false |
-| 220 | 0 == f+0 when ... == ... is true |
-| 220 | ... == ... != 0 when ... == ... is true |
-| 220 | ... == ... != 1 when ... == ... is false |
-| 220 | ... == ... == 0 when ... == ... is false |
-| 220 | ... == ... == 1 when ... == ... is true |
-| 220 | f != 0+0 when ... == ... is false |
-| 220 | f == 0+0 when ... == ... is true |
-| 223 | 0.0 != f+0 when ... == ... is false |
-| 223 | 0.0 == f+0 when ... == ... is true |
-| 223 | ... == ... != 0 when ... == ... is true |
-| 223 | ... == ... != 1 when ... == ... is false |
-| 223 | ... == ... == 0 when ... == ... is false |
-| 223 | ... == ... == 1 when ... == ... is true |
-| 223 | f != 0.0+0 when ... == ... is false |
-| 223 | f == 0.0+0 when ... == ... is true |
-| 226 | 0 != d+0 when ... == ... is false |
-| 226 | 0 == d+0 when ... == ... is true |
-| 226 | ... == ... != 0 when ... == ... is true |
-| 226 | ... == ... != 1 when ... == ... is false |
-| 226 | ... == ... == 0 when ... == ... is false |
-| 226 | ... == ... == 1 when ... == ... is true |
-| 226 | d != 0+0 when ... == ... is false |
-| 226 | d == 0+0 when ... == ... is true |
-| 229 | 0 != b+0 when ... == ... is false |
-| 229 | 0 == b+0 when ... == ... is true |
-| 229 | ... == ... != 0 when ... == ... is true |
-| 229 | ... == ... != 1 when ... == ... is false |
-| 229 | ... == ... == 0 when ... == ... is false |
-| 229 | ... == ... == 1 when ... == ... is true |
-| 229 | b != 0 when ... == ... is false |
-| 229 | b != 0+0 when ... == ... is false |
-| 229 | b == 0 when ... == ... is true |
-| 229 | b == 0+0 when ... == ... is true |
-| 232 | 0 != b+0 when ... == ... is false |
-| 232 | 0 == b+0 when ... == ... is true |
-| 232 | ... == ... != 0 when ... == ... is true |
-| 232 | ... == ... != 1 when ... == ... is false |
-| 232 | ... == ... == 0 when ... == ... is false |
-| 232 | ... == ... == 1 when ... == ... is true |
-| 232 | b != 0 when ... == ... is false |
-| 232 | b != 0+0 when ... == ... is false |
-| 232 | b == 0 when ... == ... is true |
-| 232 | b == 0+0 when ... == ... is true |
-| 235 | 0 != i+0 when ... == ... is false |
-| 235 | 0 == i+0 when ... == ... is true |
-| 235 | ... == ... != 0 when ... == ... is true |
-| 235 | ... == ... != 1 when ... == ... is false |
-| 235 | ... == ... == 0 when ... == ... is false |
-| 235 | ... == ... == 1 when ... == ... is true |
-| 235 | i != 0 when ... == ... is false |
-| 235 | i != 0+0 when ... == ... is false |
-| 235 | i == 0 when ... == ... is true |
-| 235 | i == 0+0 when ... == ... is true |
-| 238 | 0 != f+0 when ... == ... is false |
-| 238 | 0 == f+0 when ... == ... is true |
-| 238 | ... == ... != 0 when ... == ... is true |
-| 238 | ... == ... != 1 when ... == ... is false |
-| 238 | ... == ... == 0 when ... == ... is false |
-| 238 | ... == ... == 1 when ... == ... is true |
-| 238 | f != 0+0 when ... == ... is false |
-| 238 | f == 0+0 when ... == ... is true |
-| 241 | 0 != f+0 when ... == ... is false |
-| 241 | 0 != i+0 when ... == ... is false |
-| 241 | 0 == f+0 when ... && ... is true |
-| 241 | 0 == f+0 when ... == ... is true |
-| 241 | 0 == i+0 when ... && ... is true |
-| 241 | 0 == i+0 when ... == ... is true |
-| 241 | ... == ... != 0 when ... && ... is true |
-| 241 | ... == ... != 0 when ... == ... is true |
-| 241 | ... == ... != 1 when ... == ... is false |
-| 241 | ... == ... == 0 when ... == ... is false |
-| 241 | ... == ... == 1 when ... && ... is true |
-| 241 | ... == ... == 1 when ... == ... is true |
-| 241 | f != 0+0 when ... == ... is false |
-| 241 | f == 0+0 when ... && ... is true |
-| 241 | f == 0+0 when ... == ... is true |
-| 241 | i != 0 when ... == ... is false |
-| 241 | i != 0+0 when ... == ... is false |
-| 241 | i == 0 when ... && ... is true |
-| 241 | i == 0 when ... == ... is true |
-| 241 | i == 0+0 when ... && ... is true |
-| 241 | i == 0+0 when ... == ... is true |
+| test.c:7:9:7:13 | ... > ... | 0 < x+0 when ... > ... is true |
+| test.c:7:9:7:13 | ... > ... | 0 >= x+0 when ... > ... is false |
+| test.c:7:9:7:13 | ... > ... | ... > ... != 0 when ... > ... is true |
+| test.c:7:9:7:13 | ... > ... | ... > ... != 1 when ... > ... is false |
+| test.c:7:9:7:13 | ... > ... | ... > ... == 0 when ... > ... is false |
+| test.c:7:9:7:13 | ... > ... | ... > ... == 1 when ... > ... is true |
+| test.c:7:9:7:13 | ... > ... | x < 0+1 when ... > ... is false |
+| test.c:7:9:7:13 | ... > ... | x < 1 when ... > ... is false |
+| test.c:7:9:7:13 | ... > ... | x >= 0+1 when ... > ... is true |
+| test.c:7:9:7:13 | ... > ... | x >= 1 when ... > ... is true |
+| test.c:17:8:17:12 | ... < ... | 0 < x+1 when ... < ... is false |
+| test.c:17:8:17:12 | ... < ... | 0 >= x+1 when ... < ... is true |
+| test.c:17:8:17:12 | ... < ... | ... < ... != 0 when ... < ... is true |
+| test.c:17:8:17:12 | ... < ... | ... < ... != 1 when ... < ... is false |
+| test.c:17:8:17:12 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:17:8:17:12 | ... < ... | ... < ... == 1 when ... < ... is true |
+| test.c:17:8:17:12 | ... < ... | x < 0 when ... < ... is true |
+| test.c:17:8:17:12 | ... < ... | x < 0+0 when ... < ... is true |
+| test.c:17:8:17:12 | ... < ... | x >= 0 when ... < ... is false |
+| test.c:17:8:17:12 | ... < ... | x >= 0+0 when ... < ... is false |
+| test.c:17:8:17:21 | ... && ... | 0 >= x+1 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | 1 < y+0 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | ... < ... != 0 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | ... < ... == 1 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | ... > ... != 0 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | ... > ... == 1 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | x < 0 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | x < 0+0 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | y >= 1+1 when ... && ... is true |
+| test.c:17:8:17:21 | ... && ... | y >= 2 when ... && ... is true |
+| test.c:17:17:17:21 | ... > ... | 1 < y+0 when ... > ... is true |
+| test.c:17:17:17:21 | ... > ... | 1 >= y+0 when ... > ... is false |
+| test.c:17:17:17:21 | ... > ... | ... > ... != 0 when ... > ... is true |
+| test.c:17:17:17:21 | ... > ... | ... > ... != 1 when ... > ... is false |
+| test.c:17:17:17:21 | ... > ... | ... > ... == 0 when ... > ... is false |
+| test.c:17:17:17:21 | ... > ... | ... > ... == 1 when ... > ... is true |
+| test.c:17:17:17:21 | ... > ... | y < 1+1 when ... > ... is false |
+| test.c:17:17:17:21 | ... > ... | y < 2 when ... > ... is false |
+| test.c:17:17:17:21 | ... > ... | y >= 1+1 when ... > ... is true |
+| test.c:17:17:17:21 | ... > ... | y >= 2 when ... > ... is true |
+| test.c:26:11:26:15 | ... > ... | 0 < x+0 when ... > ... is true |
+| test.c:26:11:26:15 | ... > ... | 0 >= x+0 when ... > ... is false |
+| test.c:26:11:26:15 | ... > ... | ... > ... != 0 when ... > ... is true |
+| test.c:26:11:26:15 | ... > ... | ... > ... != 1 when ... > ... is false |
+| test.c:26:11:26:15 | ... > ... | ... > ... == 0 when ... > ... is false |
+| test.c:26:11:26:15 | ... > ... | ... > ... == 1 when ... > ... is true |
+| test.c:26:11:26:15 | ... > ... | x < 0+1 when ... > ... is false |
+| test.c:26:11:26:15 | ... > ... | x < 1 when ... > ... is false |
+| test.c:26:11:26:15 | ... > ... | x >= 0+1 when ... > ... is true |
+| test.c:26:11:26:15 | ... > ... | x >= 1 when ... > ... is true |
+| test.c:34:16:34:21 | ... < ... | 10 < j+1 when ... < ... is false |
+| test.c:34:16:34:21 | ... < ... | 10 >= j+1 when ... < ... is true |
+| test.c:34:16:34:21 | ... < ... | ... < ... != 0 when ... < ... is true |
+| test.c:34:16:34:21 | ... < ... | ... < ... != 1 when ... < ... is false |
+| test.c:34:16:34:21 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:34:16:34:21 | ... < ... | ... < ... == 1 when ... < ... is true |
+| test.c:34:16:34:21 | ... < ... | j < 10 when ... < ... is true |
+| test.c:34:16:34:21 | ... < ... | j < 10+0 when ... < ... is true |
+| test.c:34:16:34:21 | ... < ... | j >= 10 when ... < ... is false |
+| test.c:34:16:34:21 | ... < ... | j >= 10+0 when ... < ... is false |
+| test.c:42:16:42:21 | ... < ... | 10 < j+1 when ... < ... is false |
+| test.c:42:16:42:21 | ... < ... | 10 >= j+1 when ... < ... is true |
+| test.c:42:16:42:21 | ... < ... | ... < ... != 0 when ... < ... is true |
+| test.c:42:16:42:21 | ... < ... | ... < ... != 1 when ... < ... is false |
+| test.c:42:16:42:21 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:42:16:42:21 | ... < ... | ... < ... == 1 when ... < ... is true |
+| test.c:42:16:42:21 | ... < ... | j < 10 when ... < ... is true |
+| test.c:42:16:42:21 | ... < ... | j < 10+0 when ... < ... is true |
+| test.c:42:16:42:21 | ... < ... | j >= 10 when ... < ... is false |
+| test.c:42:16:42:21 | ... < ... | j >= 10+0 when ... < ... is false |
+| test.c:44:12:44:16 | ... > ... | 0 < z+0 when ... > ... is true |
+| test.c:44:12:44:16 | ... > ... | 0 >= z+0 when ... > ... is false |
+| test.c:44:12:44:16 | ... > ... | ... > ... != 0 when ... > ... is true |
+| test.c:44:12:44:16 | ... > ... | ... > ... != 1 when ... > ... is false |
+| test.c:44:12:44:16 | ... > ... | ... > ... == 0 when ... > ... is false |
+| test.c:44:12:44:16 | ... > ... | ... > ... == 1 when ... > ... is true |
+| test.c:44:12:44:16 | ... > ... | z < 0+1 when ... > ... is false |
+| test.c:44:12:44:16 | ... > ... | z < 1 when ... > ... is false |
+| test.c:44:12:44:16 | ... > ... | z >= 0+1 when ... > ... is true |
+| test.c:44:12:44:16 | ... > ... | z >= 1 when ... > ... is true |
+| test.c:45:16:45:20 | ... > ... | 0 < y+0 when ... > ... is true |
+| test.c:45:16:45:20 | ... > ... | 0 >= y+0 when ... > ... is false |
+| test.c:45:16:45:20 | ... > ... | ... > ... != 0 when ... > ... is true |
+| test.c:45:16:45:20 | ... > ... | ... > ... != 1 when ... > ... is false |
+| test.c:45:16:45:20 | ... > ... | ... > ... == 0 when ... > ... is false |
+| test.c:45:16:45:20 | ... > ... | ... > ... == 1 when ... > ... is true |
+| test.c:45:16:45:20 | ... > ... | y < 0+1 when ... > ... is false |
+| test.c:45:16:45:20 | ... > ... | y < 1 when ... > ... is false |
+| test.c:45:16:45:20 | ... > ... | y >= 0+1 when ... > ... is true |
+| test.c:45:16:45:20 | ... > ... | y >= 1 when ... > ... is true |
+| test.c:58:9:58:14 | ... == ... | 0 != x+0 when ... == ... is false |
+| test.c:58:9:58:14 | ... == ... | 0 == x+0 when ... == ... is true |
+| test.c:58:9:58:14 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.c:58:9:58:14 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.c:58:9:58:14 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.c:58:9:58:14 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.c:58:9:58:14 | ... == ... | x != 0 when ... == ... is false |
+| test.c:58:9:58:14 | ... == ... | x != 0+0 when ... == ... is false |
+| test.c:58:9:58:14 | ... == ... | x == 0 when ... == ... is true |
+| test.c:58:9:58:14 | ... == ... | x == 0+0 when ... == ... is true |
+| test.c:58:9:58:23 | ... \|\| ... | 0 != x+0 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | 0 < y+1 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | ... < ... != 1 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | ... < ... == 0 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | ... == ... != 1 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | ... == ... == 0 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | x != 0 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | x != 0+0 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | y >= 0 when ... \|\| ... is false |
+| test.c:58:9:58:23 | ... \|\| ... | y >= 0+0 when ... \|\| ... is false |
+| test.c:58:19:58:23 | ... < ... | 0 < y+1 when ... < ... is false |
+| test.c:58:19:58:23 | ... < ... | 0 >= y+1 when ... < ... is true |
+| test.c:58:19:58:23 | ... < ... | ... < ... != 0 when ... < ... is true |
+| test.c:58:19:58:23 | ... < ... | ... < ... != 1 when ... < ... is false |
+| test.c:58:19:58:23 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:58:19:58:23 | ... < ... | ... < ... == 1 when ... < ... is true |
+| test.c:58:19:58:23 | ... < ... | y < 0 when ... < ... is true |
+| test.c:58:19:58:23 | ... < ... | y < 0+0 when ... < ... is true |
+| test.c:58:19:58:23 | ... < ... | y >= 0 when ... < ... is false |
+| test.c:58:19:58:23 | ... < ... | y >= 0+0 when ... < ... is false |
+| test.c:75:9:75:14 | ... == ... | 0 != x+0 when ... == ... is false |
+| test.c:75:9:75:14 | ... == ... | 0 == x+0 when ... == ... is true |
+| test.c:75:9:75:14 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.c:75:9:75:14 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.c:75:9:75:14 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.c:75:9:75:14 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.c:75:9:75:14 | ... == ... | x != 0 when ... == ... is false |
+| test.c:75:9:75:14 | ... == ... | x != 0+0 when ... == ... is false |
+| test.c:75:9:75:14 | ... == ... | x == 0 when ... == ... is true |
+| test.c:75:9:75:14 | ... == ... | x == 0+0 when ... == ... is true |
+| test.c:85:8:85:13 | ... == ... | 0 != x+0 when ... == ... is false |
+| test.c:85:8:85:13 | ... == ... | 0 == x+0 when ... == ... is true |
+| test.c:85:8:85:13 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.c:85:8:85:13 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.c:85:8:85:13 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.c:85:8:85:13 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.c:85:8:85:13 | ... == ... | x != 0 when ... == ... is false |
+| test.c:85:8:85:13 | ... == ... | x != 0+0 when ... == ... is false |
+| test.c:85:8:85:13 | ... == ... | x == 0 when ... == ... is true |
+| test.c:85:8:85:13 | ... == ... | x == 0+0 when ... == ... is true |
+| test.c:85:8:85:23 | ... && ... | 0 != y+0 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | 0 == x+0 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | ... != ... != 0 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | ... != ... == 1 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | ... == ... != 0 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | ... == ... == 1 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | x == 0 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | x == 0+0 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | y != 0 when ... && ... is true |
+| test.c:85:8:85:23 | ... && ... | y != 0+0 when ... && ... is true |
+| test.c:85:18:85:23 | ... != ... | 0 != y+0 when ... != ... is true |
+| test.c:85:18:85:23 | ... != ... | 0 == y+0 when ... != ... is false |
+| test.c:85:18:85:23 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.c:85:18:85:23 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.c:85:18:85:23 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.c:85:18:85:23 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.c:85:18:85:23 | ... != ... | y != 0 when ... != ... is true |
+| test.c:85:18:85:23 | ... != ... | y != 0+0 when ... != ... is true |
+| test.c:85:18:85:23 | ... != ... | y == 0 when ... != ... is false |
+| test.c:85:18:85:23 | ... != ... | y == 0+0 when ... != ... is false |
+| test.c:94:11:94:16 | ... != ... | 0 != x+0 when ... != ... is true |
+| test.c:94:11:94:16 | ... != ... | 0 == x+0 when ... != ... is false |
+| test.c:94:11:94:16 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.c:94:11:94:16 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.c:94:11:94:16 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.c:94:11:94:16 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.c:94:11:94:16 | ... != ... | x != 0 when ... != ... is true |
+| test.c:94:11:94:16 | ... != ... | x != 0+0 when ... != ... is true |
+| test.c:94:11:94:16 | ... != ... | x == 0 when ... != ... is false |
+| test.c:94:11:94:16 | ... != ... | x == 0+0 when ... != ... is false |
+| test.c:102:16:102:21 | ... < ... | 10 < j+1 when ... < ... is false |
+| test.c:102:16:102:21 | ... < ... | 10 >= j+1 when ... < ... is true |
+| test.c:102:16:102:21 | ... < ... | ... < ... != 0 when ... < ... is true |
+| test.c:102:16:102:21 | ... < ... | ... < ... != 1 when ... < ... is false |
+| test.c:102:16:102:21 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:102:16:102:21 | ... < ... | ... < ... == 1 when ... < ... is true |
+| test.c:102:16:102:21 | ... < ... | j < 10 when ... < ... is true |
+| test.c:102:16:102:21 | ... < ... | j < 10+0 when ... < ... is true |
+| test.c:102:16:102:21 | ... < ... | j >= 10 when ... < ... is false |
+| test.c:102:16:102:21 | ... < ... | j >= 10+0 when ... < ... is false |
+| test.c:109:9:109:14 | ... == ... | 0 != x+0 when ... == ... is false |
+| test.c:109:9:109:14 | ... == ... | 0 == x+0 when ... == ... is true |
+| test.c:109:9:109:14 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.c:109:9:109:14 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.c:109:9:109:14 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.c:109:9:109:14 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.c:109:9:109:14 | ... == ... | x != 0 when ... == ... is false |
+| test.c:109:9:109:14 | ... == ... | x != 0+0 when ... == ... is false |
+| test.c:109:9:109:14 | ... == ... | x == 0 when ... == ... is true |
+| test.c:109:9:109:14 | ... == ... | x == 0+0 when ... == ... is true |
+| test.c:109:9:109:23 | ... \|\| ... | 0 != x+0 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | 0 < y+1 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | ... < ... != 1 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | ... < ... == 0 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | ... == ... != 1 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | ... == ... == 0 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | x != 0 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | x != 0+0 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | y >= 0 when ... \|\| ... is false |
+| test.c:109:9:109:23 | ... \|\| ... | y >= 0+0 when ... \|\| ... is false |
+| test.c:109:19:109:23 | ... < ... | 0 < y+1 when ... < ... is false |
+| test.c:109:19:109:23 | ... < ... | 0 >= y+1 when ... < ... is true |
+| test.c:109:19:109:23 | ... < ... | ... < ... != 0 when ... < ... is true |
+| test.c:109:19:109:23 | ... < ... | ... < ... != 1 when ... < ... is false |
+| test.c:109:19:109:23 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:109:19:109:23 | ... < ... | ... < ... == 1 when ... < ... is true |
+| test.c:109:19:109:23 | ... < ... | y < 0 when ... < ... is true |
+| test.c:109:19:109:23 | ... < ... | y < 0+0 when ... < ... is true |
+| test.c:109:19:109:23 | ... < ... | y >= 0 when ... < ... is false |
+| test.c:109:19:109:23 | ... < ... | y >= 0+0 when ... < ... is false |
+| test.c:126:7:126:7 | 1 | 1 != 0 when 1 is true |
+| test.c:126:7:126:7 | 1 | 1 != 1 when 1 is false |
+| test.c:126:7:126:7 | 1 | 1 == 0 when 1 is false |
+| test.c:126:7:126:7 | 1 | 1 == 1 when 1 is true |
+| test.c:126:7:126:28 | ... && ... | 1 != 0 when ... && ... is true |
+| test.c:126:7:126:28 | ... && ... | 1 == 1 when ... && ... is true |
+| test.c:126:7:126:28 | ... && ... | call to test3_condition != 0 when ... && ... is true |
+| test.c:126:7:126:28 | ... && ... | call to test3_condition == 1 when ... && ... is true |
+| test.c:126:12:126:26 | call to test3_condition | call to test3_condition != 0 when call to test3_condition is true |
+| test.c:126:12:126:26 | call to test3_condition | call to test3_condition != 1 when call to test3_condition is false |
+| test.c:126:12:126:26 | call to test3_condition | call to test3_condition == 0 when call to test3_condition is false |
+| test.c:126:12:126:26 | call to test3_condition | call to test3_condition == 1 when call to test3_condition is true |
+| test.c:131:7:131:7 | b | b != 0 when b is true |
+| test.c:131:7:131:7 | b | b != 1 when b is false |
+| test.c:131:7:131:7 | b | b == 0 when b is false |
+| test.c:131:7:131:7 | b | b == 1 when b is true |
+| test.c:137:7:137:7 | 0 | 0 != 0 when 0 is true |
+| test.c:137:7:137:7 | 0 | 0 != 1 when 0 is false |
+| test.c:137:7:137:7 | 0 | 0 == 0 when 0 is false |
+| test.c:137:7:137:7 | 0 | 0 == 1 when 0 is true |
+| test.c:146:7:146:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:146:7:146:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:146:7:146:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.c:146:7:146:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.c:146:7:146:8 | ! ... | x != 0 when ! ... is false |
+| test.c:146:7:146:8 | ! ... | x == 0 when ! ... is true |
+| test.c:146:8:146:8 | x | ! ... != 0 when x is false |
+| test.c:146:8:146:8 | x | ! ... != 1 when x is true |
+| test.c:146:8:146:8 | x | ! ... == 0 when x is true |
+| test.c:146:8:146:8 | x | ! ... == 1 when x is false |
+| test.c:146:8:146:8 | x | x != 0 when x is true |
+| test.c:146:8:146:8 | x | x == 0 when x is false |
+| test.c:152:8:152:8 | p | p != 0 when p is true |
+| test.c:152:8:152:8 | p | p != 1 when p is false |
+| test.c:152:8:152:8 | p | p == 0 when p is false |
+| test.c:152:8:152:8 | p | p == 1 when p is true |
+| test.c:158:8:158:9 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:158:8:158:9 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:158:8:158:9 | ! ... | ! ... == 0 when ! ... is false |
+| test.c:158:8:158:9 | ! ... | ! ... == 1 when ! ... is true |
+| test.c:158:8:158:9 | ! ... | p != 0 when ! ... is false |
+| test.c:158:8:158:9 | ! ... | p == 0 when ! ... is true |
+| test.c:158:9:158:9 | p | ! ... != 0 when p is false |
+| test.c:158:9:158:9 | p | ! ... != 1 when p is true |
+| test.c:158:9:158:9 | p | ! ... == 0 when p is true |
+| test.c:158:9:158:9 | p | ! ... == 1 when p is false |
+| test.c:158:9:158:9 | p | p != 0 when p is true |
+| test.c:158:9:158:9 | p | p == 0 when p is false |
+| test.c:164:8:164:8 | s | s != 0 when s is true |
+| test.c:164:8:164:8 | s | s != 1 when s is false |
+| test.c:164:8:164:8 | s | s == 0 when s is false |
+| test.c:164:8:164:8 | s | s == 1 when s is true |
+| test.c:170:8:170:9 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:170:8:170:9 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:170:8:170:9 | ! ... | ! ... == 0 when ! ... is false |
+| test.c:170:8:170:9 | ! ... | ! ... == 1 when ! ... is true |
+| test.c:170:8:170:9 | ! ... | s != 0 when ! ... is false |
+| test.c:170:8:170:9 | ! ... | s == 0 when ! ... is true |
+| test.c:170:9:170:9 | s | ! ... != 0 when s is false |
+| test.c:170:9:170:9 | s | ! ... != 1 when s is true |
+| test.c:170:9:170:9 | s | ! ... == 0 when s is true |
+| test.c:170:9:170:9 | s | ! ... == 1 when s is false |
+| test.c:170:9:170:9 | s | s != 0 when s is true |
+| test.c:170:9:170:9 | s | s == 0 when s is false |
+| test.c:176:8:176:15 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:176:8:176:15 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:176:8:176:15 | ! ... | ! ... == 0 when ! ... is false |
+| test.c:176:8:176:15 | ! ... | ! ... == 1 when ! ... is true |
+| test.c:176:8:176:15 | ! ... | ... < ... != 0 when ! ... is false |
+| test.c:176:8:176:15 | ! ... | ... < ... == 0 when ! ... is true |
+| test.c:176:8:176:15 | ! ... | a < b+0 when ! ... is false |
+| test.c:176:8:176:15 | ! ... | a >= b+0 when ! ... is true |
+| test.c:176:8:176:15 | ! ... | b < a+1 when ! ... is true |
+| test.c:176:8:176:15 | ! ... | b >= a+1 when ! ... is false |
+| test.c:176:10:176:14 | ... < ... | ! ... != 0 when ... < ... is false |
+| test.c:176:10:176:14 | ... < ... | ! ... != 1 when ... < ... is true |
+| test.c:176:10:176:14 | ... < ... | ! ... == 0 when ... < ... is true |
+| test.c:176:10:176:14 | ... < ... | ! ... == 1 when ... < ... is false |
+| test.c:176:10:176:14 | ... < ... | ... < ... != 0 when ... < ... is true |
+| test.c:176:10:176:14 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:176:10:176:14 | ... < ... | a < b+0 when ... < ... is true |
+| test.c:176:10:176:14 | ... < ... | a >= b+0 when ... < ... is false |
+| test.c:176:10:176:14 | ... < ... | b < a+1 when ... < ... is false |
+| test.c:176:10:176:14 | ... < ... | b >= a+1 when ... < ... is true |
+| test.c:182:8:182:34 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:182:8:182:34 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:182:8:182:34 | ! ... | ! ... == 0 when ! ... is false |
+| 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 | ... >= ... | ... >= ... != 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: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 | ... && ... | ! ... != 0 when ... && ... is false |
+| test.c:182:10:182:33 | ... && ... | ! ... != 1 when ... && ... is true |
+| test.c:182:10:182:33 | ... && ... | ! ... == 0 when ... && ... is true |
+| test.c:182:10:182:33 | ... && ... | ! ... == 1 when ... && ... is false |
+| test.c:182:10:182:33 | ... && ... | ... && ... != 0 when ... && ... is true |
+| test.c:182:10:182:33 | ... && ... | ... && ... == 0 when ... && ... is false |
+| 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 | ... && ... | ... >= ... != 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: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 |
+| test.c:182:25:182:33 | ... < ... | ... < ... != 1 when ... < ... is false |
+| test.c:182:25:182:33 | ... < ... | ... < ... == 0 when ... < ... is false |
+| test.c:182:25:182:33 | ... < ... | ... < ... == 1 when ... < ... is true |
+| test.c:182:25:182:33 | ... < ... | foo < 1.0+0 when ... < ... is true |
+| test.c:182:25:182:33 | ... < ... | foo >= 1.0+0 when ... < ... is false |
+| test.c:190:7:190:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:190:7:190:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:190:7:190:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.c:190:7:190:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.c:190:7:190:8 | ! ... | a != b+0 when ! ... is false |
+| test.c:190:7:190:8 | ! ... | a == b+0 when ! ... is true |
+| test.c:190:7:190:8 | ! ... | b != a+0 when ! ... is false |
+| test.c:190:7:190:8 | ! ... | b == a+0 when ! ... is true |
+| test.c:190:7:190:8 | ! ... | c != 0 when ! ... is false |
+| test.c:190:7:190:8 | ! ... | c == 0 when ! ... is true |
+| test.c:190:8:190:8 | c | ! ... != 0 when c is false |
+| test.c:190:8:190:8 | c | ! ... != 1 when c is true |
+| test.c:190:8:190:8 | c | ! ... == 0 when c is true |
+| test.c:190:8:190:8 | c | ! ... == 1 when c is false |
+| test.c:190:8:190:8 | c | a != b+0 when c is true |
+| test.c:190:8:190:8 | c | a == b+0 when c is false |
+| test.c:190:8:190:8 | c | b != a+0 when c is true |
+| test.c:190:8:190:8 | c | b == a+0 when c is false |
+| test.c:190:8:190:8 | c | c != 0 when c is true |
+| test.c:190:8:190:8 | c | c == 0 when c is false |
+| test.c:198:7:198:8 | ! ... | 10 < a+0 when ! ... is false |
+| test.c:198:7:198:8 | ! ... | 10 >= a+0 when ! ... is true |
+| test.c:198:7:198:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:198:7:198:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:198:7:198:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.c:198:7:198:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.c:198:7:198:8 | ! ... | a < 10+1 when ! ... is true |
+| test.c:198:7:198:8 | ! ... | a < 11 when ! ... is true |
+| test.c:198:7:198:8 | ! ... | a >= 10+1 when ! ... is false |
+| test.c:198:7:198:8 | ! ... | a >= 11 when ! ... is false |
+| test.c:198:7:198:8 | ! ... | b != 0 when ! ... is false |
+| test.c:198:7:198:8 | ! ... | b == 0 when ! ... is true |
+| test.c:198:8:198:8 | b | 10 < a+0 when b is true |
+| test.c:198:8:198:8 | b | 10 >= a+0 when b is false |
+| test.c:198:8:198:8 | b | ! ... != 0 when b is false |
+| test.c:198:8:198:8 | b | ! ... != 1 when b is true |
+| test.c:198:8:198:8 | b | ! ... == 0 when b is true |
+| test.c:198:8:198:8 | b | ! ... == 1 when b is false |
+| test.c:198:8:198:8 | b | a < 10+1 when b is false |
+| test.c:198:8:198:8 | b | a < 11 when b is false |
+| test.c:198:8:198:8 | b | a >= 10+1 when b is true |
+| test.c:198:8:198:8 | b | a >= 11 when b is true |
+| test.c:198:8:198:8 | b | b != 0 when b is true |
+| test.c:198:8:198:8 | b | b == 0 when b is false |
+| test.c:206:7:206:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.c:206:7:206:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.c:206:7:206:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.c:206:7:206:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.c:206:7:206:8 | ! ... | a < b+1 when ! ... is true |
+| test.c:206:7:206:8 | ! ... | a >= b+1 when ! ... is false |
+| test.c:206:7:206:8 | ! ... | b < a+0 when ! ... is false |
+| test.c:206:7:206:8 | ! ... | b >= a+0 when ! ... is true |
+| test.c:206:7:206:8 | ! ... | c != 0 when ! ... is false |
+| test.c:206:7:206:8 | ! ... | c == 0 when ! ... is true |
+| test.c:206:8:206:8 | c | ! ... != 0 when c is false |
+| test.c:206:8:206:8 | c | ! ... != 1 when c is true |
+| test.c:206:8:206:8 | c | ! ... == 0 when c is true |
+| test.c:206:8:206:8 | c | ! ... == 1 when c is false |
+| test.c:206:8:206:8 | c | a < b+1 when c is false |
+| test.c:206:8:206:8 | c | a >= b+1 when c is true |
+| test.c:206:8:206:8 | c | b < a+0 when c is true |
+| test.c:206:8:206:8 | c | b >= a+0 when c is false |
+| test.c:206:8:206:8 | c | c != 0 when c is true |
+| test.c:206:8:206:8 | c | c == 0 when c is false |
+| test.c:215:6:215:18 | call to __builtin_expect | ... > ... != 0 when call to __builtin_expect is true |
+| test.c:215:6:215:18 | call to __builtin_expect | ... > ... == 0 when call to __builtin_expect is false |
+| test.c:215:6:215:18 | call to __builtin_expect | a < b+1 when call to __builtin_expect is false |
+| test.c:215:6:215:18 | call to __builtin_expect | a >= b+1 when call to __builtin_expect is true |
+| test.c:215:6:215:18 | call to __builtin_expect | b < a+0 when call to __builtin_expect is true |
+| test.c:215:6:215:18 | call to __builtin_expect | b >= a+0 when call to __builtin_expect is false |
+| test.c:215:6:215:18 | call to __builtin_expect | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| test.c:215:6:215:18 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false |
+| test.c:215:6:215:18 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| test.c:215:6:215:18 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true |
+| test.c:219:9:219:22 | call to __builtin_expect | 42 < a+0 when call to __builtin_expect is true |
+| test.c:219:9:219:22 | call to __builtin_expect | 42 >= a+0 when call to __builtin_expect is false |
+| test.c:219:9:219:22 | call to __builtin_expect | ... > ... != 0 when call to __builtin_expect is true |
+| test.c:219:9:219:22 | call to __builtin_expect | ... > ... == 0 when call to __builtin_expect is false |
+| test.c:219:9:219:22 | call to __builtin_expect | a < 42+1 when call to __builtin_expect is false |
+| test.c:219:9:219:22 | call to __builtin_expect | a < 43 when call to __builtin_expect is false |
+| test.c:219:9:219:22 | call to __builtin_expect | a >= 42+1 when call to __builtin_expect is true |
+| test.c:219:9:219:22 | call to __builtin_expect | a >= 43 when call to __builtin_expect is true |
+| test.c:219:9:219:22 | call to __builtin_expect | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| test.c:219:9:219:22 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false |
+| test.c:219:9:219:22 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| test.c:219:9:219:22 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true |
+| test.cpp:18:8:18:10 | call to get | call to get != 0 when call to get is true |
+| test.cpp:18:8:18:10 | call to get | call to get != 1 when call to get is false |
+| test.cpp:18:8:18:10 | call to get | call to get == 0 when call to get is false |
+| test.cpp:18:8:18:10 | call to get | call to get == 1 when call to get is true |
+| test.cpp:31:7:31:13 | ... == ... | - ... != x+0 when ... == ... is false |
+| test.cpp:31:7:31:13 | ... == ... | - ... == x+0 when ... == ... is true |
+| test.cpp:31:7:31:13 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:31:7:31:13 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:31:7:31:13 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:31:7:31:13 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:31:7:31:13 | ... == ... | x != -1 when ... == ... is false |
+| test.cpp:31:7:31:13 | ... == ... | x != - ...+0 when ... == ... is false |
+| test.cpp:31:7:31:13 | ... == ... | x == -1 when ... == ... is true |
+| test.cpp:31:7:31:13 | ... == ... | x == - ...+0 when ... == ... is true |
+| test.cpp:42:13:42:20 | call to getABool | call to getABool != 0 when call to getABool is true |
+| test.cpp:42:13:42:20 | call to getABool | call to getABool != 1 when call to getABool is false |
+| test.cpp:42:13:42:20 | call to getABool | call to getABool == 0 when call to getABool is false |
+| test.cpp:42:13:42:20 | call to getABool | call to getABool == 1 when call to getABool is true |
+| test.cpp:61:10:61:10 | i | i == 0 when i is Case[0] |
+| test.cpp:61:10:61:10 | i | i == 1 when i is Case[1] |
+| test.cpp:61:10:61:10 | i | i == 2 when i is Case[2] |
+| test.cpp:74:10:74:10 | i | i < 11 when i is Case[0..10] |
+| test.cpp:74:10:74:10 | i | i < 21 when i is Case[11..20] |
+| test.cpp:74:10:74:10 | i | i >= 0 when i is Case[0..10] |
+| test.cpp:74:10:74:10 | i | i >= 11 when i is Case[11..20] |
+| test.cpp:93:6:93:6 | c | c != 0 when c is true |
+| test.cpp:93:6:93:6 | c | c != 1 when c is false |
+| test.cpp:93:6:93:6 | c | c == 0 when c is false |
+| test.cpp:93:6:93:6 | c | c == 1 when c is true |
+| test.cpp:99:6:99:6 | f | f != 0 when f is true |
+| test.cpp:99:6:99:6 | f | f != 1 when f is false |
+| test.cpp:99:6:99:6 | f | f == 0 when f is false |
+| test.cpp:99:6:99:6 | f | f == 1 when f is true |
+| test.cpp:105:6:105:14 | ... != ... | 0.0 != f+0 when ... != ... is true |
+| test.cpp:105:6:105:14 | ... != ... | 0.0 == f+0 when ... != ... is false |
+| test.cpp:105:6:105:14 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:105:6:105:14 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:105:6:105:14 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:105:6:105:14 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:105:6:105:14 | ... != ... | f != 0.0+0 when ... != ... is true |
+| test.cpp:105:6:105:14 | ... != ... | f == 0.0+0 when ... != ... is false |
+| test.cpp:111:6:111:14 | ... != ... | 0.0 != i+0 when ... != ... is true |
+| test.cpp:111:6:111:14 | ... != ... | 0.0 == i+0 when ... != ... is false |
+| test.cpp:111:6:111:14 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:111:6:111:14 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:111:6:111:14 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:111:6:111:14 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:111:6:111:14 | ... != ... | i != 0.0+0 when ... != ... is true |
+| test.cpp:111:6:111:14 | ... != ... | i == 0.0+0 when ... != ... is false |
+| test.cpp:122:9:122:9 | b | b != 0 when b is true |
+| test.cpp:122:9:122:9 | b | b != 1 when b is false |
+| test.cpp:122:9:122:9 | b | b == 0 when b is false |
+| test.cpp:122:9:122:9 | b | b == 1 when b is true |
+| test.cpp:125:13:125:20 | ! ... | ! ... != 0 when ! ... is true |
+| test.cpp:125:13:125:20 | ! ... | ! ... != 1 when ! ... is false |
+| test.cpp:125:13:125:20 | ! ... | ! ... == 0 when ! ... is false |
+| test.cpp:125:13:125:20 | ! ... | ! ... == 1 when ! ... is true |
+| test.cpp:125:13:125:20 | ! ... | call to safe != 0 when ! ... is false |
+| test.cpp:125:13:125:20 | ! ... | call to safe != 1 when ! ... is true |
+| test.cpp:125:13:125:20 | ! ... | call to safe == 0 when ! ... is true |
+| test.cpp:125:13:125:20 | ! ... | call to safe == 1 when ! ... is false |
+| test.cpp:125:14:125:17 | call to safe | ! ... != 0 when call to safe is false |
+| test.cpp:125:14:125:17 | call to safe | ! ... != 1 when call to safe is true |
+| test.cpp:125:14:125:17 | call to safe | ! ... == 0 when call to safe is true |
+| test.cpp:125:14:125:17 | call to safe | ! ... == 1 when call to safe is false |
+| test.cpp:125:14:125:17 | call to safe | call to safe != 0 when call to safe is true |
+| test.cpp:125:14:125:17 | call to safe | call to safe != 1 when call to safe is false |
+| test.cpp:125:14:125:17 | call to safe | call to safe == 0 when call to safe is false |
+| test.cpp:125:14:125:17 | call to safe | call to safe == 1 when call to safe is true |
+| test.cpp:131:6:131:21 | call to __builtin_expect | ... + ... != a+0 when call to __builtin_expect is false |
+| test.cpp:131:6:131:21 | call to __builtin_expect | ... + ... == a+0 when call to __builtin_expect is true |
+| test.cpp:131:6:131:21 | call to __builtin_expect | a != ... + ...+0 when call to __builtin_expect is false |
+| test.cpp:131:6:131:21 | call to __builtin_expect | a != b+42 when call to __builtin_expect is false |
+| test.cpp:131:6:131:21 | call to __builtin_expect | a == ... + ...+0 when call to __builtin_expect is true |
+| test.cpp:131:6:131:21 | call to __builtin_expect | a == b+42 when call to __builtin_expect is true |
+| test.cpp:131:6:131:21 | call to __builtin_expect | b != a+-42 when call to __builtin_expect is false |
+| test.cpp:131:6:131:21 | call to __builtin_expect | b == a+-42 when call to __builtin_expect is true |
+| test.cpp:131:6:131:21 | call to __builtin_expect | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| test.cpp:131:6:131:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false |
+| test.cpp:131:6:131:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| test.cpp:131:6:131:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true |
+| test.cpp:135:6:135:21 | call to __builtin_expect | ... + ... != a+0 when call to __builtin_expect is true |
+| test.cpp:135:6:135:21 | call to __builtin_expect | ... + ... == a+0 when call to __builtin_expect is false |
+| test.cpp:135:6:135:21 | call to __builtin_expect | a != ... + ...+0 when call to __builtin_expect is true |
+| test.cpp:135:6:135:21 | call to __builtin_expect | a != b+42 when call to __builtin_expect is true |
+| test.cpp:135:6:135:21 | call to __builtin_expect | a == ... + ...+0 when call to __builtin_expect is false |
+| test.cpp:135:6:135:21 | call to __builtin_expect | a == b+42 when call to __builtin_expect is false |
+| test.cpp:135:6:135:21 | call to __builtin_expect | b != a+-42 when call to __builtin_expect is true |
+| test.cpp:135:6:135:21 | call to __builtin_expect | b == a+-42 when call to __builtin_expect is false |
+| test.cpp:135:6:135:21 | call to __builtin_expect | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| test.cpp:135:6:135:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false |
+| test.cpp:135:6:135:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| test.cpp:135:6:135:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true |
+| test.cpp:141:6:141:21 | call to __builtin_expect | 42 != a+0 when call to __builtin_expect is false |
+| test.cpp:141:6:141:21 | call to __builtin_expect | 42 == a+0 when call to __builtin_expect is true |
+| test.cpp:141:6:141:21 | call to __builtin_expect | a != 42 when call to __builtin_expect is false |
+| test.cpp:141:6:141:21 | call to __builtin_expect | a != 42+0 when call to __builtin_expect is false |
+| test.cpp:141:6:141:21 | call to __builtin_expect | a == 42 when call to __builtin_expect is true |
+| test.cpp:141:6:141:21 | call to __builtin_expect | a == 42+0 when call to __builtin_expect is true |
+| test.cpp:141:6:141:21 | call to __builtin_expect | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| test.cpp:141:6:141:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false |
+| test.cpp:141:6:141:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| test.cpp:141:6:141:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true |
+| test.cpp:145:6:145:21 | call to __builtin_expect | 42 != a+0 when call to __builtin_expect is true |
+| test.cpp:145:6:145:21 | call to __builtin_expect | 42 == a+0 when call to __builtin_expect is false |
+| test.cpp:145:6:145:21 | call to __builtin_expect | a != 42 when call to __builtin_expect is true |
+| test.cpp:145:6:145:21 | call to __builtin_expect | a != 42+0 when call to __builtin_expect is true |
+| test.cpp:145:6:145:21 | call to __builtin_expect | a == 42 when call to __builtin_expect is false |
+| test.cpp:145:6:145:21 | call to __builtin_expect | a == 42+0 when call to __builtin_expect is false |
+| test.cpp:145:6:145:21 | call to __builtin_expect | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| test.cpp:145:6:145:21 | call to __builtin_expect | call to __builtin_expect != 1 when call to __builtin_expect is false |
+| test.cpp:145:6:145:21 | call to __builtin_expect | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| test.cpp:145:6:145:21 | call to __builtin_expect | call to __builtin_expect == 1 when call to __builtin_expect is true |
+| test.cpp:152:7:152:8 | ! ... | 10 < a+1 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | 10 >= a+1 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | ... < ... != 0 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | ... < ... != 1 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | ... < ... == 0 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | ... < ... == 1 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | a < 10 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | a < 10+0 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | a >= 10 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | a >= 10+0 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | b != 0 when ! ... is false |
+| test.cpp:152:7:152:8 | ! ... | b != 1 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | b == 0 when ! ... is true |
+| test.cpp:152:7:152:8 | ! ... | b == 1 when ! ... is false |
+| test.cpp:152:8:152:8 | b | 10 < a+1 when b is false |
+| test.cpp:152:8:152:8 | b | 10 >= a+1 when b is true |
+| test.cpp:152:8:152:8 | b | ! ... != 0 when b is false |
+| test.cpp:152:8:152:8 | b | ! ... != 1 when b is true |
+| test.cpp:152:8:152:8 | b | ! ... == 0 when b is true |
+| test.cpp:152:8:152:8 | b | ! ... == 1 when b is false |
+| test.cpp:152:8:152:8 | b | ... < ... != 0 when b is true |
+| test.cpp:152:8:152:8 | b | ... < ... != 1 when b is false |
+| test.cpp:152:8:152:8 | b | ... < ... == 0 when b is false |
+| test.cpp:152:8:152:8 | b | ... < ... == 1 when b is true |
+| test.cpp:152:8:152:8 | b | a < 10 when b is true |
+| test.cpp:152:8:152:8 | b | a < 10+0 when b is true |
+| test.cpp:152:8:152:8 | b | a >= 10 when b is false |
+| test.cpp:152:8:152:8 | b | a >= 10+0 when b is false |
+| test.cpp:152:8:152:8 | b | b != 0 when b is true |
+| test.cpp:152:8:152:8 | b | b != 1 when b is false |
+| test.cpp:152:8:152:8 | b | b == 0 when b is false |
+| test.cpp:152:8:152:8 | b | b == 1 when b is true |
+| test.cpp:160:7:160:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.cpp:160:7:160:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.cpp:160:7:160:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | ... != ... != 0 when ! ... is false |
+| test.cpp:160:7:160:8 | ! ... | ... != ... != 1 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | ... != ... == 0 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | ... != ... == 1 when ! ... is false |
+| test.cpp:160:7:160:8 | ! ... | a != b+0 when ! ... is false |
+| test.cpp:160:7:160:8 | ! ... | a == b+0 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | b != a+0 when ! ... is false |
+| test.cpp:160:7:160:8 | ! ... | b == a+0 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | c != 0 when ! ... is false |
+| test.cpp:160:7:160:8 | ! ... | c != 1 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | c == 0 when ! ... is true |
+| test.cpp:160:7:160:8 | ! ... | c == 1 when ! ... is false |
+| test.cpp:160:8:160:8 | c | ! ... != 0 when c is false |
+| test.cpp:160:8:160:8 | c | ! ... != 1 when c is true |
+| test.cpp:160:8:160:8 | c | ! ... == 0 when c is true |
+| test.cpp:160:8:160:8 | c | ! ... == 1 when c is false |
+| test.cpp:160:8:160:8 | c | ... != ... != 0 when c is true |
+| test.cpp:160:8:160:8 | c | ... != ... != 1 when c is false |
+| test.cpp:160:8:160:8 | c | ... != ... == 0 when c is false |
+| test.cpp:160:8:160:8 | c | ... != ... == 1 when c is true |
+| test.cpp:160:8:160:8 | c | a != b+0 when c is true |
+| test.cpp:160:8:160:8 | c | a == b+0 when c is false |
+| test.cpp:160:8:160:8 | c | b != a+0 when c is true |
+| test.cpp:160:8:160:8 | c | b == a+0 when c is false |
+| test.cpp:160:8:160:8 | c | c != 0 when c is true |
+| test.cpp:160:8:160:8 | c | c != 1 when c is false |
+| test.cpp:160:8:160:8 | c | c == 0 when c is false |
+| test.cpp:160:8:160:8 | c | c == 1 when c is true |
+| test.cpp:168:7:168:8 | ! ... | 10 < a+0 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | 10 >= a+0 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | ... > ... != 0 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | ... > ... != 1 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | ... > ... == 0 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | ... > ... == 1 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | a < 10+1 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | a < 11 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | a >= 10+1 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | a >= 11 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | b != 0 when ! ... is false |
+| test.cpp:168:7:168:8 | ! ... | b != 1 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | b == 0 when ! ... is true |
+| test.cpp:168:7:168:8 | ! ... | b == 1 when ! ... is false |
+| test.cpp:168:8:168:8 | b | 10 < a+0 when b is true |
+| test.cpp:168:8:168:8 | b | 10 >= a+0 when b is false |
+| test.cpp:168:8:168:8 | b | ! ... != 0 when b is false |
+| test.cpp:168:8:168:8 | b | ! ... != 1 when b is true |
+| test.cpp:168:8:168:8 | b | ! ... == 0 when b is true |
+| test.cpp:168:8:168:8 | b | ! ... == 1 when b is false |
+| test.cpp:168:8:168:8 | b | ... > ... != 0 when b is true |
+| test.cpp:168:8:168:8 | b | ... > ... != 1 when b is false |
+| test.cpp:168:8:168:8 | b | ... > ... == 0 when b is false |
+| test.cpp:168:8:168:8 | b | ... > ... == 1 when b is true |
+| test.cpp:168:8:168:8 | b | a < 10+1 when b is false |
+| test.cpp:168:8:168:8 | b | a < 11 when b is false |
+| test.cpp:168:8:168:8 | b | a >= 10+1 when b is true |
+| test.cpp:168:8:168:8 | b | a >= 11 when b is true |
+| test.cpp:168:8:168:8 | b | b != 0 when b is true |
+| test.cpp:168:8:168:8 | b | b != 1 when b is false |
+| test.cpp:168:8:168:8 | b | b == 0 when b is false |
+| test.cpp:168:8:168:8 | b | b == 1 when b is true |
+| test.cpp:176:7:176:8 | ! ... | ! ... != 0 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | ! ... != 1 when ! ... is false |
+| test.cpp:176:7:176:8 | ! ... | ! ... == 0 when ! ... is false |
+| test.cpp:176:7:176:8 | ! ... | ! ... == 1 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | ... > ... != 0 when ! ... is false |
+| test.cpp:176:7:176:8 | ! ... | ... > ... != 1 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | ... > ... == 0 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | ... > ... == 1 when ! ... is false |
+| test.cpp:176:7:176:8 | ! ... | a < b+1 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | a >= b+1 when ! ... is false |
+| test.cpp:176:7:176:8 | ! ... | b < a+0 when ! ... is false |
+| test.cpp:176:7:176:8 | ! ... | b >= a+0 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | c != 0 when ! ... is false |
+| test.cpp:176:7:176:8 | ! ... | c != 1 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | c == 0 when ! ... is true |
+| test.cpp:176:7:176:8 | ! ... | c == 1 when ! ... is false |
+| test.cpp:176:8:176:8 | c | ! ... != 0 when c is false |
+| test.cpp:176:8:176:8 | c | ! ... != 1 when c is true |
+| test.cpp:176:8:176:8 | c | ! ... == 0 when c is true |
+| test.cpp:176:8:176:8 | c | ! ... == 1 when c is false |
+| test.cpp:176:8:176:8 | c | ... > ... != 0 when c is true |
+| test.cpp:176:8:176:8 | c | ... > ... != 1 when c is false |
+| test.cpp:176:8:176:8 | c | ... > ... == 0 when c is false |
+| test.cpp:176:8:176:8 | c | ... > ... == 1 when c is true |
+| test.cpp:176:8:176:8 | c | a < b+1 when c is false |
+| test.cpp:176:8:176:8 | c | a >= b+1 when c is true |
+| test.cpp:176:8:176:8 | c | b < a+0 when c is true |
+| test.cpp:176:8:176:8 | c | b >= a+0 when c is false |
+| test.cpp:176:8:176:8 | c | c != 0 when c is true |
+| test.cpp:176:8:176:8 | c | c != 1 when c is false |
+| test.cpp:176:8:176:8 | c | c == 0 when c is false |
+| test.cpp:176:8:176:8 | c | c == 1 when c is true |
+| test.cpp:182:6:182:16 | ! ... | ! ... != 0 when ! ... is true |
+| test.cpp:182:6:182:16 | ! ... | ! ... != 1 when ! ... is false |
+| test.cpp:182:6:182:16 | ! ... | ! ... == 0 when ! ... is false |
+| test.cpp:182:6:182:16 | ! ... | ! ... == 1 when ! ... is true |
+| test.cpp:182:6:182:16 | ! ... | ... && ... != 0 when ! ... is false |
+| test.cpp:182:6:182:16 | ! ... | ... && ... != 1 when ! ... is true |
+| test.cpp:182:6:182:16 | ! ... | ... && ... == 0 when ! ... is true |
+| test.cpp:182:6:182:16 | ! ... | ... && ... == 1 when ! ... is false |
+| test.cpp:182:6:182:16 | ! ... | b1 != 0 when ! ... is false |
+| test.cpp:182:6:182:16 | ! ... | b1 == 1 when ! ... is false |
+| test.cpp:182:6:182:16 | ! ... | b2 != 0 when ! ... is false |
+| test.cpp:182:6:182:16 | ! ... | b2 == 1 when ! ... is false |
+| test.cpp:182:8:182:9 | b1 | b1 != 0 when b1 is true |
+| test.cpp:182:8:182:9 | b1 | b1 != 1 when b1 is false |
+| test.cpp:182:8:182:9 | b1 | b1 == 0 when b1 is false |
+| test.cpp:182:8:182:9 | b1 | b1 == 1 when b1 is true |
+| test.cpp:182:8:182:15 | ... && ... | ! ... != 0 when ... && ... is false |
+| test.cpp:182:8:182:15 | ... && ... | ! ... != 1 when ... && ... is true |
+| test.cpp:182:8:182:15 | ... && ... | ! ... == 0 when ... && ... is true |
+| test.cpp:182:8:182:15 | ... && ... | ! ... == 1 when ... && ... is false |
+| test.cpp:182:8:182:15 | ... && ... | ... && ... != 0 when ... && ... is true |
+| test.cpp:182:8:182:15 | ... && ... | ... && ... != 1 when ... && ... is false |
+| test.cpp:182:8:182:15 | ... && ... | ... && ... == 0 when ... && ... is false |
+| test.cpp:182:8:182:15 | ... && ... | ... && ... == 1 when ... && ... is true |
+| test.cpp:182:8:182:15 | ... && ... | b1 != 0 when ... && ... is true |
+| test.cpp:182:8:182:15 | ... && ... | b1 == 1 when ... && ... is true |
+| test.cpp:182:8:182:15 | ... && ... | b2 != 0 when ... && ... is true |
+| test.cpp:182:8:182:15 | ... && ... | b2 == 1 when ... && ... is true |
+| test.cpp:182:14:182:15 | b2 | b2 != 0 when b2 is true |
+| test.cpp:182:14:182:15 | b2 | b2 != 1 when b2 is false |
+| test.cpp:182:14:182:15 | b2 | b2 == 0 when b2 is false |
+| test.cpp:182:14:182:15 | b2 | b2 == 1 when b2 is true |
+| test.cpp:193:6:193:16 | ! ... | ! ... != 0 when ! ... is true |
+| test.cpp:193:6:193:16 | ! ... | ! ... != 1 when ! ... is false |
+| test.cpp:193:6:193:16 | ! ... | ! ... == 0 when ! ... is false |
+| test.cpp:193:6:193:16 | ! ... | ! ... == 1 when ! ... is true |
+| test.cpp:193:6:193:16 | ! ... | ... \|\| ... != 0 when ! ... is false |
+| test.cpp:193:6:193:16 | ! ... | ... \|\| ... != 1 when ! ... is true |
+| test.cpp:193:6:193:16 | ! ... | ... \|\| ... == 0 when ! ... is true |
+| test.cpp:193:6:193:16 | ! ... | ... \|\| ... == 1 when ! ... is false |
+| test.cpp:193:6:193:16 | ! ... | b1 != 1 when ! ... is true |
+| test.cpp:193:6:193:16 | ! ... | b1 == 0 when ! ... is true |
+| test.cpp:193:6:193:16 | ! ... | b2 != 1 when ! ... is true |
+| test.cpp:193:6:193:16 | ! ... | b2 == 0 when ! ... is true |
+| test.cpp:193:8:193:9 | b1 | b1 != 0 when b1 is true |
+| test.cpp:193:8:193:9 | b1 | b1 != 1 when b1 is false |
+| test.cpp:193:8:193:9 | b1 | b1 == 0 when b1 is false |
+| test.cpp:193:8:193:9 | b1 | b1 == 1 when b1 is true |
+| test.cpp:193:8:193:15 | ... \|\| ... | ! ... != 0 when ... \|\| ... is false |
+| test.cpp:193:8:193:15 | ... \|\| ... | ! ... != 1 when ... \|\| ... is true |
+| test.cpp:193:8:193:15 | ... \|\| ... | ! ... == 0 when ... \|\| ... is true |
+| test.cpp:193:8:193:15 | ... \|\| ... | ! ... == 1 when ... \|\| ... is false |
+| test.cpp:193:8:193:15 | ... \|\| ... | ... \|\| ... != 0 when ... \|\| ... is true |
+| test.cpp:193:8:193:15 | ... \|\| ... | ... \|\| ... != 1 when ... \|\| ... is false |
+| test.cpp:193:8:193:15 | ... \|\| ... | ... \|\| ... == 0 when ... \|\| ... is false |
+| test.cpp:193:8:193:15 | ... \|\| ... | ... \|\| ... == 1 when ... \|\| ... is true |
+| test.cpp:193:8:193:15 | ... \|\| ... | b1 != 1 when ... \|\| ... is false |
+| test.cpp:193:8:193:15 | ... \|\| ... | b1 == 0 when ... \|\| ... is false |
+| test.cpp:193:8:193:15 | ... \|\| ... | b2 != 1 when ... \|\| ... is false |
+| test.cpp:193:8:193:15 | ... \|\| ... | b2 == 0 when ... \|\| ... is false |
+| test.cpp:193:14:193:15 | b2 | b2 != 0 when b2 is true |
+| test.cpp:193:14:193:15 | b2 | b2 != 1 when b2 is false |
+| test.cpp:193:14:193:15 | b2 | b2 == 0 when b2 is false |
+| test.cpp:193:14:193:15 | b2 | b2 == 1 when b2 is true |
+| test.cpp:211:9:211:15 | ... == ... | 0 != sc+0 when ... == ... is false |
+| test.cpp:211:9:211:15 | ... == ... | 0 == sc+0 when ... == ... is true |
+| test.cpp:211:9:211:15 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:211:9:211:15 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:211:9:211:15 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:211:9:211:15 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:211:9:211:15 | ... == ... | sc != 0 when ... == ... is false |
+| test.cpp:211:9:211:15 | ... == ... | sc != 0+0 when ... == ... is false |
+| test.cpp:211:9:211:15 | ... == ... | sc == 0 when ... == ... is true |
+| test.cpp:211:9:211:15 | ... == ... | sc == 0+0 when ... == ... is true |
+| test.cpp:214:9:214:17 | ... == ... | 0 != sc+0 when ... == ... is false |
+| test.cpp:214:9:214:17 | ... == ... | 0 == sc+0 when ... == ... is true |
+| test.cpp:214:9:214:17 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:214:9:214:17 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:214:9:214:17 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:214:9:214:17 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:214:9:214:17 | ... == ... | sc != 0 when ... == ... is false |
+| test.cpp:214:9:214:17 | ... == ... | sc != 0+0 when ... == ... is false |
+| test.cpp:214:9:214:17 | ... == ... | sc == 0 when ... == ... is true |
+| test.cpp:214:9:214:17 | ... == ... | sc == 0+0 when ... == ... is true |
+| test.cpp:217:9:217:15 | ... == ... | 0 != ul+0 when ... == ... is false |
+| test.cpp:217:9:217:15 | ... == ... | 0 == ul+0 when ... == ... is true |
+| test.cpp:217:9:217:15 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:217:9:217:15 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:217:9:217:15 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:217:9:217:15 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:217:9:217:15 | ... == ... | ul != 0 when ... == ... is false |
+| test.cpp:217:9:217:15 | ... == ... | ul != 0+0 when ... == ... is false |
+| test.cpp:217:9:217:15 | ... == ... | ul == 0 when ... == ... is true |
+| test.cpp:217:9:217:15 | ... == ... | ul == 0+0 when ... == ... is true |
+| test.cpp:220:9:220:14 | ... == ... | 0 != f+0 when ... == ... is false |
+| test.cpp:220:9:220:14 | ... == ... | 0 == f+0 when ... == ... is true |
+| test.cpp:220:9:220:14 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:220:9:220:14 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:220:9:220:14 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:220:9:220:14 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:220:9:220:14 | ... == ... | f != 0+0 when ... == ... is false |
+| test.cpp:220:9:220:14 | ... == ... | f == 0+0 when ... == ... is true |
+| test.cpp:223:9:223:16 | ... == ... | 0.0 != f+0 when ... == ... is false |
+| test.cpp:223:9:223:16 | ... == ... | 0.0 == f+0 when ... == ... is true |
+| test.cpp:223:9:223:16 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:223:9:223:16 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:223:9:223:16 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:223:9:223:16 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:223:9:223:16 | ... == ... | f != 0.0+0 when ... == ... is false |
+| test.cpp:223:9:223:16 | ... == ... | f == 0.0+0 when ... == ... is true |
+| test.cpp:226:9:226:14 | ... == ... | 0 != d+0 when ... == ... is false |
+| test.cpp:226:9:226:14 | ... == ... | 0 == d+0 when ... == ... is true |
+| test.cpp:226:9:226:14 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:226:9:226:14 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:226:9:226:14 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:226:9:226:14 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:226:9:226:14 | ... == ... | d != 0+0 when ... == ... is false |
+| test.cpp:226:9:226:14 | ... == ... | d == 0+0 when ... == ... is true |
+| test.cpp:229:9:229:14 | ... == ... | 0 != b+0 when ... == ... is false |
+| test.cpp:229:9:229:14 | ... == ... | 0 == b+0 when ... == ... is true |
+| test.cpp:229:9:229:14 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:229:9:229:14 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:229:9:229:14 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:229:9:229:14 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:229:9:229:14 | ... == ... | b != 0 when ... == ... is false |
+| test.cpp:229:9:229:14 | ... == ... | b != 0+0 when ... == ... is false |
+| test.cpp:229:9:229:14 | ... == ... | b == 0 when ... == ... is true |
+| test.cpp:229:9:229:14 | ... == ... | b == 0+0 when ... == ... is true |
+| test.cpp:232:9:232:18 | ... == ... | 0 != b+0 when ... == ... is false |
+| test.cpp:232:9:232:18 | ... == ... | 0 == b+0 when ... == ... is true |
+| test.cpp:232:9:232:18 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:232:9:232:18 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:232:9:232:18 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:232:9:232:18 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:232:9:232:18 | ... == ... | b != 0 when ... == ... is false |
+| test.cpp:232:9:232:18 | ... == ... | b != 0+0 when ... == ... is false |
+| test.cpp:232:9:232:18 | ... == ... | b == 0 when ... == ... is true |
+| test.cpp:232:9:232:18 | ... == ... | b == 0+0 when ... == ... is true |
+| test.cpp:235:9:235:17 | ... == ... | 0 != i+0 when ... == ... is false |
+| test.cpp:235:9:235:17 | ... == ... | 0 == i+0 when ... == ... is true |
+| test.cpp:235:9:235:17 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:235:9:235:17 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:235:9:235:17 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:235:9:235:17 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:235:9:235:17 | ... == ... | i != 0 when ... == ... is false |
+| test.cpp:235:9:235:17 | ... == ... | i != 0+0 when ... == ... is false |
+| test.cpp:235:9:235:17 | ... == ... | i == 0 when ... == ... is true |
+| test.cpp:235:9:235:17 | ... == ... | i == 0+0 when ... == ... is true |
+| test.cpp:238:9:238:17 | ... == ... | 0 != f+0 when ... == ... is false |
+| test.cpp:238:9:238:17 | ... == ... | 0 == f+0 when ... == ... is true |
+| test.cpp:238:9:238:17 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:238:9:238:17 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:238:9:238:17 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:238:9:238:17 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:238:9:238:17 | ... == ... | f != 0+0 when ... == ... is false |
+| test.cpp:238:9:238:17 | ... == ... | f == 0+0 when ... == ... is true |
+| test.cpp:241:9:241:17 | ... == ... | 0 != i+0 when ... == ... is false |
+| test.cpp:241:9:241:17 | ... == ... | 0 == i+0 when ... == ... is true |
+| test.cpp:241:9:241:17 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:241:9:241:17 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:241:9:241:17 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:241:9:241:17 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:241:9:241:17 | ... == ... | i != 0 when ... == ... is false |
+| test.cpp:241:9:241:17 | ... == ... | i != 0+0 when ... == ... is false |
+| test.cpp:241:9:241:17 | ... == ... | i == 0 when ... == ... is true |
+| test.cpp:241:9:241:17 | ... == ... | i == 0+0 when ... == ... is true |
+| test.cpp:241:9:241:30 | ... && ... | 0 == f+0 when ... && ... is true |
+| test.cpp:241:9:241:30 | ... && ... | 0 == i+0 when ... && ... is true |
+| test.cpp:241:9:241:30 | ... && ... | ... == ... != 0 when ... && ... is true |
+| test.cpp:241:9:241:30 | ... && ... | ... == ... == 1 when ... && ... is true |
+| test.cpp:241:9:241:30 | ... && ... | f == 0+0 when ... && ... is true |
+| test.cpp:241:9:241:30 | ... && ... | i == 0 when ... && ... is true |
+| test.cpp:241:9:241:30 | ... && ... | i == 0+0 when ... && ... is true |
+| test.cpp:241:9:241:43 | ... && ... | 0 == f+0 when ... && ... is true |
+| test.cpp:241:9:241:43 | ... && ... | 0 == i+0 when ... && ... is true |
+| test.cpp:241:9:241:43 | ... && ... | ... == ... != 0 when ... && ... is true |
+| test.cpp:241:9:241:43 | ... && ... | ... == ... == 1 when ... && ... is true |
+| test.cpp:241:9:241:43 | ... && ... | f == 0+0 when ... && ... is true |
+| test.cpp:241:9:241:43 | ... && ... | i == 0 when ... && ... is true |
+| test.cpp:241:9:241:43 | ... && ... | i == 0+0 when ... && ... is true |
+| test.cpp:241:22:241:30 | ... == ... | 0 != f+0 when ... == ... is false |
+| test.cpp:241:22:241:30 | ... == ... | 0 == f+0 when ... == ... is true |
+| test.cpp:241:22:241:30 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:241:22:241:30 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:241:22:241:30 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:241:22:241:30 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:241:22:241:30 | ... == ... | f != 0+0 when ... == ... is false |
+| test.cpp:241:22:241:30 | ... == ... | f == 0+0 when ... == ... is true |
+| test.cpp:241:35:241:43 | ... == ... | 0 != i+0 when ... == ... is false |
+| test.cpp:241:35:241:43 | ... == ... | 0 == i+0 when ... == ... is true |
+| test.cpp:241:35:241:43 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:241:35:241:43 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:241:35:241:43 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:241:35:241:43 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:241:35:241:43 | ... == ... | i != 0 when ... == ... is false |
+| test.cpp:241:35:241:43 | ... == ... | i != 0+0 when ... == ... is false |
+| test.cpp:241:35:241:43 | ... == ... | i == 0 when ... == ... is true |
+| test.cpp:241:35:241:43 | ... == ... | i == 0+0 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | 0 != ... == ...+0 when ... == ... is false |
+| test.cpp:247:6:247:18 | ... == ... | 0 == ... == ...+0 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... != 0 when ... == ... is false |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... != 0+0 when ... == ... is false |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... == 0 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... == 0+0 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | a != b+0 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | a == b+0 when ... == ... is false |
+| test.cpp:247:6:247:18 | ... == ... | b != a+0 when ... == ... is true |
+| test.cpp:247:6:247:18 | ... == ... | b == a+0 when ... == ... is false |
+| test.cpp:253:6:253:18 | ... != ... | 0 != ... == ...+0 when ... != ... is true |
+| test.cpp:253:6:253:18 | ... != ... | 0 == ... == ...+0 when ... != ... is false |
+| test.cpp:253:6:253:18 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:253:6:253:18 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:253:6:253:18 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:253:6:253:18 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:253:6:253:18 | ... != ... | ... == ... != 0 when ... != ... is true |
+| test.cpp:253:6:253:18 | ... != ... | ... == ... != 0+0 when ... != ... is true |
+| test.cpp:253:6:253:18 | ... != ... | ... == ... == 0 when ... != ... is false |
+| test.cpp:253:6:253:18 | ... != ... | ... == ... == 0+0 when ... != ... is false |
+| test.cpp:253:6:253:18 | ... != ... | a != b+0 when ... != ... is false |
+| test.cpp:253:6:253:18 | ... != ... | a == b+0 when ... != ... is true |
+| test.cpp:253:6:253:18 | ... != ... | b != a+0 when ... != ... is false |
+| test.cpp:253:6:253:18 | ... != ... | b == a+0 when ... != ... is true |
+| test.cpp:260:6:260:18 | ... == ... | 0 != ... != ...+0 when ... == ... is false |
+| test.cpp:260:6:260:18 | ... == ... | 0 == ... != ...+0 when ... == ... is true |
+| test.cpp:260:6:260:18 | ... == ... | ... != ... != 0 when ... == ... is false |
+| test.cpp:260:6:260:18 | ... == ... | ... != ... != 0+0 when ... == ... is false |
+| test.cpp:260:6:260:18 | ... == ... | ... != ... == 0 when ... == ... is true |
+| test.cpp:260:6:260:18 | ... == ... | ... != ... == 0+0 when ... == ... is true |
+| test.cpp:260:6:260:18 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:260:6:260:18 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:260:6:260:18 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:260:6:260:18 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:260:6:260:18 | ... == ... | a != b+0 when ... == ... is false |
+| test.cpp:260:6:260:18 | ... == ... | a == b+0 when ... == ... is true |
+| test.cpp:260:6:260:18 | ... == ... | b != a+0 when ... == ... is false |
+| test.cpp:260:6:260:18 | ... == ... | b == a+0 when ... == ... is true |
+| test.cpp:266:6:266:18 | ... != ... | 0 != ... != ...+0 when ... != ... is true |
+| test.cpp:266:6:266:18 | ... != ... | 0 == ... != ...+0 when ... != ... is false |
+| test.cpp:266:6:266:18 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:266:6:266:18 | ... != ... | ... != ... != 0+0 when ... != ... is true |
+| test.cpp:266:6:266:18 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:266:6:266:18 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:266:6:266:18 | ... != ... | ... != ... == 0+0 when ... != ... is false |
+| test.cpp:266:6:266:18 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:266:6:266:18 | ... != ... | a != b+0 when ... != ... is true |
+| test.cpp:266:6:266:18 | ... != ... | a == b+0 when ... != ... is false |
+| test.cpp:266:6:266:18 | ... != ... | b != a+0 when ... != ... is true |
+| test.cpp:266:6:266:18 | ... != ... | b == a+0 when ... != ... is false |
+| test.cpp:273:6:273:17 | ... == ... | 0 != ... < ...+0 when ... == ... is false |
+| test.cpp:273:6:273:17 | ... == ... | 0 == ... < ...+0 when ... == ... is true |
+| test.cpp:273:6:273:17 | ... == ... | ... < ... != 0 when ... == ... is false |
+| test.cpp:273:6:273:17 | ... == ... | ... < ... != 0+0 when ... == ... is false |
+| test.cpp:273:6:273:17 | ... == ... | ... < ... == 0 when ... == ... is true |
+| test.cpp:273:6:273:17 | ... == ... | ... < ... == 0+0 when ... == ... is true |
+| test.cpp:273:6:273:17 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:273:6:273:17 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:273:6:273:17 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:273:6:273:17 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:273:6:273:17 | ... == ... | a < b+0 when ... == ... is false |
+| test.cpp:273:6:273:17 | ... == ... | a >= b+0 when ... == ... is true |
+| test.cpp:273:6:273:17 | ... == ... | b < a+1 when ... == ... is true |
+| test.cpp:273:6:273:17 | ... == ... | b >= a+1 when ... == ... is false |
+| test.cpp:279:6:279:17 | ... != ... | 0 != ... < ...+0 when ... != ... is true |
+| test.cpp:279:6:279:17 | ... != ... | 0 == ... < ...+0 when ... != ... is false |
+| test.cpp:279:6:279:17 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:279:6:279:17 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:279:6:279:17 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:279:6:279:17 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:279:6:279:17 | ... != ... | ... < ... != 0 when ... != ... is true |
+| test.cpp:279:6:279:17 | ... != ... | ... < ... != 0+0 when ... != ... is true |
+| test.cpp:279:6:279:17 | ... != ... | ... < ... == 0 when ... != ... is false |
+| test.cpp:279:6:279:17 | ... != ... | ... < ... == 0+0 when ... != ... is false |
+| test.cpp:279:6:279:17 | ... != ... | a < b+0 when ... != ... is true |
+| test.cpp:279:6:279:17 | ... != ... | a >= b+0 when ... != ... is false |
+| test.cpp:279:6:279:17 | ... != ... | b < a+1 when ... != ... is false |
+| test.cpp:279:6:279:17 | ... != ... | b >= a+1 when ... != ... is true |
+| test.cpp:287:6:287:19 | ... == ... | 0 != ... == ...+0 when ... == ... is false |
+| test.cpp:287:6:287:19 | ... == ... | 0 == ... == ...+0 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | 42 != a+0 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | 42 == a+0 when ... == ... is false |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... != 0 when ... == ... is false |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... != 0+0 when ... == ... is false |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... == 0 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... == 0+0 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | a != 42 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | a != 42+0 when ... == ... is true |
+| test.cpp:287:6:287:19 | ... == ... | a == 42 when ... == ... is false |
+| test.cpp:287:6:287:19 | ... == ... | a == 42+0 when ... == ... is false |
+| test.cpp:293:6:293:19 | ... != ... | 0 != ... == ...+0 when ... != ... is true |
+| test.cpp:293:6:293:19 | ... != ... | 0 == ... == ...+0 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | 42 != a+0 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | 42 == a+0 when ... != ... is true |
+| test.cpp:293:6:293:19 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:293:6:293:19 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:293:6:293:19 | ... != ... | ... == ... != 0 when ... != ... is true |
+| test.cpp:293:6:293:19 | ... != ... | ... == ... != 0+0 when ... != ... is true |
+| test.cpp:293:6:293:19 | ... != ... | ... == ... == 0 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | ... == ... == 0+0 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | a != 42 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | a != 42+0 when ... != ... is false |
+| test.cpp:293:6:293:19 | ... != ... | a == 42 when ... != ... is true |
+| test.cpp:293:6:293:19 | ... != ... | a == 42+0 when ... != ... is true |
+| test.cpp:300:6:300:19 | ... == ... | 0 != ... != ...+0 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | 0 == ... != ...+0 when ... == ... is true |
+| test.cpp:300:6:300:19 | ... == ... | 42 != a+0 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | 42 == a+0 when ... == ... is true |
+| test.cpp:300:6:300:19 | ... == ... | ... != ... != 0 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | ... != ... != 0+0 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | ... != ... == 0 when ... == ... is true |
+| test.cpp:300:6:300:19 | ... == ... | ... != ... == 0+0 when ... == ... is true |
+| test.cpp:300:6:300:19 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:300:6:300:19 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:300:6:300:19 | ... == ... | a != 42 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | a != 42+0 when ... == ... is false |
+| test.cpp:300:6:300:19 | ... == ... | a == 42 when ... == ... is true |
+| test.cpp:300:6:300:19 | ... == ... | a == 42+0 when ... == ... is true |
+| test.cpp:306:6:306:19 | ... != ... | 0 != ... != ...+0 when ... != ... is true |
+| test.cpp:306:6:306:19 | ... != ... | 0 == ... != ...+0 when ... != ... is false |
+| test.cpp:306:6:306:19 | ... != ... | 42 != a+0 when ... != ... is true |
+| test.cpp:306:6:306:19 | ... != ... | 42 == a+0 when ... != ... is false |
+| test.cpp:306:6:306:19 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:306:6:306:19 | ... != ... | ... != ... != 0+0 when ... != ... is true |
+| test.cpp:306:6:306:19 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:306:6:306:19 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:306:6:306:19 | ... != ... | ... != ... == 0+0 when ... != ... is false |
+| test.cpp:306:6:306:19 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:306:6:306:19 | ... != ... | a != 42 when ... != ... is true |
+| test.cpp:306:6:306:19 | ... != ... | a != 42+0 when ... != ... is true |
+| test.cpp:306:6:306:19 | ... != ... | a == 42 when ... != ... is false |
+| test.cpp:306:6:306:19 | ... != ... | a == 42+0 when ... != ... is false |
+| test.cpp:312:6:312:18 | ... == ... | 0 != ... < ...+0 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | 0 == ... < ...+0 when ... == ... is true |
+| test.cpp:312:6:312:18 | ... == ... | 42 < a+1 when ... == ... is true |
+| test.cpp:312:6:312:18 | ... == ... | 42 >= a+1 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | ... < ... != 0 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | ... < ... != 0+0 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | ... < ... == 0 when ... == ... is true |
+| test.cpp:312:6:312:18 | ... == ... | ... < ... == 0+0 when ... == ... is true |
+| test.cpp:312:6:312:18 | ... == ... | ... == ... != 0 when ... == ... is true |
+| test.cpp:312:6:312:18 | ... == ... | ... == ... != 1 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | ... == ... == 0 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | ... == ... == 1 when ... == ... is true |
+| test.cpp:312:6:312:18 | ... == ... | a < 42 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | a < 42+0 when ... == ... is false |
+| test.cpp:312:6:312:18 | ... == ... | a >= 42 when ... == ... is true |
+| test.cpp:312:6:312:18 | ... == ... | a >= 42+0 when ... == ... is true |
+| test.cpp:318:6:318:18 | ... != ... | 0 != ... < ...+0 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | 0 == ... < ...+0 when ... != ... is false |
+| test.cpp:318:6:318:18 | ... != ... | 42 < a+1 when ... != ... is false |
+| test.cpp:318:6:318:18 | ... != ... | 42 >= a+1 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | ... != ... != 0 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | ... != ... != 1 when ... != ... is false |
+| test.cpp:318:6:318:18 | ... != ... | ... != ... == 0 when ... != ... is false |
+| test.cpp:318:6:318:18 | ... != ... | ... != ... == 1 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | ... < ... != 0 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | ... < ... != 0+0 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | ... < ... == 0 when ... != ... is false |
+| test.cpp:318:6:318:18 | ... != ... | ... < ... == 0+0 when ... != ... is false |
+| test.cpp:318:6:318:18 | ... != ... | a < 42 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | a < 42+0 when ... != ... is true |
+| test.cpp:318:6:318:18 | ... != ... | a >= 42 when ... != ... is false |
+| test.cpp:318:6:318:18 | ... != ... | a >= 42+0 when ... != ... is false |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql
index b05f5b95d00..59996548113 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.ql
@@ -38,4 +38,4 @@ where
|
msg = left + op + k + " when " + guard + " is " + value
)
-select guard.getLocation().getStartLine(), msg
+select guard, msg
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected
index a60784a0e10..05afe345b8c 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected
@@ -1,165 +1,196 @@
-| test.c:7:9:7:13 | ... > ... | false | 10 | 11 |
-| test.c:7:9:7:13 | ... > ... | true | 7 | 9 |
-| test.c:17:8:17:12 | ... < ... | true | 17 | 17 |
-| test.c:17:8:17:12 | ... < ... | true | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | true | 18 | 18 |
-| test.c:17:17:17:21 | ... > ... | true | 18 | 18 |
-| test.c:26:11:26:15 | ... > ... | false | 2 | 2 |
-| test.c:26:11:26:15 | ... > ... | false | 31 | 34 |
-| test.c:26:11:26:15 | ... > ... | false | 34 | 34 |
-| test.c:26:11:26:15 | ... > ... | false | 39 | 42 |
-| test.c:26:11:26:15 | ... > ... | false | 42 | 42 |
-| test.c:26:11:26:15 | ... > ... | false | 42 | 44 |
-| test.c:26:11:26:15 | ... > ... | false | 45 | 45 |
-| test.c:26:11:26:15 | ... > ... | false | 45 | 47 |
-| test.c:26:11:26:15 | ... > ... | false | 51 | 53 |
-| test.c:26:11:26:15 | ... > ... | false | 56 | 58 |
-| test.c:26:11:26:15 | ... > ... | false | 58 | 58 |
-| test.c:26:11:26:15 | ... > ... | false | 58 | 66 |
-| test.c:26:11:26:15 | ... > ... | false | 62 | 62 |
-| test.c:26:11:26:15 | ... > ... | true | 26 | 28 |
-| test.c:34:16:34:21 | ... < ... | false | 2 | 2 |
-| test.c:34:16:34:21 | ... < ... | false | 39 | 42 |
-| test.c:34:16:34:21 | ... < ... | false | 42 | 42 |
-| test.c:34:16:34:21 | ... < ... | false | 42 | 44 |
-| test.c:34:16:34:21 | ... < ... | false | 45 | 45 |
-| test.c:34:16:34:21 | ... < ... | false | 45 | 47 |
-| test.c:34:16:34:21 | ... < ... | false | 51 | 53 |
-| test.c:34:16:34:21 | ... < ... | false | 56 | 58 |
-| test.c:34:16:34:21 | ... < ... | false | 58 | 58 |
-| test.c:34:16:34:21 | ... < ... | false | 58 | 66 |
-| test.c:34:16:34:21 | ... < ... | false | 62 | 62 |
-| test.c:34:16:34:21 | ... < ... | true | 34 | 34 |
-| test.c:42:16:42:21 | ... < ... | true | 42 | 42 |
-| test.c:42:16:42:21 | ... < ... | true | 42 | 44 |
-| test.c:42:16:42:21 | ... < ... | true | 45 | 45 |
-| test.c:42:16:42:21 | ... < ... | true | 45 | 47 |
-| test.c:42:16:42:21 | ... < ... | true | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | false | 42 | 42 |
-| test.c:44:12:44:16 | ... > ... | false | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | true | 45 | 45 |
-| test.c:44:12:44:16 | ... > ... | true | 45 | 47 |
-| test.c:45:16:45:20 | ... > ... | true | 45 | 47 |
-| test.c:58:9:58:14 | ... == ... | false | 58 | 58 |
-| test.c:58:9:58:14 | ... == ... | false | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | false | 62 | 62 |
-| test.c:58:19:58:23 | ... < ... | false | 62 | 62 |
-| test.c:75:9:75:14 | ... == ... | false | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | true | 75 | 77 |
-| test.c:85:8:85:13 | ... == ... | true | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | true | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | true | 86 | 86 |
-| test.c:85:18:85:23 | ... != ... | true | 86 | 86 |
-| test.c:94:11:94:16 | ... != ... | false | 70 | 70 |
-| test.c:94:11:94:16 | ... != ... | false | 99 | 102 |
-| test.c:94:11:94:16 | ... != ... | false | 102 | 102 |
-| test.c:94:11:94:16 | ... != ... | false | 107 | 109 |
-| test.c:94:11:94:16 | ... != ... | false | 109 | 109 |
-| test.c:94:11:94:16 | ... != ... | false | 109 | 117 |
-| test.c:94:11:94:16 | ... != ... | false | 113 | 113 |
-| test.c:94:11:94:16 | ... != ... | true | 94 | 96 |
-| test.c:102:16:102:21 | ... < ... | false | 70 | 70 |
-| test.c:102:16:102:21 | ... < ... | false | 107 | 109 |
-| test.c:102:16:102:21 | ... < ... | false | 109 | 109 |
-| test.c:102:16:102:21 | ... < ... | false | 109 | 117 |
-| test.c:102:16:102:21 | ... < ... | false | 113 | 113 |
-| test.c:102:16:102:21 | ... < ... | true | 102 | 102 |
-| test.c:109:9:109:14 | ... == ... | false | 109 | 109 |
-| test.c:109:9:109:14 | ... == ... | false | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | false | 113 | 113 |
-| test.c:109:19:109:23 | ... < ... | false | 113 | 113 |
-| test.c:126:7:126:7 | 1 | true | 126 | 126 |
-| test.c:126:7:126:7 | 1 | true | 126 | 128 |
-| test.c:126:7:126:7 | 1 | true | 131 | 131 |
-| test.c:126:7:126:7 | 1 | true | 131 | 132 |
-| test.c:126:7:126:7 | 1 | true | 134 | 123 |
-| test.c:126:7:126:28 | ... && ... | true | 126 | 128 |
-| test.c:126:12:126:26 | call to test3_condition | true | 126 | 128 |
-| test.c:131:7:131:7 | b | true | 131 | 132 |
-| test.c:137:7:137:7 | 0 | false | 142 | 136 |
-| test.c:146:7:146:8 | ! ... | true | 146 | 147 |
-| test.c:146:8:146:8 | x | false | 146 | 147 |
-| test.c:152:8:152:8 | p | true | 152 | 154 |
-| test.c:158:8:158:9 | ! ... | true | 158 | 160 |
-| test.c:158:9:158:9 | p | false | 158 | 160 |
-| test.c:164:8:164:8 | s | true | 164 | 166 |
-| test.c:170:8:170:9 | ! ... | true | 170 | 172 |
-| test.c:170:9:170:9 | s | false | 170 | 172 |
-| test.c:176:8:176:15 | ! ... | true | 176 | 178 |
-| test.c:176:10:176:14 | ... < ... | false | 176 | 178 |
-| test.c:182:8:182:34 | ! ... | true | 182 | 184 |
-| test.c:182:10:182:20 | ... >= ... | true | 181 | 182 |
-| test.c:182:10:182:20 | ... >= ... | true | 182 | 182 |
-| test.c:182:10:182:33 | ... && ... | false | 182 | 184 |
-| test.c:182:10:182:33 | ... && ... | true | 181 | 182 |
-| test.c:182:25:182:33 | ... < ... | true | 181 | 182 |
-| test.c:190:7:190:8 | ! ... | true | 190 | 192 |
-| test.c:190:8:190:8 | c | false | 190 | 192 |
-| test.c:198:7:198:8 | ! ... | true | 198 | 200 |
-| test.c:198:8:198:8 | b | false | 198 | 200 |
-| test.c:206:7:206:8 | ! ... | true | 206 | 208 |
-| test.c:206:8:206:8 | c | false | 206 | 208 |
-| test.cpp:18:8:18:10 | call to get | true | 19 | 19 |
-| test.cpp:31:7:31:13 | ... == ... | false | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | false | 34 | 34 |
-| test.cpp:31:7:31:13 | ... == ... | true | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | true | 31 | 32 |
-| test.cpp:42:13:42:20 | call to getABool | true | 43 | 45 |
-| test.cpp:61:10:61:10 | i | Case[0] | 62 | 64 |
-| test.cpp:61:10:61:10 | i | Case[1] | 65 | 66 |
-| test.cpp:74:10:74:10 | i | Case[0..10] | 75 | 77 |
-| test.cpp:74:10:74:10 | i | Case[11..20] | 78 | 79 |
-| test.cpp:93:6:93:6 | c | true | 93 | 94 |
-| test.cpp:99:6:99:6 | f | true | 99 | 100 |
-| test.cpp:105:6:105:14 | ... != ... | true | 105 | 106 |
-| test.cpp:111:6:111:14 | ... != ... | true | 111 | 112 |
-| test.cpp:122:9:122:9 | b | true | 123 | 125 |
-| test.cpp:122:9:122:9 | b | true | 125 | 125 |
-| test.cpp:125:13:125:20 | ! ... | true | 125 | 125 |
-| test.cpp:125:14:125:17 | call to safe | false | 125 | 125 |
-| test.cpp:131:6:131:21 | call to __builtin_expect | true | 131 | 132 |
-| test.cpp:135:6:135:21 | call to __builtin_expect | true | 135 | 136 |
-| test.cpp:141:6:141:21 | call to __builtin_expect | true | 141 | 142 |
-| test.cpp:145:6:145:21 | call to __builtin_expect | true | 145 | 146 |
-| test.cpp:152:7:152:8 | ! ... | true | 152 | 153 |
-| test.cpp:152:8:152:8 | b | false | 152 | 153 |
-| test.cpp:160:7:160:8 | ! ... | true | 160 | 162 |
-| test.cpp:160:8:160:8 | c | false | 160 | 162 |
-| test.cpp:168:7:168:8 | ! ... | true | 168 | 170 |
-| test.cpp:168:8:168:8 | b | false | 168 | 170 |
-| test.cpp:176:7:176:8 | ! ... | true | 176 | 178 |
-| test.cpp:176:8:176:8 | c | false | 176 | 178 |
-| test.cpp:182:6:182:16 | ! ... | false | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | true | 182 | 184 |
-| test.cpp:182:8:182:9 | b1 | true | 181 | 182 |
-| test.cpp:182:8:182:9 | b1 | true | 182 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | false | 182 | 184 |
-| test.cpp:182:8:182:15 | ... && ... | true | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | true | 185 | 188 |
-| test.cpp:182:14:182:15 | b2 | true | 181 | 182 |
-| test.cpp:193:6:193:16 | ! ... | false | 197 | 199 |
-| test.cpp:193:6:193:16 | ! ... | true | 193 | 196 |
-| test.cpp:193:8:193:9 | b1 | false | 192 | 193 |
-| test.cpp:193:8:193:9 | b1 | false | 193 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | false | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | false | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | true | 197 | 199 |
-| test.cpp:193:14:193:15 | b2 | false | 192 | 193 |
-| test.cpp:211:9:211:15 | ... == ... | true | 211 | 212 |
-| test.cpp:214:9:214:17 | ... == ... | true | 214 | 215 |
-| test.cpp:217:9:217:15 | ... == ... | true | 217 | 218 |
-| test.cpp:220:9:220:14 | ... == ... | true | 220 | 221 |
-| test.cpp:223:9:223:16 | ... == ... | true | 223 | 224 |
-| test.cpp:226:9:226:14 | ... == ... | true | 226 | 227 |
-| test.cpp:229:9:229:14 | ... == ... | true | 229 | 230 |
-| test.cpp:232:9:232:18 | ... == ... | true | 232 | 233 |
-| test.cpp:235:9:235:17 | ... == ... | true | 235 | 236 |
-| test.cpp:238:9:238:17 | ... == ... | true | 238 | 239 |
-| test.cpp:241:9:241:17 | ... == ... | true | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | true | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | true | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | true | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | true | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | true | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | true | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | true | 241 | 242 |
+| test.c:7:9:7:13 | ... > ... | false | test.c:10:12:11:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | true | test.c:7:16:9:14 | { ... } |
+| test.c:17:8:17:12 | ... < ... | true | test.c:17:17:17:21 | y |
+| test.c:17:8:17:12 | ... < ... | true | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | true | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:17:17:21 | ... > ... | true | test.c:18:9:18:14 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | false | test.c:2:5:2:8 | test |
+| test.c:26:11:26:15 | ... > ... | false | test.c:31:5:34:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | false | test.c:34:16:34:21 | j |
+| test.c:26:11:26:15 | ... > ... | false | test.c:34:29:34:26 | { ... } |
+| test.c:26:11:26:15 | ... > ... | false | test.c:39:5:42:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | false | test.c:42:5:42:26 | label ...: |
+| test.c:26:11:26:15 | ... > ... | false | test.c:42:16:42:21 | j |
+| test.c:26:11:26:15 | ... > ... | false | test.c:42:29:44:16 | { ... } |
+| test.c:26:11:26:15 | ... > ... | false | test.c:45:13:45:20 | if (...) ... |
+| test.c:26:11:26:15 | ... > ... | false | test.c:45:23:47:22 | { ... } |
+| test.c:26:11:26:15 | ... > ... | false | test.c:51:14:53:21 | { ... } |
+| test.c:26:11:26:15 | ... > ... | false | test.c:56:5:58:14 | label ...: |
+| test.c:26:11:26:15 | ... > ... | false | test.c:58:19:58:23 | y |
+| test.c:26:11:26:15 | ... > ... | false | test.c:58:26:66:12 | { ... } |
+| test.c:26:11:26:15 | ... > ... | false | test.c:62:9:62:16 | return ... |
+| test.c:26:11:26:15 | ... > ... | true | test.c:26:18:28:11 | { ... } |
+| test.c:34:16:34:21 | ... < ... | false | test.c:2:5:2:8 | test |
+| test.c:34:16:34:21 | ... < ... | false | test.c:39:5:42:13 | ExprStmt |
+| test.c:34:16:34:21 | ... < ... | false | test.c:42:5:42:26 | label ...: |
+| test.c:34:16:34:21 | ... < ... | false | test.c:42:16:42:21 | j |
+| test.c:34:16:34:21 | ... < ... | false | test.c:42:29:44:16 | { ... } |
+| test.c:34:16:34:21 | ... < ... | false | test.c:45:13:45:20 | if (...) ... |
+| test.c:34:16:34:21 | ... < ... | false | test.c:45:23:47:22 | { ... } |
+| test.c:34:16:34:21 | ... < ... | false | test.c:51:14:53:21 | { ... } |
+| test.c:34:16:34:21 | ... < ... | false | test.c:56:5:58:14 | label ...: |
+| test.c:34:16:34:21 | ... < ... | false | test.c:58:19:58:23 | y |
+| test.c:34:16:34:21 | ... < ... | false | test.c:58:26:66:12 | { ... } |
+| test.c:34:16:34:21 | ... < ... | false | test.c:62:9:62:16 | return ... |
+| test.c:34:16:34:21 | ... < ... | true | test.c:34:29:34:26 | { ... } |
+| test.c:42:16:42:21 | ... < ... | true | test.c:42:5:42:26 | label ...: |
+| test.c:42:16:42:21 | ... < ... | true | test.c:42:29:44:16 | { ... } |
+| test.c:42:16:42:21 | ... < ... | true | test.c:45:13:45:20 | if (...) ... |
+| test.c:42:16:42:21 | ... < ... | true | test.c:45:23:47:22 | { ... } |
+| test.c:42:16:42:21 | ... < ... | true | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | false | test.c:42:5:42:26 | label ...: |
+| test.c:44:12:44:16 | ... > ... | false | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | true | test.c:45:13:45:20 | if (...) ... |
+| test.c:44:12:44:16 | ... > ... | true | test.c:45:23:47:22 | { ... } |
+| test.c:45:16:45:20 | ... > ... | true | test.c:45:23:47:22 | { ... } |
+| test.c:58:9:58:14 | ... == ... | false | test.c:58:19:58:23 | y |
+| test.c:58:9:58:14 | ... == ... | false | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | false | test.c:62:9:62:16 | return ... |
+| test.c:58:19:58:23 | ... < ... | false | test.c:62:9:62:16 | return ... |
+| test.c:75:9:75:14 | ... == ... | false | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | true | test.c:75:17:77:14 | { ... } |
+| test.c:85:8:85:13 | ... == ... | true | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | true | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | true | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:18:85:23 | ... != ... | true | test.c:86:9:86:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | false | test.c:70:5:70:9 | test2 |
+| test.c:94:11:94:16 | ... != ... | false | test.c:99:5:102:13 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | false | test.c:102:16:102:21 | j |
+| test.c:94:11:94:16 | ... != ... | false | test.c:102:29:102:26 | { ... } |
+| test.c:94:11:94:16 | ... != ... | false | test.c:107:5:109:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | false | test.c:109:19:109:23 | y |
+| test.c:94:11:94:16 | ... != ... | false | test.c:109:26:117:12 | { ... } |
+| test.c:94:11:94:16 | ... != ... | false | test.c:113:9:113:16 | return ... |
+| test.c:94:11:94:16 | ... != ... | true | test.c:94:19:96:11 | { ... } |
+| test.c:102:16:102:21 | ... < ... | false | test.c:70:5:70:9 | test2 |
+| test.c:102:16:102:21 | ... < ... | false | test.c:107:5:109:14 | ExprStmt |
+| test.c:102:16:102:21 | ... < ... | false | test.c:109:19:109:23 | y |
+| test.c:102:16:102:21 | ... < ... | false | test.c:109:26:117:12 | { ... } |
+| test.c:102:16:102:21 | ... < ... | false | test.c:113:9:113:16 | return ... |
+| test.c:102:16:102:21 | ... < ... | true | test.c:102:29:102:26 | { ... } |
+| test.c:109:9:109:14 | ... == ... | false | test.c:109:19:109:23 | y |
+| test.c:109:9:109:14 | ... == ... | false | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | false | test.c:113:9:113:16 | return ... |
+| test.c:109:19:109:23 | ... < ... | false | test.c:113:9:113:16 | return ... |
+| test.c:126:7:126:7 | 1 | true | test.c:126:12:126:26 | call to test3_condition |
+| test.c:126:7:126:7 | 1 | true | test.c:126:31:128:16 | { ... } |
+| test.c:126:7:126:7 | 1 | true | test.c:131:3:131:7 | if (...) ... |
+| test.c:126:7:126:7 | 1 | true | test.c:131:10:132:16 | { ... } |
+| test.c:126:7:126:7 | 1 | true | test.c:134:1:123:10 | return ... |
+| test.c:126:7:126:28 | ... && ... | true | test.c:126:31:128:16 | { ... } |
+| test.c:126:12:126:26 | call to test3_condition | true | test.c:126:31:128:16 | { ... } |
+| test.c:131:7:131:7 | b | true | test.c:131:10:132:16 | { ... } |
+| test.c:137:7:137:7 | 0 | false | test.c:142:3:136:10 | return ... |
+| test.c:146:7:146:8 | ! ... | true | test.c:146:11:147:9 | { ... } |
+| test.c:146:8:146:8 | x | false | test.c:146:11:147:9 | { ... } |
+| test.c:152:8:152:8 | p | true | test.c:152:11:154:5 | { ... } |
+| test.c:158:8:158:9 | ! ... | true | test.c:158:12:160:5 | { ... } |
+| test.c:158:9:158:9 | p | false | test.c:158:12:160:5 | { ... } |
+| test.c:164:8:164:8 | s | true | test.c:164:11:166:5 | { ... } |
+| test.c:170:8:170:9 | ! ... | true | test.c:170:12:172:5 | { ... } |
+| test.c:170:9:170:9 | s | false | test.c:170:12:172:5 | { ... } |
+| test.c:176:8:176:15 | ! ... | true | test.c:176:18:178:5 | { ... } |
+| test.c:176:10:176:14 | ... < ... | false | test.c:176:18:178:5 | { ... } |
+| test.c:182:8:182:34 | ! ... | true | test.c:182:37:184:5 | { ... } |
+| test.c:182:10:182:20 | ... >= ... | true | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:20 | ... >= ... | true | test.c:182:25:182:33 | foo |
+| test.c:182:10:182:33 | ... && ... | false | test.c:182:37:184:5 | { ... } |
+| test.c:182:10:182:33 | ... && ... | true | test.c:181:25:182:20 | { ... } |
+| test.c:182:25:182:33 | ... < ... | true | test.c:181:25:182:20 | { ... } |
+| test.c:190:7:190:8 | ! ... | true | test.c:190:11:192:3 | { ... } |
+| test.c:190:8:190:8 | c | false | test.c:190:11:192:3 | { ... } |
+| test.c:198:7:198:8 | ! ... | true | test.c:198:11:200:3 | { ... } |
+| test.c:198:8:198:8 | b | false | test.c:198:11:200:3 | { ... } |
+| test.c:206:7:206:8 | ! ... | true | test.c:206:11:208:3 | { ... } |
+| test.c:206:8:206:8 | c | false | test.c:206:11:208:3 | { ... } |
+| test.c:215:6:215:18 | call to __builtin_expect | true | test.c:215:21:217:5 | { ... } |
+| test.c:219:9:219:22 | call to __builtin_expect | true | test.c:219:25:221:5 | { ... } |
+| test.cpp:18:8:18:10 | call to get | true | test.cpp:19:5:19:14 | ExprStmt |
+| test.cpp:31:7:31:13 | ... == ... | false | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | false | test.cpp:34:1:34:1 | return ... |
+| test.cpp:31:7:31:13 | ... == ... | true | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | true | test.cpp:31:16:32:21 | { ... } |
+| test.cpp:42:13:42:20 | call to getABool | true | test.cpp:43:9:45:23 | { ... } |
+| test.cpp:61:10:61:10 | i | Case[0] | test.cpp:62:5:64:12 | case ...: |
+| test.cpp:61:10:61:10 | i | Case[1] | test.cpp:65:5:66:10 | case ...: |
+| test.cpp:74:10:74:10 | i | Case[0..10] | test.cpp:75:5:77:12 | case ...: |
+| test.cpp:74:10:74:10 | i | Case[11..20] | test.cpp:78:5:79:10 | case ...: |
+| test.cpp:93:6:93:6 | c | true | test.cpp:93:9:94:7 | { ... } |
+| test.cpp:99:6:99:6 | f | true | test.cpp:99:9:100:7 | { ... } |
+| test.cpp:105:6:105:14 | ... != ... | true | test.cpp:105:17:106:7 | { ... } |
+| test.cpp:111:6:111:14 | ... != ... | true | test.cpp:111:17:112:7 | { ... } |
+| test.cpp:122:9:122:9 | b | true | test.cpp:123:5:125:20 | { ... } |
+| test.cpp:122:9:122:9 | b | true | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:13:125:20 | ! ... | true | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:14:125:17 | call to safe | false | test.cpp:125:23:125:29 | return ... |
+| test.cpp:131:6:131:21 | call to __builtin_expect | true | test.cpp:131:40:132:9 | { ... } |
+| test.cpp:135:6:135:21 | call to __builtin_expect | true | test.cpp:135:40:136:9 | { ... } |
+| test.cpp:141:6:141:21 | call to __builtin_expect | true | test.cpp:141:36:142:9 | { ... } |
+| test.cpp:145:6:145:21 | call to __builtin_expect | true | test.cpp:145:36:146:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | true | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | false | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | true | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | false | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | true | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | false | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | true | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | false | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | false | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | true | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:8:182:9 | b1 | true | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:9 | b1 | true | test.cpp:182:14:182:15 | b2 |
+| test.cpp:182:8:182:15 | ... && ... | false | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | true | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | true | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:14:182:15 | b2 | true | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | false | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | true | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:9 | b1 | false | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:9 | b1 | false | test.cpp:193:14:193:15 | b2 |
+| test.cpp:193:8:193:15 | ... \|\| ... | false | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | false | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | true | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:14:193:15 | b2 | false | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | true | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | true | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:217:9:217:15 | ... == ... | true | test.cpp:217:18:218:13 | { ... } |
+| test.cpp:220:9:220:14 | ... == ... | true | test.cpp:220:17:221:13 | { ... } |
+| test.cpp:223:9:223:16 | ... == ... | true | test.cpp:223:19:224:13 | { ... } |
+| test.cpp:226:9:226:14 | ... == ... | true | test.cpp:226:17:227:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | true | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | true | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | true | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | true | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | true | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | true | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | true | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | true | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | true | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | true | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | true | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | true | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | true | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | false | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | true | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | false | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | true | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | false | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | true | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | false | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | true | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | false | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | true | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | false | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | true | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | false | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | true | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | false | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | true | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | false | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | true | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | false | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | true | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | false | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | true | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | false | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | true | test.cpp:318:21:320:3 | { ... } |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql
index 93ce054cd82..698b80a06a0 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.ql
@@ -7,10 +7,6 @@
import cpp
import semmle.code.cpp.controlflow.Guards
-from GuardCondition guard, AbstractValue value, int start, int end
-where
- exists(BasicBlock block |
- guard.valueControls(block, value) and
- block.hasLocationInfo(_, start, _, end, _)
- )
-select guard, value, start, end
+from GuardCondition guard, AbstractValue value, BasicBlock block
+where guard.valueControls(block, value)
+select guard, value, block
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected
index 67dd6f68ed4..c9f52e5f190 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected
@@ -1,922 +1,1226 @@
binary
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | test.c:7:13:7:13 | 0 | 1 | 10 | 11 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | test.c:7:13:7:13 | 0 | 1 | 7 | 9 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:13:7:13 | 0 | < | test.c:7:9:7:9 | x | 0 | 7 | 9 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:13:7:13 | 0 | >= | test.c:7:9:7:9 | x | 0 | 10 | 11 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | test.c:17:12:17:12 | 0 | 0 | 17 | 17 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | test.c:17:12:17:12 | 0 | 0 | 18 | 18 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:12:17:12 | 0 | >= | test.c:17:8:17:8 | x | 1 | 17 | 17 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:12:17:12 | 0 | >= | test.c:17:8:17:8 | x | 1 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:8 | x | < | test.c:17:12:17:12 | 0 | 0 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:12:17:12 | 0 | >= | test.c:17:8:17:8 | x | 1 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:17 | y | >= | test.c:17:21:17:21 | 1 | 1 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:21:17:21 | 1 | < | test.c:17:17:17:17 | y | 0 | 18 | 18 |
-| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:17 | y | >= | test.c:17:21:17:21 | 1 | 1 | 18 | 18 |
-| test.c:17:17:17:21 | ... > ... | test.c:17:21:17:21 | 1 | < | test.c:17:17:17:17 | y | 0 | 18 | 18 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 2 | 2 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 31 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 34 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 39 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 42 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 42 | 44 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 45 | 45 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 45 | 47 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 51 | 53 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 56 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 58 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 58 | 66 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | 62 | 62 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | >= | test.c:26:15:26:15 | 0 | 1 | 26 | 28 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | < | test.c:26:11:26:11 | x | 0 | 26 | 28 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 2 | 2 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 31 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 34 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 39 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 42 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 42 | 44 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 45 | 45 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 45 | 47 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 51 | 53 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 56 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 58 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 58 | 66 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | 62 | 62 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | < | test.c:34:20:34:21 | 10 | 0 | 34 | 34 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 2 | 2 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 39 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 42 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 42 | 44 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 45 | 45 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 45 | 47 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 51 | 53 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 56 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 58 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 58 | 66 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | 62 | 62 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 2 | 2 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 39 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 42 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 42 | 44 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 45 | 45 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 45 | 47 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 51 | 53 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 56 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 58 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 58 | 66 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | 62 | 62 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | >= | test.c:34:16:34:16 | j | 1 | 34 | 34 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 42 | 42 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 42 | 44 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 45 | 45 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 45 | 47 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | 51 | 53 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 42 | 42 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 42 | 44 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 45 | 45 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 45 | 47 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | 42 | 42 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | 45 | 45 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | 45 | 47 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | 45 | 45 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | 45 | 47 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | 42 | 42 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | 51 | 53 |
-| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | test.c:45:20:45:20 | 0 | 1 | 45 | 47 |
-| test.c:45:16:45:20 | ... > ... | test.c:45:20:45:20 | 0 | < | test.c:45:16:45:16 | y | 0 | 45 | 47 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | 58 | 58 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | 62 | 62 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | 58 | 58 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:19 | y | >= | test.c:58:23:58:23 | 0 | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:23:58:23 | 0 | < | test.c:58:19:58:19 | y | 1 | 62 | 62 |
-| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:19 | y | >= | test.c:58:23:58:23 | 0 | 0 | 62 | 62 |
-| test.c:58:19:58:23 | ... < ... | test.c:58:23:58:23 | 0 | < | test.c:58:19:58:19 | y | 1 | 62 | 62 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | test.c:75:14:75:14 | 0 | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:14:75:14 | 0 | != | test.c:75:9:75:9 | x | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | != | test.c:85:13:85:13 | 0 | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:13:85:13 | 0 | != | test.c:85:8:85:8 | x | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | 75 | 77 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | test.c:85:23:85:23 | 0 | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:23:85:23 | 0 | != | test.c:85:18:85:18 | y | 0 | 86 | 86 |
-| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | test.c:85:23:85:23 | 0 | 0 | 86 | 86 |
-| test.c:85:18:85:23 | ... != ... | test.c:85:23:85:23 | 0 | != | test.c:85:18:85:18 | y | 0 | 86 | 86 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | test.c:94:16:94:16 | 0 | 0 | 94 | 96 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | 70 | 70 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | 99 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | 102 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | 107 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | 109 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | 109 | 117 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | 113 | 113 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | != | test.c:94:11:94:11 | x | 0 | 94 | 96 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | 70 | 70 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | 99 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | 102 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | 107 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | 109 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | 109 | 117 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | 113 | 113 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | < | test.c:102:20:102:21 | 10 | 0 | 102 | 102 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | 70 | 70 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | 107 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | 109 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | 109 | 117 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | 113 | 113 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | 70 | 70 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | 107 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | 109 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | 109 | 117 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | 113 | 113 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | >= | test.c:102:16:102:16 | j | 1 | 102 | 102 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | test.c:109:14:109:14 | 0 | 0 | 109 | 109 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | test.c:109:14:109:14 | 0 | 0 | 113 | 113 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:14:109:14 | 0 | != | test.c:109:9:109:9 | x | 0 | 109 | 109 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:14:109:14 | 0 | != | test.c:109:9:109:9 | x | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | test.c:109:14:109:14 | 0 | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:14:109:14 | 0 | != | test.c:109:9:109:9 | x | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:19 | y | >= | test.c:109:23:109:23 | 0 | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:23:109:23 | 0 | < | test.c:109:19:109:19 | y | 1 | 113 | 113 |
-| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | test.c:109:23:109:23 | 0 | 0 | 113 | 113 |
-| test.c:109:19:109:23 | ... < ... | test.c:109:23:109:23 | 0 | < | test.c:109:19:109:19 | y | 1 | 113 | 113 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | 181 | 182 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | 182 | 182 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | 181 | 182 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | 182 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:31:182:33 | 1.0 | >= | test.c:182:25:182:27 | foo | 1 | 181 | 182 |
-| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | 181 | 182 |
-| test.c:182:25:182:33 | ... < ... | test.c:182:31:182:33 | 1.0 | >= | test.c:182:25:182:27 | foo | 1 | 181 | 182 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | test.cpp:31:12:31:13 | - ... | 0 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | test.cpp:31:12:31:13 | - ... | 0 | 34 | 34 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | test.cpp:31:12:31:13 | - ... | 0 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | test.cpp:31:12:31:13 | - ... | 0 | 31 | 32 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | 34 | 34 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | 31 | 32 |
-| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:6 | f | != | test.cpp:105:11:105:14 | 0.0 | 0 | 105 | 106 |
-| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:11:105:14 | 0.0 | != | test.cpp:105:6:105:6 | f | 0 | 105 | 106 |
-| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:6 | i | != | test.cpp:111:11:111:14 | 0.0 | 0 | 111 | 112 |
-| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:11:111:14 | 0.0 | != | test.cpp:111:6:111:6 | i | 0 | 111 | 112 |
-| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:28 | b | 42 | 131 | 132 |
-| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:33 | ... + ... | 0 | 131 | 132 |
-| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:28 | b | == | test.cpp:131:23:131:23 | a | -42 | 131 | 132 |
-| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:33 | ... + ... | == | test.cpp:131:23:131:23 | a | 0 | 131 | 132 |
-| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:28 | b | 42 | 135 | 136 |
-| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:33 | ... + ... | 0 | 135 | 136 |
-| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:28 | b | != | test.cpp:135:23:135:23 | a | -42 | 135 | 136 |
-| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:33 | ... + ... | != | test.cpp:135:23:135:23 | a | 0 | 135 | 136 |
-| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | test.cpp:141:28:141:29 | 42 | 0 | 141 | 142 |
-| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:28:141:29 | 42 | == | test.cpp:141:23:141:23 | a | 0 | 141 | 142 |
-| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | test.cpp:145:28:145:29 | 42 | 0 | 145 | 146 |
-| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:28:145:29 | 42 | != | test.cpp:145:23:145:23 | a | 0 | 145 | 146 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | 152 | 153 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | 152 | 153 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | 160 | 162 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | 160 | 162 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | 168 | 170 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | 168 | 170 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | 176 | 178 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | 176 | 178 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:10 | sc | == | test.cpp:211:15:211:15 | 0 | 0 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:15:211:15 | 0 | == | test.cpp:211:9:211:10 | sc | 0 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:10 | sc | == | test.cpp:214:15:214:17 | 0 | 0 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:15:214:17 | 0 | == | test.cpp:214:9:214:10 | sc | 0 | 211 | 212 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:10 | sc | == | test.cpp:211:15:211:15 | 0 | 0 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:15:211:15 | 0 | == | test.cpp:211:9:211:10 | sc | 0 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:10 | sc | == | test.cpp:214:15:214:17 | 0 | 0 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:15:214:17 | 0 | == | test.cpp:214:9:214:10 | sc | 0 | 214 | 215 |
-| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:10 | ul | == | test.cpp:217:15:217:15 | 0 | 0 | 217 | 218 |
-| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:15:217:15 | 0 | == | test.cpp:217:9:217:10 | ul | 0 | 217 | 218 |
-| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:9:220:9 | f | == | test.cpp:220:14:220:14 | 0 | 0 | 220 | 221 |
-| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:14:220:14 | 0 | == | test.cpp:220:9:220:9 | f | 0 | 220 | 221 |
-| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:9:223:9 | f | == | test.cpp:223:14:223:16 | 0.0 | 0 | 223 | 224 |
-| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:14:223:16 | 0.0 | == | test.cpp:223:9:223:9 | f | 0 | 223 | 224 |
-| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:9:226:9 | d | == | test.cpp:226:14:226:14 | 0 | 0 | 226 | 227 |
-| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:14:226:14 | 0 | == | test.cpp:226:9:226:9 | d | 0 | 226 | 227 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:9 | b | == | test.cpp:229:14:229:14 | 0 | 0 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:14:229:14 | 0 | == | test.cpp:229:9:229:9 | b | 0 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:9 | b | == | test.cpp:232:14:232:18 | 0 | 0 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:14:232:18 | 0 | == | test.cpp:232:9:232:9 | b | 0 | 229 | 230 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:9 | b | == | test.cpp:229:14:229:14 | 0 | 0 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:14:229:14 | 0 | == | test.cpp:229:9:229:9 | b | 0 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:9 | b | == | test.cpp:232:14:232:18 | 0 | 0 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:14:232:18 | 0 | == | test.cpp:232:9:232:9 | b | 0 | 232 | 233 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | 235 | 236 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | 238 | 239 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | 238 | 239 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | 238 | 239 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | 238 | 239 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | 241 | 242 |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | test.c:7:13:7:13 | 0 | 1 | test.c:10:12:11:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | test.c:7:13:7:13 | 0 | 1 | test.c:7:16:9:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:13:7:13 | 0 | < | test.c:7:9:7:9 | x | 0 | test.c:7:16:9:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:13:7:13 | 0 | >= | test.c:7:9:7:9 | x | 0 | test.c:10:12:11:14 | { ... } |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | test.c:17:12:17:12 | 0 | 0 | test.c:17:17:17:21 | y |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | test.c:17:12:17:12 | 0 | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:12 | ... < ... | test.c:17:12:17:12 | 0 | >= | test.c:17:8:17:8 | x | 1 | test.c:17:17:17:21 | y |
+| test.c:17:8:17:12 | ... < ... | test.c:17:12:17:12 | 0 | >= | test.c:17:8:17:8 | x | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:8 | x | < | test.c:17:12:17:12 | 0 | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:12:17:12 | 0 | >= | test.c:17:8:17:8 | x | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:17 | y | >= | test.c:17:21:17:21 | 1 | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:21:17:21 | 1 | < | test.c:17:17:17:17 | y | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:17 | y | >= | test.c:17:21:17:21 | 1 | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:17:17:21 | ... > ... | test.c:17:21:17:21 | 1 | < | test.c:17:17:17:17 | y | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:2:5:2:8 | test |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:31:5:34:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:34:16:34:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:34:29:34:26 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:39:5:42:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:42:16:42:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:42:29:44:16 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:56:5:58:14 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:58:19:58:23 | y |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:58:26:66:12 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | test.c:26:15:26:15 | 0 | 1 | test.c:62:9:62:16 | return ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | >= | test.c:26:15:26:15 | 0 | 1 | test.c:26:18:28:11 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | < | test.c:26:11:26:11 | x | 0 | test.c:26:18:28:11 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:2:5:2:8 | test |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:31:5:34:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:34:16:34:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:34:29:34:26 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:39:5:42:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:42:16:42:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:42:29:44:16 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:56:5:58:14 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:58:19:58:23 | y |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:58:26:66:12 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:15:26:15 | 0 | >= | test.c:26:11:26:11 | x | 0 | test.c:62:9:62:16 | return ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | < | test.c:34:20:34:21 | 10 | 0 | test.c:34:29:34:26 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:2:5:2:8 | test |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:39:5:42:13 | ExprStmt |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:42:16:42:21 | j |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:42:29:44:16 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:56:5:58:14 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:58:19:58:23 | y |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:58:26:66:12 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | test.c:34:20:34:21 | 10 | 0 | test.c:62:9:62:16 | return ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:2:5:2:8 | test |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:39:5:42:13 | ExprStmt |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:42:16:42:21 | j |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:42:29:44:16 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:56:5:58:14 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:58:19:58:23 | y |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:58:26:66:12 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | < | test.c:34:16:34:16 | j | 1 | test.c:62:9:62:16 | return ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:20:34:21 | 10 | >= | test.c:34:16:34:16 | j | 1 | test.c:34:29:34:26 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:42:29:44:16 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | test.c:42:20:42:21 | 10 | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:42:29:44:16 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:20:42:21 | 10 | >= | test.c:42:16:42:16 | j | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | test.c:44:16:44:16 | 0 | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | test.c:44:16:44:16 | 0 | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | < | test.c:44:12:44:12 | z | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:44:12:44:16 | ... > ... | test.c:44:16:44:16 | 0 | >= | test.c:44:12:44:12 | z | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | test.c:45:20:45:20 | 0 | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:45:16:45:20 | ... > ... | test.c:45:20:45:20 | 0 | < | test.c:45:16:45:16 | y | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | test.c:58:19:58:23 | y |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:14 | ... == ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | test.c:58:19:58:23 | y |
+| test.c:58:9:58:14 | ... == ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | test.c:58:14:58:14 | 0 | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:14:58:14 | 0 | != | test.c:58:9:58:9 | x | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:19 | y | >= | test.c:58:23:58:23 | 0 | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:23:58:23 | 0 | < | test.c:58:19:58:19 | y | 1 | test.c:62:9:62:16 | return ... |
+| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:19 | y | >= | test.c:58:23:58:23 | 0 | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:19:58:23 | ... < ... | test.c:58:23:58:23 | 0 | < | test.c:58:19:58:19 | y | 1 | test.c:62:9:62:16 | return ... |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | test.c:75:14:75:14 | 0 | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:14:75:14 | 0 | != | test.c:75:9:75:9 | x | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | != | test.c:85:13:85:13 | 0 | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:13:85:13 | 0 | != | test.c:85:8:85:8 | x | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:9 | x | == | test.c:75:14:75:14 | 0 | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:75:14:75:14 | 0 | == | test.c:75:9:75:9 | x | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | test.c:85:13:85:13 | 0 | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:13:85:13 | 0 | == | test.c:85:8:85:8 | x | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | test.c:85:23:85:23 | 0 | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:23:85:23 | 0 | != | test.c:85:18:85:18 | y | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | test.c:85:23:85:23 | 0 | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:18:85:23 | ... != ... | test.c:85:23:85:23 | 0 | != | test.c:85:18:85:18 | y | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | test.c:94:16:94:16 | 0 | 0 | test.c:94:19:96:11 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:70:5:70:9 | test2 |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:99:5:102:13 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:102:16:102:21 | j |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:102:29:102:26 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:107:5:109:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:109:19:109:23 | y |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:109:26:117:12 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | test.c:94:16:94:16 | 0 | 0 | test.c:113:9:113:16 | return ... |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | != | test.c:94:11:94:11 | x | 0 | test.c:94:19:96:11 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:70:5:70:9 | test2 |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:99:5:102:13 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:102:16:102:21 | j |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:102:29:102:26 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:107:5:109:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:109:19:109:23 | y |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:109:26:117:12 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:16:94:16 | 0 | == | test.c:94:11:94:11 | x | 0 | test.c:113:9:113:16 | return ... |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | < | test.c:102:20:102:21 | 10 | 0 | test.c:102:29:102:26 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | test.c:70:5:70:9 | test2 |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | test.c:107:5:109:14 | ExprStmt |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | test.c:109:19:109:23 | y |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | test.c:109:26:117:12 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | test.c:102:20:102:21 | 10 | 0 | test.c:113:9:113:16 | return ... |
+| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | test.c:70:5:70:9 | test2 |
+| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | test.c:107:5:109:14 | ExprStmt |
+| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | test.c:109:19:109:23 | y |
+| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | test.c:109:26:117:12 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | < | test.c:102:16:102:16 | j | 1 | test.c:113:9:113:16 | return ... |
+| test.c:102:16:102:21 | ... < ... | test.c:102:20:102:21 | 10 | >= | test.c:102:16:102:16 | j | 1 | test.c:102:29:102:26 | { ... } |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | test.c:109:14:109:14 | 0 | 0 | test.c:109:19:109:23 | y |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | test.c:109:14:109:14 | 0 | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:14 | ... == ... | test.c:109:14:109:14 | 0 | != | test.c:109:9:109:9 | x | 0 | test.c:109:19:109:23 | y |
+| test.c:109:9:109:14 | ... == ... | test.c:109:14:109:14 | 0 | != | test.c:109:9:109:9 | x | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | test.c:109:14:109:14 | 0 | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:14:109:14 | 0 | != | test.c:109:9:109:9 | x | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:19 | y | >= | test.c:109:23:109:23 | 0 | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:23:109:23 | 0 | < | test.c:109:19:109:19 | y | 1 | test.c:113:9:113:16 | return ... |
+| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | test.c:109:23:109:23 | 0 | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:19:109:23 | ... < ... | test.c:109:23:109:23 | 0 | < | test.c:109:19:109:19 | y | 1 | test.c:113:9:113:16 | return ... |
+| test.c:176:8:176:15 | ! ... | test.c:176:10:176:10 | a | >= | test.c:176:14:176:14 | b | 0 | test.c:176:18:178:5 | { ... } |
+| 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: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 | { ... } |
+| test.c:182:25: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:190:7:190:8 | ! ... | test.c:188:11:188:11 | a | == | test.c:188:16:188:16 | b | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:190:7:190:8 | ! ... | test.c:188:16:188:16 | b | == | test.c:188:11:188:11 | a | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:190:8:190:8 | c | test.c:188:11:188:11 | a | == | test.c:188:16:188:16 | b | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:190:8:190:8 | c | test.c:188:16:188:16 | b | == | test.c:188:11:188:11 | a | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:198:7:198:8 | ! ... | test.c:196:11:196:11 | a | < | test.c:196:15:196:16 | 10 | 1 | test.c:198:11:200:3 | { ... } |
+| test.c:198:7:198:8 | ! ... | test.c:196:15:196:16 | 10 | >= | test.c:196:11:196:11 | a | 0 | test.c:198:11:200:3 | { ... } |
+| test.c:198:8:198:8 | b | test.c:196:11:196:11 | a | < | test.c:196:15:196:16 | 10 | 1 | test.c:198:11:200:3 | { ... } |
+| test.c:198:8:198:8 | b | test.c:196:15:196:16 | 10 | >= | test.c:196:11:196:11 | a | 0 | test.c:198:11:200:3 | { ... } |
+| test.c:206:7:206:8 | ! ... | test.c:204:11:204:11 | a | < | test.c:204:15:204:15 | b | 1 | test.c:206:11:208:3 | { ... } |
+| test.c:206:7:206:8 | ! ... | test.c:204:15:204:15 | b | >= | test.c:204:11:204:11 | a | 0 | test.c:206:11:208:3 | { ... } |
+| test.c:206:8:206:8 | c | test.c:204:11:204:11 | a | < | test.c:204:15:204:15 | b | 1 | test.c:206:11:208:3 | { ... } |
+| test.c:206:8:206:8 | c | test.c:204:15:204:15 | b | >= | test.c:204:11:204:11 | a | 0 | test.c:206:11:208:3 | { ... } |
+| test.c:215:6:215:18 | call to __builtin_expect | test.c:215:13:215:13 | a | >= | test.c:215:17:215:17 | b | 1 | test.c:215:21:217:5 | { ... } |
+| test.c:215:6:215:18 | call to __builtin_expect | test.c:215:17:215:17 | b | < | test.c:215:13:215:13 | a | 0 | test.c:215:21:217:5 | { ... } |
+| test.c:219:9:219:22 | call to __builtin_expect | test.c:219:16:219:16 | a | >= | test.c:219:20:219:21 | 42 | 1 | test.c:219:25:221:5 | { ... } |
+| test.c:219:9:219:22 | call to __builtin_expect | test.c:219:20:219:21 | 42 | < | test.c:219:16:219:16 | a | 0 | test.c:219:25:221:5 | { ... } |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | test.cpp:31:12:31:13 | - ... | 0 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | test.cpp:31:12:31:13 | - ... | 0 | test.cpp:34:1:34:1 | return ... |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | test.cpp:31:12:31:13 | - ... | 0 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | test.cpp:31:12:31:13 | - ... | 0 | test.cpp:31:16:32:21 | { ... } |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | != | test.cpp:31:7:31:7 | x | 0 | test.cpp:34:1:34:1 | return ... |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:12:31:13 | - ... | == | test.cpp:31:7:31:7 | x | 0 | test.cpp:31:16:32:21 | { ... } |
+| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:6 | f | != | test.cpp:105:11:105:14 | 0.0 | 0 | test.cpp:105:17:106:7 | { ... } |
+| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:11:105:14 | 0.0 | != | test.cpp:105:6:105:6 | f | 0 | test.cpp:105:17:106:7 | { ... } |
+| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:6 | i | != | test.cpp:111:11:111:14 | 0.0 | 0 | test.cpp:111:17:112:7 | { ... } |
+| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:11:111:14 | 0.0 | != | test.cpp:111:6:111:6 | i | 0 | test.cpp:111:17:112:7 | { ... } |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:28 | b | 42 | test.cpp:131:40:132:9 | { ... } |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:33 | ... + ... | 0 | test.cpp:131:40:132:9 | { ... } |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:28 | b | == | test.cpp:131:23:131:23 | a | -42 | test.cpp:131:40:132:9 | { ... } |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:33 | ... + ... | == | test.cpp:131:23:131:23 | a | 0 | test.cpp:131:40:132:9 | { ... } |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:28 | b | 42 | test.cpp:135:40:136:9 | { ... } |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:33 | ... + ... | 0 | test.cpp:135:40:136:9 | { ... } |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:28 | b | != | test.cpp:135:23:135:23 | a | -42 | test.cpp:135:40:136:9 | { ... } |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:33 | ... + ... | != | test.cpp:135:23:135:23 | a | 0 | test.cpp:135:40:136:9 | { ... } |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | test.cpp:141:28:141:29 | 42 | 0 | test.cpp:141:36:142:9 | { ... } |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:28:141:29 | 42 | == | test.cpp:141:23:141:23 | a | 0 | test.cpp:141:36:142:9 | { ... } |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | test.cpp:145:28:145:29 | 42 | 0 | test.cpp:145:36:146:9 | { ... } |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:28:145:29 | 42 | != | test.cpp:145:23:145:23 | a | 0 | test.cpp:145:36:146:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | test.cpp:151:12:151:13 | 10 | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:151:12:151:13 | 10 | < | test.cpp:151:8:151:8 | a | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:12 | a | == | test.cpp:158:17:158:17 | b | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:158:17:158:17 | b | == | test.cpp:158:12:158:12 | a | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:12 | a | < | test.cpp:166:16:166:17 | 10 | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:166:16:166:17 | 10 | >= | test.cpp:166:12:166:12 | a | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:12 | a | < | test.cpp:174:16:174:16 | b | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:174:16:174:16 | b | >= | test.cpp:174:12:174:12 | a | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:10 | sc | == | test.cpp:211:15:211:15 | 0 | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:15:211:15 | 0 | == | test.cpp:211:9:211:10 | sc | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:10 | sc | == | test.cpp:214:15:214:17 | 0 | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:15:214:17 | 0 | == | test.cpp:214:9:214:10 | sc | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:10 | sc | == | test.cpp:211:15:211:15 | 0 | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:15:211:15 | 0 | == | test.cpp:211:9:211:10 | sc | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:10 | sc | == | test.cpp:214:15:214:17 | 0 | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:15:214:17 | 0 | == | test.cpp:214:9:214:10 | sc | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:10 | ul | == | test.cpp:217:15:217:15 | 0 | 0 | test.cpp:217:18:218:13 | { ... } |
+| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:15:217:15 | 0 | == | test.cpp:217:9:217:10 | ul | 0 | test.cpp:217:18:218:13 | { ... } |
+| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:9:220:9 | f | == | test.cpp:220:14:220:14 | 0 | 0 | test.cpp:220:17:221:13 | { ... } |
+| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:14:220:14 | 0 | == | test.cpp:220:9:220:9 | f | 0 | test.cpp:220:17:221:13 | { ... } |
+| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:9:223:9 | f | == | test.cpp:223:14:223:16 | 0.0 | 0 | test.cpp:223:19:224:13 | { ... } |
+| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:14:223:16 | 0.0 | == | test.cpp:223:9:223:9 | f | 0 | test.cpp:223:19:224:13 | { ... } |
+| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:9:226:9 | d | == | test.cpp:226:14:226:14 | 0 | 0 | test.cpp:226:17:227:13 | { ... } |
+| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:14:226:14 | 0 | == | test.cpp:226:9:226:9 | d | 0 | test.cpp:226:17:227:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:9 | b | == | test.cpp:229:14:229:14 | 0 | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:14:229:14 | 0 | == | test.cpp:229:9:229:9 | b | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:9 | b | == | test.cpp:232:14:232:18 | 0 | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:14:232:18 | 0 | == | test.cpp:232:9:232:9 | b | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:9 | b | == | test.cpp:229:14:229:14 | 0 | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:14:229:14 | 0 | == | test.cpp:229:9:229:9 | b | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:9 | b | == | test.cpp:232:14:232:18 | 0 | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:14:232:18 | 0 | == | test.cpp:232:9:232:9 | b | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:12:238:12 | f | == | test.cpp:238:17:238:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:17:238:17 | 0 | == | test.cpp:238:12:238:12 | f | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:25:241:25 | f | == | test.cpp:241:30:241:30 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:30:241:30 | 0 | == | test.cpp:241:25:241:25 | f | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:12:235:12 | i | == | test.cpp:235:17:235:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:17:235:17 | 0 | == | test.cpp:235:12:235:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:12:241:12 | i | == | test.cpp:241:17:241:17 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:17:241:17 | 0 | == | test.cpp:241:12:241:12 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:38:241:38 | i | == | test.cpp:241:43:241:43 | 0 | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:43:241:43 | 0 | == | test.cpp:241:38:241:38 | i | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:7:247:7 | a | != | test.cpp:247:12:247:12 | b | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:7:247:7 | a | == | test.cpp:247:12:247:12 | b | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:7:247:12 | ... == ... | != | test.cpp:247:18:247:18 | 0 | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:7:247:12 | ... == ... | == | test.cpp:247:18:247:18 | 0 | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:12:247:12 | b | != | test.cpp:247:7:247:7 | a | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:12:247:12 | b | == | test.cpp:247:7:247:7 | a | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:18:247:18 | 0 | != | test.cpp:247:7:247:12 | ... == ... | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:18:247:18 | 0 | == | test.cpp:247:7:247:12 | ... == ... | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:253:7:253:7 | a | != | test.cpp:253:12:253:12 | b | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:253:7:253:7 | a | == | test.cpp:253:12:253:12 | b | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:253:12:253:12 | b | != | test.cpp:253:7:253:7 | a | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:253:12:253:12 | b | == | test.cpp:253:7:253:7 | a | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:247:7:247:7 | a | != | test.cpp:247:12:247:12 | b | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:247:7:247:7 | a | == | test.cpp:247:12:247:12 | b | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:247:12:247:12 | b | != | test.cpp:247:7:247:7 | a | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:247:12:247:12 | b | == | test.cpp:247:7:247:7 | a | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:7:253:7 | a | != | test.cpp:253:12:253:12 | b | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:7:253:7 | a | == | test.cpp:253:12:253:12 | b | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:7:253:12 | ... == ... | != | test.cpp:253:18:253:18 | 0 | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:7:253:12 | ... == ... | == | test.cpp:253:18:253:18 | 0 | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:12:253:12 | b | != | test.cpp:253:7:253:7 | a | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:12:253:12 | b | == | test.cpp:253:7:253:7 | a | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:18:253:18 | 0 | != | test.cpp:253:7:253:12 | ... == ... | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:18:253:18 | 0 | == | test.cpp:253:7:253:12 | ... == ... | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:7:260:7 | a | != | test.cpp:260:12:260:12 | b | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:7:260:7 | a | == | test.cpp:260:12:260:12 | b | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:7:260:12 | ... != ... | != | test.cpp:260:18:260:18 | 0 | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:7:260:12 | ... != ... | == | test.cpp:260:18:260:18 | 0 | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:12:260:12 | b | != | test.cpp:260:7:260:7 | a | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:12:260:12 | b | == | test.cpp:260:7:260:7 | a | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:18:260:18 | 0 | != | test.cpp:260:7:260:12 | ... != ... | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:18:260:18 | 0 | == | test.cpp:260:7:260:12 | ... != ... | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:266:7:266:7 | a | != | test.cpp:266:12:266:12 | b | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:266:7:266:7 | a | == | test.cpp:266:12:266:12 | b | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:266:12:266:12 | b | != | test.cpp:266:7:266:7 | a | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:266:12:266:12 | b | == | test.cpp:266:7:266:7 | a | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:260:7:260:7 | a | != | test.cpp:260:12:260:12 | b | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:260:7:260:7 | a | == | test.cpp:260:12:260:12 | b | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:260:12:260:12 | b | != | test.cpp:260:7:260:7 | a | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:260:12:260:12 | b | == | test.cpp:260:7:260:7 | a | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:7:266:7 | a | != | test.cpp:266:12:266:12 | b | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:7:266:7 | a | == | test.cpp:266:12:266:12 | b | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:7:266:12 | ... != ... | != | test.cpp:266:18:266:18 | 0 | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:7:266:12 | ... != ... | == | test.cpp:266:18:266:18 | 0 | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:12:266:12 | b | != | test.cpp:266:7:266:7 | a | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:12:266:12 | b | == | test.cpp:266:7:266:7 | a | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:18:266:18 | 0 | != | test.cpp:266:7:266:12 | ... != ... | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:18:266:18 | 0 | == | test.cpp:266:7:266:12 | ... != ... | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:7:273:7 | a | < | test.cpp:273:11:273:11 | b | 0 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:7:273:7 | a | >= | test.cpp:273:11:273:11 | b | 0 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:7:273:11 | ... < ... | != | test.cpp:273:17:273:17 | 0 | 0 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:7:273:11 | ... < ... | == | test.cpp:273:17:273:17 | 0 | 0 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:11:273:11 | b | < | test.cpp:273:7:273:7 | a | 1 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:11:273:11 | b | >= | test.cpp:273:7:273:7 | a | 1 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:17:273:17 | 0 | != | test.cpp:273:7:273:11 | ... < ... | 0 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:17:273:17 | 0 | == | test.cpp:273:7:273:11 | ... < ... | 0 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:279:7:279:7 | a | < | test.cpp:279:11:279:11 | b | 0 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:279:7:279:7 | a | >= | test.cpp:279:11:279:11 | b | 0 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:279:11:279:11 | b | < | test.cpp:279:7:279:7 | a | 1 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:279:11:279:11 | b | >= | test.cpp:279:7:279:7 | a | 1 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:273:7:273:7 | a | < | test.cpp:273:11:273:11 | b | 0 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:273:7:273:7 | a | >= | test.cpp:273:11:273:11 | b | 0 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:273:11:273:11 | b | < | test.cpp:273:7:273:7 | a | 1 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:273:11:273:11 | b | >= | test.cpp:273:7:273:7 | a | 1 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:7:279:7 | a | < | test.cpp:279:11:279:11 | b | 0 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:7:279:7 | a | >= | test.cpp:279:11:279:11 | b | 0 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:7:279:11 | ... < ... | != | test.cpp:279:17:279:17 | 0 | 0 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:7:279:11 | ... < ... | == | test.cpp:279:17:279:17 | 0 | 0 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:11:279:11 | b | < | test.cpp:279:7:279:7 | a | 1 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:11:279:11 | b | >= | test.cpp:279:7:279:7 | a | 1 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:17:279:17 | 0 | != | test.cpp:279:7:279:11 | ... < ... | 0 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:17:279:17 | 0 | == | test.cpp:279:7:279:11 | ... < ... | 0 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:7 | a | != | test.cpp:287:12:287:13 | 42 | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:7 | a | == | test.cpp:287:12:287:13 | 42 | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:13 | ... == ... | != | test.cpp:287:19:287:19 | 0 | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:13 | ... == ... | == | test.cpp:287:19:287:19 | 0 | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:12:287:13 | 42 | != | test.cpp:287:7:287:7 | a | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:12:287:13 | 42 | == | test.cpp:287:7:287:7 | a | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:19:287:19 | 0 | != | test.cpp:287:7:287:13 | ... == ... | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:19:287:19 | 0 | == | test.cpp:287:7:287:13 | ... == ... | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:293:7:293:7 | a | != | test.cpp:293:12:293:13 | 42 | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:293:7:293:7 | a | == | test.cpp:293:12:293:13 | 42 | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:293:12:293:13 | 42 | != | test.cpp:293:7:293:7 | a | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:293:12:293:13 | 42 | == | test.cpp:293:7:293:7 | a | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:287:7:287:7 | a | != | test.cpp:287:12:287:13 | 42 | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:287:7:287:7 | a | == | test.cpp:287:12:287:13 | 42 | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:287:12:287:13 | 42 | != | test.cpp:287:7:287:7 | a | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:287:12:287:13 | 42 | == | test.cpp:287:7:287:7 | a | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:7 | a | != | test.cpp:293:12:293:13 | 42 | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:7 | a | == | test.cpp:293:12:293:13 | 42 | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:13 | ... == ... | != | test.cpp:293:19:293:19 | 0 | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:13 | ... == ... | == | test.cpp:293:19:293:19 | 0 | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:12:293:13 | 42 | != | test.cpp:293:7:293:7 | a | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:12:293:13 | 42 | == | test.cpp:293:7:293:7 | a | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:19:293:19 | 0 | != | test.cpp:293:7:293:13 | ... == ... | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:19:293:19 | 0 | == | test.cpp:293:7:293:13 | ... == ... | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:7 | a | != | test.cpp:300:12:300:13 | 42 | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:7 | a | == | test.cpp:300:12:300:13 | 42 | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:13 | ... != ... | != | test.cpp:300:19:300:19 | 0 | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:13 | ... != ... | == | test.cpp:300:19:300:19 | 0 | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:12:300:13 | 42 | != | test.cpp:300:7:300:7 | a | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:12:300:13 | 42 | == | test.cpp:300:7:300:7 | a | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:19:300:19 | 0 | != | test.cpp:300:7:300:13 | ... != ... | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:19:300:19 | 0 | == | test.cpp:300:7:300:13 | ... != ... | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:306:7:306:7 | a | != | test.cpp:306:12:306:13 | 42 | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:306:7:306:7 | a | == | test.cpp:306:12:306:13 | 42 | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:306:12:306:13 | 42 | != | test.cpp:306:7:306:7 | a | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:306:12:306:13 | 42 | == | test.cpp:306:7:306:7 | a | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:300:7:300:7 | a | != | test.cpp:300:12:300:13 | 42 | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:300:7:300:7 | a | == | test.cpp:300:12:300:13 | 42 | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:300:12:300:13 | 42 | != | test.cpp:300:7:300:7 | a | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:300:12:300:13 | 42 | == | test.cpp:300:7:300:7 | a | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:7 | a | != | test.cpp:306:12:306:13 | 42 | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:7 | a | == | test.cpp:306:12:306:13 | 42 | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:13 | ... != ... | != | test.cpp:306:19:306:19 | 0 | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:13 | ... != ... | == | test.cpp:306:19:306:19 | 0 | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:12:306:13 | 42 | != | test.cpp:306:7:306:7 | a | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:12:306:13 | 42 | == | test.cpp:306:7:306:7 | a | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:19:306:19 | 0 | != | test.cpp:306:7:306:13 | ... != ... | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:19:306:19 | 0 | == | test.cpp:306:7:306:13 | ... != ... | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:7 | a | < | test.cpp:312:11:312:12 | 42 | 0 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:7 | a | >= | test.cpp:312:11:312:12 | 42 | 0 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:12 | ... < ... | != | test.cpp:312:18:312:18 | 0 | 0 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:12 | ... < ... | == | test.cpp:312:18:312:18 | 0 | 0 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:11:312:12 | 42 | < | test.cpp:312:7:312:7 | a | 1 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:11:312:12 | 42 | >= | test.cpp:312:7:312:7 | a | 1 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:18:312:18 | 0 | != | test.cpp:312:7:312:12 | ... < ... | 0 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:18:312:18 | 0 | == | test.cpp:312:7:312:12 | ... < ... | 0 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:318:7:318:7 | a | < | test.cpp:318:11:318:12 | 42 | 0 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:318:7:318:7 | a | >= | test.cpp:318:11:318:12 | 42 | 0 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:318:11:318:12 | 42 | < | test.cpp:318:7:318:7 | a | 1 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:318:11:318:12 | 42 | >= | test.cpp:318:7:318:7 | a | 1 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:312:7:312:7 | a | < | test.cpp:312:11:312:12 | 42 | 0 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:312:7:312:7 | a | >= | test.cpp:312:11:312:12 | 42 | 0 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:312:11:312:12 | 42 | < | test.cpp:312:7:312:7 | a | 1 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:312:11:312:12 | 42 | >= | test.cpp:312:7:312:7 | a | 1 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:7 | a | < | test.cpp:318:11:318:12 | 42 | 0 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:7 | a | >= | test.cpp:318:11:318:12 | 42 | 0 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:12 | ... < ... | != | test.cpp:318:18:318:18 | 0 | 0 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:12 | ... < ... | == | test.cpp:318:18:318:18 | 0 | 0 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:11:318:12 | 42 | < | test.cpp:318:7:318:7 | a | 1 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:11:318:12 | 42 | >= | test.cpp:318:7:318:7 | a | 1 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:18:318:18 | 0 | != | test.cpp:318:7:318:12 | ... < ... | 0 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:18:318:18 | 0 | == | test.cpp:318:7:318:12 | ... < ... | 0 | test.cpp:320:10:322:3 | { ... } |
unary
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | 10 | 11 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | 7 | 9 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 0 | 7 | 9 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 1 | 10 | 11 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 0 | 10 | 11 |
-| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 1 | 7 | 9 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | 17 | 17 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | 18 | 18 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | 17 | 17 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | 18 | 18 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | 17 | 17 |
-| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:8 | x | < | 0 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | != | 0 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | == | 1 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:17 | y | >= | 2 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | != | 0 | 18 | 18 |
-| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | == | 1 | 18 | 18 |
-| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:17 | y | >= | 2 | 18 | 18 |
-| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | != | 0 | 18 | 18 |
-| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | == | 1 | 18 | 18 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 2 | 2 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 31 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 34 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 39 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 42 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 42 | 44 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 45 | 45 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 45 | 47 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 51 | 53 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 56 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 58 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 58 | 66 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | 62 | 62 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | >= | 1 | 26 | 28 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 0 | 26 | 28 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 2 | 2 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 31 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 34 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 39 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 42 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 42 | 44 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 45 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 45 | 47 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 51 | 53 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 56 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 58 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 58 | 66 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | 62 | 62 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 2 | 2 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 31 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 34 | 34 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 39 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 42 | 42 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 42 | 44 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 45 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 45 | 47 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 51 | 53 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 56 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 58 | 58 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 58 | 66 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | 62 | 62 |
-| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 1 | 26 | 28 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | < | 10 | 34 | 34 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 2 | 2 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 39 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 42 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 42 | 44 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 45 | 45 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 45 | 47 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 51 | 53 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 56 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 58 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 58 | 66 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | 62 | 62 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 0 | 34 | 34 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 2 | 2 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 39 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 42 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 42 | 44 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 45 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 45 | 47 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 51 | 53 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 56 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 58 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 58 | 66 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | 62 | 62 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 2 | 2 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 39 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 42 | 42 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 42 | 44 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 45 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 45 | 47 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 51 | 53 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 56 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 58 | 58 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 58 | 66 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | 62 | 62 |
-| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 1 | 34 | 34 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 42 | 42 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 42 | 44 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 45 | 45 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 45 | 47 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | 51 | 53 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 42 | 42 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 42 | 44 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 45 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 45 | 47 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | 51 | 53 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 42 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 42 | 44 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 45 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 45 | 47 |
-| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | 42 | 42 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | 45 | 45 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | 45 | 47 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 45 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | 45 | 47 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 42 | 42 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 42 | 42 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | 51 | 53 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 45 |
-| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | 45 | 47 |
-| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | 1 | 45 | 47 |
-| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 0 | 45 | 47 |
-| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 1 | 45 | 47 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 58 | 58 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | 58 | 58 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | 62 | 62 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | 58 | 58 |
-| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | != | 1 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | == | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:19 | y | >= | 0 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | != | 1 | 62 | 62 |
-| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | == | 0 | 62 | 62 |
-| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:19 | y | >= | 0 | 62 | 62 |
-| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | != | 1 | 62 | 62 |
-| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | == | 0 | 62 | 62 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 1 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | != | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 75 | 77 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 1 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 0 | 78 | 79 |
-| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 75 | 77 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | 86 | 86 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 85 | 85 |
-| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:9 | x | == | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | != | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | == | 1 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | != | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | == | 1 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | != | 0 | 86 | 86 |
-| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | == | 1 | 86 | 86 |
-| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | 86 | 86 |
-| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | != | 0 | 86 | 86 |
-| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | == | 1 | 86 | 86 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | 94 | 96 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 70 | 70 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 99 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 102 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 107 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 109 | 117 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | 113 | 113 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 0 | 94 | 96 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 70 | 70 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 99 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 102 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 107 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 109 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 109 | 117 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | 113 | 113 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 70 | 70 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 99 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 102 | 102 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 107 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 109 | 109 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 109 | 117 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | 113 | 113 |
-| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 1 | 94 | 96 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | < | 10 | 102 | 102 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 70 | 70 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 107 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 109 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 109 | 117 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | 113 | 113 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 0 | 102 | 102 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 70 | 70 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 107 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 109 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 109 | 117 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | 113 | 113 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 70 | 70 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 107 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 109 | 109 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 109 | 117 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | 113 | 113 |
-| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 1 | 102 | 102 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 109 | 109 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | 109 | 109 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | 113 | 113 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | 109 | 109 |
-| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | != | 1 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | == | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:19 | y | >= | 0 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | != | 1 | 113 | 113 |
-| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | == | 0 | 113 | 113 |
-| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | 0 | 113 | 113 |
-| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | != | 1 | 113 | 113 |
-| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | == | 0 | 113 | 113 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 126 | 126 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 131 | 131 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 131 | 132 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | 134 | 123 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 126 | 126 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 126 | 128 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 131 | 131 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 131 | 132 |
-| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | 134 | 123 |
-| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | 126 | 128 |
-| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | 126 | 128 |
-| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 |
-| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 |
-| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | 126 | 128 |
-| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | 126 | 128 |
-| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 |
-| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | == | 1 | 131 | 132 |
-| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | != | 1 | 142 | 136 |
-| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | == | 0 | 142 | 136 |
-| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 |
-| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | == | 1 | 146 | 147 |
-| test.c:146:7:146:8 | ! ... | test.c:146:8:146:8 | x | == | 0 | 146 | 147 |
-| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 |
-| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | == | 1 | 146 | 147 |
-| test.c:146:8:146:8 | x | test.c:146:8:146:8 | x | == | 0 | 146 | 147 |
-| test.c:152:8:152:8 | p | test.c:152:8:152:8 | p | != | 0 | 152 | 154 |
-| test.c:152:8:152:8 | p | test.c:152:8:152:8 | p | == | 1 | 152 | 154 |
-| test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | != | 0 | 158 | 160 |
-| test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | == | 1 | 158 | 160 |
-| test.c:158:8:158:9 | ! ... | test.c:158:9:158:9 | p | == | 0 | 158 | 160 |
-| test.c:158:9:158:9 | p | test.c:158:8:158:9 | ! ... | != | 0 | 158 | 160 |
-| test.c:158:9:158:9 | p | test.c:158:8:158:9 | ! ... | == | 1 | 158 | 160 |
-| test.c:158:9:158:9 | p | test.c:158:9:158:9 | p | == | 0 | 158 | 160 |
-| test.c:164:8:164:8 | s | test.c:164:8:164:8 | s | != | 0 | 164 | 166 |
-| test.c:164:8:164:8 | s | test.c:164:8:164:8 | s | == | 1 | 164 | 166 |
-| test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | != | 0 | 170 | 172 |
-| test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | == | 1 | 170 | 172 |
-| test.c:170:8:170:9 | ! ... | test.c:170:9:170:9 | s | == | 0 | 170 | 172 |
-| test.c:170:9:170:9 | s | test.c:170:8:170:9 | ! ... | != | 0 | 170 | 172 |
-| test.c:170:9:170:9 | s | test.c:170:8:170:9 | ! ... | == | 1 | 170 | 172 |
-| test.c:170:9:170:9 | s | test.c:170:9:170:9 | s | == | 0 | 170 | 172 |
-| test.c:176:8:176:15 | ! ... | test.c:176:8:176:15 | ! ... | != | 0 | 176 | 178 |
-| test.c:176:8:176:15 | ! ... | test.c:176:8:176:15 | ! ... | == | 1 | 176 | 178 |
-| test.c:176:8:176:15 | ! ... | test.c:176:10:176:14 | ... < ... | == | 0 | 176 | 178 |
-| test.c:176:10:176:14 | ... < ... | test.c:176:8:176:15 | ! ... | != | 0 | 176 | 178 |
-| test.c:176:10:176:14 | ... < ... | test.c:176:8:176:15 | ! ... | == | 1 | 176 | 178 |
-| test.c:176:10:176:14 | ... < ... | test.c:176:10:176:14 | ... < ... | == | 0 | 176 | 178 |
-| test.c:182:8:182:34 | ! ... | test.c:182:8:182:34 | ! ... | != | 0 | 182 | 184 |
-| test.c:182:8:182:34 | ! ... | test.c:182:8:182:34 | ! ... | == | 1 | 182 | 184 |
-| test.c:182:8:182:34 | ! ... | test.c:182:10:182:33 | ... && ... | == | 0 | 182 | 184 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | != | 0 | 181 | 182 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | != | 0 | 182 | 182 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | == | 1 | 181 | 182 |
-| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | == | 1 | 182 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | != | 0 | 182 | 184 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | != | 1 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | == | 0 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | == | 1 | 182 | 184 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:20 | ... >= ... | != | 0 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:20 | ... >= ... | == | 1 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:33 | ... && ... | != | 0 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:33 | ... && ... | == | 0 | 182 | 184 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:33 | ... < ... | != | 0 | 181 | 182 |
-| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:33 | ... < ... | == | 1 | 181 | 182 |
-| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:33 | ... < ... | != | 0 | 181 | 182 |
-| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:33 | ... < ... | == | 1 | 181 | 182 |
-| test.c:190:7:190:8 | ! ... | test.c:190:7:190:8 | ! ... | != | 0 | 190 | 192 |
-| test.c:190:7:190:8 | ! ... | test.c:190:7:190:8 | ! ... | == | 1 | 190 | 192 |
-| test.c:190:7:190:8 | ! ... | test.c:190:8:190:8 | c | == | 0 | 190 | 192 |
-| test.c:190:8:190:8 | c | test.c:190:7:190:8 | ! ... | != | 0 | 190 | 192 |
-| test.c:190:8:190:8 | c | test.c:190:7:190:8 | ! ... | == | 1 | 190 | 192 |
-| test.c:190:8:190:8 | c | test.c:190:8:190:8 | c | == | 0 | 190 | 192 |
-| test.c:198:7:198:8 | ! ... | test.c:198:7:198:8 | ! ... | != | 0 | 198 | 200 |
-| test.c:198:7:198:8 | ! ... | test.c:198:7:198:8 | ! ... | == | 1 | 198 | 200 |
-| test.c:198:7:198:8 | ! ... | test.c:198:8:198:8 | b | == | 0 | 198 | 200 |
-| test.c:198:8:198:8 | b | test.c:198:7:198:8 | ! ... | != | 0 | 198 | 200 |
-| test.c:198:8:198:8 | b | test.c:198:7:198:8 | ! ... | == | 1 | 198 | 200 |
-| test.c:198:8:198:8 | b | test.c:198:8:198:8 | b | == | 0 | 198 | 200 |
-| test.c:206:7:206:8 | ! ... | test.c:206:7:206:8 | ! ... | != | 0 | 206 | 208 |
-| test.c:206:7:206:8 | ! ... | test.c:206:7:206:8 | ! ... | == | 1 | 206 | 208 |
-| test.c:206:7:206:8 | ! ... | test.c:206:8:206:8 | c | == | 0 | 206 | 208 |
-| test.c:206:8:206:8 | c | test.c:206:7:206:8 | ! ... | != | 0 | 206 | 208 |
-| test.c:206:8:206:8 | c | test.c:206:7:206:8 | ! ... | == | 1 | 206 | 208 |
-| test.c:206:8:206:8 | c | test.c:206:8:206:8 | c | == | 0 | 206 | 208 |
-| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 19 | 19 |
-| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | == | 1 | 19 | 19 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | 31 | 32 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | 34 | 34 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | 34 | 34 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | 30 | 30 |
-| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | 31 | 32 |
-| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | 43 | 45 |
-| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 1 | 43 | 45 |
-| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 0 | 62 | 64 |
-| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 1 | 65 | 66 |
-| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 11 | 75 | 77 |
-| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 21 | 78 | 79 |
-| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 0 | 75 | 77 |
-| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 11 | 78 | 79 |
-| test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | != | 0 | 93 | 94 |
-| test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | == | 1 | 93 | 94 |
-| test.cpp:99:6:99:6 | f | test.cpp:99:6:99:6 | f | != | 0 | 99 | 100 |
-| test.cpp:99:6:99:6 | f | test.cpp:99:6:99:6 | f | == | 1 | 99 | 100 |
-| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:14 | ... != ... | != | 0 | 105 | 106 |
-| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:14 | ... != ... | == | 1 | 105 | 106 |
-| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | != | 0 | 111 | 112 |
-| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | == | 1 | 111 | 112 |
-| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 123 | 125 |
-| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 125 | 125 |
-| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | == | 1 | 123 | 125 |
-| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | == | 1 | 125 | 125 |
-| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | != | 0 | 125 | 125 |
-| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | == | 1 | 125 | 125 |
-| test.cpp:125:13:125:20 | ! ... | test.cpp:125:14:125:17 | call to safe | != | 1 | 125 | 125 |
-| test.cpp:125:13:125:20 | ! ... | test.cpp:125:14:125:17 | call to safe | == | 0 | 125 | 125 |
-| test.cpp:125:14:125:17 | call to safe | test.cpp:125:13:125:20 | ! ... | != | 0 | 125 | 125 |
-| test.cpp:125:14:125:17 | call to safe | test.cpp:125:13:125:20 | ! ... | == | 1 | 125 | 125 |
-| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | != | 1 | 125 | 125 |
-| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | == | 0 | 125 | 125 |
-| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | != | 0 | 131 | 132 |
-| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | == | 1 | 131 | 132 |
-| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | != | 0 | 135 | 136 |
-| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | == | 1 | 135 | 136 |
-| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | != | 0 | 141 | 142 |
-| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | == | 1 | 141 | 142 |
-| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | 42 | 141 | 142 |
-| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | != | 0 | 145 | 146 |
-| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | == | 1 | 145 | 146 |
-| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | 42 | 145 | 146 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | 10 | 152 | 153 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | != | 1 | 152 | 153 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | == | 0 | 152 | 153 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | != | 0 | 152 | 153 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | == | 1 | 152 | 153 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | != | 1 | 152 | 153 |
-| test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | == | 0 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | 10 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | != | 1 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | == | 0 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | != | 0 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | == | 1 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | != | 1 | 152 | 153 |
-| test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | == | 0 | 152 | 153 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | != | 1 | 160 | 162 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | == | 0 | 160 | 162 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:160:7:160:8 | ! ... | != | 0 | 160 | 162 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:160:7:160:8 | ! ... | == | 1 | 160 | 162 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:160:8:160:8 | c | != | 1 | 160 | 162 |
-| test.cpp:160:7:160:8 | ! ... | test.cpp:160:8:160:8 | c | == | 0 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:17 | ... != ... | != | 1 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:17 | ... != ... | == | 0 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:160:7:160:8 | ! ... | != | 0 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:160:7:160:8 | ! ... | == | 1 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | != | 1 | 160 | 162 |
-| test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | == | 0 | 160 | 162 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | 11 | 168 | 170 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | != | 1 | 168 | 170 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | == | 0 | 168 | 170 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:168:7:168:8 | ! ... | != | 0 | 168 | 170 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:168:7:168:8 | ! ... | == | 1 | 168 | 170 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:168:8:168:8 | b | != | 1 | 168 | 170 |
-| test.cpp:168:7:168:8 | ! ... | test.cpp:168:8:168:8 | b | == | 0 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:12 | a | < | 11 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:17 | ... > ... | != | 1 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:17 | ... > ... | == | 0 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:168:7:168:8 | ! ... | != | 0 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:168:7:168:8 | ! ... | == | 1 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | != | 1 | 168 | 170 |
-| test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | == | 0 | 168 | 170 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | != | 1 | 176 | 178 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | == | 0 | 176 | 178 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:176:7:176:8 | ! ... | != | 0 | 176 | 178 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:176:7:176:8 | ! ... | == | 1 | 176 | 178 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:176:8:176:8 | c | != | 1 | 176 | 178 |
-| test.cpp:176:7:176:8 | ! ... | test.cpp:176:8:176:8 | c | == | 0 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:16 | ... > ... | != | 1 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:16 | ... > ... | == | 0 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:176:7:176:8 | ! ... | != | 0 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:176:7:176:8 | ! ... | == | 1 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | != | 1 | 176 | 178 |
-| test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | == | 0 | 176 | 178 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | != | 0 | 182 | 184 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | != | 1 | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | == | 0 | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | == | 1 | 182 | 184 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:9 | b1 | != | 0 | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:9 | b1 | == | 1 | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | != | 0 | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | != | 1 | 182 | 184 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | == | 0 | 182 | 184 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | == | 1 | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:14:182:15 | b2 | != | 0 | 185 | 188 |
-| test.cpp:182:6:182:16 | ! ... | test.cpp:182:14:182:15 | b2 | == | 1 | 185 | 188 |
-| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | 181 | 182 |
-| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | 182 | 182 |
-| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | 181 | 182 |
-| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | 182 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 0 | 182 | 184 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 1 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 1 | 185 | 188 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | == | 0 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | == | 0 | 185 | 188 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | == | 1 | 182 | 184 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | != | 0 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | != | 0 | 185 | 188 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | == | 1 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | == | 1 | 185 | 188 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | != | 0 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | != | 0 | 185 | 188 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | != | 1 | 182 | 184 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | == | 0 | 182 | 184 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | == | 1 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | == | 1 | 185 | 188 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | != | 0 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | != | 0 | 185 | 188 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | == | 1 | 181 | 182 |
-| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | == | 1 | 185 | 188 |
-| test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | != | 0 | 181 | 182 |
-| test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | == | 1 | 181 | 182 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | != | 0 | 193 | 196 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | != | 1 | 197 | 199 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | == | 0 | 197 | 199 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | == | 1 | 193 | 196 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:9 | b1 | != | 1 | 193 | 196 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:9 | b1 | == | 0 | 193 | 196 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 0 | 197 | 199 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 1 | 193 | 196 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 0 | 193 | 196 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 1 | 197 | 199 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:14:193:15 | b2 | != | 1 | 193 | 196 |
-| test.cpp:193:6:193:16 | ! ... | test.cpp:193:14:193:15 | b2 | == | 0 | 193 | 196 |
-| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | 192 | 193 |
-| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | 193 | 193 |
-| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | 192 | 193 |
-| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | 193 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 0 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 0 | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 1 | 197 | 199 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | == | 0 | 197 | 199 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | == | 1 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | == | 1 | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | != | 1 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | != | 1 | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | == | 0 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | == | 0 | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 0 | 197 | 199 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 1 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 1 | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 0 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 0 | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 1 | 197 | 199 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | != | 1 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | != | 1 | 193 | 196 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | == | 0 | 192 | 193 |
-| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | == | 0 | 193 | 196 |
-| test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | != | 1 | 192 | 193 |
-| test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | == | 0 | 192 | 193 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:10 | sc | == | 0 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:15 | ... == ... | != | 0 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:15 | ... == ... | == | 1 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:10 | sc | == | 0 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:17 | ... == ... | != | 0 | 211 | 212 |
-| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:17 | ... == ... | == | 1 | 211 | 212 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:10 | sc | == | 0 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:15 | ... == ... | != | 0 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:15 | ... == ... | == | 1 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:10 | sc | == | 0 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:17 | ... == ... | != | 0 | 214 | 215 |
-| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:17 | ... == ... | == | 1 | 214 | 215 |
-| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:10 | ul | == | 0 | 217 | 218 |
-| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:15 | ... == ... | != | 0 | 217 | 218 |
-| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:15 | ... == ... | == | 1 | 217 | 218 |
-| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:9:220:14 | ... == ... | != | 0 | 220 | 221 |
-| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:9:220:14 | ... == ... | == | 1 | 220 | 221 |
-| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:9:223:16 | ... == ... | != | 0 | 223 | 224 |
-| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:9:223:16 | ... == ... | == | 1 | 223 | 224 |
-| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:9:226:14 | ... == ... | != | 0 | 226 | 227 |
-| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:9:226:14 | ... == ... | == | 1 | 226 | 227 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:9 | b | == | 0 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:14 | ... == ... | != | 0 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:14 | ... == ... | == | 1 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:9 | b | == | 0 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:18 | ... == ... | != | 0 | 229 | 230 |
-| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:18 | ... == ... | == | 1 | 229 | 230 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:9 | b | == | 0 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:14 | ... == ... | != | 0 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:14 | ... == ... | == | 1 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:9 | b | == | 0 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:18 | ... == ... | != | 0 | 232 | 233 |
-| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:18 | ... == ... | == | 1 | 232 | 233 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | 235 | 236 |
-| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | 235 | 236 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | 238 | 239 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | 238 | 239 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | 238 | 239 |
-| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | 238 | 239 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | 241 | 241 |
-| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | 241 | 241 |
-| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:12:241:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | 241 | 241 |
-| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | 241 | 242 |
-| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | 241 | 242 |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | test.c:10:12:11:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | test.c:7:16:9:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 0 | test.c:7:16:9:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | != | 1 | test.c:10:12:11:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 0 | test.c:10:12:11:14 | { ... } |
+| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:13 | ... > ... | == | 1 | test.c:7:16:9:14 | { ... } |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | test.c:17:17:17:21 | y |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:8 | x | < | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | test.c:17:17:17:21 | y |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | != | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | test.c:17:17:17:21 | y |
+| test.c:17:8:17:12 | ... < ... | test.c:17:8:17:12 | ... < ... | == | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:8 | x | < | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | != | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:8:17:12 | ... < ... | == | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:17 | y | >= | 2 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | != | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:8:17:21 | ... && ... | test.c:17:17:17:21 | ... > ... | == | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:17 | y | >= | 2 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | != | 0 | test.c:18:9:18:14 | ExprStmt |
+| test.c:17:17:17:21 | ... > ... | test.c:17:17:17:21 | ... > ... | == | 1 | test.c:18:9:18:14 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:2:5:2:8 | test |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:31:5:34:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:34:16:34:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:34:29:34:26 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:39:5:42:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:42:16:42:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:42:29:44:16 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:56:5:58:14 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:58:19:58:23 | y |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:58:26:66:12 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | < | 1 | test.c:62:9:62:16 | return ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:11 | x | >= | 1 | test.c:26:18:28:11 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 0 | test.c:26:18:28:11 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:2:5:2:8 | test |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:31:5:34:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:34:16:34:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:34:29:34:26 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:39:5:42:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:42:16:42:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:42:29:44:16 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:56:5:58:14 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:58:19:58:23 | y |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:58:26:66:12 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | != | 1 | test.c:62:9:62:16 | return ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:2:5:2:8 | test |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:31:5:34:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:34:16:34:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:34:29:34:26 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:39:5:42:13 | ExprStmt |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:42:16:42:21 | j |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:42:29:44:16 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:56:5:58:14 | label ...: |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:58:19:58:23 | y |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:58:26:66:12 | { ... } |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 0 | test.c:62:9:62:16 | return ... |
+| test.c:26:11:26:15 | ... > ... | test.c:26:11:26:15 | ... > ... | == | 1 | test.c:26:18:28:11 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | < | 10 | test.c:34:29:34:26 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:2:5:2:8 | test |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:39:5:42:13 | ExprStmt |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:42:5:42:26 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:42:16:42:21 | j |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:42:29:44:16 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:45:13:45:20 | if (...) ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:45:23:47:22 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:51:14:53:21 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:56:5:58:14 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:58:19:58:23 | y |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:58:26:66:12 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:16 | j | >= | 10 | test.c:62:9:62:16 | return ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 0 | test.c:34:29:34:26 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:2:5:2:8 | test |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:39:5:42:13 | ExprStmt |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:42:16:42:21 | j |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:42:29:44:16 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:56:5:58:14 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:58:19:58:23 | y |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:58:26:66:12 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | != | 1 | test.c:62:9:62:16 | return ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:2:5:2:8 | test |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:39:5:42:13 | ExprStmt |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:42:16:42:21 | j |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:42:29:44:16 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:56:5:58:14 | label ...: |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:58:19:58:23 | y |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:58:26:66:12 | { ... } |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 0 | test.c:62:9:62:16 | return ... |
+| test.c:34:16:34:21 | ... < ... | test.c:34:16:34:21 | ... < ... | == | 1 | test.c:34:29:34:26 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:42:5:42:26 | label ...: |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:42:29:44:16 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:45:13:45:20 | if (...) ... |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:45:23:47:22 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:16 | j | < | 10 | test.c:51:14:53:21 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:42:29:44:16 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | != | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:42:29:44:16 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:42:16:42:21 | ... < ... | test.c:42:16:42:21 | ... < ... | == | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | < | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:12 | z | >= | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | test.c:45:13:45:20 | if (...) ... |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | test.c:42:5:42:26 | label ...: |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | != | 1 | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | test.c:42:5:42:26 | label ...: |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 0 | test.c:51:14:53:21 | { ... } |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | test.c:45:13:45:20 | if (...) ... |
+| test.c:44:12:44:16 | ... > ... | test.c:44:12:44:16 | ... > ... | == | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:16 | y | >= | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | != | 0 | test.c:45:23:47:22 | { ... } |
+| test.c:45:16:45:20 | ... > ... | test.c:45:16:45:20 | ... > ... | == | 1 | test.c:45:23:47:22 | { ... } |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | test.c:58:19:58:23 | y |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:9 | x | != | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | test.c:58:19:58:23 | y |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | != | 1 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | test.c:58:19:58:23 | y |
+| test.c:58:9:58:14 | ... == ... | test.c:58:9:58:14 | ... == ... | == | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:9 | x | != | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | != | 1 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:9:58:14 | ... == ... | == | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:19 | y | >= | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | != | 1 | test.c:62:9:62:16 | return ... |
+| test.c:58:9:58:23 | ... \|\| ... | test.c:58:19:58:23 | ... < ... | == | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:19 | y | >= | 0 | test.c:62:9:62:16 | return ... |
+| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | != | 1 | test.c:62:9:62:16 | return ... |
+| test.c:58:19:58:23 | ... < ... | test.c:58:19:58:23 | ... < ... | == | 0 | test.c:62:9:62:16 | return ... |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | != | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:9 | x | == | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 1 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | != | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:8 | x | == | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | test.c:75:17:77:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 1 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 0 | test.c:78:12:79:14 | { ... } |
+| test.c:75:9:75:14 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | test.c:75:17:77:14 | { ... } |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:9 | x | == | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:75:9:75:14 | ... == ... | == | 1 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:8 | x | == | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | test.c:85:18:85:23 | y |
+| test.c:85:8:85:13 | ... == ... | test.c:85:8:85:13 | ... == ... | == | 1 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:9 | x | == | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:75:9:75:14 | ... == ... | == | 1 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:8 | x | == | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:8:85:13 | ... == ... | == | 1 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:18 | y | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:8:85:23 | ... && ... | test.c:85:18:85:23 | ... != ... | == | 1 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:18 | y | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | != | 0 | test.c:86:9:86:14 | ExprStmt |
+| test.c:85:18:85:23 | ... != ... | test.c:85:18:85:23 | ... != ... | == | 1 | test.c:86:9:86:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | != | 0 | test.c:94:19:96:11 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:70:5:70:9 | test2 |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:99:5:102:13 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:102:16:102:21 | j |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:102:29:102:26 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:107:5:109:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:109:19:109:23 | y |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:109:26:117:12 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:11 | x | == | 0 | test.c:113:9:113:16 | return ... |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 0 | test.c:94:19:96:11 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:70:5:70:9 | test2 |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:99:5:102:13 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:102:16:102:21 | j |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:102:29:102:26 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:107:5:109:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:109:19:109:23 | y |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:109:26:117:12 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | != | 1 | test.c:113:9:113:16 | return ... |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:70:5:70:9 | test2 |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:99:5:102:13 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:102:16:102:21 | j |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:102:29:102:26 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:107:5:109:14 | ExprStmt |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:109:19:109:23 | y |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:109:26:117:12 | { ... } |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 0 | test.c:113:9:113:16 | return ... |
+| test.c:94:11:94:16 | ... != ... | test.c:94:11:94:16 | ... != ... | == | 1 | test.c:94:19:96:11 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | < | 10 | test.c:102:29:102:26 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | test.c:70:5:70:9 | test2 |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | test.c:107:5:109:14 | ExprStmt |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | test.c:109:19:109:23 | y |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | test.c:109:26:117:12 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:16 | j | >= | 10 | test.c:113:9:113:16 | return ... |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 0 | test.c:102:29:102:26 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | test.c:70:5:70:9 | test2 |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | test.c:107:5:109:14 | ExprStmt |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | test.c:109:19:109:23 | y |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | test.c:109:26:117:12 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | != | 1 | test.c:113:9:113:16 | return ... |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | test.c:70:5:70:9 | test2 |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | test.c:107:5:109:14 | ExprStmt |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | test.c:109:19:109:23 | y |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | test.c:109:26:117:12 | { ... } |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 0 | test.c:113:9:113:16 | return ... |
+| test.c:102:16:102:21 | ... < ... | test.c:102:16:102:21 | ... < ... | == | 1 | test.c:102:29:102:26 | { ... } |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | test.c:109:19:109:23 | y |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:9 | x | != | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | test.c:109:19:109:23 | y |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | != | 1 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | test.c:109:19:109:23 | y |
+| test.c:109:9:109:14 | ... == ... | test.c:109:9:109:14 | ... == ... | == | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:9 | x | != | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | != | 1 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:9:109:14 | ... == ... | == | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:19 | y | >= | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | != | 1 | test.c:113:9:113:16 | return ... |
+| test.c:109:9:109:23 | ... \|\| ... | test.c:109:19:109:23 | ... < ... | == | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:19 | y | >= | 0 | test.c:113:9:113:16 | return ... |
+| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | != | 1 | test.c:113:9:113:16 | return ... |
+| test.c:109:19:109:23 | ... < ... | test.c:109:19:109:23 | ... < ... | == | 0 | test.c:113:9:113:16 | return ... |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | test.c:126:12:126:26 | call to test3_condition |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | test.c:126:31:128:16 | { ... } |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | test.c:131:3:131:7 | if (...) ... |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | test.c:131:10:132:16 | { ... } |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | != | 0 | test.c:134:1:123:10 | return ... |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | test.c:126:12:126:26 | call to test3_condition |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | test.c:126:31:128:16 | { ... } |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | test.c:131:3:131:7 | if (...) ... |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | test.c:131:10:132:16 | { ... } |
+| test.c:126:7:126:7 | 1 | test.c:126:7:126:7 | 1 | == | 1 | test.c:134:1:123:10 | return ... |
+| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | != | 0 | test.c:126:31:128:16 | { ... } |
+| test.c:126:7:126:28 | ... && ... | test.c:126:7:126:7 | 1 | == | 1 | test.c:126:31:128:16 | { ... } |
+| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | != | 0 | test.c:126:31:128:16 | { ... } |
+| test.c:126:7:126:28 | ... && ... | test.c:126:12:126:26 | call to test3_condition | == | 1 | test.c:126:31:128:16 | { ... } |
+| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | != | 0 | test.c:126:31:128:16 | { ... } |
+| test.c:126:12:126:26 | call to test3_condition | test.c:126:12:126:26 | call to test3_condition | == | 1 | test.c:126:31:128:16 | { ... } |
+| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | test.c:131:10:132:16 | { ... } |
+| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | == | 1 | test.c:131:10:132:16 | { ... } |
+| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | != | 1 | test.c:142:3:136:10 | return ... |
+| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | == | 0 | test.c:142:3:136:10 | return ... |
+| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | != | 0 | test.c:146:11:147:9 | { ... } |
+| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | == | 1 | test.c:146:11:147:9 | { ... } |
+| test.c:146:7:146:8 | ! ... | test.c:146:8:146:8 | x | == | 0 | test.c:146:11:147:9 | { ... } |
+| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | != | 0 | test.c:146:11:147:9 | { ... } |
+| test.c:146:8:146:8 | x | test.c:146:7:146:8 | ! ... | == | 1 | test.c:146:11:147:9 | { ... } |
+| test.c:146:8:146:8 | x | test.c:146:8:146:8 | x | == | 0 | test.c:146:11:147:9 | { ... } |
+| test.c:152:8:152:8 | p | test.c:152:8:152:8 | p | != | 0 | test.c:152:11:154:5 | { ... } |
+| test.c:152:8:152:8 | p | test.c:152:8:152:8 | p | == | 1 | test.c:152:11:154:5 | { ... } |
+| test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | != | 0 | test.c:158:12:160:5 | { ... } |
+| test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | == | 1 | test.c:158:12:160:5 | { ... } |
+| test.c:158:8:158:9 | ! ... | test.c:158:9:158:9 | p | == | 0 | test.c:158:12:160:5 | { ... } |
+| test.c:158:9:158:9 | p | test.c:158:8:158:9 | ! ... | != | 0 | test.c:158:12:160:5 | { ... } |
+| test.c:158:9:158:9 | p | test.c:158:8:158:9 | ! ... | == | 1 | test.c:158:12:160:5 | { ... } |
+| test.c:158:9:158:9 | p | test.c:158:9:158:9 | p | == | 0 | test.c:158:12:160:5 | { ... } |
+| test.c:164:8:164:8 | s | test.c:164:8:164:8 | s | != | 0 | test.c:164:11:166:5 | { ... } |
+| test.c:164:8:164:8 | s | test.c:164:8:164:8 | s | == | 1 | test.c:164:11:166:5 | { ... } |
+| test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | != | 0 | test.c:170:12:172:5 | { ... } |
+| test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | == | 1 | test.c:170:12:172:5 | { ... } |
+| test.c:170:8:170:9 | ! ... | test.c:170:9:170:9 | s | == | 0 | test.c:170:12:172:5 | { ... } |
+| test.c:170:9:170:9 | s | test.c:170:8:170:9 | ! ... | != | 0 | test.c:170:12:172:5 | { ... } |
+| test.c:170:9:170:9 | s | test.c:170:8:170:9 | ! ... | == | 1 | test.c:170:12:172:5 | { ... } |
+| test.c:170:9:170:9 | s | test.c:170:9:170:9 | s | == | 0 | test.c:170:12:172:5 | { ... } |
+| test.c:176:8:176:15 | ! ... | test.c:176:8:176:15 | ! ... | != | 0 | test.c:176:18:178:5 | { ... } |
+| test.c:176:8:176:15 | ! ... | test.c:176:8:176:15 | ! ... | == | 1 | test.c:176:18:178:5 | { ... } |
+| test.c:176:8:176:15 | ! ... | test.c:176:10:176:14 | ... < ... | == | 0 | test.c:176:18:178:5 | { ... } |
+| test.c:176:10:176:14 | ... < ... | test.c:176:8:176:15 | ! ... | != | 0 | test.c:176:18:178:5 | { ... } |
+| test.c:176:10:176:14 | ... < ... | test.c:176:8:176:15 | ! ... | == | 1 | test.c:176:18:178:5 | { ... } |
+| test.c:176:10:176:14 | ... < ... | test.c:176:10:176:14 | ... < ... | == | 0 | test.c:176:18:178:5 | { ... } |
+| test.c:182:8:182:34 | ! ... | test.c:182:8:182:34 | ! ... | != | 0 | test.c:182:37:184:5 | { ... } |
+| test.c:182:8:182:34 | ! ... | test.c:182:8:182:34 | ! ... | == | 1 | test.c:182:37:184:5 | { ... } |
+| test.c:182:8:182:34 | ! ... | test.c:182:10:182:33 | ... && ... | == | 0 | test.c:182:37:184:5 | { ... } |
+| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | != | 0 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | != | 0 | test.c:182:25:182:33 | foo |
+| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | == | 1 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:20 | ... >= ... | == | 1 | test.c:182:25:182:33 | foo |
+| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | != | 0 | test.c:182:37:184:5 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | != | 1 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | == | 0 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:8:182:34 | ! ... | == | 1 | test.c:182:37:184:5 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:20 | ... >= ... | != | 0 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:20 | ... >= ... | == | 1 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:33 | ... && ... | != | 0 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:33 | ... && ... | == | 0 | test.c:182:37:184:5 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:33 | ... < ... | != | 0 | test.c:181:25:182:20 | { ... } |
+| test.c:182:10:182:33 | ... && ... | test.c:182:25:182:33 | ... < ... | == | 1 | test.c:181:25:182:20 | { ... } |
+| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:33 | ... < ... | != | 0 | test.c:181:25:182:20 | { ... } |
+| test.c:182:25:182:33 | ... < ... | test.c:182:25:182:33 | ... < ... | == | 1 | test.c:181:25:182:20 | { ... } |
+| test.c:190:7:190:8 | ! ... | test.c:190:7:190:8 | ! ... | != | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:190:7:190:8 | ! ... | test.c:190:7:190:8 | ! ... | == | 1 | test.c:190:11:192:3 | { ... } |
+| test.c:190:7:190:8 | ! ... | test.c:190:8:190:8 | c | == | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:190:8:190:8 | c | test.c:190:7:190:8 | ! ... | != | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:190:8:190:8 | c | test.c:190:7:190:8 | ! ... | == | 1 | test.c:190:11:192:3 | { ... } |
+| test.c:190:8:190:8 | c | test.c:190:8:190:8 | c | == | 0 | test.c:190:11:192:3 | { ... } |
+| test.c:198:7:198:8 | ! ... | test.c:196:11:196:11 | a | < | 11 | test.c:198:11:200:3 | { ... } |
+| test.c:198:7:198:8 | ! ... | test.c:198:7:198:8 | ! ... | != | 0 | test.c:198:11:200:3 | { ... } |
+| test.c:198:7:198:8 | ! ... | test.c:198:7:198:8 | ! ... | == | 1 | test.c:198:11:200:3 | { ... } |
+| test.c:198:7:198:8 | ! ... | test.c:198:8:198:8 | b | == | 0 | test.c:198:11:200:3 | { ... } |
+| test.c:198:8:198:8 | b | test.c:196:11:196:11 | a | < | 11 | test.c:198:11:200:3 | { ... } |
+| test.c:198:8:198:8 | b | test.c:198:7:198:8 | ! ... | != | 0 | test.c:198:11:200:3 | { ... } |
+| test.c:198:8:198:8 | b | test.c:198:7:198:8 | ! ... | == | 1 | test.c:198:11:200:3 | { ... } |
+| test.c:198:8:198:8 | b | test.c:198:8:198:8 | b | == | 0 | test.c:198:11:200:3 | { ... } |
+| test.c:206:7:206:8 | ! ... | test.c:206:7:206:8 | ! ... | != | 0 | test.c:206:11:208:3 | { ... } |
+| test.c:206:7:206:8 | ! ... | test.c:206:7:206:8 | ! ... | == | 1 | test.c:206:11:208:3 | { ... } |
+| test.c:206:7:206:8 | ! ... | test.c:206:8:206:8 | c | == | 0 | test.c:206:11:208:3 | { ... } |
+| test.c:206:8:206:8 | c | test.c:206:7:206:8 | ! ... | != | 0 | test.c:206:11:208:3 | { ... } |
+| test.c:206:8:206:8 | c | test.c:206:7:206:8 | ! ... | == | 1 | test.c:206:11:208:3 | { ... } |
+| test.c:206:8:206:8 | c | test.c:206:8:206:8 | c | == | 0 | test.c:206:11:208:3 | { ... } |
+| test.c:215:6:215:18 | call to __builtin_expect | test.c:215:6:215:18 | call to __builtin_expect | != | 0 | test.c:215:21:217:5 | { ... } |
+| test.c:215:6:215:18 | call to __builtin_expect | test.c:215:6:215:18 | call to __builtin_expect | == | 1 | test.c:215:21:217:5 | { ... } |
+| test.c:215:6:215:18 | call to __builtin_expect | test.c:215:13:215:17 | ... > ... | != | 0 | test.c:215:21:217:5 | { ... } |
+| test.c:219:9:219:22 | call to __builtin_expect | test.c:219:9:219:22 | call to __builtin_expect | != | 0 | test.c:219:25:221:5 | { ... } |
+| test.c:219:9:219:22 | call to __builtin_expect | test.c:219:9:219:22 | call to __builtin_expect | == | 1 | test.c:219:25:221:5 | { ... } |
+| test.c:219:9:219:22 | call to __builtin_expect | test.c:219:16:219:16 | a | >= | 43 | test.c:219:25:221:5 | { ... } |
+| test.c:219:9:219:22 | call to __builtin_expect | test.c:219:16:219:21 | ... > ... | != | 0 | test.c:219:25:221:5 | { ... } |
+| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | test.cpp:19:5:19:14 | ExprStmt |
+| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | == | 1 | test.cpp:19:5:19:14 | ExprStmt |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | test.cpp:34:1:34:1 | return ... |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | test.cpp:31:16:32:21 | { ... } |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 0 | test.cpp:31:16:32:21 | { ... } |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | != | 1 | test.cpp:34:1:34:1 | return ... |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 0 | test.cpp:34:1:34:1 | return ... |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | test.cpp:30:6:30:16 | doSomething |
+| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:13 | ... == ... | == | 1 | test.cpp:31:16:32:21 | { ... } |
+| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | test.cpp:43:9:45:23 | { ... } |
+| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 1 | test.cpp:43:9:45:23 | { ... } |
+| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 0 | test.cpp:62:5:64:12 | case ...: |
+| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 1 | test.cpp:65:5:66:10 | case ...: |
+| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 11 | test.cpp:75:5:77:12 | case ...: |
+| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 21 | test.cpp:78:5:79:10 | case ...: |
+| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 0 | test.cpp:75:5:77:12 | case ...: |
+| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 11 | test.cpp:78:5:79:10 | case ...: |
+| test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | != | 0 | test.cpp:93:9:94:7 | { ... } |
+| test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | == | 1 | test.cpp:93:9:94:7 | { ... } |
+| test.cpp:99:6:99:6 | f | test.cpp:99:6:99:6 | f | != | 0 | test.cpp:99:9:100:7 | { ... } |
+| test.cpp:99:6:99:6 | f | test.cpp:99:6:99:6 | f | == | 1 | test.cpp:99:9:100:7 | { ... } |
+| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:14 | ... != ... | != | 0 | test.cpp:105:17:106:7 | { ... } |
+| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:6:105:14 | ... != ... | == | 1 | test.cpp:105:17:106:7 | { ... } |
+| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | != | 0 | test.cpp:111:17:112:7 | { ... } |
+| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:14 | ... != ... | == | 1 | test.cpp:111:17:112:7 | { ... } |
+| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | test.cpp:123:5:125:20 | { ... } |
+| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | == | 1 | test.cpp:123:5:125:20 | { ... } |
+| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | == | 1 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | != | 0 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | == | 1 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:13:125:20 | ! ... | test.cpp:125:14:125:17 | call to safe | != | 1 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:13:125:20 | ! ... | test.cpp:125:14:125:17 | call to safe | == | 0 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:14:125:17 | call to safe | test.cpp:125:13:125:20 | ! ... | != | 0 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:14:125:17 | call to safe | test.cpp:125:13:125:20 | ! ... | == | 1 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | != | 1 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | == | 0 | test.cpp:125:23:125:29 | return ... |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | != | 0 | test.cpp:131:40:132:9 | { ... } |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | == | 1 | test.cpp:131:40:132:9 | { ... } |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | != | 0 | test.cpp:135:40:136:9 | { ... } |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | == | 1 | test.cpp:135:40:136:9 | { ... } |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | != | 0 | test.cpp:141:36:142:9 | { ... } |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | == | 1 | test.cpp:141:36:142:9 | { ... } |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | 42 | test.cpp:141:36:142:9 | { ... } |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | != | 0 | test.cpp:145:36:146:9 | { ... } |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | == | 1 | test.cpp:145:36:146:9 | { ... } |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | 42 | test.cpp:145:36:146:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:8 | a | >= | 10 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | != | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:151:8:151:13 | ... < ... | == | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | != | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:152:7:152:8 | ! ... | == | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | != | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:7:152:8 | ! ... | test.cpp:152:8:152:8 | b | == | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:8 | a | >= | 10 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | != | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:151:8:151:13 | ... < ... | == | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | != | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:152:7:152:8 | ! ... | == | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | != | 1 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:152:8:152:8 | b | test.cpp:152:8:152:8 | b | == | 0 | test.cpp:152:11:153:9 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | != | 1 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:158:12:158:17 | ... != ... | == | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:160:7:160:8 | ! ... | != | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:160:7:160:8 | ! ... | == | 1 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:160:8:160:8 | c | != | 1 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:7:160:8 | ! ... | test.cpp:160:8:160:8 | c | == | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:17 | ... != ... | != | 1 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:158:12:158:17 | ... != ... | == | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:160:7:160:8 | ! ... | != | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:160:7:160:8 | ! ... | == | 1 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | != | 1 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:160:8:160:8 | c | test.cpp:160:8:160:8 | c | == | 0 | test.cpp:160:11:162:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:12 | a | < | 11 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | != | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:166:12:166:17 | ... > ... | == | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:168:7:168:8 | ! ... | != | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:168:7:168:8 | ! ... | == | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:168:8:168:8 | b | != | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:7:168:8 | ! ... | test.cpp:168:8:168:8 | b | == | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:12 | a | < | 11 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:17 | ... > ... | != | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:166:12:166:17 | ... > ... | == | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:168:7:168:8 | ! ... | != | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:168:7:168:8 | ! ... | == | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | != | 1 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:168:8:168:8 | b | test.cpp:168:8:168:8 | b | == | 0 | test.cpp:168:11:170:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | != | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:174:12:174:16 | ... > ... | == | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:176:7:176:8 | ! ... | != | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:176:7:176:8 | ! ... | == | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:176:8:176:8 | c | != | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:7:176:8 | ! ... | test.cpp:176:8:176:8 | c | == | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:16 | ... > ... | != | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:174:12:174:16 | ... > ... | == | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:176:7:176:8 | ! ... | != | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:176:7:176:8 | ! ... | == | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | != | 1 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:176:8:176:8 | c | test.cpp:176:8:176:8 | c | == | 0 | test.cpp:176:11:178:3 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | != | 0 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | != | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | == | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:6:182:16 | ! ... | == | 1 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | != | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | != | 1 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | == | 0 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:8:182:15 | ... && ... | == | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:6:182:16 | ! ... | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:182:14:182:15 | b2 |
+| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:9 | b1 | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:182:14:182:15 | b2 |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 0 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 1 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | != | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | == | 0 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | == | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:6:182:16 | ! ... | == | 1 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | != | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:9 | b1 | == | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | != | 0 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | != | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | != | 1 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | == | 0 | test.cpp:182:19:184:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | == | 1 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:8:182:15 | ... && ... | == | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:8:182:15 | ... && ... | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:185:10:188:7 | { ... } |
+| test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | != | 0 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:182:14:182:15 | b2 | test.cpp:182:14:182:15 | b2 | == | 1 | test.cpp:181:41:182:9 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | != | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | != | 1 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | == | 0 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:6:193:16 | ! ... | == | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 0 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 1 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:6:193:16 | ! ... | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:193:14:193:15 | b2 |
+| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:9 | b1 | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:193:14:193:15 | b2 |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 0 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | != | 1 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | == | 0 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | == | 1 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:6:193:16 | ! ... | == | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | != | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:9 | b1 | == | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 0 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 1 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | != | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 0 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:8:193:15 | ... \|\| ... | == | 1 | test.cpp:197:10:199:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:8:193:15 | ... \|\| ... | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:193:19:196:7 | { ... } |
+| test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | != | 1 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:193:14:193:15 | b2 | test.cpp:193:14:193:15 | b2 | == | 0 | test.cpp:192:40:193:9 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:10 | sc | == | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:15 | ... == ... | != | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:211:9:211:15 | ... == ... | == | 1 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:10 | sc | == | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:17 | ... == ... | != | 0 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:211:9:211:15 | ... == ... | test.cpp:214:9:214:17 | ... == ... | == | 1 | test.cpp:211:18:212:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:10 | sc | == | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:15 | ... == ... | != | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:211:9:211:15 | ... == ... | == | 1 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:10 | sc | == | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:17 | ... == ... | != | 0 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:214:9:214:17 | ... == ... | test.cpp:214:9:214:17 | ... == ... | == | 1 | test.cpp:214:20:215:13 | { ... } |
+| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:10 | ul | == | 0 | test.cpp:217:18:218:13 | { ... } |
+| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:15 | ... == ... | != | 0 | test.cpp:217:18:218:13 | { ... } |
+| test.cpp:217:9:217:15 | ... == ... | test.cpp:217:9:217:15 | ... == ... | == | 1 | test.cpp:217:18:218:13 | { ... } |
+| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:9:220:14 | ... == ... | != | 0 | test.cpp:220:17:221:13 | { ... } |
+| test.cpp:220:9:220:14 | ... == ... | test.cpp:220:9:220:14 | ... == ... | == | 1 | test.cpp:220:17:221:13 | { ... } |
+| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:9:223:16 | ... == ... | != | 0 | test.cpp:223:19:224:13 | { ... } |
+| test.cpp:223:9:223:16 | ... == ... | test.cpp:223:9:223:16 | ... == ... | == | 1 | test.cpp:223:19:224:13 | { ... } |
+| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:9:226:14 | ... == ... | != | 0 | test.cpp:226:17:227:13 | { ... } |
+| test.cpp:226:9:226:14 | ... == ... | test.cpp:226:9:226:14 | ... == ... | == | 1 | test.cpp:226:17:227:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:9 | b | == | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:14 | ... == ... | != | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:229:9:229:14 | ... == ... | == | 1 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:9 | b | == | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:18 | ... == ... | != | 0 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:229:9:229:14 | ... == ... | test.cpp:232:9:232:18 | ... == ... | == | 1 | test.cpp:229:17:230:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:9 | b | == | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:14 | ... == ... | != | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:229:9:229:14 | ... == ... | == | 1 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:9 | b | == | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:18 | ... == ... | != | 0 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:232:9:232:18 | ... == ... | test.cpp:232:9:232:18 | ... == ... | == | 1 | test.cpp:232:21:233:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:235:9:235:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:235:20:236:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:238:9:238:17 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:238:20:239:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:22:241:30 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:17 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:9:241:30 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:9:241:43 | ... && ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:238:9:238:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:35:241:43 | ms |
+| test.cpp:241:22:241:30 | ... == ... | test.cpp:241:22:241:30 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:9:235:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:9:235:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:235:12:235:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:9:241:17 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:9:241:17 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:12:241:12 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:35:241:43 | ... == ... | != | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:35:241:43 | ... == ... | == | 1 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:241:35:241:43 | ... == ... | test.cpp:241:38:241:38 | i | == | 0 | test.cpp:241:46:242:13 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:6:247:18 | ... == ... | != | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:6:247:18 | ... == ... | != | 1 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:6:247:18 | ... == ... | == | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:6:247:18 | ... == ... | == | 1 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:7:247:12 | ... == ... | != | 0 | test.cpp:249:10:251:3 | { ... } |
+| test.cpp:247:6:247:18 | ... == ... | test.cpp:247:7:247:12 | ... == ... | == | 0 | test.cpp:247:21:249:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:6:253:18 | ... != ... | != | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:6:253:18 | ... != ... | != | 1 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:6:253:18 | ... != ... | == | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:6:253:18 | ... != ... | == | 1 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:7:253:12 | ... == ... | != | 0 | test.cpp:253:21:255:3 | { ... } |
+| test.cpp:253:6:253:18 | ... != ... | test.cpp:253:7:253:12 | ... == ... | == | 0 | test.cpp:255:10:257:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:6:260:18 | ... == ... | != | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:6:260:18 | ... == ... | != | 1 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:6:260:18 | ... == ... | == | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:6:260:18 | ... == ... | == | 1 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:7:260:12 | ... != ... | != | 0 | test.cpp:262:10:264:3 | { ... } |
+| test.cpp:260:6:260:18 | ... == ... | test.cpp:260:7:260:12 | ... != ... | == | 0 | test.cpp:260:21:262:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:6:266:18 | ... != ... | != | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:6:266:18 | ... != ... | != | 1 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:6:266:18 | ... != ... | == | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:6:266:18 | ... != ... | == | 1 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:7:266:12 | ... != ... | != | 0 | test.cpp:266:21:268:3 | { ... } |
+| test.cpp:266:6:266:18 | ... != ... | test.cpp:266:7:266:12 | ... != ... | == | 0 | test.cpp:268:10:270:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:6:273:17 | ... == ... | != | 0 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:6:273:17 | ... == ... | != | 1 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:6:273:17 | ... == ... | == | 0 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:6:273:17 | ... == ... | == | 1 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:7:273:11 | ... < ... | != | 0 | test.cpp:275:10:277:3 | { ... } |
+| test.cpp:273:6:273:17 | ... == ... | test.cpp:273:7:273:11 | ... < ... | == | 0 | test.cpp:273:20:275:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:6:279:17 | ... != ... | != | 0 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:6:279:17 | ... != ... | != | 1 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:6:279:17 | ... != ... | == | 0 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:6:279:17 | ... != ... | == | 1 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:7:279:11 | ... < ... | != | 0 | test.cpp:279:20:281:3 | { ... } |
+| test.cpp:279:6:279:17 | ... != ... | test.cpp:279:7:279:11 | ... < ... | == | 0 | test.cpp:281:10:283:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:6:287:19 | ... == ... | != | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:6:287:19 | ... == ... | != | 1 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:6:287:19 | ... == ... | == | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:6:287:19 | ... == ... | == | 1 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:7 | a | != | 42 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:7 | a | == | 42 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:13 | ... == ... | != | 0 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:287:7:287:13 | ... == ... | == | 0 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:293:7:293:7 | a | != | 42 | test.cpp:287:22:289:3 | { ... } |
+| test.cpp:287:6:287:19 | ... == ... | test.cpp:293:7:293:7 | a | == | 42 | test.cpp:289:10:291:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:287:7:287:7 | a | != | 42 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:287:7:287:7 | a | == | 42 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:6:293:19 | ... != ... | != | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:6:293:19 | ... != ... | != | 1 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:6:293:19 | ... != ... | == | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:6:293:19 | ... != ... | == | 1 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:7 | a | != | 42 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:7 | a | == | 42 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:13 | ... == ... | != | 0 | test.cpp:293:22:295:3 | { ... } |
+| test.cpp:293:6:293:19 | ... != ... | test.cpp:293:7:293:13 | ... == ... | == | 0 | test.cpp:295:10:297:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:6:300:19 | ... == ... | != | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:6:300:19 | ... == ... | != | 1 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:6:300:19 | ... == ... | == | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:6:300:19 | ... == ... | == | 1 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:7 | a | != | 42 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:7 | a | == | 42 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:13 | ... != ... | != | 0 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:300:7:300:13 | ... != ... | == | 0 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:306:7:306:7 | a | != | 42 | test.cpp:302:10:304:3 | { ... } |
+| test.cpp:300:6:300:19 | ... == ... | test.cpp:306:7:306:7 | a | == | 42 | test.cpp:300:22:302:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:300:7:300:7 | a | != | 42 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:300:7:300:7 | a | == | 42 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:6:306:19 | ... != ... | != | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:6:306:19 | ... != ... | != | 1 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:6:306:19 | ... != ... | == | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:6:306:19 | ... != ... | == | 1 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:7 | a | != | 42 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:7 | a | == | 42 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:13 | ... != ... | != | 0 | test.cpp:306:22:308:3 | { ... } |
+| test.cpp:306:6:306:19 | ... != ... | test.cpp:306:7:306:13 | ... != ... | == | 0 | test.cpp:308:10:310:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:6:312:18 | ... == ... | != | 0 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:6:312:18 | ... == ... | != | 1 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:6:312:18 | ... == ... | == | 0 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:6:312:18 | ... == ... | == | 1 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:7 | a | < | 42 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:7 | a | >= | 42 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:12 | ... < ... | != | 0 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:312:7:312:12 | ... < ... | == | 0 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:318:7:318:7 | a | < | 42 | test.cpp:314:10:316:3 | { ... } |
+| test.cpp:312:6:312:18 | ... == ... | test.cpp:318:7:318:7 | a | >= | 42 | test.cpp:312:21:314:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:312:7:312:7 | a | < | 42 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:312:7:312:7 | a | >= | 42 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:6:318:18 | ... != ... | != | 0 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:6:318:18 | ... != ... | != | 1 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:6:318:18 | ... != ... | == | 0 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:6:318:18 | ... != ... | == | 1 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:7 | a | < | 42 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:7 | a | >= | 42 | test.cpp:320:10:322:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:12 | ... < ... | != | 0 | test.cpp:318:21:320:3 | { ... } |
+| test.cpp:318:6:318:18 | ... != ... | test.cpp:318:7:318:12 | ... < ... | == | 0 | test.cpp:320:10:322:3 | { ... } |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.ql b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.ql
index 59f8a399c6d..975c1c1ac20 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.ql
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.ql
@@ -8,31 +8,23 @@ import cpp
import semmle.code.cpp.controlflow.Guards
query predicate binary(
- GuardCondition guard, Expr left, string op, Expr right, int k, int start, int end
+ GuardCondition guard, Expr left, string op, Expr right, int k, BasicBlock block
) {
- exists(BasicBlock block |
- guard.ensuresLt(left, right, k, block, true) and op = "<"
- or
- guard.ensuresLt(left, right, k, block, false) and op = ">="
- or
- guard.ensuresEq(left, right, k, block, true) and op = "=="
- or
- guard.ensuresEq(left, right, k, block, false) and op = "!="
- |
- block.hasLocationInfo(_, start, _, end, _)
- )
+ guard.ensuresLt(left, right, k, block, true) and op = "<"
+ or
+ guard.ensuresLt(left, right, k, block, false) and op = ">="
+ or
+ guard.ensuresEq(left, right, k, block, true) and op = "=="
+ or
+ guard.ensuresEq(left, right, k, block, false) and op = "!="
}
-query predicate unary(GuardCondition guard, Expr left, string op, int k, int start, int end) {
- exists(BasicBlock block |
- guard.ensuresLt(left, k, block, true) and op = "<"
- or
- guard.ensuresLt(left, k, block, false) and op = ">="
- or
- guard.ensuresEq(left, k, block, true) and op = "=="
- or
- guard.ensuresEq(left, k, block, false) and op = "!="
- |
- block.hasLocationInfo(_, start, _, end, _)
- )
+query predicate unary(GuardCondition guard, Expr left, string op, int k, BasicBlock block) {
+ guard.ensuresLt(left, k, block, true) and op = "<"
+ or
+ guard.ensuresLt(left, k, block, false) and op = ">="
+ or
+ guard.ensuresEq(left, k, block, true) and op = "=="
+ or
+ guard.ensuresEq(left, k, block, false) and op = "!="
}
diff --git a/cpp/ql/test/library-tests/controlflow/guards/test.c b/cpp/ql/test/library-tests/controlflow/guards/test.c
index d453b0d643c..beb3d8d60f5 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/test.c
+++ b/cpp/ql/test/library-tests/controlflow/guards/test.c
@@ -206,4 +206,17 @@ void test14(int a, int b) {
if (!c) {
}
-}
\ No newline at end of file
+}
+
+# define likely(x) __builtin_expect(!!(x), 1)
+
+void test15(int a, int b)
+{
+ if (likely(a > b)) {
+
+ }
+
+ if (likely(a > 42)) {
+
+ }
+}
diff --git a/cpp/ql/test/library-tests/controlflow/guards/test.cpp b/cpp/ql/test/library-tests/controlflow/guards/test.cpp
index e2dd5477b54..2ef61734e69 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/test.cpp
+++ b/cpp/ql/test/library-tests/controlflow/guards/test.cpp
@@ -242,3 +242,82 @@ int test_types(signed char sc, unsigned long ul, float f, double d, bool b, Myst
ctr++;
}
}
+
+void test_cmp_implies(int a, int b) {
+ if((a == b) == 0) {
+
+ } else {
+
+ }
+
+ if((a == b) != 0) {
+
+ } else {
+
+ }
+
+
+ if((a != b) == 0) {
+
+ } else {
+
+ }
+
+ if((a != b) != 0) {
+
+ } else {
+
+ }
+
+
+ if((a < b) == 0) {
+
+ } else {
+
+ }
+
+ if((a < b) != 0) {
+
+ } else {
+
+ }
+}
+
+void test_cmp_implies_unary(int a) {
+ if((a == 42) == 0) {
+
+ } else {
+
+ }
+
+ if((a == 42) != 0) {
+
+ } else {
+
+ }
+
+
+ if((a != 42) == 0) {
+
+ } else {
+
+ }
+
+ if((a != 42) != 0) {
+
+ } else {
+
+ }
+
+ if((a < 42) == 0) {
+
+ } else {
+
+ }
+
+ if((a < 42) != 0) {
+
+ } else {
+
+ }
+}
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp
index 105212ccca6..63528d712c0 100644
--- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp
+++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/dispatch.cpp
@@ -8,7 +8,7 @@ struct Top {
virtual void isSink(int x) { }
virtual int notSource1() { return source(); }
virtual int notSource2() { return source(); }
- virtual void notSink(int x) { sink(x); } // $ SPURIOUS: ast,ir=37:19 ast,ir=45:18
+ virtual void notSink(int x) { sink(x); } // $ SPURIOUS: ast=37:19 ast=45:18
};
// This class has the correct behavior for just the functions ending in 2.
@@ -32,16 +32,16 @@ void VirtualDispatch(Bottom *bottomPtr, Bottom &bottomRef) { // $ ast-def=bottom
sink(topPtr->isSource2()); // $ ir MISSING: ast
topPtr->isSink(source()); // causing a MISSING for ast
- sink(topPtr->notSource1()); // $ SPURIOUS: ast,ir
- sink(topPtr->notSource2()); // $ SPURIOUS: ast,ir
+ sink(topPtr->notSource1()); // $ SPURIOUS: ast
+ sink(topPtr->notSource2()); // $ SPURIOUS: ast
topPtr->notSink(source()); // causing SPURIOUS for ast,ir
sink(topRef.isSource1()); // $ ir MISSING: ast
sink(topRef.isSource2()); // $ ir MISSING: ast
topRef.isSink(source()); // causing a MISSING for ast
- sink(topRef.notSource1()); // $ SPURIOUS: ast,ir
- sink(topRef.notSource2()); // $ SPURIOUS: ast,ir
+ sink(topRef.notSource1()); // $ SPURIOUS: ast
+ sink(topRef.notSource2()); // $ SPURIOUS: ast
topRef.notSink(source()); // causing SPURIOUS for ast,ir
}
@@ -126,8 +126,8 @@ namespace virtual_inheritance {
// get flow from a `Middle` value to the call qualifier.
Top *topPtr = bottomPtr, &topRef = bottomRef;
- sink(topPtr->isSource()); // $ MISSING: ast,ir
- sink(topRef.isSource()); // $ MISSING: ast,ir
+ sink(topPtr->isSource()); // $ ir MISSING: ast
+ sink(topRef.isSource()); // $ ir MISSING: ast
}
}
diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected
index 6e0b03be9c6..8c009241734 100644
--- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected
+++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected
@@ -169,10 +169,6 @@ irFlow
| clang.cpp:50:35:50:40 | call to source | clang.cpp:53:17:53:26 | *stackArray |
| clang.cpp:51:19:51:24 | call to source | clang.cpp:53:17:53:26 | *stackArray |
| clang.cpp:57:21:57:28 | call to source | clang.cpp:59:8:59:8 | d |
-| dispatch.cpp:9:37:9:42 | call to source | dispatch.cpp:35:16:35:25 | call to notSource1 |
-| dispatch.cpp:9:37:9:42 | call to source | dispatch.cpp:43:15:43:24 | call to notSource1 |
-| dispatch.cpp:10:37:10:42 | call to source | dispatch.cpp:36:16:36:25 | call to notSource2 |
-| dispatch.cpp:10:37:10:42 | call to source | dispatch.cpp:44:15:44:24 | call to notSource2 |
| dispatch.cpp:16:37:16:42 | call to source | dispatch.cpp:32:16:32:24 | call to isSource2 |
| dispatch.cpp:16:37:16:42 | call to source | dispatch.cpp:40:15:40:23 | call to isSource2 |
| dispatch.cpp:22:37:22:42 | call to source | dispatch.cpp:31:16:31:24 | call to isSource1 |
@@ -180,13 +176,13 @@ irFlow
| dispatch.cpp:22:37:22:42 | call to source | dispatch.cpp:55:22:55:30 | call to isSource1 |
| dispatch.cpp:22:37:22:42 | call to source | dispatch.cpp:58:28:58:36 | call to isSource1 |
| dispatch.cpp:33:18:33:23 | call to source | dispatch.cpp:23:38:23:38 | x |
-| dispatch.cpp:37:19:37:24 | call to source | dispatch.cpp:11:38:11:38 | x |
| dispatch.cpp:41:17:41:22 | call to source | dispatch.cpp:23:38:23:38 | x |
-| dispatch.cpp:45:18:45:23 | call to source | dispatch.cpp:11:38:11:38 | x |
| dispatch.cpp:69:15:69:20 | call to source | dispatch.cpp:23:38:23:38 | x |
| dispatch.cpp:73:14:73:19 | call to source | dispatch.cpp:23:38:23:38 | x |
| dispatch.cpp:81:13:81:18 | call to source | dispatch.cpp:23:38:23:38 | x |
| dispatch.cpp:107:17:107:22 | call to source | dispatch.cpp:96:8:96:8 | x |
+| dispatch.cpp:117:38:117:43 | call to source | dispatch.cpp:129:18:129:25 | call to isSource |
+| dispatch.cpp:117:38:117:43 | call to source | dispatch.cpp:130:17:130:24 | call to isSource |
| dispatch.cpp:140:8:140:13 | call to source | dispatch.cpp:96:8:96:8 | x |
| dispatch.cpp:144:8:144:13 | call to source | dispatch.cpp:96:8:96:8 | x |
| flowOut.cpp:5:16:5:21 | call to source | flowOut.cpp:31:9:31:9 | x |
diff --git a/cpp/ql/test/library-tests/dataflow/dispatch/test.cpp b/cpp/ql/test/library-tests/dataflow/dispatch/test.cpp
new file mode 100644
index 00000000000..f243b76ad14
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/dispatch/test.cpp
@@ -0,0 +1,127 @@
+struct Base {
+ void f();
+ virtual void virtual_f();
+};
+
+struct Derived : Base {
+ void f();
+ void virtual_f();
+};
+
+void test_simple() {
+ Base b;
+ b.f(); // $ target=2
+ b.virtual_f(); // $ target=3
+
+ Derived d;
+ d.f(); // $ target=7
+ d.virtual_f(); // $ target=8
+
+ Base* b_ptr = &d;
+ b_ptr->f(); // $ target=2
+ b_ptr->virtual_f(); // $ target=8
+
+ Base& b_ref = d;
+ b_ref.f(); // $ target=2
+ b_ref.virtual_f(); // $ target=8
+
+ Base* b_null = nullptr;
+ b_null->f(); // $ target=2
+ b_null->virtual_f(); // $ target=3
+
+ Base* base_is_derived = new Derived();
+ base_is_derived->f(); // $ target=2
+ base_is_derived->virtual_f(); // $ target=8
+
+ Base* base_is_base = new Base();
+ base_is_base->f(); // $ target=2
+ base_is_base->virtual_f(); // $ target=3
+
+ Derived* derived_is_derived = new Derived();
+ derived_is_derived->f(); // $ target=7
+ derived_is_derived->virtual_f(); // $ target=8
+
+ Base& b_ref2 = b;
+ b_ref2 = d;
+ b_ref2.f(); // $ target=2
+ b_ref2.virtual_f(); // $ target=3
+}
+
+struct S {
+ Base* b1;
+ Base* b2;
+};
+
+void test_fields() {
+ S s;
+
+ s.b1 = new Base();
+ s.b2 = new Derived();
+
+ s.b1->virtual_f(); // $ target=3
+ s.b2->virtual_f(); // $ target=8
+
+ s.b1 = new Derived();
+ s.b2 = new Base();
+ s.b1->virtual_f(); // $ target=8 SPURIOUS: target=3 // type-tracking has no 'clearsContent' feature and C/C++ doesn't have field-based SSA
+ s.b2->virtual_f(); // $ target=3 SPURIOUS: target=8 // type-tracking has no 'clearsContent' feature and C/C++ doesn't have field-based SSA
+}
+
+Base* getDerived() {
+ return new Derived();
+}
+
+void test_getDerived() {
+ Base* b = getDerived();
+ b->virtual_f(); // $ target=8
+
+ Derived d = *(Derived*)getDerived();
+ d.virtual_f(); // $ target=8
+}
+
+void write_to_arg(Base* b) {
+ *b = Derived();
+}
+
+void write_to_arg_2(Base** b) {
+ Derived* d = new Derived();
+ *b = d;
+}
+
+void test_write_to_arg() {
+ {
+ Base b;
+ write_to_arg(&b);
+ b.virtual_f(); // $ SPURIOUS: target=3 MISSING: target=8 // missing flow through the copy-constructor in write_to_arg
+ }
+
+ {
+ Base* b;
+ write_to_arg_2(&b);
+ b->virtual_f(); // $ target=8
+ }
+}
+
+Base* global_derived;
+
+void set_global_to_derived() {
+ global_derived = new Derived();
+}
+
+void read_global() {
+ global_derived->virtual_f(); // $ target=8
+}
+
+Base* global_base_or_derived;
+
+void set_global_base_or_derived_1() {
+ global_base_or_derived = new Base();
+}
+
+void set_global_base_or_derived_2() {
+ global_base_or_derived = new Derived();
+}
+
+void read_global_base_or_derived() {
+ global_base_or_derived->virtual_f(); // $ target=3 target=8
+}
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/dispatch/test.expected b/cpp/ql/test/library-tests/dataflow/dispatch/test.expected
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/cpp/ql/test/library-tests/dataflow/dispatch/test.ql b/cpp/ql/test/library-tests/dataflow/dispatch/test.ql
new file mode 100644
index 00000000000..de16d6da1ef
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/dispatch/test.ql
@@ -0,0 +1,22 @@
+import cpp
+import utils.test.InlineExpectationsTest
+import semmle.code.cpp.ir.dataflow.internal.DataFlowDispatch
+import semmle.code.cpp.ir.dataflow.internal.DataFlowPrivate
+
+module ResolveDispatchTest implements TestSig {
+ string getARelevantTag() { result = "target" }
+
+ predicate hasActualResult(Location location, string element, string tag, string value) {
+ exists(DataFlowCall call, SourceCallable callable, MemberFunction mf |
+ mf = callable.asSourceCallable() and
+ not mf.isCompilerGenerated() and
+ callable = viableCallable(call) and
+ location = call.getLocation() and
+ element = call.toString() and
+ tag = "target" and
+ value = callable.getLocation().getStartLine().toString()
+ )
+ }
+}
+
+import MakeTest
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected
index aeb2362ef33..e8dc5453df3 100644
--- a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected
+++ b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected
@@ -503,6 +503,7 @@
| Dubious signature "(CURLU *,CURLUPart,const char *,unsigned int)" in summary model. |
| Dubious signature "(CURLU *,const char *)" in summary model. |
| Dubious signature "(CURLU *,const char *,char **,OperationConfig *)" in summary model. |
+| Dubious signature "(ComPtr &&)" in summary model. |
| Dubious signature "(CompoundDictionary *,const PreparedDictionary *)" in summary model. |
| Dubious signature "(Curl_cfilter *)" in summary model. |
| Dubious signature "(Curl_cfilter **,Curl_easy *)" in summary model. |
@@ -2130,6 +2131,7 @@
| Dubious signature "(RAND_POOL *,unsigned char *)" in summary model. |
| Dubious signature "(RAND_POOL *,unsigned int)" in summary model. |
| Dubious signature "(RECORD_LAYER *,SSL_CONNECTION *)" in summary model. |
+| Dubious signature "(REFIID,void **)" in summary model. |
| Dubious signature "(RIO_NOTIFIER *)" in summary model. |
| Dubious signature "(RIPEMD160_CTX *,const unsigned char *)" in summary model. |
| Dubious signature "(RIPEMD160_CTX *,const void *,size_t)" in summary model. |
@@ -2431,6 +2433,8 @@
| Dubious signature "(Strent *)" in summary model. |
| Dubious signature "(Strtab *,const char *,size_t)" in summary model. |
| Dubious signature "(Strtab *,size_t *)" in summary model. |
+| Dubious signature "(T *)" in summary model. |
+| Dubious signature "(T **)" in summary model. |
| Dubious signature "(TLS_FEATURE *)" in summary model. |
| Dubious signature "(TLS_RL_RECORD *,const unsigned char *)" in summary model. |
| Dubious signature "(TS_ACCURACY *)" in summary model. |
@@ -3155,6 +3159,7 @@
| Dubious signature "(const CT_POLICY_EVAL_CTX *)" in summary model. |
| Dubious signature "(const CURLU *)" in summary model. |
| Dubious signature "(const CURLU *,CURLUPart,char **,unsigned int)" in summary model. |
+| Dubious signature "(const ComPtr &)" in summary model. |
| Dubious signature "(const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *)" in summary model. |
| Dubious signature "(const Curl_easy *,const connectdata *,int)" in summary model. |
| Dubious signature "(const DH *)" in summary model. |
diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp
index e26416a0e68..5d6b052448a 100644
--- a/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp
+++ b/cpp/ql/test/library-tests/dataflow/taint-tests/atl.cpp
@@ -1241,4 +1241,140 @@ namespace ATL {
sink(static_cast::PCXSTR>(b)); // $ ir
sink(static_cast::PXSTR>(b)); // $ ir
}
+}
+
+namespace Microsoft {
+ namespace WRL {
+ template
+ class ComPtr;
+
+ struct GUID;
+
+ typedef GUID IID;
+
+ typedef IID *REFIID;
+
+ class IUnknown;
+
+ class WeakRef;
+
+ template
+ class ComPtr
+ {
+ public:
+ using InterfaceType = T;
+
+ ComPtr();
+ ComPtr(const ComPtr &);
+ ComPtr(ComPtr &&);
+
+ template
+ ComPtr(U *);
+
+ ~ComPtr();
+
+ template
+ HRESULT As(ComPtr *p) const;
+
+ HRESULT AsWeak(WeakRef *);
+
+ void Attach(InterfaceType *);
+
+ HRESULT CopyTo(InterfaceType **);
+
+ HRESULT CopyTo(REFIID, void **) const;
+
+ template
+ HRESULT CopyTo(U **) const;
+
+ T *Detach();
+
+ T *Get() const;
+
+ T *const *GetAddressOf() const;
+ T **GetAddressOf();
+
+ T **ReleaseAndGetAddressOf();
+
+ unsigned long Reset();
+
+ void Swap(ComPtr &&r);
+
+ void Swap(ComPtr &r);
+ };
+
+ }
+}
+
+namespace std {
+ template T&& move(T& t) noexcept; // simplified signature
+}
+
+void test_constructor()
+{
+ Microsoft::WRL::ComPtr p0;
+ sink(*p0.Get()); // clean
+
+ int x = source();
+ Microsoft::WRL::ComPtr p1(new int(x));
+ sink(*p1.Get()); // $ ir MISSING: ast
+ sink(*p1.Detach()); // $ ir MISSING: ast
+
+ Microsoft::WRL::ComPtr p2(p1);
+ sink(*p2.Get()); // $ ir MISSING: ast
+
+ Microsoft::WRL::ComPtr p3(std::move(p1));
+ sink(*p3.Get()); // $ ir MISSING: ast
+}
+
+void test_As()
+{
+ int x = source();
+ Microsoft::WRL::ComPtr p1(new int(x));
+ Microsoft::WRL::ComPtr p2;
+ p1.As(&p2);
+ sink(*p2.Get()); // $ ir MISSING: ast
+}
+
+void test_CopyTo()
+{
+ int x = source();
+ Microsoft::WRL::ComPtr p1(new int(x));
+ int *raw = nullptr;
+ p1.CopyTo(&raw);
+ sink(*raw); // $ ir MISSING: ast
+
+ Microsoft::WRL::ComPtr p2;
+ p1.CopyTo(nullptr, (void**)&raw);
+ sink(*raw); // $ ir MISSING: ast
+
+ Microsoft::WRL::ComPtr p3(new int(x));
+
+ int* raw2 = nullptr;
+ p3.CopyTo(&raw2);
+ sink(*raw2); // $ ir MISSING: ast
+}
+
+void test_Swap()
+{
+ int x = source();
+ Microsoft::WRL::ComPtr p1(new int(x));
+ Microsoft::WRL::ComPtr p2;
+ p1.Swap(p2);
+ sink(*p2.Get()); // $ ir MISSING: ast
+ sink(*p1.Get()); // $ SPURIOUS: ir
+}
+
+void test_GetAddressOf()
+{
+ int x = source();
+ Microsoft::WRL::ComPtr p1(new int(x));
+ sink(**p1.GetAddressOf()); // $ ir MISSING: ast
+
+ const Microsoft::WRL::ComPtr p2(new int(x));
+ sink(**p2.GetAddressOf()); // $ ir MISSING: ast
+
+ Microsoft::WRL::ComPtr p3(new int(x));
+ int **pp = p3.ReleaseAndGetAddressOf();
+ sink(**pp); // $ ir MISSING: ast
}
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected
index e19f34eb217..f98159676ce 100644
--- a/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected
+++ b/cpp/ql/test/library-tests/dataflow/taint-tests/localTaint.expected
@@ -1278,6 +1278,131 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future
| atl.cpp:1240:22:1240:30 | call to CStrBufT | atl.cpp:1241:46:1241:46 | b | |
| atl.cpp:1240:22:1240:30 | call to CStrBufT | atl.cpp:1242:45:1242:45 | b | |
| atl.cpp:1241:46:1241:46 | ref arg b | atl.cpp:1242:45:1242:45 | b | |
+| atl.cpp:1315:31:1315:32 | call to ComPtr | atl.cpp:1316:9:1316:10 | p0 | |
+| atl.cpp:1315:31:1315:32 | call to ComPtr | atl.cpp:1328:1:1328:1 | p0 | |
+| atl.cpp:1316:9:1316:10 | ref arg p0 | atl.cpp:1328:1:1328:1 | p0 | |
+| atl.cpp:1316:12:1316:14 | call to Get | atl.cpp:1316:8:1316:16 | * ... | TAINT |
+| atl.cpp:1318:11:1318:21 | call to source | atl.cpp:1319:42:1319:42 | x | |
+| atl.cpp:1319:34:1319:43 | new | atl.cpp:1319:34:1319:44 | call to ComPtr | TAINT |
+| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1320:9:1320:10 | p1 | |
+| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1321:9:1321:10 | p1 | |
+| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1323:34:1323:35 | p1 | |
+| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1326:44:1326:45 | p1 | |
+| atl.cpp:1319:34:1319:44 | call to ComPtr | atl.cpp:1328:1:1328:1 | p1 | |
+| atl.cpp:1319:42:1319:42 | x | atl.cpp:1319:34:1319:43 | new | |
+| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1321:9:1321:10 | p1 | |
+| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1323:34:1323:35 | p1 | |
+| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1326:44:1326:45 | p1 | |
+| atl.cpp:1320:9:1320:10 | ref arg p1 | atl.cpp:1328:1:1328:1 | p1 | |
+| atl.cpp:1320:12:1320:14 | call to Get | atl.cpp:1320:8:1320:16 | * ... | TAINT |
+| atl.cpp:1321:9:1321:10 | ref arg p1 | atl.cpp:1323:34:1323:35 | p1 | |
+| atl.cpp:1321:9:1321:10 | ref arg p1 | atl.cpp:1326:44:1326:45 | p1 | |
+| atl.cpp:1321:9:1321:10 | ref arg p1 | atl.cpp:1328:1:1328:1 | p1 | |
+| atl.cpp:1321:12:1321:17 | call to Detach | atl.cpp:1321:8:1321:19 | * ... | TAINT |
+| atl.cpp:1323:34:1323:35 | p1 | atl.cpp:1323:34:1323:36 | call to ComPtr | |
+| atl.cpp:1323:34:1323:36 | call to ComPtr | atl.cpp:1324:9:1324:10 | p2 | |
+| atl.cpp:1323:34:1323:36 | call to ComPtr | atl.cpp:1328:1:1328:1 | p2 | |
+| atl.cpp:1324:9:1324:10 | ref arg p2 | atl.cpp:1328:1:1328:1 | p2 | |
+| atl.cpp:1324:12:1324:14 | call to Get | atl.cpp:1324:8:1324:16 | * ... | TAINT |
+| atl.cpp:1326:34:1326:42 | call to move | atl.cpp:1326:34:1326:47 | call to ComPtr | TAINT |
+| atl.cpp:1326:34:1326:42 | ref arg call to move | atl.cpp:1326:44:1326:45 | p1 [inner post update] | |
+| atl.cpp:1326:34:1326:42 | ref arg call to move | atl.cpp:1328:1:1328:1 | p1 | |
+| atl.cpp:1326:34:1326:47 | call to ComPtr | atl.cpp:1327:9:1327:10 | p3 | |
+| atl.cpp:1326:34:1326:47 | call to ComPtr | atl.cpp:1328:1:1328:1 | p3 | |
+| atl.cpp:1326:44:1326:45 | p1 | atl.cpp:1326:34:1326:42 | call to move | TAINT |
+| atl.cpp:1326:44:1326:45 | p1 | atl.cpp:1326:34:1326:47 | call to ComPtr | |
+| atl.cpp:1327:9:1327:10 | ref arg p3 | atl.cpp:1328:1:1328:1 | p3 | |
+| atl.cpp:1327:12:1327:14 | call to Get | atl.cpp:1327:8:1327:16 | * ... | TAINT |
+| atl.cpp:1332:11:1332:21 | call to source | atl.cpp:1333:42:1333:42 | x | |
+| atl.cpp:1333:34:1333:43 | new | atl.cpp:1333:34:1333:44 | call to ComPtr | TAINT |
+| atl.cpp:1333:34:1333:44 | call to ComPtr | atl.cpp:1335:3:1335:4 | p1 | |
+| atl.cpp:1333:34:1333:44 | call to ComPtr | atl.cpp:1337:1:1337:1 | p1 | |
+| atl.cpp:1333:42:1333:42 | x | atl.cpp:1333:34:1333:43 | new | |
+| atl.cpp:1334:31:1334:32 | call to ComPtr | atl.cpp:1335:10:1335:11 | p2 | |
+| atl.cpp:1334:31:1334:32 | call to ComPtr | atl.cpp:1336:9:1336:10 | p2 | |
+| atl.cpp:1334:31:1334:32 | call to ComPtr | atl.cpp:1337:1:1337:1 | p2 | |
+| atl.cpp:1335:9:1335:11 | ref arg & ... | atl.cpp:1335:10:1335:11 | p2 [inner post update] | |
+| atl.cpp:1335:9:1335:11 | ref arg & ... | atl.cpp:1336:9:1336:10 | p2 | |
+| atl.cpp:1335:9:1335:11 | ref arg & ... | atl.cpp:1337:1:1337:1 | p2 | |
+| atl.cpp:1335:10:1335:11 | p2 | atl.cpp:1335:9:1335:11 | & ... | |
+| atl.cpp:1336:9:1336:10 | ref arg p2 | atl.cpp:1337:1:1337:1 | p2 | |
+| atl.cpp:1336:12:1336:14 | call to Get | atl.cpp:1336:8:1336:16 | * ... | TAINT |
+| atl.cpp:1341:11:1341:21 | call to source | atl.cpp:1342:42:1342:42 | x | |
+| atl.cpp:1341:11:1341:21 | call to source | atl.cpp:1351:42:1351:42 | x | |
+| atl.cpp:1342:34:1342:43 | new | atl.cpp:1342:34:1342:44 | call to ComPtr | TAINT |
+| atl.cpp:1342:34:1342:44 | call to ComPtr | atl.cpp:1344:3:1344:4 | p1 | |
+| atl.cpp:1342:34:1342:44 | call to ComPtr | atl.cpp:1348:3:1348:4 | p1 | |
+| atl.cpp:1342:34:1342:44 | call to ComPtr | atl.cpp:1356:1:1356:1 | p1 | |
+| atl.cpp:1342:42:1342:42 | x | atl.cpp:1342:34:1342:43 | new | |
+| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1344:14:1344:16 | raw | |
+| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1345:9:1345:11 | raw | |
+| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1348:31:1348:33 | raw | |
+| atl.cpp:1343:14:1343:20 | 0 | atl.cpp:1349:9:1349:11 | raw | |
+| atl.cpp:1344:3:1344:4 | ref arg p1 | atl.cpp:1348:3:1348:4 | p1 | |
+| atl.cpp:1344:3:1344:4 | ref arg p1 | atl.cpp:1356:1:1356:1 | p1 | |
+| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1344:14:1344:16 | raw [inner post update] | |
+| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1345:9:1345:11 | raw | |
+| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1348:31:1348:33 | raw | |
+| atl.cpp:1344:13:1344:16 | ref arg & ... | atl.cpp:1349:9:1349:11 | raw | |
+| atl.cpp:1344:14:1344:16 | raw | atl.cpp:1344:13:1344:16 | & ... | |
+| atl.cpp:1345:9:1345:11 | raw | atl.cpp:1345:8:1345:11 | * ... | TAINT |
+| atl.cpp:1347:31:1347:32 | call to ComPtr | atl.cpp:1356:1:1356:1 | p2 | |
+| atl.cpp:1348:30:1348:33 | ref arg & ... | atl.cpp:1348:31:1348:33 | raw [inner post update] | |
+| atl.cpp:1348:30:1348:33 | ref arg & ... | atl.cpp:1349:9:1349:11 | raw | |
+| atl.cpp:1348:31:1348:33 | raw | atl.cpp:1348:30:1348:33 | & ... | |
+| atl.cpp:1349:9:1349:11 | raw | atl.cpp:1349:8:1349:11 | * ... | TAINT |
+| atl.cpp:1351:34:1351:43 | new | atl.cpp:1351:34:1351:44 | call to ComPtr | TAINT |
+| atl.cpp:1351:34:1351:44 | call to ComPtr | atl.cpp:1354:3:1354:4 | p3 | |
+| atl.cpp:1351:34:1351:44 | call to ComPtr | atl.cpp:1356:1:1356:1 | p3 | |
+| atl.cpp:1351:42:1351:42 | x | atl.cpp:1351:34:1351:43 | new | |
+| atl.cpp:1353:15:1353:21 | 0 | atl.cpp:1354:19:1354:22 | raw2 | |
+| atl.cpp:1353:15:1353:21 | 0 | atl.cpp:1355:9:1355:12 | raw2 | |
+| atl.cpp:1354:18:1354:22 | ref arg & ... | atl.cpp:1354:19:1354:22 | raw2 [inner post update] | |
+| atl.cpp:1354:18:1354:22 | ref arg & ... | atl.cpp:1355:9:1355:12 | raw2 | |
+| atl.cpp:1354:19:1354:22 | raw2 | atl.cpp:1354:18:1354:22 | & ... | |
+| atl.cpp:1355:9:1355:12 | raw2 | atl.cpp:1355:8:1355:12 | * ... | TAINT |
+| atl.cpp:1360:11:1360:21 | call to source | atl.cpp:1361:42:1361:42 | x | |
+| atl.cpp:1361:34:1361:43 | new | atl.cpp:1361:34:1361:44 | call to ComPtr | TAINT |
+| atl.cpp:1361:34:1361:44 | call to ComPtr | atl.cpp:1363:3:1363:4 | p1 | |
+| atl.cpp:1361:34:1361:44 | call to ComPtr | atl.cpp:1365:9:1365:10 | p1 | |
+| atl.cpp:1361:34:1361:44 | call to ComPtr | atl.cpp:1366:1:1366:1 | p1 | |
+| atl.cpp:1361:42:1361:42 | x | atl.cpp:1361:34:1361:43 | new | |
+| atl.cpp:1362:31:1362:32 | call to ComPtr | atl.cpp:1363:11:1363:12 | p2 | |
+| atl.cpp:1362:31:1362:32 | call to ComPtr | atl.cpp:1364:9:1364:10 | p2 | |
+| atl.cpp:1362:31:1362:32 | call to ComPtr | atl.cpp:1366:1:1366:1 | p2 | |
+| atl.cpp:1363:3:1363:4 | ref arg p1 | atl.cpp:1365:9:1365:10 | p1 | |
+| atl.cpp:1363:3:1363:4 | ref arg p1 | atl.cpp:1366:1:1366:1 | p1 | |
+| atl.cpp:1363:11:1363:12 | ref arg p2 | atl.cpp:1364:9:1364:10 | p2 | |
+| atl.cpp:1363:11:1363:12 | ref arg p2 | atl.cpp:1366:1:1366:1 | p2 | |
+| atl.cpp:1364:9:1364:10 | ref arg p2 | atl.cpp:1366:1:1366:1 | p2 | |
+| atl.cpp:1364:12:1364:14 | call to Get | atl.cpp:1364:8:1364:16 | * ... | TAINT |
+| atl.cpp:1365:9:1365:10 | ref arg p1 | atl.cpp:1366:1:1366:1 | p1 | |
+| atl.cpp:1365:12:1365:14 | call to Get | atl.cpp:1365:8:1365:16 | * ... | TAINT |
+| atl.cpp:1370:11:1370:21 | call to source | atl.cpp:1371:42:1371:42 | x | |
+| atl.cpp:1370:11:1370:21 | call to source | atl.cpp:1374:48:1374:48 | x | |
+| atl.cpp:1370:11:1370:21 | call to source | atl.cpp:1377:42:1377:42 | x | |
+| atl.cpp:1371:34:1371:43 | new | atl.cpp:1371:34:1371:44 | call to ComPtr | TAINT |
+| atl.cpp:1371:34:1371:44 | call to ComPtr | atl.cpp:1372:10:1372:11 | p1 | |
+| atl.cpp:1371:34:1371:44 | call to ComPtr | atl.cpp:1380:1:1380:1 | p1 | |
+| atl.cpp:1371:42:1371:42 | x | atl.cpp:1371:34:1371:43 | new | |
+| atl.cpp:1372:9:1372:26 | * ... | atl.cpp:1372:8:1372:26 | * ... | TAINT |
+| atl.cpp:1372:10:1372:11 | ref arg p1 | atl.cpp:1380:1:1380:1 | p1 | |
+| atl.cpp:1372:13:1372:24 | call to GetAddressOf | atl.cpp:1372:9:1372:26 | * ... | TAINT |
+| atl.cpp:1374:40:1374:49 | new | atl.cpp:1374:40:1374:50 | call to ComPtr | TAINT |
+| atl.cpp:1374:40:1374:50 | call to ComPtr | atl.cpp:1375:10:1375:11 | p2 | |
+| atl.cpp:1374:40:1374:50 | call to ComPtr | atl.cpp:1380:1:1380:1 | p2 | |
+| atl.cpp:1374:48:1374:48 | x | atl.cpp:1374:40:1374:49 | new | |
+| atl.cpp:1375:9:1375:26 | * ... | atl.cpp:1375:8:1375:26 | * ... | TAINT |
+| atl.cpp:1375:10:1375:11 | ref arg p2 | atl.cpp:1380:1:1380:1 | p2 | |
+| atl.cpp:1375:13:1375:24 | call to GetAddressOf | atl.cpp:1375:9:1375:26 | * ... | TAINT |
+| atl.cpp:1377:34:1377:43 | new | atl.cpp:1377:34:1377:44 | call to ComPtr | TAINT |
+| atl.cpp:1377:34:1377:44 | call to ComPtr | atl.cpp:1378:14:1378:15 | p3 | |
+| atl.cpp:1377:34:1377:44 | call to ComPtr | atl.cpp:1380:1:1380:1 | p3 | |
+| atl.cpp:1377:42:1377:42 | x | atl.cpp:1377:34:1377:43 | new | |
+| atl.cpp:1378:14:1378:15 | ref arg p3 | atl.cpp:1380:1:1380:1 | p3 | |
+| atl.cpp:1378:17:1378:38 | call to ReleaseAndGetAddressOf | atl.cpp:1379:10:1379:11 | pp | |
+| atl.cpp:1379:9:1379:11 | * ... | atl.cpp:1379:8:1379:11 | * ... | TAINT |
+| atl.cpp:1379:10:1379:11 | pp | atl.cpp:1379:9:1379:11 | * ... | TAINT |
| bsd.cpp:17:11:17:16 | call to source | bsd.cpp:20:18:20:18 | s | |
| bsd.cpp:18:12:18:15 | addr | bsd.cpp:20:22:20:25 | addr | |
| bsd.cpp:18:12:18:15 | addr | bsd.cpp:23:8:23:11 | addr | |
@@ -7767,6 +7892,10 @@ WARNING: module 'TaintTracking' has been deprecated and may be removed in future
| taint.cpp:830:20:830:34 | call to indirect_source | taint.cpp:832:23:832:24 | in | |
| taint.cpp:831:15:831:17 | out | taint.cpp:832:18:832:20 | out | |
| taint.cpp:831:15:831:17 | out | taint.cpp:833:8:833:10 | out | |
+| taint.cpp:841:21:841:35 | call to indirect_source | taint.cpp:842:11:842:12 | fp | |
+| taint.cpp:841:21:841:35 | call to indirect_source | taint.cpp:843:16:843:17 | fp | |
+| taint.cpp:842:11:842:12 | ref arg fp | taint.cpp:843:16:843:17 | fp | |
+| taint.cpp:842:15:842:16 | | taint.cpp:842:11:842:12 | ref arg fp | TAINT |
| thread.cpp:10:27:10:27 | s | thread.cpp:10:27:10:27 | s | |
| thread.cpp:10:27:10:27 | s | thread.cpp:11:8:11:8 | s | |
| thread.cpp:14:26:14:26 | s | thread.cpp:15:8:15:8 | s | |
diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp
index 74bcf26ea7d..0c09665de1c 100644
--- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp
+++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.cpp
@@ -831,4 +831,15 @@ void test_write_to_const_ptr_ptr() {
const char* out;
take_const_ptr(out, in);
sink(out); // $ SPURIOUS: ast
+}
+
+void indirect_sink(FILE *fp);
+int fprintf(FILE *fp, const char *format, ...);
+
+int f7(void)
+{
+ FILE* fp = (FILE*)indirect_source();
+ fprintf(fp, "");
+ indirect_sink(fp); // $ ir MISSING: ast
+ return 0;
}
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql
index f5f483cdf1b..3bde6ca03f0 100644
--- a/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql
+++ b/cpp/ql/test/library-tests/dataflow/taint-tests/taint.ql
@@ -117,6 +117,11 @@ module IRTest {
call.getTarget().getName() = "sink" and
[sink.asExpr(), sink.asIndirectExpr()] = call.getAnArgument()
)
+ or
+ exists(FunctionCall call |
+ call.getTarget().getName() = "indirect_sink" and
+ sink.asIndirectExpr() = call.getAnArgument()
+ )
}
predicate isBarrier(DataFlow::Node barrier) {
diff --git a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected
index 239ed2ec607..361ead80703 100644
--- a/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected
+++ b/cpp/ql/test/library-tests/dataflow/taint-tests/test_mad-signatures.expected
@@ -5567,6 +5567,15 @@ signatureMatches
| atl.cpp:1231:5:1231:12 | CStrBufT | (const char *,const char *,unsigned long) | | __ngettext | 2 |
| atl.cpp:1231:5:1231:12 | CStrBufT | (unsigned char *,int,unsigned long) | | UTF8_putc | 1 |
| atl.cpp:1231:5:1231:12 | CStrBufT | (unsigned char *,int,unsigned long) | | UTF8_putc | 2 |
+| atl.cpp:1268:5:1268:10 | ComPtr | (const ComPtr &) | ComPtr | ComPtr | 0 |
+| atl.cpp:1269:5:1269:10 | ComPtr | (ComPtr &&) | ComPtr | ComPtr | 0 |
+| atl.cpp:1272:5:1272:10 | ComPtr | (T *) | ComPtr | ComPtr | 0 |
+| atl.cpp:1283:13:1283:18 | CopyTo | (T **) | ComPtr | CopyTo | 0 |
+| atl.cpp:1285:13:1285:18 | CopyTo | (Curl_easy *,void **) | | Curl_resolver_init | 1 |
+| atl.cpp:1285:13:1285:18 | CopyTo | (REFIID,void **) | ComPtr | CopyTo | 0 |
+| atl.cpp:1285:13:1285:18 | CopyTo | (REFIID,void **) | ComPtr | CopyTo | 1 |
+| atl.cpp:1285:13:1285:18 | CopyTo | (size_t,void **) | | __libc_alloc_buffer_allocate | 1 |
+| atl.cpp:1288:13:1288:18 | CopyTo | (T **) | ComPtr | CopyTo | 0 |
| bsd.cpp:12:5:12:10 | accept | (CURLM *,curl_socket_t,int *) | | curl_multi_socket | 2 |
| bsd.cpp:12:5:12:10 | accept | (Curl_easy *,ssize_t *,int *) | | Curl_GetFTPResponse | 2 |
| bsd.cpp:12:5:12:10 | accept | (EVP_CIPHER_CTX *,unsigned char *,int *) | | EVP_CipherFinal | 2 |
@@ -17670,6 +17679,55 @@ signatureMatches
| taint.cpp:822:6:822:19 | take_const_ptr | (unsigned long *,const char *) | | set_cert_ex | 1 |
| taint.cpp:822:6:822:19 | take_const_ptr | (unsigned long *,const char *) | | set_name_ex | 1 |
| taint.cpp:822:6:822:19 | take_const_ptr | (uv_pipe_t *,const char *) | | uv_pipe_bind | 1 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_default_uflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_feof | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_ferror | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_file_close_mmap | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_file_underflow_mmap | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_ftell | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_getc | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_getwc | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_new_file_underflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_peekc_locked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_str_count | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_str_underflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_sungetc | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_sungetwc | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_wdefault_uflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_wfile_underflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_wfile_underflow_mmap | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_wstr_count | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | _IO_wstr_underflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __fbufsize | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __feof_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __ferror_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __fileno | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __flbf | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __fopen_maybe_mmap | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __fpending | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __ftello | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __fwriting | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __getc_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __getwc_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __uflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __underflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __wuflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | __wunderflow | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | feof_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | ferror_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | fgetc_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | fgetgrent | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | fgetpwent | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | fgetsgent | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | fgetspent | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | getc_unlocked | 0 |
+| taint.cpp:836:6:836:18 | indirect_sink | (FILE *) | | getmntent | 0 |
+| taint.cpp:837:5:837:11 | fprintf | (CURLSH *,CURLSHoption,...) | | curl_share_setopt | 2 |
+| taint.cpp:837:5:837:11 | fprintf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 1 |
+| taint.cpp:837:5:837:11 | fprintf | (Jim_Interp *,const char *,...) | | Jim_SetResultFormatted | 2 |
+| taint.cpp:837:5:837:11 | fprintf | (char **,const char *,...) | | ___asprintf | 1 |
+| taint.cpp:837:5:837:11 | fprintf | (char **,const char *,...) | | ___asprintf | 2 |
+| taint.cpp:837:5:837:11 | fprintf | (curl_httppost **,curl_httppost **,...) | | curl_formadd | 2 |
| thread.cpp:4:6:4:9 | sink | (int) | | ASN1_STRING_type_new | 0 |
| thread.cpp:4:6:4:9 | sink | (int) | | ASN1_tag2bit | 0 |
| thread.cpp:4:6:4:9 | sink | (int) | | ASN1_tag2str | 0 |
@@ -21701,6 +21759,7 @@ getSignatureParameterName
| (CURLU *,const char *,char **,OperationConfig *) | | ipfs_url_rewrite | 1 | const char * |
| (CURLU *,const char *,char **,OperationConfig *) | | ipfs_url_rewrite | 2 | char ** |
| (CURLU *,const char *,char **,OperationConfig *) | | ipfs_url_rewrite | 3 | OperationConfig * |
+| (ComPtr &&) | ComPtr | ComPtr | 0 | ComPtr && |
| (CompoundDictionary *,const PreparedDictionary *) | | AttachPreparedDictionary | 0 | CompoundDictionary * |
| (CompoundDictionary *,const PreparedDictionary *) | | AttachPreparedDictionary | 1 | const PreparedDictionary * |
| (Curl_cfilter *) | | Curl_conn_cf_is_ssl | 0 | Curl_cfilter * |
@@ -28531,6 +28590,8 @@ getSignatureParameterName
| (RAND_POOL *,unsigned int) | | ossl_rand_pool_bytes_needed | 1 | unsigned int |
| (RECORD_LAYER *,SSL_CONNECTION *) | | RECORD_LAYER_init | 0 | RECORD_LAYER * |
| (RECORD_LAYER *,SSL_CONNECTION *) | | RECORD_LAYER_init | 1 | SSL_CONNECTION * |
+| (REFIID,void **) | ComPtr | CopyTo | 0 | REFIID |
+| (REFIID,void **) | ComPtr | CopyTo | 1 | void ** |
| (RIO_NOTIFIER *) | | ossl_rio_notifier_cleanup | 0 | RIO_NOTIFIER * |
| (RIPEMD160_CTX *,const unsigned char *) | | RIPEMD160_Transform | 0 | RIPEMD160_CTX * |
| (RIPEMD160_CTX *,const unsigned char *) | | RIPEMD160_Transform | 1 | const unsigned char * |
@@ -30114,6 +30175,9 @@ getSignatureParameterName
| (Strtab *,const char *,size_t) | | strtabadd | 2 | size_t |
| (Strtab *,size_t *) | | strtabfinalize | 0 | Strtab * |
| (Strtab *,size_t *) | | strtabfinalize | 1 | size_t * |
+| (T *) | ComPtr | ComPtr | 0 | func:0 * |
+| (T **) | ComPtr | CopyTo | 0 | func:0 ** |
+| (T **) | ComPtr | CopyTo | 0 | class:0 ** |
| (TLS_FEATURE *) | | TLS_FEATURE_free | 0 | TLS_FEATURE * |
| (TLS_RL_RECORD *,const unsigned char *) | | ossl_tls_rl_record_set_seq_num | 0 | TLS_RL_RECORD * |
| (TLS_RL_RECORD *,const unsigned char *) | | ossl_tls_rl_record_set_seq_num | 1 | const unsigned char * |
@@ -33256,6 +33320,7 @@ getSignatureParameterName
| (const CURLU *,CURLUPart,char **,unsigned int) | | curl_url_get | 1 | CURLUPart |
| (const CURLU *,CURLUPart,char **,unsigned int) | | curl_url_get | 2 | char ** |
| (const CURLU *,CURLUPart,char **,unsigned int) | | curl_url_get | 3 | unsigned int |
+| (const ComPtr &) | ComPtr | ComPtr | 0 | const ComPtr & |
| (const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *) | | BrotliBuildHistogramsWithContext | 0 | const Command * |
| (const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *) | | BrotliBuildHistogramsWithContext | 1 | const size_t |
| (const Command *,const size_t,const BlockSplit *,const BlockSplit *,const BlockSplit *,const uint8_t *,size_t,size_t,uint8_t,uint8_t,const ContextType *,HistogramLiteral *,HistogramCommand *,HistogramDistance *) | | BrotliBuildHistogramsWithContext | 2 | const BlockSplit * |
@@ -46355,6 +46420,18 @@ getParameterTypeName
| atl.cpp:1231:5:1231:12 | CStrBufT | 1 | int |
| atl.cpp:1231:5:1231:12 | CStrBufT | 2 | DWORD |
| atl.cpp:1231:5:1231:12 | CStrBufT | 2 | unsigned long |
+| atl.cpp:1268:5:1268:10 | ComPtr | 0 | const ComPtr & |
+| atl.cpp:1269:5:1269:10 | ComPtr | 0 | ComPtr && |
+| atl.cpp:1272:5:1272:10 | ComPtr | 0 | func:0 * |
+| atl.cpp:1277:13:1277:14 | As | 0 | ComPtr * |
+| atl.cpp:1283:13:1283:18 | CopyTo | 0 | Interfaceclass:0ype ** |
+| atl.cpp:1283:13:1283:18 | CopyTo | 0 | class:0 ** |
+| atl.cpp:1285:13:1285:18 | CopyTo | 0 | GUID * |
+| atl.cpp:1285:13:1285:18 | CopyTo | 0 | REFIID |
+| atl.cpp:1285:13:1285:18 | CopyTo | 1 | void ** |
+| atl.cpp:1288:13:1288:18 | CopyTo | 0 | func:0 ** |
+| atl.cpp:1303:10:1303:13 | Swap | 0 | ComPtr & |
+| atl.cpp:1310:25:1310:28 | move | 0 | func:0 & |
| bsd.cpp:6:8:6:8 | operator= | 0 | const sockaddr & |
| bsd.cpp:6:8:6:8 | operator= | 0 | sockaddr && |
| bsd.cpp:12:5:12:10 | accept | 0 | int |
@@ -47191,6 +47268,10 @@ getParameterTypeName
| taint.cpp:817:6:817:27 | write_to_const_ptr_ptr | 1 | const char ** |
| taint.cpp:822:6:822:19 | take_const_ptr | 0 | const char * |
| taint.cpp:822:6:822:19 | take_const_ptr | 1 | const char * |
+| taint.cpp:836:6:836:18 | indirect_sink | 0 | FILE * |
+| taint.cpp:837:5:837:11 | fprintf | 0 | FILE * |
+| taint.cpp:837:5:837:11 | fprintf | 1 | const char * |
+| taint.cpp:837:5:837:11 | fprintf | 2 | ... |
| thread.cpp:4:6:4:9 | sink | 0 | int |
| thread.cpp:6:8:6:8 | operator= | 0 | S && |
| thread.cpp:6:8:6:8 | operator= | 0 | const S & |
diff --git a/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected b/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected
index 0ddac7d27a6..5a18945cc0f 100644
--- a/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected
+++ b/cpp/ql/test/library-tests/macros/arguments/macro_arguments.expected
@@ -23,7 +23,7 @@
| test.c:27:17:33:1 | test.c:27:17:33:1 | CONCAT | 1 | "Semmle" | "Semmle" |
| test.c:42:1:42:13 | test.c:42:1:42:13 | APPLY | 0 | top | top |
| test.c:42:1:42:13 | test.c:42:1:42:13 | APPLY | 1 | 3 | 3 |
-| test.c:42:1:42:13 | test.c:42:7:41:24 | APPLY -> top | 0 | 3 | 3 |
+| test.c:42:1:42:13 | test.c:42:7:42:7 | APPLY -> top | 0 | 3 | 3 |
| test.c:42:1:42:13 | top_and_nested.h:2:16:2:24 | APPLY -> top -> nested | 0 | 3 | |
| test.c:42:1:42:13 | top_and_nested.h:3:16:3:30 | APPLY -> top -> nested | 0 | 2 + (3) | |
| test.c:47:1:47:23 | test.c:45:15:45:22 | DECLARE_STRING -> ID | 0 | string1 | string1 |
@@ -49,7 +49,7 @@
| test.c:82:1:82:4 | test.c:82:1:82:4 | ID | 0 | | |
| test.c:84:5:84:20 | test.c:84:5:84:20 | APPLY | 0 | ID | ID |
| test.c:84:5:84:20 | test.c:84:5:84:20 | APPLY | 1 | ID(1) | 1 |
-| test.c:84:5:84:20 | test.c:84:11:41:24 | APPLY -> ID | 0 | 1 | 1 |
+| test.c:84:5:84:20 | test.c:84:11:84:11 | APPLY -> ID | 0 | 1 | 1 |
| test.c:84:5:84:20 | test.c:84:15:84:19 | APPLY -> ID | 0 | 1 | 1 |
| test.c:85:21:85:40 | test.c:85:21:85:40 | CMD_LINE_MACRO | 0 | 5 | 5 |
| test.c:85:21:85:40 | test.c:85:21:85:40 | CMD_LINE_MACRO | 1 | 6 | 6 |
diff --git a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected
index 692f7d81cd6..ceccd95ea3c 100644
--- a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected
+++ b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/SloppyGlobal.expected
@@ -1,2 +1,7 @@
| main.cpp:3:5:3:5 | x | Poor global variable name 'x'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). |
| main.cpp:4:5:4:6 | ys | Poor global variable name 'ys'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). |
+| main.cpp:9:5:9:6 | v1 | Poor global variable name 'v1'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). |
+| main.cpp:10:5:10:6 | v2 | Poor global variable name 'v2'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). |
+| main.cpp:12:5:12:5 | v3 | Poor global variable name 'v3'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). |
+| main.cpp:14:5:14:5 | v4 | Poor global variable name 'v4'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). |
+| main.cpp:16:5:16:5 | v5 | Poor global variable name 'v5'. Prefer longer, descriptive names for globals (eg. kMyGlobalConstant, not foo). |
diff --git a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp
index 1b1b7ee0280..e279fbf0257 100644
--- a/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp
+++ b/cpp/ql/test/query-tests/Best Practices/SloppyGlobal/main.cpp
@@ -5,3 +5,19 @@ int ys[1000000]; // BAD: too short
int descriptive_name; // GOOD: sufficient
static int z; // GOOD: not a global
+
+int v1; // BAD: too short
+int v2; // BAD: too short
+template
+T v3; // BAD: too short
+template
+T v4; // BAD: too short
+template
+T v5; // BAD: too short
+
+void use_some_fs() {
+ v2 = 100;
+ v4 = 200;
+ v5 = 300;
+ v5 = "string";
+}
diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected
index 1edf3b1ae99..6dfe60dcb8c 100644
--- a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected
+++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/MissingCheckScanf.expected
@@ -1,4 +1,5 @@
edges
+| test.c:10:31:10:32 | sscanf output argument | test.c:11:7:11:7 | x | provenance | |
| test.cpp:34:15:34:16 | scanf output argument | test.cpp:35:7:35:7 | i | provenance | |
| test.cpp:41:19:41:20 | scanf output argument | test.cpp:43:8:43:8 | i | provenance | |
| test.cpp:58:19:58:20 | scanf output argument | test.cpp:60:8:60:8 | i | provenance | |
@@ -56,6 +57,8 @@ edges
| test.cpp:567:35:567:36 | scanf output argument | test.cpp:569:9:569:9 | i | provenance | |
| test.cpp:575:30:575:31 | scanf output argument | test.cpp:577:9:577:9 | i | provenance | |
nodes
+| test.c:10:31:10:32 | sscanf output argument | semmle.label | sscanf output argument |
+| test.c:11:7:11:7 | x | semmle.label | x |
| test.cpp:34:15:34:16 | scanf output argument | semmle.label | scanf output argument |
| test.cpp:35:7:35:7 | i | semmle.label | i |
| test.cpp:41:19:41:20 | scanf output argument | semmle.label | scanf output argument |
@@ -186,5 +189,3 @@ subpaths
| test.cpp:484:9:484:9 | i | test.cpp:480:25:480:26 | scanf output argument | test.cpp:484:9:484:9 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:480:13:480:17 | call to scanf | call to scanf |
| test.cpp:495:8:495:8 | i | test.cpp:491:25:491:26 | scanf output argument | test.cpp:495:8:495:8 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:491:13:491:17 | call to scanf | call to scanf |
| test.cpp:545:8:545:8 | f | test.cpp:541:43:541:44 | sscanf output argument | test.cpp:545:8:545:8 | f | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 3. | test.cpp:541:10:541:15 | call to sscanf | call to sscanf |
-| test.cpp:569:9:569:9 | i | test.cpp:567:35:567:36 | scanf output argument | test.cpp:569:9:569:9 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:567:23:567:27 | call to scanf | call to scanf |
-| test.cpp:577:9:577:9 | i | test.cpp:575:30:575:31 | scanf output argument | test.cpp:577:9:577:9 | i | This variable is read, but may not have been written. It should be guarded by a check that the $@ returns at least 1. | test.cpp:575:18:575:22 | call to scanf | call to scanf |
diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.c b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.c
new file mode 100644
index 00000000000..dd1836949ff
--- /dev/null
+++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.c
@@ -0,0 +1,13 @@
+# define likely(x) __builtin_expect(!!(x), 1)
+int sscanf(const char *s, const char *format, ...);
+
+void use(int i);
+
+void test_likely(const char* s, const char* format)
+{
+ int x;
+
+ if (likely(sscanf(s, format, &x) == 1)) {
+ use(x); // GOOD
+ }
+}
\ No newline at end of file
diff --git a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp
index 9cfad40a148..92f5d10ddd9 100644
--- a/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp
+++ b/cpp/ql/test/query-tests/Critical/MissingCheckScanf/test.cpp
@@ -566,7 +566,7 @@ void test_scanf_compared_in_conjunct_right(bool b) {
int i;
bool success = b && scanf("%d", &i) == 1;
if(success) {
- use(i); // GOOD [FALSE POSITIVE]
+ use(i); // GOOD
}
}
@@ -574,6 +574,6 @@ void test_scanf_compared_in_conjunct_left(bool b) {
int i;
bool success = scanf("%d", &i) == 1 && b;
if(success) {
- use(i); // GOOD [FALSE POSITIVE]
+ use(i); // GOOD
}
}
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-295/SSLResultConflation.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-295/SSLResultConflation.expected
index 5c304e0ea4f..9e88dba4887 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-295/SSLResultConflation.expected
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-295/SSLResultConflation.expected
@@ -6,3 +6,4 @@
| test.cpp:83:7:83:40 | ... \|\| ... | This expression conflates OK and non-OK results from $@. | test.cpp:78:16:78:36 | call to SSL_get_verify_result | call to SSL_get_verify_result |
| test.cpp:87:7:87:38 | ... \|\| ... | This expression conflates OK and non-OK results from $@. | test.cpp:7:57:7:77 | call to SSL_get_verify_result | call to SSL_get_verify_result |
| test.cpp:107:13:107:42 | ... \|\| ... | This expression conflates OK and non-OK results from $@. | test.cpp:105:16:105:36 | call to SSL_get_verify_result | call to SSL_get_verify_result |
+| test.cpp:109:7:109:8 | ok | This expression conflates OK and non-OK results from $@. | test.cpp:105:16:105:36 | call to SSL_get_verify_result | call to SSL_get_verify_result |
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.cpp
new file mode 100644
index 00000000000..57298515793
--- /dev/null
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.cpp
@@ -0,0 +1,121 @@
+typedef unsigned long size_t;
+typedef struct sqlite3 sqlite3;
+typedef struct sqlite3_stmt sqlite3_stmt;
+typedef struct sqlite3_str sqlite3_str;
+
+int snprintf(char *str, size_t size, const char *format, ...);
+int sqlite3_open(const char *filename, sqlite3 **ppDb);
+int sqlite3_close(sqlite3*);
+int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg);
+int sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail);
+int sqlite3_step(sqlite3_stmt*);
+int sqlite3_finalize(sqlite3_stmt*);
+int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
+sqlite3_str* sqlite3_str_new(sqlite3*);
+void sqlite3_str_appendf(sqlite3_str*, const char *zFormat, ...);
+char* sqlite3_str_finish(sqlite3_str*);
+
+#define SQLITE_TRANSIENT ((void(*)(void*))-1)
+
+// Simulate a sensitive value
+const char* getSensitivePassword() {
+ return "super_secret_password";
+}
+
+void storePasswordCleartext(sqlite3* db, const char* password) {
+ // BAD: Storing sensitive data in cleartext
+ char sql[256];
+ // Unsafe: no escaping, for test purposes only
+ snprintf(sql, sizeof(sql), "INSERT INTO users(password) VALUES('%s');", password); // $ Source
+ char* errMsg = 0;
+ sqlite3_exec(db, sql, 0, 0, &errMsg); // $ Alert
+}
+
+void storePasswordWithPrepare(sqlite3* db, const char* password) {
+ // BAD: Storing sensitive data in cleartext using sqlite3_prepare
+ char sql[256];
+ snprintf(sql, sizeof(sql), "INSERT INTO users(password) VALUES('%s');", password); // $ Source
+ sqlite3_stmt* stmt = 0;
+ sqlite3_prepare_v2(db, sql, -1, &stmt, 0); // $ Alert
+ sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+}
+
+void storePasswordWithBind(sqlite3* db, const char* password) {
+ // BAD: Storing sensitive data in cleartext using sqlite3_bind_text
+ const char* sql = "INSERT INTO users(password) VALUES(?);";
+ sqlite3_stmt* stmt = 0;
+ sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
+ sqlite3_bind_text(stmt, 1, password, -1, SQLITE_TRANSIENT); // $ Alert
+ sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+}
+
+void storePasswordWithAppendf(sqlite3_str* pStr, const char* password) {
+ // BAD: Storing sensitive data in cleartext using sqlite3_str_appendf
+ sqlite3_str_appendf(pStr, "INSERT INTO users(password) VALUES('%s');", password); // $ Alert
+}
+
+// Example sanitizer: hashes the sensitive value before storage
+void hashSensitiveValue(const char* input, char* output, size_t outSize) {
+ // Dummy hash for illustration (not cryptographically secure)
+ unsigned int hash = 5381;
+ for (const char* p = input; *p; ++p)
+ hash = ((hash << 5) + hash) + (unsigned char)(*p);
+ snprintf(output, outSize, "%u", hash);
+}
+
+void storeSanitizedPasswordCleartext(sqlite3* db, const char* password) {
+ // GOOD: Sanitizing sensitive data before storage
+ char hashed[64];
+ hashSensitiveValue(password, hashed, sizeof(hashed));
+ char sql[256];
+ snprintf(sql, sizeof(sql), "INSERT INTO users(password) VALUES('%s');", hashed);
+ char* errMsg = 0;
+ sqlite3_exec(db, sql, 0, 0, &errMsg);
+}
+
+void storeSanitizedPasswordWithBind(sqlite3* db, const char* password) {
+ // GOOD: Sanitizing sensitive data before storage with bind
+ char hashed[64];
+ hashSensitiveValue(password, hashed, sizeof(hashed));
+ const char* sql = "INSERT INTO users(password) VALUES(?);";
+ sqlite3_stmt* stmt = 0;
+ sqlite3_prepare_v2(db, sql, -1, &stmt, 0);
+ sqlite3_bind_text(stmt, 1, hashed, -1, SQLITE_TRANSIENT);
+ sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+}
+
+void storeSanitizedPasswordWithAppendf(sqlite3_str* pStr, const char* password) {
+ // GOOD: Sanitizing sensitive data before storage with appendf
+ char hashed[64];
+ hashSensitiveValue(password, hashed, sizeof(hashed));
+ sqlite3_str_appendf(pStr, "INSERT INTO users(password) VALUES('%s');", hashed);
+}
+
+int main() {
+ sqlite3* db = 0;
+ sqlite3_open(":memory:", &db);
+
+ // Create table
+ const char* createTableSQL = "CREATE TABLE users(id INTEGER PRIMARY KEY, password TEXT);";
+ sqlite3_exec(db, createTableSQL, 0, 0, 0);
+
+ const char* sensitive = getSensitivePassword();
+
+ storePasswordCleartext(db, sensitive);
+ storePasswordWithPrepare(db, sensitive);
+ storePasswordWithBind(db, sensitive);
+ storeSanitizedPasswordCleartext(db, sensitive);
+ storeSanitizedPasswordWithBind(db, sensitive);
+
+ // If sqlite3_str is available
+ sqlite3_str* pStr = sqlite3_str_new(db);
+ storePasswordWithAppendf(pStr, sensitive);
+ storeSanitizedPasswordWithAppendf(pStr, sensitive);
+ sqlite3_str_finish(pStr);
+
+ sqlite3_close(db);
+ return 0;
+}
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.expected
new file mode 100644
index 00000000000..89a7a2c5826
--- /dev/null
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.expected
@@ -0,0 +1,16 @@
+#select
+| CleartextSqliteDatabase.cpp:31:5:31:16 | call to sqlite3_exec | CleartextSqliteDatabase.cpp:29:77:29:84 | password | CleartextSqliteDatabase.cpp:31:22:31:24 | *sql | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:29:77:29:84 | password | sensitive information |
+| CleartextSqliteDatabase.cpp:39:5:39:22 | call to sqlite3_prepare_v2 | CleartextSqliteDatabase.cpp:37:77:37:84 | password | CleartextSqliteDatabase.cpp:39:28:39:30 | *sql | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:37:77:37:84 | password | sensitive information |
+| CleartextSqliteDatabase.cpp:49:5:49:21 | call to sqlite3_bind_text | CleartextSqliteDatabase.cpp:49:32:49:39 | password | CleartextSqliteDatabase.cpp:49:32:49:39 | password | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:49:32:49:39 | password | sensitive information |
+| CleartextSqliteDatabase.cpp:56:5:56:23 | call to sqlite3_str_appendf | CleartextSqliteDatabase.cpp:56:76:56:83 | password | CleartextSqliteDatabase.cpp:56:76:56:83 | password | This SQLite call may store $@ in a non-encrypted SQLite database. | CleartextSqliteDatabase.cpp:56:76:56:83 | password | sensitive information |
+edges
+| CleartextSqliteDatabase.cpp:29:77:29:84 | password | CleartextSqliteDatabase.cpp:31:22:31:24 | *sql | provenance | TaintFunction |
+| CleartextSqliteDatabase.cpp:37:77:37:84 | password | CleartextSqliteDatabase.cpp:39:28:39:30 | *sql | provenance | TaintFunction |
+nodes
+| CleartextSqliteDatabase.cpp:29:77:29:84 | password | semmle.label | password |
+| CleartextSqliteDatabase.cpp:31:22:31:24 | *sql | semmle.label | *sql |
+| CleartextSqliteDatabase.cpp:37:77:37:84 | password | semmle.label | password |
+| CleartextSqliteDatabase.cpp:39:28:39:30 | *sql | semmle.label | *sql |
+| CleartextSqliteDatabase.cpp:49:32:49:39 | password | semmle.label | password |
+| CleartextSqliteDatabase.cpp:56:76:56:83 | password | semmle.label | password |
+subpaths
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.qlref b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.qlref
new file mode 100644
index 00000000000..d5adb06122d
--- /dev/null
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-313/CleartextSqliteDatabase.qlref
@@ -0,0 +1,4 @@
+query: Security/CWE/CWE-313/CleartextSqliteDatabase.ql
+postprocess:
+ - utils/test/PrettyPrintModels.ql
+ - utils/test/InlineExpectationsTestQuery.ql
diff --git a/csharp/actions/create-extractor-pack/action.yml b/csharp/actions/create-extractor-pack/action.yml
index 2386fe15101..6c6b3af82b0 100644
--- a/csharp/actions/create-extractor-pack/action.yml
+++ b/csharp/actions/create-extractor-pack/action.yml
@@ -17,7 +17,7 @@ runs:
run: |
CODEQL_PATH=$(gh codeql version --format=json | jq -r .unpackedLocation)
# The legacy ASP extractor is not in this repo, so take the one from the nightly build
- mv "$CODEQL_PATH/csharp/tools/extractor-asp.jar" "${{ github.workspace }}/csharp/extractor-pack/tools"
+ mv "$CODEQL_PATH/csharp/tools/extractor-asp.jar" "$GITHUB_WORKSPACE/csharp/extractor-pack/tools"
# Safe guard against using the bundled extractor
rm -rf "$CODEQL_PATH/csharp"
env:
diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
index 1b3c69fd4d0..c276cd6133e 100644
--- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
+++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.7.46
+
+No user-facing changes.
+
## 1.7.45
No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.46.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.46.md
new file mode 100644
index 00000000000..b6482a9a030
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.46.md
@@ -0,0 +1,3 @@
+## 1.7.46
+
+No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml
index 5a84df10183..a39de8bc91c 100644
--- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml
+++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.7.45
+lastReleaseVersion: 1.7.46
diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml
index c6e17a64adc..ea7b1f0c021 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.46-dev
+version: 1.7.47-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
index 1b3c69fd4d0..c276cd6133e 100644
--- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
+++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.7.46
+
+No user-facing changes.
+
## 1.7.45
No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.46.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.46.md
new file mode 100644
index 00000000000..b6482a9a030
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.46.md
@@ -0,0 +1,3 @@
+## 1.7.46
+
+No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml
index 5a84df10183..a39de8bc91c 100644
--- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml
+++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.7.45
+lastReleaseVersion: 1.7.46
diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml
index 529cd400b6c..377ad66a5ba 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.46-dev
+version: 1.7.47-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md
index 1bce7a7f803..9e3686d8267 100644
--- a/csharp/ql/lib/CHANGELOG.md
+++ b/csharp/ql/lib/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 5.2.2
+
+No user-facing changes.
+
## 5.2.1
No user-facing changes.
diff --git a/csharp/ql/lib/change-notes/2025-08-18-byte-char-bulk-types.md b/csharp/ql/lib/change-notes/2025-08-18-byte-char-bulk-types.md
new file mode 100644
index 00000000000..e5a081c3340
--- /dev/null
+++ b/csharp/ql/lib/change-notes/2025-08-18-byte-char-bulk-types.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* Models-as-data summaries for byte and char arrays and pointers now treat the entire collection as tainted, reflecting their common use as string alternatives.
diff --git a/csharp/ql/lib/change-notes/2025-08-18-implicit-reads-at-sinks.md b/csharp/ql/lib/change-notes/2025-08-18-implicit-reads-at-sinks.md
new file mode 100644
index 00000000000..d66e982e6ae
--- /dev/null
+++ b/csharp/ql/lib/change-notes/2025-08-18-implicit-reads-at-sinks.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* The default taint tracking configuration now allows implicit reads from collections at sinks and in additional flow steps. This increases flow coverage for many taint tracking queries and helps reduce false negatives.
diff --git a/csharp/ql/lib/change-notes/released/5.2.2.md b/csharp/ql/lib/change-notes/released/5.2.2.md
new file mode 100644
index 00000000000..22402d6e8fa
--- /dev/null
+++ b/csharp/ql/lib/change-notes/released/5.2.2.md
@@ -0,0 +1,3 @@
+## 5.2.2
+
+No user-facing changes.
diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml
index 1684d0e72a2..e3b1b0c079d 100644
--- a/csharp/ql/lib/codeql-pack.release.yml
+++ b/csharp/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 5.2.1
+lastReleaseVersion: 5.2.2
diff --git a/csharp/ql/lib/ext/System.IO.model.yml b/csharp/ql/lib/ext/System.IO.model.yml
index 0b8b52d9e8a..549c324d66e 100644
--- a/csharp/ql/lib/ext/System.IO.model.yml
+++ b/csharp/ql/lib/ext/System.IO.model.yml
@@ -77,7 +77,7 @@ extensions:
- ["System.IO", "Path", False, "GetPathRoot", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
- ["System.IO", "Path", False, "GetPathRoot", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["System.IO", "Path", False, "GetRelativePath", "(System.String,System.String)", "", "Argument[1]", "ReturnValue", "taint", "manual"]
- - ["System.IO", "Stream", True, "BeginRead", "(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.IO", "Stream", True, "BeginRead", "(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- ["System.IO", "Stream", True, "BeginWrite", "(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"]
- ["System.IO", "Stream", False, "CopyTo", "(System.IO.Stream)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- ["System.IO", "Stream", True, "CopyTo", "(System.IO.Stream,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
@@ -85,17 +85,17 @@ extensions:
- ["System.IO", "Stream", False, "CopyToAsync", "(System.IO.Stream,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- ["System.IO", "Stream", True, "CopyToAsync", "(System.IO.Stream,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- ["System.IO", "Stream", False, "CopyToAsync", "(System.IO.Stream,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- - ["System.IO", "Stream", True, "Read", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.IO", "Stream", True, "Read", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "Stream", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "Stream", False, "ReadAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "Stream", True, "ReadAsync", "(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
# Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness
- - ["System.IO", "Stream", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.IO", "Stream", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "Stream", True, "ReadAtLeast", "(System.Span,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
# Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness
- ["System.IO", "Stream", True, "ReadAtLeastAsync", "(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- - ["System.IO", "Stream", True, "ReadExactly", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "Stream", True, "ReadExactly", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.IO", "Stream", True, "ReadExactly", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "Stream", True, "ReadExactly", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- ["System.IO", "Stream", True, "Write", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"]
- ["System.IO", "Stream", True, "Write", "(System.ReadOnlySpan)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"]
- ["System.IO", "Stream", False, "WriteAsync", "(System.Byte[],System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[this]", "taint", "manual"]
@@ -128,16 +128,16 @@ extensions:
- ["System.IO", "StringWriter", True, "WriteLineAsync", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"]
- ["System.IO", "StringWriter", True, "WriteLineAsync", "(System.Text.StringBuilder,System.Threading.CancellationToken)", "", "Argument[0]", "Argument[this]", "taint", "manual"]
- ["System.IO", "TextReader", True, "Read", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- - ["System.IO", "TextReader", True, "Read", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "TextReader", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "TextReader", True, "ReadAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "Read", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "Read", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "ReadAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
# Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness
- - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "TextReader", True, "ReadBlock", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "TextReader", True, "ReadBlock", "(System.Span)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
- - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "ReadAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "ReadBlock", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "ReadBlock", "(System.Span)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Char[],System.Int32,System.Int32)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
# Post-update nodes for `Memory` are currently unsupported. This model is provided for completeness
- - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.IO", "TextReader", True, "ReadBlockAsync", "(System.Memory,System.Threading.CancellationToken)", "", "Argument[this]", "Argument[0]", "taint", "manual"]
- ["System.IO", "TextReader", True, "ReadLine", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["System.IO", "TextReader", True, "ReadLineAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["System.IO", "TextReader", True, "ReadToEnd", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml
index 3853f03dc2f..870413e7569 100644
--- a/csharp/ql/lib/ext/System.model.yml
+++ b/csharp/ql/lib/ext/System.model.yml
@@ -39,15 +39,15 @@ extensions:
- ["System", "Convert", False, "ChangeType", "(System.Object,System.Type,System.IFormatProvider)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "ChangeType", "(System.Object,System.TypeCode)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "ChangeType", "(System.Object,System.TypeCode,System.IFormatProvider)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- - ["System", "Convert", False, "FromBase64CharArray", "(System.Char[],System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "taint", "manual"]
- - ["System", "Convert", False, "FromBase64String", "(System.String)", "", "Argument[0]", "ReturnValue.Element", "taint", "manual"]
- - ["System", "Convert", False, "FromHexString", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue.Element", "taint", "manual"]
- - ["System", "Convert", False, "FromHexString", "(System.String)", "", "Argument[0]", "ReturnValue.Element", "taint", "manual"]
+ - ["System", "Convert", False, "FromBase64CharArray", "(System.Char[],System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
+ - ["System", "Convert", False, "FromBase64String", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
+ - ["System", "Convert", False, "FromHexString", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
+ - ["System", "Convert", False, "FromHexString", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "GetTypeCode", "(System.Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "IsDBNull", "(System.Object)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)", "", "Argument[0].Element", "Argument[3].Element", "taint", "manual"]
+ - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)", "", "Argument[0].Element", "Argument[3]", "taint", "manual"]
- ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
- - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[3].Element", "taint", "manual"]
+ - ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[3]", "taint", "manual"]
- ["System", "Convert", False, "ToBase64CharArray", "(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "ToBase64String", "(System.Byte[])", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "ToBase64String", "(System.Byte[],System.Base64FormattingOptions)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
@@ -353,13 +353,13 @@ extensions:
- ["System", "Convert", False, "ToUInt64", "(System.UInt16)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "ToUInt64", "(System.UInt32)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- ["System", "Convert", False, "ToUInt64", "(System.UInt64)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- - ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[1].Element", "taint", "manual"]
+ - ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[1]", "taint", "manual"]
- ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[2]", "taint", "manual"]
- ["System", "Convert", False, "TryFromBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
- - ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "Argument[1].Element", "taint", "manual"]
+ - ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "Argument[1]", "taint", "manual"]
- ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "Argument[2]", "taint", "manual"]
- ["System", "Convert", False, "TryFromBase64String", "(System.String,System.Span,System.Int32)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
- - ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[1].Element", "taint", "manual"]
+ - ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[1]", "taint", "manual"]
- ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "Argument[2]", "taint", "manual"]
- ["System", "Convert", False, "TryToBase64Chars", "(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
- ["System", "Int32", False, "Parse", "(System.ReadOnlySpan,System.Globalization.NumberStyles,System.IFormatProvider)", "", "Argument[0].Element", "ReturnValue", "taint", "manual"]
diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml
index b99e5b5be64..f5ad09a43fa 100644
--- a/csharp/ql/lib/qlpack.yml
+++ b/csharp/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/csharp-all
-version: 5.2.2-dev
+version: 5.2.3-dev
groups: csharp
dbscheme: semmlecode.csharp.dbscheme
extractor: csharp
diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll
index b7681994e2c..3146720efe8 100644
--- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll
+++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll
@@ -29,7 +29,10 @@ predicate defaultTaintSanitizer(DataFlow::Node node) {
* of `c` at sinks and inputs to additional taint steps.
*/
bindingset[node]
-predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) { none() }
+predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c) {
+ exists(node) and
+ c.isElement()
+}
private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityConfiguration {
LocalTaintExprStepConfiguration() { this = "LocalTaintExprStepConfiguration" }
diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll
index f92bb0d2f44..ee345780654 100644
--- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll
+++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/ConditionalBypassQuery.qll
@@ -39,6 +39,15 @@ private module ConditionalBypassConfig implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ // from ConditionalBypass.ql
+ result = sink.(Sink).getSensitiveMethodCall().getLocation()
+ }
}
/**
diff --git a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll
index 5d9d18dcbac..27f6ab6935f 100644
--- a/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll
+++ b/csharp/ql/lib/semmle/code/csharp/security/dataflow/UnsafeDeserializationQuery.qll
@@ -59,6 +59,10 @@ private module TaintToObjectMethodTrackingConfig implements DataFlow::ConfigSig
predicate isSink(DataFlow::Node sink) { sink instanceof InstanceMethodSink }
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
+
+ predicate observeDiffInformedIncrementalMode() {
+ any() // used in one of the disjuncts in UnsafeDeserializationUntrustedInput.ql
+ }
}
/**
@@ -77,6 +81,10 @@ private module JsonConvertTrackingConfig implements DataFlow::ConfigSig {
}
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
+
+ predicate observeDiffInformedIncrementalMode() {
+ any() // used in one of the disjuncts in UnsafeDeserializationUntrustedInput.ql
+ }
}
/**
@@ -133,6 +141,10 @@ private module TypeNameTrackingConfig implements DataFlow::ConfigSig {
)
)
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // Only used as secondary config in UnsafeDeserializationUntrustedInput.ql
+ }
}
/**
@@ -149,6 +161,10 @@ private module TaintToConstructorOrStaticMethodTrackingConfig implements DataFlo
predicate isSink(DataFlow::Node sink) { sink instanceof ConstructorOrStaticMethodSink }
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
+
+ predicate observeDiffInformedIncrementalMode() {
+ any() // used in one of the disjuncts in UnsafeDeserializationUntrustedInput.ql
+ }
}
/**
@@ -186,6 +202,10 @@ private module TaintToObjectTypeTrackingConfig implements DataFlow::ConfigSig {
oc.getObjectType() instanceof StrongTypeDeserializer
)
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // only used as secondary config in UnsafeDeserializationUntrustedInput.ql
+ }
}
/**
@@ -210,6 +230,10 @@ private module WeakTypeCreationToUsageTrackingConfig implements DataFlow::Config
sink.asExpr() = mc.getQualifier()
)
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // only used as secondary config in UnsafeDeserializationUntrustedInput.ql
+ }
}
/**
diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md
index 7209d4cfb81..2539f93099f 100644
--- a/csharp/ql/src/CHANGELOG.md
+++ b/csharp/ql/src/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.3.3
+
+No user-facing changes.
+
## 1.3.2
No user-facing changes.
diff --git a/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql b/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql
index 9f70760ba60..8fcef4d4744 100644
--- a/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql
+++ b/csharp/ql/src/Likely Bugs/ThreadUnsafeICryptoTransformLambda.ql
@@ -24,6 +24,8 @@ module NotThreadSafeCryptoUsageIntoParallelInvokeConfig implements DataFlow::Con
}
predicate isSink(DataFlow::Node sink) { sink instanceof ParallelSink }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
}
module NotThreadSafeCryptoUsageIntoParallelInvoke =
diff --git a/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp b/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp
index 04f01720ce6..4af37eadfd7 100644
--- a/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp
+++ b/csharp/ql/src/Security Features/CWE-090/LDAPInjection.qhelp
@@ -12,7 +12,7 @@ is likely to be able to run malicious LDAP queries.
If user input must be included in an LDAP query, it should be escaped to
avoid a malicious user providing special characters that change the meaning
of the query. If possible, use an existing library, such as the AntiXSS
-library.
+library. One may also make their own encoder filter `LdapEncode` following RFC 4515 standards.
@@ -35,7 +35,6 @@ the query cannot be changed by a malicious user.
OWASP: LDAP Injection Prevention Cheat Sheet .
OWASP: Preventing LDAP Injection in Java .
-AntiXSS doc: LdapFilterEncode .
-AntiXSS doc: LdapDistinguishedNameEncode .
+RFC 4515: String Search Filter Definition .
diff --git a/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql b/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql
index 32508fa9d3f..1e33ed6a1fd 100644
--- a/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql
+++ b/csharp/ql/src/Security Features/CWE-798/HardcodedConnectionString.ql
@@ -38,6 +38,12 @@ module ConnectionStringConfig implements DataFlow::ConfigSig {
}
predicate isBarrier(DataFlow::Node node) { node instanceof StringFormatSanitizer }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ any(Call call | call.getAnArgument() = sink.asExpr()).getLocation() = result
+ }
}
/**
diff --git a/csharp/ql/src/change-notes/released/1.3.3.md b/csharp/ql/src/change-notes/released/1.3.3.md
new file mode 100644
index 00000000000..27a88ea0061
--- /dev/null
+++ b/csharp/ql/src/change-notes/released/1.3.3.md
@@ -0,0 +1,3 @@
+## 1.3.3
+
+No user-facing changes.
diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml
index 86a9cb32d86..eb1f7dabc84 100644
--- a/csharp/ql/src/codeql-pack.release.yml
+++ b/csharp/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.3.2
+lastReleaseVersion: 1.3.3
diff --git a/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql b/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql
index f18798c8b08..f175723c099 100644
--- a/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql
+++ b/csharp/ql/src/experimental/Security Features/CWE-759/HashWithoutSalt.ql
@@ -10,6 +10,7 @@
*/
import csharp
+import semmle.code.csharp.frameworks.system.Collections
import HashWithoutSalt::PathGraph
/** The C# class `Windows.Security.Cryptography.Core.HashAlgorithmProvider`. */
@@ -93,12 +94,17 @@ predicate hasAnotherHashCall(MethodCall mc) {
/** Holds if a password hash without salt is further processed in another method call. */
predicate hasFurtherProcessing(MethodCall mc) {
- mc.getTarget().fromLibrary() and
- (
- mc.getTarget().hasFullyQualifiedName("System", "Array", "Copy") or // Array.Copy(passwordHash, 0, password.Length), 0, key, 0, keyLen);
- mc.getTarget().hasFullyQualifiedName("System", "String", "Concat") or // string.Concat(passwordHash, saltkey)
- mc.getTarget().hasFullyQualifiedName("System", "Buffer", "BlockCopy") or // Buffer.BlockCopy(passwordHash, 0, allBytes, 0, 20)
- mc.getTarget().hasFullyQualifiedName("System", "String", "Format") // String.Format("{0}:{1}:{2}", username, salt, password)
+ exists(Method m | m = mc.getTarget() and m.fromLibrary() |
+ m.hasFullyQualifiedName("System", "Array", "Copy") // Array.Copy(passwordHash, 0, password.Length), 0, key, 0, keyLen);
+ or
+ m.hasFullyQualifiedName("System", "String", "Concat") // string.Concat(passwordHash, saltkey)
+ or
+ m.hasFullyQualifiedName("System", "Buffer", "BlockCopy") // Buffer.BlockCopy(passwordHash, 0, allBytes, 0, 20)
+ or
+ m.hasFullyQualifiedName("System", "String", "Format") // String.Format("{0}:{1}:{2}", username, salt, password)
+ or
+ m.getName() = "CopyTo" and
+ m.getDeclaringType().getABaseType*() instanceof SystemCollectionsICollectionInterface // passBytes.CopyTo(rawSalted, 0);
)
}
diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml
index ec0fab1f111..0567f720300 100644
--- a/csharp/ql/src/qlpack.yml
+++ b/csharp/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/csharp-queries
-version: 1.3.3-dev
+version: 1.3.4-dev
groups:
- csharp
- queries
diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs
index 705efd35e38..d7552376c0f 100644
--- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs
+++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.cs
@@ -116,7 +116,7 @@ namespace My.Qltest
{
var a = new object[] { new object() };
var b = Reverse(a);
- Sink(b); // No flow
+ Sink(b); // Flow
Sink(b[0]); // Flow
}
diff --git a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected
index 7254208be18..3099a3fec7e 100644
--- a/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected
+++ b/csharp/ql/test/library-tests/dataflow/external-models/ExternalFlow.expected
@@ -104,6 +104,7 @@ edges
| ExternalFlow.cs:117:17:117:17 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | provenance | |
| ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | ExternalFlow.cs:117:17:117:17 | access to local variable a : null [element] : Object | provenance | |
| ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:117:34:117:49 | { ..., ... } : null [element] : Object | provenance | |
+| ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | ExternalFlow.cs:119:18:119:18 | access to local variable b | provenance | |
| ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | provenance | |
| ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | provenance | |
| ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | provenance | MaD:7 |
@@ -240,6 +241,7 @@ nodes
| ExternalFlow.cs:118:17:118:17 | access to local variable b : null [element] : Object | semmle.label | access to local variable b : null [element] : Object |
| ExternalFlow.cs:118:21:118:30 | call to method Reverse : null [element] : Object | semmle.label | call to method Reverse : null [element] : Object |
| ExternalFlow.cs:118:29:118:29 | access to local variable a : null [element] : Object | semmle.label | access to local variable a : null [element] : Object |
+| ExternalFlow.cs:119:18:119:18 | access to local variable b | semmle.label | access to local variable b |
| ExternalFlow.cs:120:18:120:18 | access to local variable b : null [element] : Object | semmle.label | access to local variable b : null [element] : Object |
| ExternalFlow.cs:120:18:120:21 | access to array element | semmle.label | access to array element |
| ExternalFlow.cs:205:17:205:18 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object |
@@ -315,6 +317,7 @@ invalidModelRow
| ExternalFlow.cs:102:22:102:22 | access to parameter d | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:102:22:102:22 | access to parameter d | $@ | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | object creation of type Object : Object |
| ExternalFlow.cs:104:18:104:25 | access to field Field | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | ExternalFlow.cs:104:18:104:25 | access to field Field | $@ | ExternalFlow.cs:98:24:98:35 | object creation of type Object : Object | object creation of type Object : Object |
| ExternalFlow.cs:112:18:112:25 | access to property MyProp | ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | ExternalFlow.cs:112:18:112:25 | access to property MyProp | $@ | ExternalFlow.cs:111:24:111:35 | object creation of type Object : Object | object creation of type Object : Object |
+| ExternalFlow.cs:119:18:119:18 | access to local variable b | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:119:18:119:18 | access to local variable b | $@ | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | object creation of type Object : Object |
| ExternalFlow.cs:120:18:120:21 | access to array element | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | ExternalFlow.cs:120:18:120:21 | access to array element | $@ | ExternalFlow.cs:117:36:117:47 | object creation of type Object : Object | object creation of type Object : Object |
| ExternalFlow.cs:206:18:206:48 | call to method MixedFlowArgs | ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | ExternalFlow.cs:206:18:206:48 | call to method MixedFlowArgs | $@ | ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | object creation of type Object : Object |
| ExternalFlow.cs:212:18:212:62 | call to method GeneratedFlowWithGeneratedNeutral | ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | ExternalFlow.cs:212:18:212:62 | call to method GeneratedFlowWithGeneratedNeutral | $@ | ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | object creation of type Object : Object |
diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected
index ff615d53115..a87c1fea375 100644
--- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected
+++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected
@@ -1683,9 +1683,9 @@ summary
| Microsoft.AspNetCore.WebSockets;WebSocketMiddleware;WebSocketMiddleware;(Microsoft.AspNetCore.Http.RequestDelegate,Microsoft.Extensions.Options.IOptions,Microsoft.Extensions.Logging.ILoggerFactory);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated |
| Microsoft.AspNetCore.WebSockets;WebSocketsDependencyInjectionExtensions;AddWebSockets;(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated |
| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
| Microsoft.AspNetCore.WebUtilities;BufferedReadStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated |
@@ -1696,10 +1696,10 @@ summary
| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated |
| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;FileBufferingReadStream;(System.IO.Stream,System.Int32,System.Nullable,System.Func,System.Buffers.ArrayPool);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated |
-| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
| Microsoft.AspNetCore.WebUtilities;FileBufferingReadStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated |
@@ -1709,9 +1709,9 @@ summary
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;FileBufferingWriteStream;(System.Int32,System.Nullable,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated |
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated |
@@ -1719,10 +1719,10 @@ summary
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[1];ReturnValue;taint;df-generated |
| Microsoft.AspNetCore.WebUtilities;FileBufferingWriteStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;();Argument[this];ReturnValue;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadLine;();Argument[this];ReturnValue;taint;manual |
| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual |
| Microsoft.AspNetCore.WebUtilities;HttpRequestStreamReader;ReadToEndAsync;();Argument[this];ReturnValue;taint;manual |
@@ -5278,8 +5278,8 @@ summary
| ServiceStack.Text;NetCoreMemory;Deserialize;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated |
| ServiceStack.Text;NetCoreMemory;DeserializeAsync;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated |
| ServiceStack.Text;RecyclableMemoryStream;GetBuffer;();Argument[this];ReturnValue;taint;df-generated |
-| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
+| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| ServiceStack.Text;RecyclableMemoryStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
| ServiceStack.Text;RecyclableMemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated |
| ServiceStack.Text;RecyclableMemoryStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| ServiceStack.Text;RecyclableMemoryStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
@@ -10659,7 +10659,7 @@ summary
| System.Data.SqlTypes;SqlDecimal;op_UnaryNegation;(System.Data.SqlTypes.SqlDecimal);Argument[0];ReturnValue;value;dfc-generated |
| System.Data.SqlTypes;SqlDouble;ReadXml;(System.Xml.XmlReader);Argument[0];Argument[this];taint;df-generated |
| System.Data.SqlTypes;SqlDouble;WriteXml;(System.Xml.XmlWriter);Argument[this];Argument[0];taint;df-generated |
-| System.Data.SqlTypes;SqlFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
+| System.Data.SqlTypes;SqlFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
| System.Data.SqlTypes;SqlFileStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.Data.SqlTypes;SqlGuid;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated |
| System.Data.SqlTypes;SqlGuid;ReadXml;(System.Xml.XmlReader);Argument[0];Argument[this];taint;df-generated |
@@ -11970,16 +11970,16 @@ summary
| System.Globalization;TextInfo;ToUpper;(System.String);Argument[0];ReturnValue;value;dfc-generated |
| System.Globalization;TextInfo;get_CultureName;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;BrotliStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO.Compression;BrotliStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;BrotliStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;BrotliStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;BrotliStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO.Compression;BrotliStream;BrotliStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.BrotliStream._stream];value;dfc-generated |
| System.IO.Compression;BrotliStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;BrotliStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO.Compression;BrotliStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;BrotliStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;BrotliStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;BrotliStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;BrotliStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;BrotliStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;BrotliStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;BrotliStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;BrotliStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;BrotliStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;BrotliStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -11989,7 +11989,7 @@ summary
| System.IO.Compression;BrotliStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;BrotliStream;get_BaseStream;();Argument[this].SyntheticField[System.IO.Compression.BrotliStream._stream];ReturnValue;value;dfc-generated |
| System.IO.Compression;DeflateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO.Compression;DeflateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;DeflateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;DeflateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;DeflateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO.Compression;DeflateStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual |
@@ -12000,10 +12000,10 @@ summary
| System.IO.Compression;DeflateStream;DeflateStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);Argument[0];Argument[this];taint;manual |
| System.IO.Compression;DeflateStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;DeflateStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO.Compression;DeflateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;DeflateStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;DeflateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;DeflateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;DeflateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;DeflateStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;DeflateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;DeflateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;DeflateStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;DeflateStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;DeflateStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -12013,7 +12013,7 @@ summary
| System.IO.Compression;DeflateStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;DeflateStream;get_BaseStream;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;GZipStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO.Compression;GZipStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;GZipStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;GZipStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;GZipStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO.Compression;GZipStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual |
@@ -12023,10 +12023,10 @@ summary
| System.IO.Compression;GZipStream;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionLevel,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];value;dfc-generated |
| System.IO.Compression;GZipStream;GZipStream;(System.IO.Stream,System.IO.Compression.CompressionMode,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];value;dfc-generated |
| System.IO.Compression;GZipStream;GZipStream;(System.IO.Stream,System.IO.Compression.ZLibCompressionOptions,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];value;dfc-generated |
-| System.IO.Compression;GZipStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;GZipStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;GZipStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;GZipStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;GZipStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;GZipStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;GZipStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;GZipStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;GZipStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;GZipStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;GZipStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -12036,17 +12036,17 @@ summary
| System.IO.Compression;GZipStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;GZipStream;get_BaseStream;();Argument[this].SyntheticField[System.IO.Compression.GZipStream._deflateStream].SyntheticField[System.IO.Compression.DeflateStream._stream];ReturnValue;value;dfc-generated |
| System.IO.Compression;ZLibStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO.Compression;ZLibStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;ZLibStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;ZLibStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;ZLibStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO.Compression;ZLibStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;ZLibStream;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;ZLibStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.Compression;ZLibStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO.Compression;ZLibStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;ZLibStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;ZLibStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Compression;ZLibStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Compression;ZLibStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;ZLibStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;ZLibStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO.Compression;ZLibStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO.Compression;ZLibStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;ZLibStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Compression;ZLibStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -12090,16 +12090,16 @@ summary
| System.IO.IsolatedStorage;IsolatedStorage;get_AssemblyIdentity;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.IsolatedStorage;IsolatedStorage;get_DomainIdentity;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this].SyntheticField[System.IO.FileStream._strategy].SyntheticField[System.IO.Strategies.DerivedFileStreamStrategy._fileStream];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO.IsolatedStorage;IsolatedStorageFileStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO.IsolatedStorage;IsolatedStorageFileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO.IsolatedStorage;IsolatedStorageFileStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -12150,15 +12150,15 @@ summary
| System.IO.Pipes;NamedPipeServerStream;NamedPipeServerStream;(System.IO.Pipes.PipeDirection,System.Boolean,System.Boolean,Microsoft.Win32.SafeHandles.SafePipeHandle);Argument[3];Argument[this];taint;df-generated |
| System.IO.Pipes;NamedPipeServerStream;RunAsClient;(System.IO.Pipes.PipeStreamImpersonationWorker);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated |
| System.IO.Pipes;PipeStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO.Pipes;PipeStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Pipes;PipeStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO.Pipes;PipeStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Pipes;PipeStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO.Pipes;PipeStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
| System.IO.Pipes;PipeStream;InitializeHandle;(Microsoft.Win32.SafeHandles.SafePipeHandle,System.Boolean,System.Boolean);Argument[0];Argument[this].SyntheticField[System.IO.Pipes.PipeStream._handle];value;dfc-generated |
-| System.IO.Pipes;PipeStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Pipes;PipeStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Pipes;PipeStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO.Pipes;PipeStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO.Pipes;PipeStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO.Pipes;PipeStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO.Pipes;PipeStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO.Pipes;PipeStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO.Pipes;PipeStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Pipes;PipeStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO.Pipes;PipeStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -12180,7 +12180,7 @@ summary
| System.IO;BinaryWriter;Write;(System.ReadOnlySpan);Argument[0];Argument[this];taint;df-generated |
| System.IO;BinaryWriter;get_BaseStream;();Argument[this].Field[System.IO.BinaryWriter.OutStream];ReturnValue;value;dfc-generated |
| System.IO;BufferedStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO;BufferedStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;BufferedStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO;BufferedStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO;BufferedStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO;BufferedStream;BufferedStream;(System.IO.Stream);Argument[0];Argument[this];taint;manual |
@@ -12189,10 +12189,10 @@ summary
| System.IO;BufferedStream;CopyToAsync;(System.IO.Stream,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;BufferedStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO;BufferedStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO;BufferedStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;BufferedStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;BufferedStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;BufferedStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;BufferedStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;BufferedStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;BufferedStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;BufferedStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;BufferedStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO;BufferedStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO;BufferedStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -12302,7 +12302,7 @@ summary
| System.IO;FileNotFoundException;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated |
| System.IO;FileNotFoundException;get_Message;();Argument[this].SyntheticField[System.Exception._message];ReturnValue;value;dfc-generated |
| System.IO;FileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO;FileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;FileStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO;FileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO;FileStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO;FileStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual |
@@ -12320,10 +12320,10 @@ summary
| System.IO;FileStream;FileStream;(System.String,System.IO.FileStreamOptions);Argument[this];Argument[this].SyntheticField[System.IO.FileStream._strategy].SyntheticField[System.IO.Strategies.DerivedFileStreamStrategy._fileStream];value;dfc-generated |
| System.IO;FileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this].SyntheticField[System.IO.FileStream._strategy].SyntheticField[System.IO.Strategies.DerivedFileStreamStrategy._fileStream];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
| System.IO;FileStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO;FileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;FileStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;FileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;FileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;FileStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;FileStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;FileStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;FileStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;FileStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO;FileStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.IO;FileStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -12364,7 +12364,7 @@ summary
| System.IO;FileSystemWatcher;remove_Error;(System.IO.ErrorEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated |
| System.IO;FileSystemWatcher;remove_Renamed;(System.IO.RenamedEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated |
| System.IO;MemoryStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO;MemoryStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;MemoryStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO;MemoryStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO;MemoryStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO;MemoryStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual |
@@ -12376,10 +12376,10 @@ summary
| System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean);Argument[0].Element;Argument[this];taint;manual |
| System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);Argument[0].Element;Argument[this];taint;manual |
-| System.IO;MemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;MemoryStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;MemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;MemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;MemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;MemoryStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;MemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;MemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;MemoryStream;ToArray;();Argument[this];ReturnValue;taint;manual |
| System.IO;MemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated |
| System.IO;MemoryStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
@@ -12463,7 +12463,7 @@ summary
| System.IO;RenamedEventArgs;get_OldName;();Argument[this].SyntheticField[System.IO.RenamedEventArgs._oldName];ReturnValue;value;dfc-generated |
| System.IO;RenamedEventHandler;BeginInvoke;(System.Object,System.IO.RenamedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated |
| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO;Stream;CopyTo;(System.IO.Stream);Argument[this];Argument[0];taint;manual |
@@ -12475,15 +12475,15 @@ summary
| System.IO;Stream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO;Stream;FlushAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO;Stream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0];taint;manual |
| System.IO;Stream;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
-| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0];taint;manual |
| System.IO;Stream;Synchronized;(System.IO.Stream);Argument[0];ReturnValue;value;dfc-generated |
| System.IO;Stream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO;Stream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
@@ -12494,14 +12494,14 @@ summary
| System.IO;Stream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[1];ReturnValue;taint;df-generated |
| System.IO;Stream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
| System.IO;StreamReader;Read;();Argument[this];ReturnValue;taint;manual |
-| System.IO;StreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StreamReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StreamReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StreamReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StreamReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StreamReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;StreamReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;StreamReader;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;StreamReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;StreamReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;StreamReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;StreamReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;StreamReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;StreamReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;StreamReader;ReadLine;();Argument[this];ReturnValue;taint;manual |
| System.IO;StreamReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual |
| System.IO;StreamReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
@@ -12577,13 +12577,13 @@ summary
| System.IO;StreamWriter;get_BaseStream;();Argument[this].SyntheticField[System.IO.StreamWriter._stream];ReturnValue;value;dfc-generated |
| System.IO;StreamWriter;get_Encoding;();Argument[this];ReturnValue;taint;df-generated |
| System.IO;StringReader;Read;();Argument[this];ReturnValue;taint;manual |
-| System.IO;StringReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StringReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StringReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StringReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StringReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StringReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;StringReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;StringReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;StringReader;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;StringReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;StringReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;StringReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;StringReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;StringReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;StringReader;ReadLine;();Argument[this];ReturnValue;taint;manual |
| System.IO;StringReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual |
| System.IO;StringReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
@@ -12615,14 +12615,14 @@ summary
| System.IO;StringWriter;WriteLineAsync;(System.Text.StringBuilder,System.Threading.CancellationToken);Argument[0];Argument[this];taint;manual |
| System.IO;StringWriter;get_Encoding;();Argument[this];ReturnValue;taint;df-generated |
| System.IO;TextReader;Read;();Argument[this];ReturnValue;taint;manual |
-| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;TextReader;ReadLine;();Argument[this];ReturnValue;taint;manual |
| System.IO;TextReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual |
| System.IO;TextReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
@@ -12707,10 +12707,10 @@ summary
| System.IO;UnmanagedMemoryStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
| System.IO;UnmanagedMemoryStream;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated |
| System.IO;UnmanagedMemoryStream;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated |
-| System.IO;UnmanagedMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;UnmanagedMemoryStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;UnmanagedMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;UnmanagedMemoryStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;UnmanagedMemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;UnmanagedMemoryStream;UnmanagedMemoryStream;(System.Byte*,System.Int64);Argument[0];Argument[this];taint;df-generated |
| System.IO;UnmanagedMemoryStream;UnmanagedMemoryStream;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated |
| System.IO;UnmanagedMemoryStream;UnmanagedMemoryStream;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);Argument[0];Argument[this];taint;df-generated |
@@ -15118,15 +15118,15 @@ summary
| System.Net.Quic;QuicListener;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.Net.Quic;QuicListenerOptions;set_ConnectionOptionsCallback;(System.Func>);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated |
| System.Net.Quic;QuicStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.Net.Quic;QuicStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Quic;QuicStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.Net.Quic;QuicStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Quic;QuicStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.Net.Quic;QuicStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.Net.Quic;QuicStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.Net.Quic;QuicStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Quic;QuicStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Quic;QuicStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Quic;QuicStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Quic;QuicStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.Net.Quic;QuicStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.Net.Quic;QuicStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.Net.Quic;QuicStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.Net.Quic;QuicStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Quic;QuicStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Quic;QuicStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -15159,14 +15159,14 @@ summary
| System.Net.Security;NegotiateStream;BeginAuthenticateAsServer;(System.Net.NetworkCredential,System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.Net.Security.ProtectionLevel,System.Security.Principal.TokenImpersonationLevel,System.AsyncCallback,System.Object);Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated |
| System.Net.Security;NegotiateStream;BeginAuthenticateAsServer;(System.Security.Authentication.ExtendedProtection.ExtendedProtectionPolicy,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated |
| System.Net.Security;NegotiateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.Net.Security;NegotiateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Security;NegotiateStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.Net.Security;NegotiateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Security;NegotiateStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.Net.Security;NegotiateStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.Net.Security;NegotiateStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.Net.Security;NegotiateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Security;NegotiateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Security;NegotiateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Security;NegotiateStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.Net.Security;NegotiateStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.Net.Security;NegotiateStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.Net.Security;NegotiateStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Security;NegotiateStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Security;NegotiateStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated |
@@ -15212,14 +15212,14 @@ summary
| System.Net.Security;SslStream;BeginAuthenticateAsServer;(System.Security.Cryptography.X509Certificates.X509Certificate,System.Boolean,System.Boolean,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated |
| System.Net.Security;SslStream;BeginAuthenticateAsServer;(System.Security.Cryptography.X509Certificates.X509Certificate,System.Boolean,System.Security.Authentication.SslProtocols,System.Boolean,System.AsyncCallback,System.Object);Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated |
| System.Net.Security;SslStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.Net.Security;SslStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Security;SslStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.Net.Security;SslStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Security;SslStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.Net.Security;SslStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.Net.Security;SslStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.Net.Security;SslStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Security;SslStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Security;SslStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Security;SslStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.Net.Security;SslStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.Net.Security;SslStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.Net.Security;SslStream;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated |
| System.Net.Security;SslStream;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated |
| System.Net.Security;SslStream;SslStream;(System.IO.Stream,System.Boolean,System.Net.Security.RemoteCertificateValidationCallback,System.Net.Security.LocalCertificateSelectionCallback);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated |
@@ -15247,15 +15247,15 @@ summary
| System.Net.Sockets;MulticastOption;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);Argument[0];Argument[this];taint;df-generated |
| System.Net.Sockets;MulticastOption;MulticastOption;(System.Net.IPAddress,System.Net.IPAddress);Argument[1];Argument[this];taint;df-generated |
| System.Net.Sockets;NetworkStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.Net.Sockets;NetworkStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Sockets;NetworkStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.Net.Sockets;NetworkStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Sockets;NetworkStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.Net.Sockets;NetworkStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
| System.Net.Sockets;NetworkStream;NetworkStream;(System.Net.Sockets.Socket,System.IO.FileAccess,System.Boolean);Argument[0];Argument[this].SyntheticField[System.Net.Sockets.NetworkStream._streamSocket];value;dfc-generated |
-| System.Net.Sockets;NetworkStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Sockets;NetworkStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Sockets;NetworkStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.Net.Sockets;NetworkStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.Net.Sockets;NetworkStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.Net.Sockets;NetworkStream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.Net.Sockets;NetworkStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.Net.Sockets;NetworkStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.Net.Sockets;NetworkStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Sockets;NetworkStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
| System.Net.Sockets;NetworkStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
@@ -17765,7 +17765,7 @@ summary
| System.Security.Cryptography;CngUIPolicy;CngUIPolicy;(System.Security.Cryptography.CngUIProtectionLevels,System.String,System.String,System.String,System.String);Argument[3];Argument[this].Property[System.Security.Cryptography.CngUIPolicy.UseContext];value;dfc-generated |
| System.Security.Cryptography;CngUIPolicy;CngUIPolicy;(System.Security.Cryptography.CngUIProtectionLevels,System.String,System.String,System.String,System.String);Argument[4];Argument[this].Property[System.Security.Cryptography.CngUIPolicy.CreationTitle];value;dfc-generated |
| System.Security.Cryptography;CryptoStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.Security.Cryptography;CryptoStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.Security.Cryptography;CryptoStream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.Security.Cryptography;CryptoStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.Security.Cryptography;CryptoStream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.Security.Cryptography;CryptoStream;CopyTo;(System.IO.Stream,System.Int32);Argument[this];Argument[0];taint;manual |
@@ -17774,9 +17774,9 @@ summary
| System.Security.Cryptography;CryptoStream;CryptoStream;(System.IO.Stream,System.Security.Cryptography.ICryptoTransform,System.Security.Cryptography.CryptoStreamMode,System.Boolean);Argument[1];Argument[this];taint;df-generated |
| System.Security.Cryptography;CryptoStream;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.Security.Cryptography;CryptoStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.Security.Cryptography;CryptoStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.Security.Cryptography;CryptoStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.Security.Cryptography;CryptoStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.Security.Cryptography;CryptoStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.Security.Cryptography;CryptoStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual |
| System.Security.Cryptography;CryptoStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0];Argument[this];taint;df-generated |
@@ -21887,15 +21887,15 @@ summary
| System;Convert;ChangeType;(System.Object,System.Type,System.IFormatProvider);Argument[0];ReturnValue;taint;manual |
| System;Convert;ChangeType;(System.Object,System.TypeCode);Argument[0];ReturnValue;taint;manual |
| System;Convert;ChangeType;(System.Object,System.TypeCode,System.IFormatProvider);Argument[0];ReturnValue;taint;manual |
-| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue.Element;taint;manual |
-| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue.Element;taint;manual |
-| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue.Element;taint;manual |
-| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue.Element;taint;manual |
+| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue;taint;manual |
+| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue;taint;manual |
+| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue;taint;manual |
+| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue;taint;manual |
| System;Convert;GetTypeCode;(System.Object);Argument[0];ReturnValue;taint;manual |
| System;Convert;IsDBNull;(System.Object);Argument[0];ReturnValue;taint;manual |
-| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3].Element;taint;manual |
+| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3];taint;manual |
| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;ReturnValue;taint;manual |
-| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3].Element;taint;manual |
+| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3];taint;manual |
| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual |
| System;Convert;ToBase64String;(System.Byte[]);Argument[0].Element;ReturnValue;taint;manual |
| System;Convert;ToBase64String;(System.Byte[],System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual |
@@ -22201,13 +22201,13 @@ summary
| System;Convert;ToUInt64;(System.UInt16);Argument[0];ReturnValue;taint;manual |
| System;Convert;ToUInt64;(System.UInt32);Argument[0];ReturnValue;taint;manual |
| System;Convert;ToUInt64;(System.UInt64);Argument[0];ReturnValue;taint;manual |
-| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;taint;manual |
+| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1];taint;manual |
| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[2];taint;manual |
| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;ReturnValue;taint;manual |
-| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1].Element;taint;manual |
+| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1];taint;manual |
| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[2];taint;manual |
| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];ReturnValue;taint;manual |
-| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1].Element;taint;manual |
+| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1];taint;manual |
| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[2];taint;manual |
| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual |
| System;Converter;BeginInvoke;(TInput,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated |
diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected
index faf716f4d7b..ef56fb2f1e2 100644
--- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected
+++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected
@@ -9285,7 +9285,7 @@
| System.IO;RenamedEventArgs;get_OldName;();Argument[this].SyntheticField[System.IO.RenamedEventArgs._oldName];ReturnValue;value;dfc-generated |
| System.IO;RenamedEventHandler;BeginInvoke;(System.Object,System.IO.RenamedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated |
| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
-| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;Stream;BeginRead;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[this];Argument[0];taint;manual |
| System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[0].Element;Argument[this];taint;manual |
| System.IO;Stream;BeginWrite;(System.Byte[],System.Int32,System.Int32,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;manual |
| System.IO;Stream;CopyTo;(System.IO.Stream);Argument[this];Argument[0];taint;manual |
@@ -9296,15 +9296,15 @@
| System.IO;Stream;CopyToAsync;(System.IO.Stream,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;Stream;FlushAsync;();Argument[this];ReturnValue;taint;df-generated |
| System.IO;Stream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated |
-| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;Stream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadAtLeast;(System.Span,System.Int32,System.Boolean);Argument[this];Argument[0];taint;manual |
| System.IO;Stream;ReadAtLeastAsync;(System.Memory,System.Int32,System.Boolean,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
-| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;Stream;ReadExactly;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;Stream;ReadExactly;(System.Span);Argument[this];Argument[0];taint;manual |
| System.IO;Stream;Synchronized;(System.IO.Stream);Argument[0];ReturnValue;value;dfc-generated |
| System.IO;Stream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual |
| System.IO;Stream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual |
@@ -9336,14 +9336,14 @@
| System.IO;StringWriter;StringWriter;(System.Text.StringBuilder,System.IFormatProvider);Argument[0];Argument[this];taint;manual |
| System.IO;StringWriter;ToString;();Argument[this];ReturnValue;taint;manual |
| System.IO;TextReader;Read;();Argument[this];ReturnValue;taint;manual |
-| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual |
-| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual |
+| System.IO;TextReader;Read;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;Read;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlock;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlock;(System.Span);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlockAsync;(System.Char[],System.Int32,System.Int32);Argument[this];Argument[0];taint;manual |
+| System.IO;TextReader;ReadBlockAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0];taint;manual |
| System.IO;TextReader;ReadLine;();Argument[this];ReturnValue;taint;manual |
| System.IO;TextReader;ReadLineAsync;();Argument[this];ReturnValue;taint;manual |
| System.IO;TextReader;ReadLineAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated |
@@ -16908,15 +16908,15 @@
| System;Convert;ChangeType;(System.Object,System.Type,System.IFormatProvider);Argument[0];ReturnValue;taint;manual |
| System;Convert;ChangeType;(System.Object,System.TypeCode);Argument[0];ReturnValue;taint;manual |
| System;Convert;ChangeType;(System.Object,System.TypeCode,System.IFormatProvider);Argument[0];ReturnValue;taint;manual |
-| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue.Element;taint;manual |
-| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue.Element;taint;manual |
-| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue.Element;taint;manual |
-| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue.Element;taint;manual |
+| System;Convert;FromBase64CharArray;(System.Char[],System.Int32,System.Int32);Argument[0].Element;ReturnValue;taint;manual |
+| System;Convert;FromBase64String;(System.String);Argument[0];ReturnValue;taint;manual |
+| System;Convert;FromHexString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue;taint;manual |
+| System;Convert;FromHexString;(System.String);Argument[0];ReturnValue;taint;manual |
| System;Convert;GetTypeCode;(System.Object);Argument[0];ReturnValue;taint;manual |
| System;Convert;IsDBNull;(System.Object);Argument[0];ReturnValue;taint;manual |
-| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3].Element;taint;manual |
+| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;Argument[3];taint;manual |
| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32);Argument[0].Element;ReturnValue;taint;manual |
-| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3].Element;taint;manual |
+| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[3];taint;manual |
| System;Convert;ToBase64CharArray;(System.Byte[],System.Int32,System.Int32,System.Char[],System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual |
| System;Convert;ToBase64String;(System.Byte[]);Argument[0].Element;ReturnValue;taint;manual |
| System;Convert;ToBase64String;(System.Byte[],System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual |
@@ -17222,13 +17222,13 @@
| System;Convert;ToUInt64;(System.UInt16);Argument[0];ReturnValue;taint;manual |
| System;Convert;ToUInt64;(System.UInt32);Argument[0];ReturnValue;taint;manual |
| System;Convert;ToUInt64;(System.UInt64);Argument[0];ReturnValue;taint;manual |
-| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;taint;manual |
+| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1];taint;manual |
| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[2];taint;manual |
| System;Convert;TryFromBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;ReturnValue;taint;manual |
-| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1].Element;taint;manual |
+| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[1];taint;manual |
| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];Argument[2];taint;manual |
| System;Convert;TryFromBase64String;(System.String,System.Span,System.Int32);Argument[0];ReturnValue;taint;manual |
-| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1].Element;taint;manual |
+| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[1];taint;manual |
| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;Argument[2];taint;manual |
| System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual |
| System;Converter;BeginInvoke;(TInput,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated |
diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected
index a3850dd73eb..124caa4e69e 100644
--- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected
+++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest1.expected
@@ -1,30 +1,30 @@
models
| 1 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual |
| 2 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual |
-| 3 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual |
+| 3 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual |
| 4 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual |
edges
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:4 |
+| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:4 |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:2 |
-| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:3 |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | |
+| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:3 |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | |
| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:4 |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:4 |
nodes
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object |
+| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] |
| Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream |
| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] |
| Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... |
| Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] |
subpaths
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
#select
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... |
diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected
index 9b1b32b57fd..d3ae7cc363d 100644
--- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected
+++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest2.expected
@@ -2,36 +2,36 @@ models
| 1 | Sink: System.Data.SqlClient; SqlCommand; false; SqlCommand; (System.String,System.Data.SqlClient.SqlConnection); ; Argument[0]; sql-injection; manual |
| 2 | Source: My.Qltest; TestSources; false; ExecuteQuery; (System.String); ; ReturnValue; database; manual |
| 3 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual |
-| 4 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual |
+| 4 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual |
| 5 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual |
edges
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:5 |
+| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:5 |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:3 |
-| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:4 |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | |
+| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:4 |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | |
| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:5 |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:5 |
| Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 |
nodes
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object |
+| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] |
| Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream |
| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] |
| Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... |
| Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] |
| Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String |
| Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... |
subpaths
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
#select
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... |
diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected
index ee8d0615b2d..ea0ab7943d2 100644
--- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected
+++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest3.expected
@@ -4,18 +4,18 @@ models
| 3 | Source: My.Qltest; TestSources; false; GetCliArg; (System.Int32); ; ReturnValue; commandargs; manual |
| 4 | Source: My.Qltest; TestSources; false; ReadEnv; (System.String); ; ReturnValue; environment; manual |
| 5 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual |
-| 6 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual |
+| 6 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual |
| 7 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual |
edges
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:7 |
+| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:7 |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:5 |
-| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:6 |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | |
+| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:6 |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | |
| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:7 |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:7 |
| Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 |
| Test.cs:43:20:43:25 | access to local variable result : String | Test.cs:46:42:46:96 | ... + ... | provenance | Sink:MaD:1 |
@@ -23,16 +23,16 @@ edges
| Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:3 |
nodes
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object |
+| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] |
| Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream |
| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] |
| Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... |
| Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] |
| Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String |
| Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... |
@@ -43,7 +43,7 @@ nodes
| Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String |
| Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... |
subpaths
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
#select
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... |
diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected
index cac7f178b40..9648aa5e5eb 100644
--- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected
+++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest4.expected
@@ -5,18 +5,18 @@ models
| 4 | Source: My.Qltest; TestSources; false; GetCustom; (System.String); ; ReturnValue; custom; manual |
| 5 | Source: My.Qltest; TestSources; false; ReadEnv; (System.String); ; ReturnValue; environment; manual |
| 6 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual |
-| 7 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual |
+| 7 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual |
| 8 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual |
edges
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:8 |
+| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:8 |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:6 |
-| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:7 |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | |
+| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:7 |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | |
| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:8 |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:8 |
| Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 |
| Test.cs:43:20:43:25 | access to local variable result : String | Test.cs:46:42:46:96 | ... + ... | provenance | Sink:MaD:1 |
@@ -26,16 +26,16 @@ edges
| Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:3 |
nodes
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object |
+| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] |
| Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream |
| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] |
| Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... |
| Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] |
| Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String |
| Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... |
@@ -49,7 +49,7 @@ nodes
| Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String |
| Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... |
subpaths
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
#select
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... |
diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected
index b0e7142693f..b13812650b8 100644
--- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected
+++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest5.expected
@@ -3,33 +3,33 @@ models
| 2 | Source: My.Qltest; TestSources; false; GetCliArg; (System.Int32); ; ReturnValue; commandargs; manual |
| 3 | Source: My.Qltest; TestSources; false; ReadEnv; (System.String); ; ReturnValue; environment; manual |
| 4 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual |
-| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual |
+| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual |
| 6 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual |
edges
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 |
+| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:4 |
-| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:5 |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | |
+| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:5 |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | |
| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 |
| Test.cs:43:20:43:25 | access to local variable result : String | Test.cs:46:42:46:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:43:20:43:25 | access to local variable result : String | provenance | Src:MaD:3 |
| Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:2 |
nodes
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object |
+| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] |
| Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream |
| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] |
| Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... |
| Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] |
| Test.cs:43:20:43:25 | access to local variable result : String | semmle.label | access to local variable result : String |
| Test.cs:43:29:43:50 | call to method ReadEnv : String | semmle.label | call to method ReadEnv : String |
| Test.cs:46:42:46:96 | ... + ... | semmle.label | ... + ... |
@@ -37,7 +37,7 @@ nodes
| Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String |
| Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... |
subpaths
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
#select
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... |
| Test.cs:43:29:43:50 | call to method ReadEnv : String | Test.cs:46:42:46:96 | ... + ... |
diff --git a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected
index ae9fccfab80..ccaa28dde3e 100644
--- a/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected
+++ b/csharp/ql/test/library-tests/dataflow/threat-models/threat-models-flowtest6.expected
@@ -3,33 +3,33 @@ models
| 2 | Source: My.Qltest; TestSources; false; ExecuteQuery; (System.String); ; ReturnValue; database; manual |
| 3 | Source: My.Qltest; TestSources; false; GetCliArg; (System.Int32); ; ReturnValue; commandargs; manual |
| 4 | Source: System.Net.Sockets; TcpClient; false; GetStream; ; ; ReturnValue; remote; manual |
-| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0].Element; taint; manual |
+| 5 | Summary: System.IO; Stream; true; Read; (System.Byte[],System.Int32,System.Int32); ; Argument[this]; Argument[0]; taint; manual |
| 6 | Summary: System.Text; Encoding; true; GetString; (System.Byte[]); ; Argument[0].Element; ReturnValue; taint; manual |
edges
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 |
+| Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | provenance | |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | provenance | MaD:6 |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | provenance | |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | provenance | Src:MaD:4 |
-| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | provenance | MaD:5 |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | provenance | |
+| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | provenance | MaD:5 |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | provenance | |
| Test.cs:28:85:28:105 | call to method BytesToString : String | Test.cs:28:42:28:111 | ... + ... | provenance | Sink:MaD:1 |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | provenance | |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | provenance | |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:28:85:28:105 | call to method BytesToString : String | provenance | MaD:6 |
| Test.cs:34:20:34:25 | access to local variable result : String | Test.cs:37:42:37:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:34:20:34:25 | access to local variable result : String | provenance | Src:MaD:2 |
| Test.cs:62:20:62:25 | access to local variable result : String | Test.cs:65:42:65:96 | ... + ... | provenance | Sink:MaD:1 |
| Test.cs:62:29:62:48 | call to method GetCliArg : String | Test.cs:62:20:62:25 | access to local variable result : String | provenance | Src:MaD:3 |
nodes
-| Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | semmle.label | bytes : Byte[] [element] : Object |
+| Test.cs:12:45:12:49 | bytes : Byte[] | semmle.label | bytes : Byte[] |
| Test.cs:15:20:15:61 | call to method GetString : String | semmle.label | call to method GetString : String |
-| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] [element] : Object | semmle.label | access to parameter bytes : Byte[] [element] : Object |
+| Test.cs:15:56:15:60 | access to parameter bytes : Byte[] | semmle.label | access to parameter bytes : Byte[] |
| Test.cs:23:33:23:38 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | semmle.label | call to method GetStream : NetworkStream |
| Test.cs:25:29:25:34 | access to local variable stream : NetworkStream | semmle.label | access to local variable stream : NetworkStream |
-| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] [element] : Object | semmle.label | [post] access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:25:41:25:46 | [post] access to local variable buffer : Byte[] | semmle.label | [post] access to local variable buffer : Byte[] |
| Test.cs:28:42:28:111 | ... + ... | semmle.label | ... + ... |
| Test.cs:28:85:28:105 | call to method BytesToString : String | semmle.label | call to method BytesToString : String |
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | semmle.label | access to local variable buffer : Byte[] [element] : Object |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | semmle.label | access to local variable buffer : Byte[] |
| Test.cs:34:20:34:25 | access to local variable result : String | semmle.label | access to local variable result : String |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | semmle.label | call to method ExecuteQuery : String |
| Test.cs:37:42:37:96 | ... + ... | semmle.label | ... + ... |
@@ -37,7 +37,7 @@ nodes
| Test.cs:62:29:62:48 | call to method GetCliArg : String | semmle.label | call to method GetCliArg : String |
| Test.cs:65:42:65:96 | ... + ... | semmle.label | ... + ... |
subpaths
-| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] [element] : Object | Test.cs:12:45:12:49 | bytes : Byte[] [element] : Object | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
+| Test.cs:28:99:28:104 | access to local variable buffer : Byte[] | Test.cs:12:45:12:49 | bytes : Byte[] | Test.cs:15:20:15:61 | call to method GetString : String | Test.cs:28:85:28:105 | call to method BytesToString : String |
#select
| Test.cs:23:42:23:59 | call to method GetStream : NetworkStream | Test.cs:28:42:28:111 | ... + ... |
| Test.cs:34:29:34:69 | call to method ExecuteQuery : String | Test.cs:37:42:37:96 | ... + ... |
diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected
index 3b9a54fafb3..476875a279e 100644
--- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected
+++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected
@@ -1,6 +1,13 @@
+#select
+| Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | User-provided value |
+| Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | User-provided value |
+| Name.cs:13:53:13:59 | access to property TheName | NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList2.cs:31:57:31:60 | access to property Name : String | User-provided value |
+| Name.cs:13:53:13:59 | access to property TheName | NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList.cs:31:99:31:102 | access to property Name : String | User-provided value |
edges
-| NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:149 |
-| NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:149 |
+| NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:1 |
+| NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:1 |
+models
+| 1 | Sink: Microsoft.AspNetCore.Components; MarkupString; false; op_Explicit; (System.String); ; Argument[0]; html-injection; manual |
nodes
| Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | semmle.label | access to property UrlParam |
| Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | semmle.label | access to property QueryParam |
@@ -8,8 +15,3 @@ nodes
| NameList2.cs:31:57:31:60 | access to property Name : String | semmle.label | access to property Name : String |
| NameList.cs:31:99:31:102 | access to property Name : String | semmle.label | access to property Name : String |
subpaths
-#select
-| Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | User-provided value |
-| Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | User-provided value |
-| Name.cs:13:53:13:59 | access to property TheName | NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList2.cs:31:57:31:60 | access to property Name : String | User-provided value |
-| Name.cs:13:53:13:59 | access to property TheName | NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList.cs:31:99:31:102 | access to property Name : String | User-provided value |
diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref
index faad1d6403c..89b5b951bdb 100644
--- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref
+++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref
@@ -1 +1,2 @@
-Security Features/CWE-079/XSS.ql
\ No newline at end of file
+query: Security Features/CWE-079/XSS.ql
+postprocess: utils/test/PrettyPrintModels.ql
diff --git a/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.cs b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.cs
new file mode 100644
index 00000000000..d4177a57661
--- /dev/null
+++ b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.cs
@@ -0,0 +1,13 @@
+public class CollectionTaintTracking
+{
+ public void ImplicitCollectionReadAtSink()
+ {
+ var tainted = Source(1);
+ var arr = new object[] { tainted };
+ Sink(arr); // $ hasTaintFlow=1
+ }
+
+ static T Source(object source) => throw null;
+
+ public static void Sink(T t) { }
+}
diff --git a/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.expected b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.expected
new file mode 100644
index 00000000000..6d93e7f5ef9
--- /dev/null
+++ b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.expected
@@ -0,0 +1,18 @@
+models
+edges
+| CollectionTaintTracking.cs:5:13:5:19 | access to local variable tainted : Object | CollectionTaintTracking.cs:6:34:6:40 | access to local variable tainted : Object | provenance | |
+| CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | CollectionTaintTracking.cs:5:13:5:19 | access to local variable tainted : Object | provenance | |
+| CollectionTaintTracking.cs:6:13:6:15 | access to local variable arr : null [element] : Object | CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | provenance | |
+| CollectionTaintTracking.cs:6:32:6:42 | { ..., ... } : null [element] : Object | CollectionTaintTracking.cs:6:13:6:15 | access to local variable arr : null [element] : Object | provenance | |
+| CollectionTaintTracking.cs:6:34:6:40 | access to local variable tainted : Object | CollectionTaintTracking.cs:6:32:6:42 | { ..., ... } : null [element] : Object | provenance | |
+nodes
+| CollectionTaintTracking.cs:5:13:5:19 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object |
+| CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | semmle.label | call to method Source : Object |
+| CollectionTaintTracking.cs:6:13:6:15 | access to local variable arr : null [element] : Object | semmle.label | access to local variable arr : null [element] : Object |
+| CollectionTaintTracking.cs:6:32:6:42 | { ..., ... } : null [element] : Object | semmle.label | { ..., ... } : null [element] : Object |
+| CollectionTaintTracking.cs:6:34:6:40 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object |
+| CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | semmle.label | access to local variable arr |
+subpaths
+testFailures
+#select
+| CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | CollectionTaintTracking.cs:7:14:7:16 | access to local variable arr | $@ | CollectionTaintTracking.cs:5:23:5:39 | call to method Source : Object | call to method Source : Object |
diff --git a/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.ql b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.ql
new file mode 100644
index 00000000000..0af8971a13b
--- /dev/null
+++ b/csharp/ql/test/library-tests/tainttracking/collections/CollectionTaintTracking.ql
@@ -0,0 +1,12 @@
+/**
+ * @kind path-problem
+ */
+
+import csharp
+import utils.test.InlineFlowTest
+import TaintFlowTest
+import PathGraph
+
+from PathNode source, PathNode sink
+where flowPath(source, sink)
+select sink, source, sink, "$@", source, source.toString()
diff --git a/csharp/ql/test/library-tests/tainttracking/collections/options b/csharp/ql/test/library-tests/tainttracking/collections/options
new file mode 100644
index 00000000000..75c39b4541b
--- /dev/null
+++ b/csharp/ql/test/library-tests/tainttracking/collections/options
@@ -0,0 +1,2 @@
+semmle-extractor-options: /nostdlib /noconfig
+semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj
diff --git a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected
index c3377fcb04f..88d0baa4943 100644
--- a/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected
+++ b/csharp/ql/test/query-tests/Security Features/CWE-502/UnsafeDeserializationUntrustedInput/UnsafeDeserializationUntrustedInput.expected
@@ -11,9 +11,9 @@ edges
| BinaryFormatterUntrustedInputBad.cs:13:48:13:83 | call to method GetBytes : Byte[] | BinaryFormatterUntrustedInputBad.cs:13:31:13:84 | object creation of type MemoryStream | provenance | MaD:1 |
| BinaryFormatterUntrustedInputBad.cs:13:71:13:77 | access to parameter textBox : TextBox | BinaryFormatterUntrustedInputBad.cs:13:71:13:82 | access to property Text : String | provenance | MaD:3 |
| BinaryFormatterUntrustedInputBad.cs:13:71:13:82 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:13:48:13:83 | call to method GetBytes : Byte[] | provenance | MaD:2 |
-| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] [element] : Object | BinaryFormatterUntrustedInputBad.cs:23:31:23:83 | object creation of type MemoryStream | provenance | MaD:1 |
+| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] | BinaryFormatterUntrustedInputBad.cs:23:31:23:83 | object creation of type MemoryStream | provenance | MaD:1 |
| BinaryFormatterUntrustedInputBad.cs:23:73:23:76 | access to parameter data : TextBox | BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | provenance | MaD:3 |
-| BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] [element] : Object | provenance | MaD:4 |
+| BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] | provenance | MaD:4 |
| DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | provenance | MaD:1 |
| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:73 | access to parameter data : TextBox | DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | provenance | MaD:3 |
| DataContractJsonSerializerUntrustedInputBad.cs:13:70:13:78 | access to property Text : String | DataContractJsonSerializerUntrustedInputBad.cs:13:47:13:79 | call to method GetBytes : Byte[] | provenance | MaD:2 |
@@ -34,14 +34,14 @@ models
| 1 | Summary: System.IO; MemoryStream; false; MemoryStream; (System.Byte[]); ; Argument[0].Element; Argument[this]; taint; manual |
| 2 | Summary: System.Text; Encoding; true; GetBytes; (System.String); ; Argument[0]; ReturnValue; taint; manual |
| 3 | Summary: System.Web.UI.WebControls; TextBox; false; get_Text; (); ; Argument[this]; ReturnValue; taint; manual |
-| 4 | Summary: System; Convert; false; FromBase64String; (System.String); ; Argument[0]; ReturnValue.Element; taint; manual |
+| 4 | Summary: System; Convert; false; FromBase64String; (System.String); ; Argument[0]; ReturnValue; taint; manual |
nodes
| BinaryFormatterUntrustedInputBad.cs:13:31:13:84 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream |
| BinaryFormatterUntrustedInputBad.cs:13:48:13:83 | call to method GetBytes : Byte[] | semmle.label | call to method GetBytes : Byte[] |
| BinaryFormatterUntrustedInputBad.cs:13:71:13:77 | access to parameter textBox : TextBox | semmle.label | access to parameter textBox : TextBox |
| BinaryFormatterUntrustedInputBad.cs:13:71:13:82 | access to property Text : String | semmle.label | access to property Text : String |
| BinaryFormatterUntrustedInputBad.cs:23:31:23:83 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream |
-| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] [element] : Object | semmle.label | call to method FromBase64String : Byte[] [element] : Object |
+| BinaryFormatterUntrustedInputBad.cs:23:48:23:82 | call to method FromBase64String : Byte[] | semmle.label | call to method FromBase64String : Byte[] |
| BinaryFormatterUntrustedInputBad.cs:23:73:23:76 | access to parameter data : TextBox | semmle.label | access to parameter data : TextBox |
| BinaryFormatterUntrustedInputBad.cs:23:73:23:81 | access to property Text : String | semmle.label | access to property Text : String |
| DataContractJsonSerializerUntrustedInputBad.cs:13:30:13:80 | object creation of type MemoryStream | semmle.label | object creation of type MemoryStream |
diff --git a/docs/codeql/_static/custom.css_t b/docs/codeql/_static/custom.css_t
index e8667ede93a..b05c5120398 100644
--- a/docs/codeql/_static/custom.css_t
+++ b/docs/codeql/_static/custom.css_t
@@ -1,7 +1,7 @@
/*
* This Sphinx stylesheet adds some customizations to the default Alabaster theme.
- *
- * The source for the default stylesheet can be found at
+ *
+ * The source for the default stylesheet can be found at
* https://github.com/bitprophet/alabaster/blob/master/alabaster/static/alabaster.css_t
*
* For the classes provided by the primer, see https://unpkg.com/@primer/css/dist/primer.css
@@ -45,7 +45,7 @@ article ul, article ol {
}
.SideNav li {
- margin: 10px 0 10px 0px;
+ margin: 10px 0 10px 0px;
}
.SideNav ul, .SideNav ol, .SideNav li {
@@ -80,20 +80,20 @@ a.reference {
}
a.reference:hover {
- text-decoration: none;
+ text-decoration: none;
}
/* -- ADMONITIONS ---------------------------------------------------------------------------- */
-/*
- * Override default styling for "admonitions".
+/*
+ * Override default styling for "admonitions".
* This includes: note, tip, important, and caution.
*
*/
-
-div.admonition p.admonition-title {
+
+div.admonition p.admonition-title {
/* Make title same size and font as body, but bold. */
- font-family: Lato, sans-serif;
+ font-family: Lato, sans-serif;
font-size: 14px;
font-weight: bold;
}
@@ -102,7 +102,7 @@ p.admonition-title:after {
content: ""; /* Don't insert a colon after the title */
}
-/*
+/*
* Don't use yellow for footnote background.
*
*/
@@ -111,7 +111,7 @@ p.admonition-title:after {
background-color: unset;
}
-/*
+/*
* Add a border with rounded corners around code blocks
* (as in the QL language spec).
*
@@ -198,7 +198,7 @@ blockquote.pull-quote {
background-color: #EEE;
border: #CCC;
border-radius: 5px;
-}
+}
blockquote.pull-quote:first-line {
font-weight: bold;
@@ -230,6 +230,11 @@ blockquote.pull-quote > :last-child {
font-family: "monospace";
}
+/* Fixes a bug in "Supported languages and frameworks" where footnotes were incorrectly indented */
+aside .label {
+ border: 0;
+}
+
/* -- PRINT VIEW ----------------------------------------------------------------------------*/
@media print {
@@ -252,14 +257,14 @@ blockquote.pull-quote > :last-child {
/* -- SMALL SCREEN ------------------------------------------------------------------------------- */
-@media screen and (max-width: 875px) {
+@media screen and (max-width: 875px) {
/* Overrides strange behaviour caused by default styles */
body {
padding: 0;
- }
-
+ }
+
div.footer {
display: block;
}
diff --git a/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst b/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst
index 94b291a69b8..3c2f44fcf15 100644
--- a/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst
+++ b/docs/codeql/codeql-for-visual-studio-code/setting-up-codeql-in-visual-studio-code.rst
@@ -74,7 +74,7 @@ To use the starter workspace:
* Make sure you include the submodules, either by using ``git clone --recursive``, or using by ``git submodule update --init --remote`` after cloning.
* Use ``git submodule update --remote`` regularly to keep the submodules up to date.
-#. In VS Code, use the **File** > **Open Workspace** option to open the ``vscode-codeql-starter.code-workspace`` file from your checkout of the workspace repository.
+#. In VS Code, use the **File** > **Open Workspace from File** option to open the ``vscode-codeql-starter.code-workspace`` file from your checkout of the workspace repository.
Remember to update the ``ql`` submodule in the starter workspace periodically to ensure that it remains compatible with newer versions of the VS Code extension and the CodeQL CLI.
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst
index 51ff05b0c3b..9235d63fe2c 100644
--- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.19.4.rst
@@ -79,4 +79,4 @@ JavaScript/TypeScript
* Added taint-steps for :code:`Array.prototype.toReversed`.
* Added taint-steps for :code:`Array.prototype.toSorted`.
* Added support for :code:`String.prototype.matchAll`.
-* Added taint-steps for :code:`Array.prototype.reverse`.
+* Added taint-steps for :code:`Array.prototype.reverse`\
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst
index a5c9c4f222f..c3012e020c7 100644
--- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.20.4.rst
@@ -117,8 +117,8 @@ Java/Kotlin
* Deleted the deprecated :code:`isLValue` and :code:`isRValue` predicates from the :code:`VarAccess` class, use :code:`isVarWrite` and :code:`isVarRead` respectively instead.
* Deleted the deprecated :code:`getRhs` predicate from the :code:`VarWrite` class, use :code:`getASource` instead.
* Deleted the deprecated :code:`LValue` and :code:`RValue` classes, use :code:`VarWrite` and :code:`VarRead` respectively instead.
-* Deleted a lot of deprecated classes ending in ``*Access``, use the corresponding ``*Call`` classes instead.
-* Deleted a lot of deprecated predicates ending in ``*Access``, use the corresponding ``*Call`` predicates instead.
+* Deleted a lot of deprecated classes ending in :code:`*Access`, use the corresponding :code:`*Call` classes instead.
+* Deleted a lot of deprecated predicates ending in :code:`*Access`, use the corresponding :code:`*Call` predicates instead.
* Deleted the deprecated :code:`EnvInput` and :code:`DatabaseInput` classes from :code:`FlowSources.qll`, use the threat models feature instead.
* Deleted some deprecated API predicates from :code:`SensitiveApi.qll`, use the Sink classes from that file instead.
@@ -144,7 +144,7 @@ Ruby
* Deleted the deprecated :code:`ModelClass` and :code:`ModelInstance` classes from :code:`ActiveResource.qll`, use :code:`ModelClassNode` and :code:`ModelClassNode.getAnInstanceReference()` instead.
* Deleted the deprecated :code:`Collection` class from :code:`ActiveResource.qll`, use :code:`CollectionSource` instead.
* Deleted the deprecated :code:`ServiceInstantiation` and :code:`ClientInstantiation` classes from :code:`Twirp.qll`.
-* Deleted a lot of deprecated dataflow modules from ``*Query.qll`` files.
+* Deleted a lot of deprecated dataflow modules from :code:`*Query.qll` files.
* Deleted the old deprecated TypeTracking library.
Swift
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst
index aa604d702e7..b6396b2be4e 100644
--- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.0.rst
@@ -207,5 +207,5 @@ JavaScript/TypeScript
* Intersection :code:`&&`
* Subtraction :code:`--`
- * :code:`\\q` quoted string
+ * :code:`\q` quoted string
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst
index 3603d345d71..c21a9940b4b 100644
--- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.21.4.rst
@@ -38,7 +38,7 @@ Minor Analysis Improvements
C/C++
"""""
-* Added flow model for the :code:`SQLite` and :code:`OpenSSL` libraries. This may result in more alerts when running queries on codebases that use these libraries.
+* Added flow models for the :code:`SQLite` and :code:`OpenSSL` libraries. This may result in more alerts when running queries on codebases that use these libraries.
C#
""
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst
index 04920497e4e..d60b0e95769 100644
--- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.0.rst
@@ -50,7 +50,7 @@ New Queries
Golang
""""""
-* Query (:code:`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the :code:`html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in `https://github.com/github/codeql-go/pull/493 `_.
+* Query (:code:`go/html-template-escaping-bypass-xss`) has been promoted to the main query suite. This query finds potential cross-site scripting (XSS) vulnerabilities when using the :code:`html/template` package, caused by user input being cast to a type which bypasses the HTML autoescaping. It was originally contributed to the experimental query pack by @gagliardetto in https://github.com/github/codeql-go/pull/493.
Language Libraries
------------------
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst
index c1b1bb4b0a2..0b051d5473f 100644
--- a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.1.rst
@@ -14,7 +14,7 @@ This is an overview of changes in the CodeQL CLI and relevant CodeQL query and l
Security Coverage
-----------------
-CodeQL 2.22.1 runs a total of 449 security queries when configured with the Default suite (covering 165 CWE). The Extended suite enables an additional 129 queries (covering 33 more CWE).
+CodeQL 2.22.1 runs a total of 476 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 129 queries (covering 32 more CWE). 27 security queries have been added with this release.
CodeQL CLI
----------
@@ -38,7 +38,7 @@ Minor Analysis Improvements
C/C++
"""""
-* Added flow model for the following libraries: :code:`madler/zlib`, :code:`google/brotli`, :code:`libidn/libidn2`, :code:`libssh2/libssh2/`, :code:`nghttp2/nghttp2`, :code:`libuv/libuv/`, and :code:`curl/curl`. This may result in more alerts when running queries on codebases that use these libraries.
+* Added flow models for the following libraries: :code:`madler/zlib`, :code:`google/brotli`, :code:`libidn/libidn2`, :code:`libssh2/libssh2`, :code:`nghttp2/nghttp2`, :code:`libuv/libuv`, and :code:`curl/curl`. This may result in more alerts when running queries on codebases that use these libraries.
C#
""
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.2.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.2.rst
new file mode 100644
index 00000000000..92c440a05af
--- /dev/null
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.2.rst
@@ -0,0 +1,238 @@
+.. _codeql-cli-2.22.2:
+
+==========================
+CodeQL 2.22.2 (2025-07-29)
+==========================
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__.
+
+Security Coverage
+-----------------
+
+CodeQL 2.22.2 runs a total of 474 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 130 queries (covering 32 more CWE).
+
+CodeQL CLI
+----------
+
+Bug Fixes
+~~~~~~~~~
+
+* Fixes a bug in query suites where the :code:`version` property of an :code:`import` instruction was ignored. Previously, the following query suite would *not* resolve to :code:`v1.0.19` of :code:`codeql/csharp-queries`. Instead it would resolve to the latest version. This is now fixed and the resolve pack version would be :code:`v1.0.19`.
+
+ .. code-block:: text
+
+ - from: codeql/csharp-queries
+ import: codeql-suites/csharp-security-and-quality.qls
+ version: 1.0.19
+
+Query Packs
+-----------
+
+Bug Fixes
+~~~~~~~~~
+
+C#
+""
+
+* :code:`web.config` and :code:`web.release.config` files are now recognized regardless of case. This means queries :code:`cs/web/debug-binary` and :code:`cs/web/missing-x-frame-options` may produce more results than before.
+
+Breaking Changes
+~~~~~~~~~~~~~~~~
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* The :code:`Type` and :code:`Symbol` classes have been deprecated and will be empty in newly extracted databases, since the TypeScript extractor no longer populates them.
+ This is a breaking change for custom queries that explicitly relied on these classes.
+ Such queries will still compile, but with deprecation warnings, and may have different query results due to type information no longer being available.
+ We expect most custom queries will not be affected, however. If a custom query has no deprecation warnings, it should not be affected by this change.
+ Uses of :code:`getType()` should be rewritten to use the new :code:`getTypeBinding()` or :code:`getNameBinding()` APIs instead.
+ If the new API is not sufficient, please consider opening an issue in :code:`github/codeql` describing your use-case.
+
+Major Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* The TypeScript extractor no longer relies on the TypeScript compiler for extracting type information.
+ Instead, the information we need from types is now derived by an algorithm written in QL.
+ This results in more robust extraction with faster extraction times, in some cases significantly faster.
+* Taint is now tracked through the React :code:`use` function.
+* Parameters of React server functions, marked with the :code:`"use server"` directive, are now seen as taint sources.
+
+Minor Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* Due to changes in the :code:`FunctionWithWrappers` library (:code:`semmle.code.cpp.security.FunctionWithWrappers`) the primary alert location generated by the queries :code:`cpp/path-injection`, :code:`cpp/sql-injection`, :code:`cpp/tainted-format-string`, and :code:`cpp/command-line-injection` may have changed.
+* Added flow models for the Win32 API functions :code:`CreateThread`, :code:`CreateRemoteThread`, and :code:`CreateRemoteThreadEx`.
+* Improved support for dataflow through function objects and lambda expressions.
+* Added flow models for :code:`pthread_create` and :code:`std::thread`.
+* The :code:`cpp/incorrect-string-type-conversion` query no longer alerts on incorrect type conversions that occur in unreachable code.
+* Added flow models for the GNU C Library.
+* Fixed a number of false positives and false negatives in :code:`cpp/global-use-before-init`. Note that this query is not part of any of the default query suites.
+* The query :code:`cpp/sql-injection` now can be extended using the :code:`sql-injection` Models as Data (MaD) sink kind.
+
+C#
+""
+
+* Explicitly added summary models for all overloads of :code:`System.Xml.XmlDictionaryReader.CreateBinaryReader`. Added models for some of the methods and properties in :code:`System.Runtime.Serialization.SerializationInfo` and :code:`System.Runtime.Serialization.SerializationInfoEnumerator`. Updated models for :code:`System.Text.Encoding.GetBytes`, :code:`System.Text.Encoding.GetChars` and the constructor for :code:`System.IO.MemoryStream`. This generally improves the library modelling and thus reduces the number of false negatives.
+* Added explicit SQL injection Models as Data models for :code:`Microsoft.Data.SqlClient.SqlCommand` and :code:`Microsoft.Data.SqlClient.SqlDataAdapter`. This reduces false negatives for the query :code:`cs/sql-injection`.
+
+Golang
+""""""
+
+* :code:`filepath.IsLocal` is now recognized as a sanitizer against path-traversal and related vulnerabilities.
+
+Java/Kotlin
+"""""""""""
+
+* Java analysis of guards has been switched to use the new and improved shared guards library. This improves precision of a number of queries, in particular :code:`java/dereferenced-value-may-be-null`, which now has fewer false positives, and :code:`java/useless-null-check` and :code:`java/constant-comparison`, which gain additional true positives.
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* Removed three queries from the JS qlpack, which have been superseded by newer queries that are part of the Actions qlpack:
+
+ * :code:`js/actions/pull-request-target` has been superseded by :code:`actions/untrusted-checkout/{medium,high,critical}`
+ * :code:`js/actions/actions-artifact-leak` has been superseded by :code:`actions/secrets-in-artifacts`
+ * :code:`js/actions/command-injection` has been superseded by :code:`actions/command-injection/{medium,critical}`
+
+New Queries
+~~~~~~~~~~~
+
+Rust
+""""
+
+* Added a new query, :code:`rust/access-after-lifetime-ended`, for detecting pointer dereferences after the lifetime of the pointed-to object has ended.
+
+Language Libraries
+------------------
+
+Bug Fixes
+~~~~~~~~~
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* The JavaScript extractor no longer ignores source files specified in the :code:`tsconfig.json` compiler options :code:`outDir` if doing so would result in excluding all source code.
+
+Python
+""""""
+
+* The Python parser is now able to correctly parse expressions such as :code:`match[1]` and :code:`match()` where :code:`match` is not used as a keyword.
+
+GitHub Actions
+""""""""""""""
+
+* The :code:`actions/artifact-poisoning/critical` and :code:`actions/artifact-poisoning/medium` queries now exclude artifacts downloaded to :code:`$[{ runner.temp }}` in addition to :code:`/tmp`.
+
+Breaking Changes
+~~~~~~~~~~~~~~~~
+
+Ruby
+""""
+
+* Most classes and predicates in the AST, SSA, and control-flow-graph libraries are now annotated with :code:`overlay[local]`, in preparation for incremental analysis. This could result in compiler errors for custom queries if they extend these classes. To mitigate such errors, look for ways to restructure custom QL code so it doesn't depend on changing the behavior of standard-library classes.
+
+Minor Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* The :code:`FunctionWithWrappers` library (:code:`semmle.code.cpp.security.FunctionWithWrappers`) no longer considers calls through function pointers as wrapper functions.
+* The analysis of C/C++ code targeting 64-bit Arm platforms has been improved. This includes support for the Arm-specific builtin functions, support for the :code:`arm_neon.h` header and Neon vector types, and support for the :code:`fp8` scalar type. The :code:`arm_sve.h` header and scalable vectors are only partially supported at this point.
+* Added support for :code:`__fp16 _Complex` and :code:`__bf16 _Complex` types
+* Added :code:`sql-injection` sink models for the Oracle Call Interface (OCI) database library functions :code:`OCIStmtPrepare` and :code:`OCIStmtPrepare2`.
+
+Golang
+""""""
+
+* Added models for the :code:`Head` function and the :code:`Client.Head` method, from the :code:`net/http` package, to the :code:`Http::ClientRequest` class. This means that they will be recognized as sinks for the query :code:`go/request-forgery` and the experimental query :code:`go/ssrf`.
+* Previously, :code:`DefinedType.getBaseType` gave the underlying type. It now gives the right hand side of the type declaration, as the documentation indicated that it should.
+
+Java/Kotlin
+"""""""""""
+
+* The qualifiers of a calls to :code:`readObject` on any classes that implement :code:`java.io.ObjectInput` are now recognised as sinks for :code:`java/unsafe-deserialization`. Previously this was only the case for classes which extend :code:`java.io.ObjectInputStream`.
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* Enhanced modeling for the :code:`execa` library, adding support for command execution methods :code:`execaCommand`, :code:`execaCommandSync`, :code:`$`, and :code:`$.sync`, as well as file system operations through :code:`inputFile`, :code:`pipeStdout`, :code:`pipeAll`, and :code:`pipeStderr`.
+
+Python
+""""""
+
+* Type annotations such as :code:`foo : Bar` are now treated by the call graph as an indication that :code:`foo` may be an instance of :code:`Bar`.
+
+Rust
+""""
+
+* Type inference has been extended to support pattern matching.
+* Call resolution for calls to associated functions has been improved, so it now disambiguates the targets based on type information at the call sites (either type information about the arguments or about the expected return types).
+* Type inference has been improved for :code:`for` loops and range expressions, which improves call resolution and may ultimately lead to more query results.
+* Implemented support for data flow through trait functions. For the purpose of data flow, calls to trait functions dispatch to all possible implementations.
+* :code:`AssocItem` and :code:`ExternItem` are now proper subclasses of :code:`Item`.
+* Added type inference for :code:`for` loops and array expressions.
+
+Deprecated APIs
+~~~~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* The :code:`UnknownDefaultLocation`, :code:`UnknownExprLocation`, and :code:`UnknownStmtLocation` classes have been deprecated. Use :code:`UnknownLocation` instead.
+
+Golang
+""""""
+
+* The class :code:`BuiltinType` is now deprecated. Use the new replacement :code:`BuiltinTypeEntity` instead.
+* The class :code:`DeclaredType` is now deprecated. Use the new replacement :code:`DeclaredTypeEntity` instead.
+
+Java/Kotlin
+"""""""""""
+
+* The module :code:`semmle.code.java.frameworks.Castor` has been deprecated and will be removed in a future release.
+* The module :code:`semmle.code.java.frameworks.JYaml` has been deprecated and will be removed in a future release.
+* The classes :code:`UnsafeHessianInputReadObjectMethod` and :code:`BurlapInputReadObjectMethod` in the module :code:`semmle.code.java.frameworks.HessianBurlap` have been deprecated and will be removed in a future release.
+* The class :code:`YamlBeansReaderReadMethod` in the module :code:`semmle.code.java.frameworks.YamlBeans` has been deprecated and will be removed in a future release.
+* The class :code:`MethodApacheSerializationUtilsDeserialize` in the module :code:`semmle.code.java.frameworks.apache.Lang` has been deprecated and will be removed in a future release.
+
+New Features
+~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* Added a :code:`isFinalValueOfParameter` predicate to :code:`DataFlow::Node` which holds when a dataflow node represents the final value of an output parameter of a function.
+
+C#
+""
+
+* Added a new predicate, :code:`getASuperType()`, to get a direct supertype of this type.
+
+Java/Kotlin
+"""""""""""
+
+* You can now add sinks for the query "Deserialization of user-controlled data" (:code:`java/unsafe-deserialization`) using `data extensions `__ by extending :code:`sinkModel` and using the kind "unsafe-deserialization". The existing sinks that do not require extra logic to determine if they are unsafe are now defined in this way.
+
+Shared Libraries
+----------------
+
+Minor Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Concepts
+""""""""
+
+* Initial release. Moves the shared concepts library into its own qlpack.
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst
new file mode 100644
index 00000000000..7a1d554855d
--- /dev/null
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.3.rst
@@ -0,0 +1,101 @@
+.. _codeql-cli-2.22.3:
+
+==========================
+CodeQL 2.22.3 (2025-08-06)
+==========================
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__.
+
+Security Coverage
+-----------------
+
+CodeQL 2.22.3 runs a total of 476 security queries when configured with the Default suite (covering 169 CWE). The Extended suite enables an additional 130 queries (covering 32 more CWE). 2 security queries have been added with this release.
+
+CodeQL CLI
+----------
+
+New Features
+~~~~~~~~~~~~
+
+* The :code:`codeql database cleanup` command now takes the :code:`--cache-cleanup=overlay` option, which trims the cache to just the data that will be useful when evaluating against an overlay.
+
+Query Packs
+-----------
+
+Minor Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* The "Initialization code not run" query (:code:`cpp/initialization-not-run`) no longer reports an alert on static global variables that have no dereference.
+
+Rust
+""""
+
+* Type inference now supports closures, calls to closures, and trait bounds using the :code:`FnOnce` trait.
+* Type inference now supports trait objects, i.e., :code:`dyn Trait` types.
+* Type inference now supports tuple types.
+
+New Queries
+~~~~~~~~~~~
+
+Rust
+""""
+
+* Added a new query, :code:`rust/hard-coded-cryptographic-value`, for detecting use of hardcoded keys, passwords, salts and initialization vectors.
+
+Language Libraries
+------------------
+
+Minor Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* The :code:`cpp/overrun-write` query now recognizes more bound checks and thus produces fewer false positives.
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* The regular expressions in :code:`SensitiveDataHeuristics.qll` have been extended to find more instances of sensitive data such as secrets used in authentication, finance and health information, and device data. The heuristics have also been refined to find fewer false positive matches. This will improve results for queries related to sensitive information.
+
+Python
+""""""
+
+* The regular expressions in :code:`SensitiveDataHeuristics.qll` have been extended to find more instances of sensitive data such as secrets used in authentication, finance and health information, and device data. The heuristics have also been refined to find fewer false positive matches. This will improve results for queries related to sensitive information.
+
+Ruby
+""""
+
+* The regular expressions in :code:`SensitiveDataHeuristics.qll` have been extended to find more instances of sensitive data such as secrets used in authentication, finance and health information, and device data. The heuristics have also been refined to find fewer false positive matches. This will improve results for queries related to sensitive information.
+
+Swift
+"""""
+
+* The regular expressions in :code:`SensitiveDataHeuristics.qll` have been extended to find more instances of sensitive data such as secrets used in authentication, finance and health information, and device data. The heuristics have also been refined to find fewer false positive matches. This will improve results for queries related to sensitive information.
+
+Rust
+""""
+
+* Removed deprecated dataflow extensible predicates :code:`sourceModelDeprecated`, :code:`sinkModelDeprecated`, and :code:`summaryModelDeprecated`, along with their associated classes.
+* The regular expressions in :code:`SensitiveDataHeuristics.qll` have been extended to find more instances of sensitive data such as secrets used in authentication, finance and health information, and device data. The heuristics have also been refined to find fewer false positive matches. This will improve results for queries related to sensitive information.
+
+New Features
+~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* Exposed various SSA-related classes (:code:`Definition`, :code:`PhiNode`, :code:`ExplicitDefinition`, :code:`DirectExplicitDefinition`, and :code:`IndirectExplicitDefinition`) which were previously only usable inside the internal dataflow directory.
+
+Java/Kotlin
+"""""""""""
+
+* Kotlin versions up to 2.2.2\ *x* are now supported.
diff --git a/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.4.rst b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.4.rst
new file mode 100644
index 00000000000..97dc83d41da
--- /dev/null
+++ b/docs/codeql/codeql-overview/codeql-changelog/codeql-cli-2.22.4.rst
@@ -0,0 +1,108 @@
+.. _codeql-cli-2.22.4:
+
+==========================
+CodeQL 2.22.4 (2025-08-21)
+==========================
+
+.. contents:: Contents
+ :depth: 2
+ :local:
+ :backlinks: none
+
+This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog `__, `relevant GitHub Changelog updates `__, `changes in the CodeQL extension for Visual Studio Code `__, and the `CodeQL Action changelog `__.
+
+Security Coverage
+-----------------
+
+CodeQL 2.22.4 runs a total of 478 security queries when configured with the Default suite (covering 169 CWE). The Extended suite enables an additional 130 queries (covering 32 more CWE). 2 security queries have been added with this release.
+
+CodeQL CLI
+----------
+
+There are no user-facing CLI changes in this release.
+
+Query Packs
+-----------
+
+Minor Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* The :code:`cpp/short-global-name` query will no longer give alerts for instantiations of template variables, only for the template itself.
+* Fixed a false positive in :code:`cpp/overflow-buffer` when the type of the destination buffer is a reference to a class/struct type.
+
+Golang
+""""""
+
+* Go 1.25 is now supported.
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* The :code:`js/regex-injection` query no longer considers environment variables as sources by default. Environment variables can be re-enabled as sources by setting the threat model to include the "environment" category.
+
+New Queries
+~~~~~~~~~~~
+
+Rust
+""""
+
+* Added a new query, :code:`rust/cleartext-storage-database`, for detecting cases where sensitive information is stored non-encrypted in a database.
+
+Language Libraries
+------------------
+
+Bug Fixes
+~~~~~~~~~
+
+Ruby
+""""
+
+* Made the following changes to :code:`NetHttpRequest`
+
+ * Adds :code:`connectionNode`, like other Ruby HTTP clients
+ * Makes :code:`requestNode` and :code:`connectionNode` public so subclasses can use them
+ * Adds detection of :code:`Net::HTTP.start`, a common way to make HTTP requests in Ruby
+
+Major Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Java/Kotlin
+"""""""""""
+
+* Added library models for the relevant method calls under :code:`jakarta.servlet.ServletRequest` and :code:`jakarta.servlet.http.HttpServletRequest` as remote flow sources.
+
+Minor Analysis Improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+C/C++
+"""""
+
+* The guards libraries (:code:`semmle.code.cpp.controlflow.Guards` and :code:`semmle.code.cpp.controlflow.IRGuards`) have been improved to recognize more guards.
+* Improved dataflow through global variables in the new dataflow library (:code:`semmle.code.cpp.dataflow.new.DataFlow` and :code:`semmle.code.cpp.dataflow.new.TaintTracking`). Queries based on these libraries will produce more results on codebases with many global variables.
+* The global value numbering library (:code:`semmle.code.cpp.valuenumbering.GlobalValueNumbering` and :code:`semmle.code.cpp.ir.ValueNumbering`) has been improved so more expressions are assigned the same value number.
+
+Java/Kotlin
+"""""""""""
+
+* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for :code:`java/dereferenced-value-may-be-null`.
+
+JavaScript/TypeScript
+"""""""""""""""""""""
+
+* Improved modeling of command-line argument parsing libraries `arg `__, `args `__, `command-line-args `__ and `commander `__
+
+Rust
+""""
+
+* |link-code-let-chains-in-code-if-and-code-while-1|_ are now supported, as well as |link-code-if-let-guards-in-code-match-expressions-2|_.
+* Added more detail to models of :code:`postgres`, :code:`rusqlite`, :code:`sqlx` and :code:`tokio-postgres`. This may improve query results, particularly for :code:`rust/sql-injection` and :code:`rust/cleartext-storage-database`.
+
+.. |link-code-let-chains-in-code-if-and-code-while-1| replace:: :code:`let` chains in :code:`if` and :code:`while`\
+.. _link-code-let-chains-in-code-if-and-code-while-1: https://doc.rust-lang.org/edition-guide/rust-2024/let-chains.html
+
+.. |link-code-if-let-guards-in-code-match-expressions-2| replace:: :code:`if let` guards in :code:`match` expressions
+.. _link-code-if-let-guards-in-code-match-expressions-2: https://rust-lang.github.io/rfcs/2294-if-let-guard.html
+
diff --git a/docs/codeql/codeql-overview/codeql-changelog/index.rst b/docs/codeql/codeql-overview/codeql-changelog/index.rst
index 53603bb44a3..c47ae0a688e 100644
--- a/docs/codeql/codeql-overview/codeql-changelog/index.rst
+++ b/docs/codeql/codeql-overview/codeql-changelog/index.rst
@@ -11,6 +11,9 @@ A list of queries for each suite and language `is available here `, ambiguity between aliases from
for the same module/type/predicate is allowed, but ambiguity between between aliases from distinct **strong**
alias definitions is invalid QL.
Likewise, for the purpose of applicative instantiation of :ref:`parameterised modules `
-and `:ref:`parameterised module signatures `, aliases from **weak** alias
+and :ref:`parameterised module signatures `, aliases from **weak** alias
definitions for instantiation arguments do not result in separate instantiations, but aliases from **strong**
alias definitions for instantiation arguments do.
diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst
index 78641764660..ba4b0369031 100644
--- a/docs/codeql/reusables/supported-versions-compilers.rst
+++ b/docs/codeql/reusables/supported-versions-compilers.rst
@@ -17,7 +17,7 @@
.NET 5, .NET 6, .NET 7, .NET 8, .NET 9","``.sln``, ``.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.24", "Go 1.11 or more recent", ``.go``
+ Go (aka Golang), "Go up to 1.25", "Go 1.11 or more recent", ``.go``
Java,"Java 7 to 24 [6]_","javac (OpenJDK and Oracle JDK),
Eclipse compiler for Java (ECJ) [7]_",``.java``
diff --git a/go/actions/test/action.yml b/go/actions/test/action.yml
index f777535fec1..d64142115f0 100644
--- a/go/actions/test/action.yml
+++ b/go/actions/test/action.yml
@@ -4,7 +4,7 @@ inputs:
go-test-version:
description: Which Go version to use for running the tests
required: false
- default: "~1.24.0"
+ default: "~1.25.0"
run-code-checks:
description: Whether to run formatting, code and qhelp generation checks
required: false
diff --git a/go/extractor/autobuilder/build-environment.go b/go/extractor/autobuilder/build-environment.go
index e207e5ad026..0a4c7e2983b 100644
--- a/go/extractor/autobuilder/build-environment.go
+++ b/go/extractor/autobuilder/build-environment.go
@@ -12,7 +12,7 @@ import (
)
var minGoVersion = util.NewSemVer("1.11")
-var maxGoVersion = util.NewSemVer("1.24")
+var maxGoVersion = util.NewSemVer("1.25")
type versionInfo struct {
goModVersion util.SemVer // The version of Go found in the go directive in the `go.mod` file.
diff --git a/go/extractor/go.mod b/go/extractor/go.mod
index 927cf8e0512..a23183400d0 100644
--- a/go/extractor/go.mod
+++ b/go/extractor/go.mod
@@ -1,16 +1,16 @@
module github.com/github/codeql-go/extractor
-go 1.24
+go 1.25
-toolchain go1.24.0
+toolchain go1.25.0
// when updating this, run
// bazel run @rules_go//go -- mod tidy
// when adding or removing dependencies, run
// bazel mod tidy
require (
- golang.org/x/mod v0.26.0
- golang.org/x/tools v0.35.0
+ golang.org/x/mod v0.27.0
+ golang.org/x/tools v0.36.0
)
require golang.org/x/sync v0.16.0 // indirect
diff --git a/go/extractor/go.sum b/go/extractor/go.sum
index 58f0d0b933b..e1a8435ba51 100644
--- a/go/extractor/go.sum
+++ b/go/extractor/go.sum
@@ -1,8 +1,8 @@
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
-golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
+golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ=
+golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
-golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
-golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
+golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg=
+golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s=
diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md
index 6e50e04a514..596a873b2c5 100644
--- a/go/ql/consistency-queries/CHANGELOG.md
+++ b/go/ql/consistency-queries/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.29
+
+No user-facing changes.
+
## 1.0.28
No user-facing changes.
diff --git a/go/ql/consistency-queries/change-notes/released/1.0.29.md b/go/ql/consistency-queries/change-notes/released/1.0.29.md
new file mode 100644
index 00000000000..e6b79b88ef3
--- /dev/null
+++ b/go/ql/consistency-queries/change-notes/released/1.0.29.md
@@ -0,0 +1,3 @@
+## 1.0.29
+
+No user-facing changes.
diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml
index 328402fb34f..8751a216238 100644
--- a/go/ql/consistency-queries/codeql-pack.release.yml
+++ b/go/ql/consistency-queries/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.0.28
+lastReleaseVersion: 1.0.29
diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml
index 706e295580e..2cac181bfb5 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.29-dev
+version: 1.0.30-dev
groups:
- go
- queries
diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md
index b047f838925..0ddd2c37449 100644
--- a/go/ql/lib/CHANGELOG.md
+++ b/go/ql/lib/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 4.3.2
+
+No user-facing changes.
+
## 4.3.1
No user-facing changes.
diff --git a/go/ql/lib/change-notes/released/4.3.2.md b/go/ql/lib/change-notes/released/4.3.2.md
new file mode 100644
index 00000000000..1af97c82697
--- /dev/null
+++ b/go/ql/lib/change-notes/released/4.3.2.md
@@ -0,0 +1,3 @@
+## 4.3.2
+
+No user-facing changes.
diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml
index 70ac3707fcd..5b8421b639f 100644
--- a/go/ql/lib/codeql-pack.release.yml
+++ b/go/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 4.3.1
+lastReleaseVersion: 4.3.2
diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml
index 391245fa689..2658d54432f 100644
--- a/go/ql/lib/qlpack.yml
+++ b/go/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/go-all
-version: 4.3.2-dev
+version: 4.3.3-dev
groups: go
dbscheme: go.dbscheme
extractor: go
diff --git a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll
index 9531e279812..079ab35ee36 100644
--- a/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll
+++ b/go/ql/lib/semmle/go/security/AllocationSizeOverflow.qll
@@ -56,6 +56,17 @@ module AllocationSizeOverflow {
succ = c
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ exists(DataFlow::Node allocsz |
+ isSinkWithAllocationSize(sink, allocsz) and
+ result = allocsz.getLocation()
+ )
+ }
}
/** Tracks taint flow to find allocation-size overflows. */
diff --git a/go/ql/lib/semmle/go/security/CommandInjection.qll b/go/ql/lib/semmle/go/security/CommandInjection.qll
index 7dc6f3991fc..1774d77af54 100644
--- a/go/ql/lib/semmle/go/security/CommandInjection.qll
+++ b/go/ql/lib/semmle/go/security/CommandInjection.qll
@@ -24,6 +24,8 @@ module CommandInjection {
}
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
}
/**
@@ -80,6 +82,8 @@ module CommandInjection {
node instanceof Sanitizer or
node = any(ArgumentArrayWithDoubleDash array).getASanitizedElement()
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
}
/**
diff --git a/go/ql/lib/semmle/go/security/ExternalAPIs.qll b/go/ql/lib/semmle/go/security/ExternalAPIs.qll
index 4a561c17136..f85f939258f 100644
--- a/go/ql/lib/semmle/go/security/ExternalAPIs.qll
+++ b/go/ql/lib/semmle/go/security/ExternalAPIs.qll
@@ -186,6 +186,8 @@ private module UntrustedDataConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { source instanceof ActiveThreatModelSource }
predicate isSink(DataFlow::Node sink) { sink instanceof ExternalApiDataNode }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
}
/**
diff --git a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll
index 0be50fc2306..877a2b4570e 100644
--- a/go/ql/lib/semmle/go/security/HardcodedCredentials.qll
+++ b/go/ql/lib/semmle/go/security/HardcodedCredentials.qll
@@ -30,6 +30,8 @@ module HardcodedCredentials {
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
}
/** Tracks taint flow for reasoning about hardcoded credentials. */
diff --git a/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll b/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll
index 9125ab6e400..7864205d1dc 100644
--- a/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll
+++ b/go/ql/lib/semmle/go/security/IncorrectIntegerConversionLib.qll
@@ -440,6 +440,12 @@ private module ConversionWithoutBoundsCheckConfig implements DataFlow::StateConf
state2 = node2.(FlowStateTransformer).transform(state1) and
DataFlow::simpleLocalFlowStep(node1, node2, _)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getASuccessor().getLocation()
+ }
}
/**
diff --git a/go/ql/lib/semmle/go/security/InsecureRandomness.qll b/go/ql/lib/semmle/go/security/InsecureRandomness.qll
index 83746f7b96e..4dac659eabf 100644
--- a/go/ql/lib/semmle/go/security/InsecureRandomness.qll
+++ b/go/ql/lib/semmle/go/security/InsecureRandomness.qll
@@ -39,6 +39,10 @@ module InsecureRandomness {
n2.getType() instanceof IntegerType
)
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // Can't have accurate sink location override because of secondary use of `flowPath` in select.
+ }
}
/**
diff --git a/go/ql/lib/semmle/go/security/ReflectedXss.qll b/go/ql/lib/semmle/go/security/ReflectedXss.qll
index 1068c6fae3d..35501269cc1 100644
--- a/go/ql/lib/semmle/go/security/ReflectedXss.qll
+++ b/go/ql/lib/semmle/go/security/ReflectedXss.qll
@@ -22,6 +22,14 @@ module ReflectedXss {
predicate isSink(DataFlow::Node sink) { sink instanceof Sink }
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = sink.(SharedXss::Sink).getAssociatedLoc().getLocation()
+ }
}
/** Tracks taint flow from untrusted data to XSS attack vectors. */
diff --git a/go/ql/lib/semmle/go/security/RequestForgery.qll b/go/ql/lib/semmle/go/security/RequestForgery.qll
index bdf26a1f18f..176b67403e6 100644
--- a/go/ql/lib/semmle/go/security/RequestForgery.qll
+++ b/go/ql/lib/semmle/go/security/RequestForgery.qll
@@ -31,6 +31,14 @@ module RequestForgery {
w.writesField(v.getAUse(), f, pred) and succ = v.getAUse()
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.getLocation()
+ or
+ result = sink.(Sink).getARequest().getLocation()
+ }
}
/** Tracks taint flow from untrusted data to request forgery attack vectors. */
diff --git a/go/ql/lib/semmle/go/security/SafeUrlFlow.qll b/go/ql/lib/semmle/go/security/SafeUrlFlow.qll
index d74e2156a60..77b7aeda591 100644
--- a/go/ql/lib/semmle/go/security/SafeUrlFlow.qll
+++ b/go/ql/lib/semmle/go/security/SafeUrlFlow.qll
@@ -36,6 +36,10 @@ module SafeUrlFlow {
or
node instanceof SanitizerEdge
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // only used as secondary configuration
+ }
}
/** Tracks taint flow for reasoning about safe URLs. */
diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md
index eb21b53b4f7..f86e390b56d 100644
--- a/go/ql/src/CHANGELOG.md
+++ b/go/ql/src/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.4.3
+
+No user-facing changes.
+
## 1.4.2
No user-facing changes.
diff --git a/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql b/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql
index d3210c48011..3fd09ac040e 100644
--- a/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql
+++ b/go/ql/src/InconsistentCode/UnhandledCloseWritableHandle.ql
@@ -128,6 +128,14 @@ module UnhandledFileCloseConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) { isWritableFileHandle(source, _) }
predicate isSink(DataFlow::Node sink) { isCloseSink(sink, _) }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ exists(DataFlow::CallNode openCall | result = openCall.getLocation() |
+ isWritableFileHandle(source, openCall)
+ )
+ }
}
/**
diff --git a/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql b/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql
index c0b5898601c..5fef1900713 100644
--- a/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql
+++ b/go/ql/src/Security/CWE-322/InsecureHostKeyCallback.ql
@@ -68,6 +68,8 @@ module Config implements DataFlow::ConfigSig {
}
predicate isSink(DataFlow::Node sink) { writeIsSink(sink, _) }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
}
/**
diff --git a/go/ql/src/Security/CWE-601/BadRedirectCheck.ql b/go/ql/src/Security/CWE-601/BadRedirectCheck.ql
index bc60e1339eb..7b4cc9f99fc 100644
--- a/go/ql/src/Security/CWE-601/BadRedirectCheck.ql
+++ b/go/ql/src/Security/CWE-601/BadRedirectCheck.ql
@@ -123,6 +123,17 @@ module Config implements DataFlow::ConfigSig {
}
predicate isSink(DataFlow::Node sink) { sink instanceof OpenUrlRedirect::Sink }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) {
+ result = source.getLocation()
+ or
+ exists(DataFlow::Node check |
+ isCheckedSource(source, check) and
+ result = check.getLocation()
+ )
+ }
}
module Flow = TaintTracking::Global;
diff --git a/go/ql/src/change-notes/released/1.4.3.md b/go/ql/src/change-notes/released/1.4.3.md
new file mode 100644
index 00000000000..abf2a0d4dcc
--- /dev/null
+++ b/go/ql/src/change-notes/released/1.4.3.md
@@ -0,0 +1,3 @@
+## 1.4.3
+
+No user-facing changes.
diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml
index a76cacdf799..08f88b689fb 100644
--- a/go/ql/src/codeql-pack.release.yml
+++ b/go/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 1.4.2
+lastReleaseVersion: 1.4.3
diff --git a/go/ql/src/experimental/CWE-1004/AuthCookie.qll b/go/ql/src/experimental/CWE-1004/AuthCookie.qll
index 411da5a79fa..b16f09ac185 100644
--- a/go/ql/src/experimental/CWE-1004/AuthCookie.qll
+++ b/go/ql/src/experimental/CWE-1004/AuthCookie.qll
@@ -116,6 +116,12 @@ private module BoolToGinSetCookieTrackingConfig implements DataFlow::ConfigSig {
)
)
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ any() // Merged with other flows in CookieWithoutHttpOnly.ql
+ }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
}
/**
diff --git a/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll b/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll
index 2f2ca94fa87..33e6c6c0144 100644
--- a/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll
+++ b/go/ql/src/experimental/CWE-807/SensitiveConditionBypass.qll
@@ -59,6 +59,14 @@ private module Config implements DataFlow::ConfigSig {
not c.isPotentialFalsePositive()
)
}
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ exists(ComparisonExpr comp | result = comp.getLocation() | sink.asExpr() = comp.getAnOperand())
+ }
}
/**
diff --git a/go/ql/src/experimental/CWE-840/ConditionalBypass.ql b/go/ql/src/experimental/CWE-840/ConditionalBypass.ql
index b70be1ff42d..64f7c3c9ac2 100644
--- a/go/ql/src/experimental/CWE-840/ConditionalBypass.ql
+++ b/go/ql/src/experimental/CWE-840/ConditionalBypass.ql
@@ -22,6 +22,10 @@ module Config implements DataFlow::ConfigSig {
predicate isSink(DataFlow::Node sink) {
exists(ComparisonExpr c | c.getAnOperand() = sink.asExpr())
}
+
+ predicate observeDiffInformedIncrementalMode() {
+ none() // can't override the locations accurately because of secondary use of config.
+ }
}
/** Tracks taint flow for reasoning about conditional bypass. */
diff --git a/go/ql/src/experimental/CWE-918/SSRF.qll b/go/ql/src/experimental/CWE-918/SSRF.qll
index b1374da8a5f..05abe7bf8e4 100644
--- a/go/ql/src/experimental/CWE-918/SSRF.qll
+++ b/go/ql/src/experimental/CWE-918/SSRF.qll
@@ -30,6 +30,14 @@ module ServerSideRequestForgery {
predicate isBarrier(DataFlow::Node node) { node instanceof Sanitizer }
predicate isBarrierOut(DataFlow::Node node) { node instanceof SanitizerEdge }
+
+ predicate observeDiffInformedIncrementalMode() { any() }
+
+ Location getASelectedSourceLocation(DataFlow::Node source) { none() }
+
+ Location getASelectedSinkLocation(DataFlow::Node sink) {
+ result = sink.(Sink).getARequest().getLocation()
+ }
}
/** Tracks taint flow for reasoning about request forgery vulnerabilities. */
diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml
index d3c411a74f7..8c8c36a4fc7 100644
--- a/go/ql/src/qlpack.yml
+++ b/go/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/go-queries
-version: 1.4.3-dev
+version: 1.4.4-dev
groups:
- go
- queries
diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv
index 7ec0b4c5f0f..1d1f9a1545e 100644
--- a/java/documentation/library-coverage/coverage.csv
+++ b/java/documentation/library-coverage/coverage.csv
@@ -76,7 +76,7 @@ jakarta.activation,2,,2,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,1,,,,,,,,,,,,,,,,2,
jakarta.faces.context,4,7,,,,,,,,,,,,,,2,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,7,,
jakarta.json,,,123,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,100,23
jakarta.persistence,2,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,1,
-jakarta.servlet,2,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,1,,
+jakarta.servlet,2,19,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,19,,
jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,
jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,9,,
jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,94,55
diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst
index aa6a3f2c171..d70f9c2f463 100644
--- a/java/documentation/library-coverage/coverage.rst
+++ b/java/documentation/library-coverage/coverage.rst
@@ -19,9 +19,9 @@ Java framework & library support
JBoss Logging,``org.jboss.logging``,,,324,,,,,,
`JSON-java `_,``org.json``,,236,,,,,,,
Java Standard Library,``java.*``,10,4621,260,99,,9,,,26
- Java extensions,"``javax.*``, ``jakarta.*``",69,4159,90,10,4,2,1,1,4
+ Java extensions,"``javax.*``, ``jakarta.*``",87,4159,90,10,4,2,1,1,4
Kotlin Standard Library,``kotlin*``,,1849,16,14,,,,,2
`Spring `_,``org.springframework.*``,38,486,143,26,,28,14,,35
Others,"``actions.osgi``, ``antlr``, ``ch.ethz.ssh2``, ``cn.hutool.core.codec``, ``com.alibaba.com.caucho.hessian.io``, ``com.alibaba.druid.sql``, ``com.alibaba.fastjson2``, ``com.amazonaws.auth``, ``com.auth0.jwt.algorithms``, ``com.azure.identity``, ``com.caucho.burlap.io``, ``com.caucho.hessian.io``, ``com.cedarsoftware.util.io``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.esotericsoftware.yamlbeans``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.google.gson``, ``com.hubspot.jinjava``, ``com.jcraft.jsch``, ``com.microsoft.sqlserver.jdbc``, ``com.mitchellbosecke.pebble``, ``com.mongodb``, ``com.opensymphony.xwork2``, ``com.rabbitmq.client``, ``com.sshtools.j2ssh.authentication``, ``com.sun.crypto.provider``, ``com.sun.jndi.ldap``, ``com.sun.net.httpserver``, ``com.sun.net.ssl``, ``com.sun.rowset``, ``com.sun.security.auth.module``, ``com.sun.security.ntlm``, ``com.sun.security.sasl.digest``, ``com.thoughtworks.xstream``, ``com.trilead.ssh2``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``freemarker.cache``, ``freemarker.template``, ``groovy.lang``, ``groovy.text``, ``groovy.util``, ``hudson``, ``io.jsonwebtoken``, ``io.netty.bootstrap``, ``io.netty.buffer``, ``io.netty.channel``, ``io.netty.handler.codec``, ``io.netty.handler.ssl``, ``io.netty.handler.stream``, ``io.netty.resolver``, ``io.netty.util``, ``io.undertow.server.handlers.resource``, ``javafx.scene.web``, ``jenkins``, ``jodd.json``, ``liquibase.database.jvm``, ``liquibase.statement.core``, ``net.lingala.zip4j``, ``net.schmizz.sshj``, ``net.sf.json``, ``net.sf.saxon.s9api``, ``ognl``, ``okhttp3``, ``org.acegisecurity``, ``org.antlr.runtime``, ``org.apache.commons.codec``, ``org.apache.commons.compress.archivers.tar``, ``org.apache.commons.exec``, ``org.apache.commons.httpclient.util``, ``org.apache.commons.jelly``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.lang``, ``org.apache.commons.logging``, ``org.apache.commons.net``, ``org.apache.commons.ognl``, ``org.apache.cxf.catalog``, ``org.apache.cxf.common.classloader``, ``org.apache.cxf.common.jaxb``, ``org.apache.cxf.common.logging``, ``org.apache.cxf.configuration.jsse``, ``org.apache.cxf.helpers``, ``org.apache.cxf.resource``, ``org.apache.cxf.staxutils``, ``org.apache.cxf.tools.corba.utils``, ``org.apache.cxf.tools.util``, ``org.apache.cxf.transform``, ``org.apache.directory.ldap.client.api``, ``org.apache.hadoop.fs``, ``org.apache.hadoop.hive.metastore``, ``org.apache.hadoop.hive.ql.exec``, ``org.apache.hadoop.hive.ql.metadata``, ``org.apache.hc.client5.http.async.methods``, ``org.apache.hc.client5.http.classic.methods``, ``org.apache.hc.client5.http.fluent``, ``org.apache.hive.hcatalog.templeton``, ``org.apache.ibatis.jdbc``, ``org.apache.ibatis.mapping``, ``org.apache.log4j``, ``org.apache.shiro.authc``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.apache.shiro.mgt``, ``org.apache.sshd.client.session``, ``org.apache.struts.beanvalidation.validation.interceptor``, ``org.apache.struts2``, ``org.apache.tools.ant``, ``org.apache.tools.zip``, ``org.apache.velocity.app``, ``org.apache.velocity.runtime``, ``org.codehaus.cargo.container.installer``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.eclipse.jetty.client``, ``org.exolab.castor.xml``, ``org.fusesource.leveldbjni``, ``org.geogebra.web.full.main``, ``org.gradle.api.file``, ``org.hibernate``, ``org.ho.yaml``, ``org.influxdb``, ``org.jabsorb``, ``org.jboss.vfs``, ``org.jdbi.v3.core``, ``org.jenkins.ui.icon``, ``org.jenkins.ui.symbol``, ``org.jooq``, ``org.keycloak.models.map.storage``, ``org.kohsuke.stapler``, ``org.lastaflute.web``, ``org.mvel2``, ``org.openjdk.jmh.runner.options``, ``org.owasp.esapi``, ``org.pac4j.jwt.config.encryption``, ``org.pac4j.jwt.config.signature``, ``org.scijava.log``, ``org.slf4j``, ``org.thymeleaf``, ``org.xml.sax``, ``org.xmlpull.v1``, ``org.yaml.snakeyaml``, ``play.libs.ws``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``, ``retrofit2``, ``software.amazon.awssdk.transfer.s3.model``, ``sun.jvmstat.perfdata.monitor.protocol.local``, ``sun.jvmstat.perfdata.monitor.protocol.rmi``, ``sun.misc``, ``sun.net.ftp``, ``sun.net.www.protocol.http``, ``sun.security.acl``, ``sun.security.jgss.krb5``, ``sun.security.krb5``, ``sun.security.pkcs``, ``sun.security.pkcs11``, ``sun.security.provider``, ``sun.security.ssl``, ``sun.security.x509``, ``sun.tools.jconsole``",133,10525,927,140,6,22,18,,208
- Totals,,312,26328,2656,404,16,128,33,1,409
+ Totals,,330,26328,2656,404,16,128,33,1,409
diff --git a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected
index 8803fd64468..14203a1c1c8 100644
--- a/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected
+++ b/java/ql/integration-tests/java/query-suite/java-code-quality-extended.qls.expected
@@ -81,7 +81,9 @@ ql/java/ql/src/Violations of Best Practice/Naming Conventions/SameNameAsSuper.ql
ql/java/ql/src/Violations of Best Practice/Records/IgnoredSerializationMembersOfRecordClass.ql
ql/java/ql/src/Violations of Best Practice/SpecialCharactersInLiterals/NonExplicitControlAndWhitespaceCharsInLiterals.ql
ql/java/ql/src/Violations of Best Practice/Testing/ExcessivePublicMethodMocking.ql
+ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToRunFinalizersOnExit.ql
ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToStringToString.ql
+ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql
ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DefaultToString.ql
ql/java/ql/src/Violations of Best Practice/Undesirable Calls/DoNotCallFinalize.ql
ql/java/ql/src/Violations of Best Practice/Undesirable Calls/PrintLnArray.ql
diff --git a/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected b/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected
index 3290e0d84b0..afa6cebba31 100644
--- a/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected
+++ b/java/ql/integration-tests/java/query-suite/java-code-scanning.qls.expected
@@ -27,6 +27,7 @@ ql/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.ql
ql/java/ql/src/Security/CWE/CWE-1204/StaticInitializationVector.ql
ql/java/ql/src/Security/CWE/CWE-134/ExternallyControlledFormatString.ql
ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuators.ql
+ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql
ql/java/ql/src/Security/CWE/CWE-209/SensitiveDataExposureThroughErrorMessage.ql
ql/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql
ql/java/ql/src/Security/CWE/CWE-266/IntentUriPermissionManipulation.ql
diff --git a/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected b/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected
index f4317f8e2a5..f5470c463c3 100644
--- a/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected
+++ b/java/ql/integration-tests/java/query-suite/java-security-and-quality.qls.expected
@@ -143,6 +143,7 @@ ql/java/ql/src/Security/CWE/CWE-200/AndroidSensitiveTextField.ql
ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql
ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsFileAccess.ql
ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuators.ql
+ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql
ql/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql
ql/java/ql/src/Security/CWE/CWE-209/SensitiveDataExposureThroughErrorMessage.ql
ql/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql
diff --git a/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected b/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected
index 209777cf4d9..a3ebc029d28 100644
--- a/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected
+++ b/java/ql/integration-tests/java/query-suite/java-security-extended.qls.expected
@@ -46,6 +46,7 @@ ql/java/ql/src/Security/CWE/CWE-200/AndroidSensitiveTextField.ql
ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsAllowsContentAccess.ql
ql/java/ql/src/Security/CWE/CWE-200/AndroidWebViewSettingsFileAccess.ql
ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuators.ql
+ql/java/ql/src/Security/CWE/CWE-200/SpringBootActuatorsConfig/SpringBootActuatorsConfig.ql
ql/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql
ql/java/ql/src/Security/CWE/CWE-209/SensitiveDataExposureThroughErrorMessage.ql
ql/java/ql/src/Security/CWE/CWE-209/StackTraceExposure.ql
diff --git a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected
index 1f58e51ad80..3a1cd4e1adb 100644
--- a/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected
+++ b/java/ql/integration-tests/java/query-suite/not_included_in_qls.expected
@@ -66,7 +66,6 @@ ql/java/ql/src/Frameworks/Spring/XML Configuration Errors/MissingSetters.ql
ql/java/ql/src/Language Abuse/CastThisToTypeParameter.ql
ql/java/ql/src/Language Abuse/DubiousDowncastOfThis.ql
ql/java/ql/src/Language Abuse/DubiousTypeTestOfThis.ql
-ql/java/ql/src/Language Abuse/EmptyStatement.ql
ql/java/ql/src/Language Abuse/EnumIdentifier.ql
ql/java/ql/src/Language Abuse/ImplementsAnnotation.ql
ql/java/ql/src/Language Abuse/MissedTernaryOpportunity.ql
@@ -187,7 +186,6 @@ ql/java/ql/src/Violations of Best Practice/Magic Constants/MagicNumbersUseConsta
ql/java/ql/src/Violations of Best Practice/Magic Constants/MagicStringsUseConstant.ql
ql/java/ql/src/Violations of Best Practice/Naming Conventions/ConfusingOverridesNames.ql
ql/java/ql/src/Violations of Best Practice/Naming Conventions/LocalShadowsField.ql
-ql/java/ql/src/Violations of Best Practice/Undesirable Calls/CallsToSystemExit.ql
ql/java/ql/src/Violations of Best Practice/Undesirable Calls/GarbageCollection.ql
ql/java/ql/src/Violations of Best Practice/legacy/AutoBoxing.ql
ql/java/ql/src/Violations of Best Practice/legacy/FinallyMayNotComplete.ql
@@ -196,7 +194,6 @@ ql/java/ql/src/Violations of Best Practice/legacy/ParameterAssignment.ql
ql/java/ql/src/Violations of Best Practice/legacy/UnnecessaryCast.ql
ql/java/ql/src/Violations of Best Practice/legacy/UnnecessaryImport.ql
ql/java/ql/src/definitions.ql
-ql/java/ql/src/experimental/Security/CWE/CWE-016/InsecureSpringActuatorConfig.ql
ql/java/ql/src/experimental/Security/CWE/CWE-020/Log4jJndiInjection.ql
ql/java/ql/src/experimental/Security/CWE/CWE-036/OpenStream.ql
ql/java/ql/src/experimental/Security/CWE/CWE-073/FilePathInjection.ql
diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md
index e15d695efea..f3b7648c5ed 100644
--- a/java/ql/lib/CHANGELOG.md
+++ b/java/ql/lib/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 7.6.0
+
+### Major Analysis Improvements
+
+* Added library models for the relevant method calls under `jakarta.servlet.ServletRequest` and `jakarta.servlet.http.HttpServletRequest` as remote flow sources.
+
+### Minor Analysis Improvements
+
+* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for `java/dereferenced-value-may-be-null`.
+
## 7.5.0
### New Features
diff --git a/java/ql/lib/change-notes/2025-07-28-guardwrappers.md b/java/ql/lib/change-notes/2025-07-28-guardwrappers.md
deleted file mode 100644
index cf976fe7789..00000000000
--- a/java/ql/lib/change-notes/2025-07-28-guardwrappers.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-category: minorAnalysis
----
-* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for `java/dereferenced-value-may-be-null`.
diff --git a/java/ql/lib/change-notes/released/7.6.0.md b/java/ql/lib/change-notes/released/7.6.0.md
new file mode 100644
index 00000000000..6c7a1c3338c
--- /dev/null
+++ b/java/ql/lib/change-notes/released/7.6.0.md
@@ -0,0 +1,9 @@
+## 7.6.0
+
+### Major Analysis Improvements
+
+* Added library models for the relevant method calls under `jakarta.servlet.ServletRequest` and `jakarta.servlet.http.HttpServletRequest` as remote flow sources.
+
+### Minor Analysis Improvements
+
+* Guard implication logic involving wrapper methods has been improved. In particular, this means fewer false positives for `java/dereferenced-value-may-be-null`.
diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml
index 7ed5cb290ca..dd20d7a9632 100644
--- a/java/ql/lib/codeql-pack.release.yml
+++ b/java/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 7.5.0
+lastReleaseVersion: 7.6.0
diff --git a/java/ql/lib/ext/jakarta.servlet.http.model.yml b/java/ql/lib/ext/jakarta.servlet.http.model.yml
index 5a83b1ac08d..fabbe4a3eb0 100644
--- a/java/ql/lib/ext/jakarta.servlet.http.model.yml
+++ b/java/ql/lib/ext/jakarta.servlet.http.model.yml
@@ -4,3 +4,15 @@ extensions:
extensible: sourceModel
data:
- ["jakarta.servlet.http", "HttpServletRequest", True, "getServletPath", "", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getHeader", "(String)", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getHeaderNames", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getHeaders", "(String)", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameter", "(String)", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameterMap", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameterNames", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getParameterValues", "(String)", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getPathInfo", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getQueryString", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getRemoteUser", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getRequestURI", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet.http", "HttpServletRequest", False, "getRequestURL", "()", "", "ReturnValue", "remote", "manual"]
diff --git a/java/ql/lib/ext/jakarta.servlet.model.yml b/java/ql/lib/ext/jakarta.servlet.model.yml
index be2feeb3c37..ad1a38bb4bf 100644
--- a/java/ql/lib/ext/jakarta.servlet.model.yml
+++ b/java/ql/lib/ext/jakarta.servlet.model.yml
@@ -1,4 +1,14 @@
extensions:
+ - addsTo:
+ pack: codeql/java-all
+ extensible: sourceModel
+ data:
+ - ["jakarta.servlet", "ServletRequest", False, "getInputStream", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet", "ServletRequest", False, "getParameter", "(String)", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet", "ServletRequest", False, "getParameterMap", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet", "ServletRequest", False, "getParameterNames", "()", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet", "ServletRequest", False, "getParameterValues", "(String)", "", "ReturnValue", "remote", "manual"]
+ - ["jakarta.servlet", "ServletRequest", False, "getReader", "()", "", "ReturnValue", "remote", "manual"]
- addsTo:
pack: codeql/java-all
extensible: sinkModel
diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml
index 0e69cc38681..93be6469202 100644
--- a/java/ql/lib/qlpack.yml
+++ b/java/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/java-all
-version: 7.5.1-dev
+version: 7.6.1-dev
groups: java
dbscheme: config/semmlecode.dbscheme
extractor: java
diff --git a/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll b/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll
index 0c69f45c56f..1655ed2d648 100644
--- a/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll
+++ b/java/ql/lib/semmle/code/configfiles/ConfigFiles.qll
@@ -70,7 +70,12 @@ class ConfigValue extends @configValue, ConfigLocatable {
override string toString() { result = this.getValue() }
}
+/** A `.properties` file. */
+class PropertiesFile extends File {
+ PropertiesFile() { this.getExtension() = "properties" }
+}
+
/** A Java property is a name-value pair in a `.properties` file. */
class JavaProperty extends ConfigPair {
- JavaProperty() { this.getFile().getExtension() = "properties" }
+ JavaProperty() { this.getFile() instanceof PropertiesFile }
}
diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll
index 612bca35a60..c1c19fa4450 100644
--- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll
+++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll
@@ -347,12 +347,28 @@ private module ControlFlowGraphImpl {
)
}
+ private predicate methodMayThrow(Method m, ThrowableType t) {
+ exists(AstNode n |
+ t = n.(ThrowStmt).getThrownExceptionType() and
+ not n.(ThrowStmt).getParent() = any(Method m0).getBody()
+ or
+ uncheckedExceptionFromMethod(n, t)
+ |
+ n.getEnclosingStmt().getEnclosingCallable() = m and
+ not exists(TryStmt try |
+ exists(try.getACatchClause()) and try.getBlock() = n.getEnclosingStmt().getEnclosingStmt*()
+ )
+ )
+ }
+
/**
- * Bind `t` to an unchecked exception that may occur in a precondition check.
+ * Bind `t` to an unchecked exception that may occur in a precondition check or guard wrapper.
*/
private predicate uncheckedExceptionFromMethod(MethodCall ma, ThrowableType t) {
conditionCheckArgument(ma, _, _) and
(t instanceof TypeError or t instanceof TypeRuntimeException)
+ or
+ methodMayThrow(ma.getMethod(), t)
}
/**
diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll
index 1e814117e9e..7d84dbd379d 100644
--- a/java/ql/lib/semmle/code/java/Member.qll
+++ b/java/ql/lib/semmle/code/java/Member.qll
@@ -256,7 +256,15 @@ class Callable extends StmtParent, Member, @callable {
Exception getAnException() { exceptions(result, _, this) }
/** Gets an exception type that occurs in the `throws` clause of this callable. */
- RefType getAThrownExceptionType() { result = this.getAnException().getType() }
+ RefType getAThrownExceptionType() {
+ result = this.getAnException().getType()
+ or
+ exists(Annotation a |
+ this.getAnAnnotation() = a and
+ a.getType().hasQualifiedName("kotlin.jvm", "Throws") and
+ a.getATypeArrayValue(_) = result
+ )
+ }
/** Gets a call site that references this callable. */
Call getAReference() { result.getCallee() = this }
diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll
index c33658cb67b..a3cffbae459 100644
--- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll
+++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll
@@ -141,6 +141,7 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre
private module GuardsInput implements SharedGuards::InputSig {
private import java as J
+ private import semmle.code.java.dataflow.internal.BaseSSA
private import semmle.code.java.dataflow.NullGuards as NullGuards
import SuccessorType
@@ -216,6 +217,12 @@ private module GuardsInput implements SharedGuards::InputSig {
f.isFinal() and
f.getInitializer() = NullGuards::baseNotNullExpr()
)
+ or
+ exists(CatchClause cc, LocalVariableDeclExpr decl, BaseSsaUpdate v |
+ decl = cc.getVariable() and
+ decl = v.getDefiningExpr() and
+ this = v.getAUse()
+ )
}
}
@@ -490,12 +497,6 @@ module Guards_v2 = GuardsImpl::Logic;
/** INTERNAL: Don't use. */
module Guards_v3 = GuardsImpl::Logic;
-/** INTERNAL: Don't use. */
-predicate implies_v3(Guard g1, boolean b1, Guard g2, boolean b2) {
- Guards_v3::boolImplies(g1, any(GuardValue v | v.asBooleanValue() = b1), g2,
- any(GuardValue v | v.asBooleanValue() = b2))
-}
-
/**
* A guard. This may be any expression whose value determines subsequent
* control flow. It may also be a switch case, which as a guard is considered
diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll
index 02f228d17db..756c5d1ae9f 100644
--- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll
@@ -653,7 +653,7 @@ private Expr trackingVarGuard(
result = integerGuard(trackvar.getAnAccess(), branch, k, isA)
or
exists(int k2 |
- result = integerGuard(trackvar.getAnAccess(), branch.booleanNot(), k2, true) and
+ result = integerGuard(trackvar.getAnAccess(), branch, k2, true) and
isA = false and
k2 != k
)
diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll
index 5a6c5ff6339..51da69e9d64 100644
--- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll
@@ -562,14 +562,20 @@ private module Cached {
cached // nothing is actually cached
module BarrierGuard {
- private predicate guardChecksAdjTypes(
- DataFlowIntegrationInput::Guard g, DataFlowIntegrationInput::Expr e, Guards::GuardValue val
+ private predicate guardChecksAdjTypes(Guards::Guards_v3::Guard g, Expr e, boolean branch) {
+ guardChecks(g, e, branch)
+ }
+
+ private predicate guardChecksWithWrappers(
+ DataFlowIntegrationInput::Guard g, Definition def, Guards::GuardValue val, Unit state
) {
- guardChecks(g, e, val.asBooleanValue())
+ Guards::Guards_v3::ValidationWrapper::guardChecksDef(g, def, val) and
+ exists(state)
}
private Node getABarrierNodeImpl() {
- result = DataFlowIntegrationImpl::BarrierGuard::getABarrierNode()
+ result =
+ DataFlowIntegrationImpl::BarrierGuardDefWithState::getABarrierNode(_)
}
predicate getABarrierNode = getABarrierNodeImpl/0;
diff --git a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll
index e0d6ff305c3..4f4c20a5263 100644
--- a/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll
+++ b/java/ql/lib/semmle/code/java/security/ArithmeticCommon.qll
@@ -20,16 +20,16 @@ predicate narrowerThanOrEqualTo(ArithExpr exp, NumType numType) {
exists(CastingExpr cast | cast.getAChildExpr() = exp | numType.widerThanOrEqualTo(cast.getType()))
}
-private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) {
+private Guard sizeGuard(Expr e, boolean branch, boolean upper) {
exists(ComparisonExpr comp | comp = result |
- comp.getLesserOperand() = ssaRead(v, 0) and
+ comp.getLesserOperand() = e and
(
branch = true and upper = true
or
branch = false and upper = false
)
or
- comp.getGreaterOperand() = ssaRead(v, 0) and
+ comp.getGreaterOperand() = e and
(
branch = true and upper = false
or
@@ -38,7 +38,7 @@ private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) {
or
exists(MethodCall ma |
ma.getMethod() instanceof MethodAbs and
- ma.getArgument(0) = ssaRead(v, 0) and
+ ma.getArgument(0) = e and
(
comp.getLesserOperand() = ma and branch = true
or
@@ -49,7 +49,7 @@ private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) {
or
// overflow test
exists(AddExpr add, VarRead use, Expr pos |
- use = ssaRead(v, 0) and
+ use = e and
add.hasOperands(use, pos) and
positive(use) and
positive(pos) and
@@ -65,70 +65,38 @@ private Guard sizeGuard(SsaVariable v, boolean branch, boolean upper) {
)
)
or
- result.isEquality(ssaRead(v, 0), _, branch) and
+ result.isEquality(e, _, branch) and
(upper = true or upper = false)
- or
- exists(MethodCall call, Method m, int ix |
- call = result and
- call.getArgument(ix) = ssaRead(v, 0) and
- call.getMethod().getSourceDeclaration() = m and
- m = customSizeGuard(ix, branch, upper)
- )
}
-private Guard derivedSizeGuard(SsaVariable v, boolean branch, boolean upper) {
- result = sizeGuard(v, branch, upper) or
- exists(boolean branch0 | implies_v3(result, branch, derivedSizeGuard(v, branch0, upper), branch0))
+private predicate sizeGuardLessThan(Guard g, Expr e, boolean branch) {
+ g = sizeGuard(e, branch, true)
}
-private Method customSizeGuard(int index, boolean retval, boolean upper) {
- exists(Parameter p, SsaImplicitInit v |
- result.getReturnType().(PrimitiveType).hasName("boolean") and
- not result.isOverridable() and
- p.getCallable() = result and
- not p.isVarargs() and
- p.getType() instanceof NumericOrCharType and
- p.getPosition() = index and
- v.isParameterDefinition(p) and
- forex(ReturnStmt ret |
- ret.getEnclosingCallable() = result and
- exists(Expr res | res = ret.getResult() |
- not res.(BooleanLiteral).getBooleanValue() = retval.booleanNot()
- )
- |
- ret.getResult() = derivedSizeGuard(v, retval, upper)
- )
- )
+private predicate sizeGuardGreaterThan(Guard g, Expr e, boolean branch) {
+ g = sizeGuard(e, branch, false)
}
/**
- * Holds if `e` is bounded in a way that is likely to prevent overflow.
+ * Holds if `n` is bounded in a way that is likely to prevent overflow.
*/
-predicate guardedLessThanSomething(Expr e) {
- exists(SsaVariable v, Guard guard, boolean branch |
- e = v.getAUse() and
- guard = sizeGuard(v.getAPhiInputOrPriorDef*(), branch, true) and
- guard.controls(e.getBasicBlock(), branch)
- )
+predicate guardedLessThanSomething(DataFlow::Node n) {
+ DataFlow::BarrierGuard::getABarrierNode() = n
or
- negative(e)
+ negative(n.asExpr())
or
- e.(MethodCall).getMethod() instanceof MethodMathMin
+ n.asExpr().(MethodCall).getMethod() instanceof MethodMathMin
}
/**
* Holds if `e` is bounded in a way that is likely to prevent underflow.
*/
-predicate guardedGreaterThanSomething(Expr e) {
- exists(SsaVariable v, Guard guard, boolean branch |
- e = v.getAUse() and
- guard = sizeGuard(v.getAPhiInputOrPriorDef*(), branch, false) and
- guard.controls(e.getBasicBlock(), branch)
- )
+predicate guardedGreaterThanSomething(DataFlow::Node n) {
+ DataFlow::BarrierGuard::getABarrierNode() = n
or
- positive(e)
+ positive(n.asExpr())
or
- e.(MethodCall).getMethod() instanceof MethodMathMax
+ n.asExpr().(MethodCall).getMethod() instanceof MethodMathMax
}
/** Holds if `e` occurs in a context where it will be upcast to a wider type. */
@@ -182,7 +150,7 @@ private predicate unlikelyNode(DataFlow::Node n) {
/** Holds if `n` is likely guarded against overflow. */
predicate overflowBarrier(DataFlow::Node n) {
n.getType() instanceof BooleanType or
- guardedLessThanSomething(n.asExpr()) or
+ guardedLessThanSomething(n) or
unlikelyNode(n) or
upcastToWiderType(n.asExpr()) or
overflowIrrelevant(n.asExpr())
@@ -191,7 +159,7 @@ predicate overflowBarrier(DataFlow::Node n) {
/** Holds if `n` is likely guarded against underflow. */
predicate underflowBarrier(DataFlow::Node n) {
n.getType() instanceof BooleanType or
- guardedGreaterThanSomething(n.asExpr()) or
+ guardedGreaterThanSomething(n) or
unlikelyNode(n) or
upcastToWiderType(n.asExpr()) or
overflowIrrelevant(n.asExpr())
@@ -210,7 +178,6 @@ predicate overflowSink(ArithExpr exp, VarAccess use) {
exp instanceof PostIncExpr or
exp instanceof MulExpr
) and
- not guardedLessThanSomething(use) and
// Exclude widening conversions of tainted values due to binary numeric promotion (JLS 5.6.2)
// unless there is an enclosing cast down to a narrower type.
narrowerThanOrEqualTo(exp, use.getType()) and
@@ -230,7 +197,6 @@ predicate underflowSink(ArithExpr exp, VarAccess use) {
exp instanceof PostDecExpr or
exp instanceof MulExpr
) and
- not guardedGreaterThanSomething(use) and
// Exclude widening conversions of tainted values due to binary numeric promotion (JLS 5.6.2)
// unless there is an enclosing cast down to a narrower type.
narrowerThanOrEqualTo(exp, use.getType()) and
diff --git a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll
index e789d3c4778..da6f242bde5 100644
--- a/java/ql/lib/semmle/code/java/security/PathSanitizer.qll
+++ b/java/ql/lib/semmle/code/java/security/PathSanitizer.qll
@@ -13,33 +13,6 @@ private import semmle.code.java.dataflow.Nullness
/** A sanitizer that protects against path injection vulnerabilities. */
abstract class PathInjectionSanitizer extends DataFlow::Node { }
-/**
- * Provides a set of nodes validated by a method that uses a validation guard.
- */
-private module ValidationMethod {
- /** Gets a node that is safely guarded by a method that uses the given guard check. */
- DataFlow::Node getAValidatedNode() {
- exists(MethodCall ma, int pos, VarRead rv |
- validationMethod(ma.getMethod(), pos) and
- ma.getArgument(pos) = rv and
- adjacentUseUseSameVar(rv, result.asExpr()) and
- ma.getBasicBlock().dominates(result.asExpr().getBasicBlock())
- )
- }
-
- /**
- * Holds if `m` validates its `arg`th parameter by using `validationGuard`.
- */
- private predicate validationMethod(Method m, int arg) {
- exists(Guard g, SsaImplicitInit var, ControlFlow::NormalExitNode normexit, boolean branch |
- validationGuard(g, var.getAUse(), branch) and
- var.isParameterDefinition(m.getParameter(arg)) and
- normexit.getEnclosingCallable() = m and
- g.controls(normexit.getBasicBlock(), branch)
- )
- }
-}
-
/**
* Holds if `g` is guard that compares a path to a trusted value.
*/
@@ -68,8 +41,6 @@ private predicate exactPathMatchGuard(Guard g, Expr e, boolean branch) {
class ExactPathMatchSanitizer extends PathInjectionSanitizer {
ExactPathMatchSanitizer() {
this = DataFlow::BarrierGuard::getABarrierNode()
- or
- this = ValidationMethod::getAValidatedNode()
}
}
@@ -120,8 +91,7 @@ private predicate allowedPrefixGuard(Guard g, Expr e, boolean branch) {
private class AllowedPrefixSanitizer extends PathInjectionSanitizer {
AllowedPrefixSanitizer() {
- this = DataFlow::BarrierGuard::getABarrierNode() or
- this = ValidationMethod::getAValidatedNode()
+ this = DataFlow::BarrierGuard::getABarrierNode()
}
}
@@ -139,10 +109,7 @@ private predicate dotDotCheckGuard(Guard g, Expr e, boolean branch) {
}
private class DotDotCheckSanitizer extends PathInjectionSanitizer {
- DotDotCheckSanitizer() {
- this = DataFlow::BarrierGuard::getABarrierNode() or
- this = ValidationMethod::getAValidatedNode()
- }
+ DotDotCheckSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() }
}
private class BlockListGuard extends PathGuard instanceof MethodCall {
@@ -179,10 +146,7 @@ private predicate blockListGuard(Guard g, Expr e, boolean branch) {
}
private class BlockListSanitizer extends PathInjectionSanitizer {
- BlockListSanitizer() {
- this = DataFlow::BarrierGuard::getABarrierNode() or
- this = ValidationMethod::getAValidatedNode()
- }
+ BlockListSanitizer() { this = DataFlow::BarrierGuard::getABarrierNode() }
}
private class ConstantOrRegex extends Expr {
@@ -368,7 +332,6 @@ private class FileConstructorChildArgumentStep extends AdditionalTaintStep {
n2.asExpr() = constrCall
|
not n1 = DataFlow::BarrierGuard