From 97f7dcb04a1d5565cce833acae0b2d5639df67af Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 4 Feb 2026 09:40:04 +0000 Subject: [PATCH 001/243] Rust: Add dataflow test cases for neutral models. --- .../library-tests/dataflow/models/main.rs | 32 +++ .../dataflow/models/models.expected | 236 +++++++++++------- .../dataflow/models/models.ext.yml | 14 ++ 3 files changed, 191 insertions(+), 91 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index f4bb9e996780..72f372956549 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -410,6 +410,37 @@ fn test_trait_model(x: T) { sink(x7); } +pub fn generated_source(i: i64) -> i64 { + 0 +} + +pub fn neutral_generated_source(i: i64) -> i64 { + 0 +} + +pub fn neutral_manual_source(i: i64) -> i64 { + 0 +} + +pub fn generated_sink(i: i64) {} + +pub fn neutral_generated_sink(i: i64) {} + +pub fn neutral_manual_sink(i: i64) {} + +fn test_neutrals() { + // neutral models should cause corresponding generated models to be ignored. + // Thus, the `neutral_generated_*` source/sink, which have both a + // generated and a neutral model, should not have flow. + + sink(generated_source(1)); // $ hasValueFlow=1 + sink(neutral_generated_source(2)); // $ SPURIOUS: hasValueFlow=2 + sink(neutral_manual_source(3)); // $ hasValueFlow=3 + generated_sink(source(4)); // $ hasValueFlow=4 + neutral_generated_sink(source(5)); // $ SPURIOUS: hasValueFlow=5 + neutral_manual_sink(source(6)); // $ hasValueFlow=6 +} + #[tokio::main] async fn main() { test_identify(); @@ -431,5 +462,6 @@ async fn main() { test_simple_sink(); test_get_async_number().await; test_arg_source(); + test_neutrals(); let dummy = Some(0); // ensure that the the `lang:core` crate is extracted } diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index f9848542dd76..dab2925d4517 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -1,30 +1,36 @@ models | 1 | Sink: ::sink; Argument[self].Field[main::MyFieldEnum::D::field_d]; test-sink | | 2 | Sink: main::enum_sink; Argument[0].Field[main::MyFieldEnum::C::field_c]; test-sink | -| 3 | Sink: main::simple_sink; Argument[0]; test-sink | -| 4 | Source: ::source; ReturnValue.Field[main::MyFieldEnum::C::field_c]; test-source | -| 5 | Source: main::arg_source; Argument[0]; test-source | -| 6 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | -| 7 | Source: main::simple_source; ReturnValue; test-source | -| 8 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | -| 9 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | -| 10 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | -| 11 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | -| 12 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | -| 13 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | -| 14 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 15 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 16 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 17 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 18 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 19 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 20 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 21 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 22 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 23 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 24 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 25 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | -| 26 | Summary: main::snd; Argument[1]; ReturnValue; value | +| 3 | Sink: main::generated_sink; Argument[0]; test-sink | +| 4 | Sink: main::neutral_generated_sink; Argument[0]; test-sink | +| 5 | Sink: main::neutral_manual_sink; Argument[0]; test-sink | +| 6 | Sink: main::simple_sink; Argument[0]; test-sink | +| 7 | Source: ::source; ReturnValue.Field[main::MyFieldEnum::C::field_c]; test-source | +| 8 | Source: main::arg_source; Argument[0]; test-source | +| 9 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | +| 10 | Source: main::generated_source; ReturnValue; test-source | +| 11 | Source: main::neutral_generated_source; ReturnValue; test-source | +| 12 | Source: main::neutral_manual_source; ReturnValue; test-source | +| 13 | Source: main::simple_source; ReturnValue; test-source | +| 14 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | +| 15 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | +| 16 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | +| 17 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 18 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | +| 19 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | +| 20 | Summary: main::coerce; Argument[0]; ReturnValue; taint | +| 21 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 22 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 23 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 24 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 25 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 26 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 27 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 28 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 29 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 30 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 31 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 32 | Summary: main::snd; Argument[1]; ReturnValue; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -34,13 +40,13 @@ edges | main.rs:16:19:16:19 | s | main.rs:16:10:16:20 | identity(...) | provenance | QL | | main.rs:25:9:25:9 | s | main.rs:26:17:26:17 | s | provenance | | | main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | s | provenance | | -| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:14 | +| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:20 | | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:26 | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:26 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:13:54:21 | source(...) | main.rs:54:9:54:9 | s | provenance | | @@ -51,8 +57,8 @@ edges | main.rs:55:14:55:28 | ...::A(...) [A] | main.rs:55:9:55:10 | e1 [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:20 | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:20 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:13:67:21 | source(...) | main.rs:67:9:67:9 | s | provenance | | @@ -61,8 +67,8 @@ edges | main.rs:68:9:68:10 | e1 [B] | main.rs:69:11:69:12 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:25 | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:25 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:71:9:71:23 | ...::B(...) [B] | main.rs:71:22:71:22 | i | provenance | | @@ -79,8 +85,8 @@ edges | main.rs:87:14:87:42 | ...::C {...} [C] | main.rs:87:9:87:10 | e1 [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:19 | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:19 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:13:99:21 | source(...) | main.rs:99:9:99:9 | s | provenance | | @@ -89,8 +95,8 @@ edges | main.rs:100:9:100:10 | e1 [D] | main.rs:101:11:101:12 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:24 | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:24 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:103:9:103:37 | ...::D {...} [D] | main.rs:103:35:103:35 | i | provenance | | @@ -107,8 +113,8 @@ edges | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | main.rs:119:9:119:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:17 | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:17 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | s | provenance | | @@ -117,16 +123,16 @@ edges | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:22 | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:22 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:15 | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:15 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:162:9:162:9 | s | main.rs:163:33:163:33 | s | provenance | | @@ -137,10 +143,10 @@ edges | main.rs:163:9:163:11 | arr [element] | main.rs:164:10:164:12 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:21 | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:21 | -| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:11 | -| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:11 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:17 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:17 | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | | main.rs:173:13:173:22 | source(...) | main.rs:173:9:173:9 | s | provenance | | @@ -151,8 +157,8 @@ edges | main.rs:174:13:174:18 | TupleExpr [tuple.0] | main.rs:174:9:174:9 | t [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:18 | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:18 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:13:186:22 | source(...) | main.rs:186:9:186:9 | s | provenance | | @@ -161,8 +167,8 @@ edges | main.rs:187:9:187:9 | t [tuple.1] | main.rs:189:10:189:10 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:23 | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:23 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:201:9:201:9 | s | main.rs:206:11:206:11 | s | provenance | | @@ -171,8 +177,8 @@ edges | main.rs:201:13:201:22 | source(...) | main.rs:201:9:201:9 | s | provenance | | | main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | | main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | -| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:12 | -| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:12 | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:18 | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:18 | | main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | | main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | provenance | | @@ -181,14 +187,14 @@ edges | main.rs:212:9:212:9 | t | main.rs:213:10:213:10 | t | provenance | | | main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | | main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:12 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:12 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:13 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:13 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:12 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:12 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:13 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:13 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:18 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:18 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:19 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:19 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:18 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:18 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:19 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:19 | | main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | | main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | | main.rs:217:13:217:22 | source(...) | main.rs:217:9:217:9 | s | provenance | | @@ -199,10 +205,10 @@ edges | main.rs:219:9:219:9 | t | main.rs:220:10:220:10 | t | provenance | | | main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | | main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | -| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:12 | -| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:12 | -| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:12 | -| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:12 | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:18 | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:18 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:18 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:18 | | main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | | main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | | main.rs:229:13:229:22 | source(...) | main.rs:229:9:229:9 | s | provenance | | @@ -213,12 +219,12 @@ edges | main.rs:230:13:230:31 | get_async_number(...) [future] | main.rs:230:13:230:37 | await ... | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:16 | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:16 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | -| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:6 | -| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:6 | +| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:9 | +| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:9 | | main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | | main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | | main.rs:251:11:251:11 | s [D] | main.rs:253:9:253:37 | ...::D {...} [D] | provenance | | @@ -231,8 +237,8 @@ edges | main.rs:259:9:259:9 | s [C] | main.rs:260:11:260:11 | s [C] | provenance | | | main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | | main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | -| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:4 | -| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:4 | +| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:7 | +| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:7 | | main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | | main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | | main.rs:261:9:261:37 | ...::C {...} [C] | main.rs:261:35:261:35 | i | provenance | | @@ -241,18 +247,18 @@ edges | main.rs:261:35:261:35 | i | main.rs:261:47:261:47 | i | provenance | | | main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | | main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | -| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:8 | -| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:8 | -| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:8 | -| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:8 | +| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:14 | +| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:14 | +| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:14 | +| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:14 | | main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | | main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | | main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | | main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | -| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:8 | -| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:8 | -| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:8 | -| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:8 | +| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:14 | +| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:14 | +| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:14 | +| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:14 | | main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | | main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | | main.rs:297:9:297:9 | s | main.rs:298:41:298:41 | s | provenance | | @@ -277,48 +283,60 @@ edges | main.rs:305:5:305:5 | e [D] | main.rs:305:7:305:10 | sink | provenance | MaD:1 Sink:MaD:1 | | main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | | main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | -| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | -| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:7 MaD:7 | +| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:13 MaD:13 | +| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:13 MaD:13 | | main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | | main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | | main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | | main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | | main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | | main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | -| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:5 MaD:5 | -| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:5 MaD:5 | +| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:6 Sink:MaD:6 | +| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:6 Sink:MaD:6 | +| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:8 MaD:8 | +| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:8 MaD:8 | | main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | | main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | | main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | | main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | -| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:9 | -| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:15 | +| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:15 | | main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | | main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | | main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | | main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:9 | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:15 | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:15 | | main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | | main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | | main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | | main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | -| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:9 | -| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:9 | +| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:15 | +| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:15 | | main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | | main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | | main.rs:403:9:403:10 | x5 | main.rs:404:10:404:11 | x5 | provenance | | -| main.rs:403:14:403:23 | source(...) | main.rs:403:14:403:30 | ... .lt(...) | provenance | MaD:10 | +| main.rs:403:14:403:23 | source(...) | main.rs:403:14:403:30 | ... .lt(...) | provenance | MaD:16 | | main.rs:403:14:403:30 | ... .lt(...) | main.rs:403:9:403:10 | x5 | provenance | | | main.rs:406:9:406:10 | x6 | main.rs:407:10:407:11 | x6 | provenance | | -| main.rs:406:14:406:23 | source(...) | main.rs:406:14:406:27 | ... < ... | provenance | MaD:10 | +| main.rs:406:14:406:23 | source(...) | main.rs:406:14:406:27 | ... < ... | provenance | MaD:16 | | main.rs:406:14:406:27 | ... < ... | main.rs:406:9:406:10 | x6 | provenance | | +| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:10 MaD:10 | +| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:10 MaD:10 | +| main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | provenance | Src:MaD:11 MaD:11 | +| main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | provenance | Src:MaD:11 MaD:11 | +| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:12 MaD:12 | +| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:12 MaD:12 | +| main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | provenance | MaD:4 Sink:MaD:4 | +| main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | provenance | MaD:4 Sink:MaD:4 | +| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:5 Sink:MaD:5 | +| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:5 Sink:MaD:5 | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -672,6 +690,30 @@ nodes | main.rs:406:14:406:23 | source(...) | semmle.label | source(...) | | main.rs:406:14:406:27 | ... < ... | semmle.label | ... < ... | | main.rs:407:10:407:11 | x6 | semmle.label | x6 | +| main.rs:436:10:436:25 | generated_source | semmle.label | generated_source | +| main.rs:436:10:436:25 | generated_source | semmle.label | generated_source | +| main.rs:436:10:436:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:436:10:436:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:437:10:437:33 | neutral_generated_source | semmle.label | neutral_generated_source | +| main.rs:437:10:437:33 | neutral_generated_source | semmle.label | neutral_generated_source | +| main.rs:437:10:437:36 | neutral_generated_source(...) | semmle.label | neutral_generated_source(...) | +| main.rs:437:10:437:36 | neutral_generated_source(...) | semmle.label | neutral_generated_source(...) | +| main.rs:438:10:438:30 | neutral_manual_source | semmle.label | neutral_manual_source | +| main.rs:438:10:438:30 | neutral_manual_source | semmle.label | neutral_manual_source | +| main.rs:438:10:438:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:438:10:438:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:439:5:439:18 | generated_sink | semmle.label | generated_sink | +| main.rs:439:5:439:18 | generated_sink | semmle.label | generated_sink | +| main.rs:439:20:439:28 | source(...) | semmle.label | source(...) | +| main.rs:439:20:439:28 | source(...) | semmle.label | source(...) | +| main.rs:440:5:440:26 | neutral_generated_sink | semmle.label | neutral_generated_sink | +| main.rs:440:5:440:26 | neutral_generated_sink | semmle.label | neutral_generated_sink | +| main.rs:440:28:440:36 | source(...) | semmle.label | source(...) | +| main.rs:440:28:440:36 | source(...) | semmle.label | source(...) | +| main.rs:441:5:441:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | +| main.rs:441:5:441:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | +| main.rs:441:25:441:33 | source(...) | semmle.label | source(...) | +| main.rs:441:25:441:33 | source(...) | semmle.label | source(...) | subpaths | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | @@ -743,3 +785,15 @@ invalidSpecComponent | main.rs:401:10:401:11 | x4 | main.rs:400:14:400:23 | source(...) | main.rs:401:10:401:11 | x4 | $@ | main.rs:400:14:400:23 | source(...) | source(...) | | main.rs:404:10:404:11 | x5 | main.rs:403:14:403:23 | source(...) | main.rs:404:10:404:11 | x5 | $@ | main.rs:403:14:403:23 | source(...) | source(...) | | main.rs:407:10:407:11 | x6 | main.rs:406:14:406:23 | source(...) | main.rs:407:10:407:11 | x6 | $@ | main.rs:406:14:406:23 | source(...) | source(...) | +| main.rs:436:10:436:28 | generated_source(...) | main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | $@ | main.rs:436:10:436:25 | generated_source | generated_source | +| main.rs:436:10:436:28 | generated_source(...) | main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | $@ | main.rs:436:10:436:25 | generated_source | generated_source | +| main.rs:437:10:437:36 | neutral_generated_source(...) | main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | $@ | main.rs:437:10:437:33 | neutral_generated_source | neutral_generated_source | +| main.rs:437:10:437:36 | neutral_generated_source(...) | main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | $@ | main.rs:437:10:437:33 | neutral_generated_source | neutral_generated_source | +| main.rs:438:10:438:33 | neutral_manual_source(...) | main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | $@ | main.rs:438:10:438:30 | neutral_manual_source | neutral_manual_source | +| main.rs:438:10:438:33 | neutral_manual_source(...) | main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | $@ | main.rs:438:10:438:30 | neutral_manual_source | neutral_manual_source | +| main.rs:439:5:439:18 | generated_sink | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | $@ | main.rs:439:20:439:28 | source(...) | source(...) | +| main.rs:439:5:439:18 | generated_sink | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | $@ | main.rs:439:20:439:28 | source(...) | source(...) | +| main.rs:440:5:440:26 | neutral_generated_sink | main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | $@ | main.rs:440:28:440:36 | source(...) | source(...) | +| main.rs:440:5:440:26 | neutral_generated_sink | main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | $@ | main.rs:440:28:440:36 | source(...) | source(...) | +| main.rs:441:5:441:23 | neutral_manual_sink | main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | $@ | main.rs:441:25:441:33 | source(...) | source(...) | +| main.rs:441:5:441:23 | neutral_manual_sink | main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | $@ | main.rs:441:25:441:33 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/models.ext.yml b/rust/ql/test/library-tests/dataflow/models/models.ext.yml index 294440cc60de..de84c6d14973 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.ext.yml +++ b/rust/ql/test/library-tests/dataflow/models/models.ext.yml @@ -8,6 +8,9 @@ extensions: - ["::source", "ReturnValue.Field[main::MyFieldEnum::C::field_c]", "test-source", "manual"] - ["main::arg_source", "Argument[0]", "test-source", "manual"] - ["main::source_into_function::pass_source", "Argument[1].Parameter[0]", "test-source", "manual"] + - ["main::generated_source", "ReturnValue", "test-source", "dfc-generated"] # not actually generated, but we want to test behaviour of generated models here. + - ["main::neutral_generated_source", "ReturnValue", "test-source", "dfc-generated"] + - ["main::neutral_manual_source", "ReturnValue", "test-source", "manual"] - addsTo: pack: codeql/rust-all extensible: sinkModel @@ -15,6 +18,9 @@ extensions: - ["main::simple_sink", "Argument[0]", "test-sink", "manual"] - ["main::enum_sink", "Argument[0].Field[main::MyFieldEnum::C::field_c]", "test-sink", "manual"] - ["::sink", "Argument[self].Field[main::MyFieldEnum::D::field_d]", "test-sink", "manual"] + - ["main::generated_sink", "Argument[0]", "test-sink", "dfc-generated"] + - ["main::neutral_generated_sink", "Argument[0]", "test-sink", "dfc-generated"] + - ["main::neutral_manual_sink", "Argument[0]", "test-sink", "manual"] - addsTo: pack: codeql/rust-all extensible: summaryModel @@ -39,3 +45,11 @@ extensions: - ["<_ as core::cmp::PartialOrd>::lt", "Argument[self].Reference", "ReturnValue", "taint", "manual"] # Overwrites the generic trait model for i32 - ["::lt", "Argument[0]", "ReturnValue", "taint", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: neutralModel + data: + - ["main::neutral_generated_source", "source", "manual"] + - ["main::neutral_manual_source", "source", "manual"] + - ["main::neutral_generated_sink", "sink", "manual"] + - ["main::neutral_manual_sink", "sink", "manual"] From d40071321a6533b43cfc91541e57f7395c853648 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 3 Feb 2026 15:15:33 +0000 Subject: [PATCH 002/243] Rust: Implement neutral models for Rust. --- .../rust/dataflow/internal/ModelsAsData.qll | 47 +++- .../library-tests/dataflow/models/main.rs | 4 +- .../dataflow/models/models.expected | 218 ++++++++---------- 3 files changed, 139 insertions(+), 130 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index a0c6caf85423..ce80664b3226 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -89,6 +89,15 @@ extensible predicate summaryModel( QlBuiltins::ExtensionId madId ); +/** + * Holds if a neutral model of kind `kind` exists for the function with canonical path `path`. The + * only effect of a neutral model is to prevent generated and inherited models of the corresponding + * `kind` (`source`, `sink` or `summary`) from being applied. + */ +extensible predicate neutralModel( + string path, string kind, string provenance, QlBuiltins::ExtensionId madId +); + /** * Holds if the given extension tuple `madId` should pretty-print as `model`. * @@ -109,6 +118,11 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { summaryModel(path, input, output, kind, _, madId) and model = "Summary: " + path + "; " + input + "; " + output + "; " + kind ) + or + exists(string path, string kind | + neutralModel(path, kind, _, madId) and + model = "Neutral: " + path + "; " + kind + ) } private predicate summaryModel( @@ -133,16 +147,19 @@ private predicate summaryModelRelevant( ) { summaryModel(f, input, output, kind, provenance, isInherited, madId) and // Only apply generated or inherited models to functions in library code and - // when no strictly better model exists - if provenance.isGenerated() or isInherited = true - then - not f.fromSource() and - not exists(Provenance other | summaryModel(f, _, _, _, other, false, _) | - provenance.isGenerated() and other.isManual() - or - provenance = other and isInherited = true - ) - else any() + // when no strictly better model (or neutral model) exists + ( + if provenance.isGenerated() or isInherited = true + then + not f.fromSource() and + not exists(Provenance other | summaryModel(f, _, _, _, other, false, _) | + provenance.isGenerated() and other.isManual() + or + provenance = other and isInherited = true + ) and + not neutralModel(f.getCanonicalPath(), "summary", _, _) + else any() + ) } private class SummarizedCallableFromModel extends SummarizedCallable::Range { @@ -180,6 +197,11 @@ private class FlowSourceFromModel extends FlowSource::Range { exists(QlBuiltins::ExtensionId madId | sourceModel(path, output, kind, provenance, madId) and model = "MaD:" + madId.toString() + ) and + // Only apply generated models when no neutral model exists + not ( + provenance.isGenerated() and + neutralModel(path, "source", _, _) ) } } @@ -196,6 +218,11 @@ private class FlowSinkFromModel extends FlowSink::Range { exists(QlBuiltins::ExtensionId madId | sinkModel(path, input, kind, provenance, madId) and model = "MaD:" + madId.toString() + ) and + // Only apply generated models when no neutral model exists + not ( + provenance.isGenerated() and + neutralModel(path, "sink", _, _) ) } } diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index 72f372956549..a8461fe3e00b 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -434,10 +434,10 @@ fn test_neutrals() { // generated and a neutral model, should not have flow. sink(generated_source(1)); // $ hasValueFlow=1 - sink(neutral_generated_source(2)); // $ SPURIOUS: hasValueFlow=2 + sink(neutral_generated_source(2)); sink(neutral_manual_source(3)); // $ hasValueFlow=3 generated_sink(source(4)); // $ hasValueFlow=4 - neutral_generated_sink(source(5)); // $ SPURIOUS: hasValueFlow=5 + neutral_generated_sink(source(5)); neutral_manual_sink(source(6)); // $ hasValueFlow=6 } diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index dab2925d4517..74e89ea1acd2 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -2,35 +2,33 @@ models | 1 | Sink: ::sink; Argument[self].Field[main::MyFieldEnum::D::field_d]; test-sink | | 2 | Sink: main::enum_sink; Argument[0].Field[main::MyFieldEnum::C::field_c]; test-sink | | 3 | Sink: main::generated_sink; Argument[0]; test-sink | -| 4 | Sink: main::neutral_generated_sink; Argument[0]; test-sink | -| 5 | Sink: main::neutral_manual_sink; Argument[0]; test-sink | -| 6 | Sink: main::simple_sink; Argument[0]; test-sink | -| 7 | Source: ::source; ReturnValue.Field[main::MyFieldEnum::C::field_c]; test-source | -| 8 | Source: main::arg_source; Argument[0]; test-source | -| 9 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | -| 10 | Source: main::generated_source; ReturnValue; test-source | -| 11 | Source: main::neutral_generated_source; ReturnValue; test-source | -| 12 | Source: main::neutral_manual_source; ReturnValue; test-source | -| 13 | Source: main::simple_source; ReturnValue; test-source | -| 14 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | -| 15 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | -| 16 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | -| 17 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | -| 18 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | -| 19 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | -| 20 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 21 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 22 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 23 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 24 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 25 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 26 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 27 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 28 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 29 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 30 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 31 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | -| 32 | Summary: main::snd; Argument[1]; ReturnValue; value | +| 4 | Sink: main::neutral_manual_sink; Argument[0]; test-sink | +| 5 | Sink: main::simple_sink; Argument[0]; test-sink | +| 6 | Source: ::source; ReturnValue.Field[main::MyFieldEnum::C::field_c]; test-source | +| 7 | Source: main::arg_source; Argument[0]; test-source | +| 8 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | +| 9 | Source: main::generated_source; ReturnValue; test-source | +| 10 | Source: main::neutral_manual_source; ReturnValue; test-source | +| 11 | Source: main::simple_source; ReturnValue; test-source | +| 12 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | +| 13 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | +| 14 | Summary: <_ as core::cmp::PartialOrd>::lt; Argument[self].Reference; ReturnValue; taint | +| 15 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 16 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | +| 17 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | +| 18 | Summary: main::coerce; Argument[0]; ReturnValue; taint | +| 19 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 20 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 21 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 22 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 23 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 24 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 25 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 26 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 27 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 28 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 29 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 30 | Summary: main::snd; Argument[1]; ReturnValue; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -40,13 +38,13 @@ edges | main.rs:16:19:16:19 | s | main.rs:16:10:16:20 | identity(...) | provenance | QL | | main.rs:25:9:25:9 | s | main.rs:26:17:26:17 | s | provenance | | | main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | s | provenance | | -| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:20 | +| main.rs:26:17:26:17 | s | main.rs:26:10:26:18 | coerce(...) | provenance | MaD:18 | | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:30 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:30 | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:13:54:21 | source(...) | main.rs:54:9:54:9 | s | provenance | | @@ -57,8 +55,8 @@ edges | main.rs:55:14:55:28 | ...::A(...) [A] | main.rs:55:9:55:10 | e1 [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:24 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:24 | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:13:67:21 | source(...) | main.rs:67:9:67:9 | s | provenance | | @@ -67,8 +65,8 @@ edges | main.rs:68:9:68:10 | e1 [B] | main.rs:69:11:69:12 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:29 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:29 | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:71:9:71:23 | ...::B(...) [B] | main.rs:71:22:71:22 | i | provenance | | @@ -85,8 +83,8 @@ edges | main.rs:87:14:87:42 | ...::C {...} [C] | main.rs:87:9:87:10 | e1 [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:23 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:23 | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:13:99:21 | source(...) | main.rs:99:9:99:9 | s | provenance | | @@ -95,8 +93,8 @@ edges | main.rs:100:9:100:10 | e1 [D] | main.rs:101:11:101:12 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:28 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:28 | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:103:9:103:37 | ...::D {...} [D] | main.rs:103:35:103:35 | i | provenance | | @@ -113,8 +111,8 @@ edges | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | main.rs:119:9:119:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:21 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:21 | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | s | provenance | | @@ -123,16 +121,16 @@ edges | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:26 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:26 | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:19 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:19 | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:162:9:162:9 | s | main.rs:163:33:163:33 | s | provenance | | @@ -143,10 +141,10 @@ edges | main.rs:163:9:163:11 | arr [element] | main.rs:164:10:164:12 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | -| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:17 | -| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:17 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:25 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:25 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | +| main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | | main.rs:173:13:173:22 | source(...) | main.rs:173:9:173:9 | s | provenance | | @@ -157,8 +155,8 @@ edges | main.rs:174:13:174:18 | TupleExpr [tuple.0] | main.rs:174:9:174:9 | t [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:22 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:22 | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:13:186:22 | source(...) | main.rs:186:9:186:9 | s | provenance | | @@ -167,8 +165,8 @@ edges | main.rs:187:9:187:9 | t [tuple.1] | main.rs:189:10:189:10 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:27 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:27 | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:201:9:201:9 | s | main.rs:206:11:206:11 | s | provenance | | @@ -177,8 +175,8 @@ edges | main.rs:201:13:201:22 | source(...) | main.rs:201:9:201:9 | s | provenance | | | main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | | main.rs:202:14:202:14 | ... | main.rs:203:14:203:14 | n | provenance | | -| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:18 | -| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:18 | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:16 | +| main.rs:206:11:206:11 | s | main.rs:202:14:202:14 | ... | provenance | MaD:16 | | main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | | main.rs:210:13:210:22 | source(...) | main.rs:212:23:212:23 | f [captured s] | provenance | | | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | provenance | | @@ -187,14 +185,14 @@ edges | main.rs:212:9:212:9 | t | main.rs:213:10:213:10 | t | provenance | | | main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | | main.rs:212:13:212:24 | apply(...) | main.rs:212:9:212:9 | t | provenance | | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:18 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:18 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:19 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:19 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:18 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:18 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:19 | -| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:19 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:16 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:16 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:17 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | provenance | MaD:17 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:16 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:16 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:17 | +| main.rs:212:23:212:23 | f [captured s] | main.rs:212:13:212:24 | apply(...) | provenance | MaD:17 | | main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | | main.rs:217:9:217:9 | s | main.rs:219:19:219:19 | s | provenance | | | main.rs:217:13:217:22 | source(...) | main.rs:217:9:217:9 | s | provenance | | @@ -205,10 +203,10 @@ edges | main.rs:219:9:219:9 | t | main.rs:220:10:220:10 | t | provenance | | | main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | | main.rs:219:13:219:23 | apply(...) | main.rs:219:9:219:9 | t | provenance | | -| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:18 | -| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:18 | -| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:18 | -| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:18 | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:16 | +| main.rs:219:19:219:19 | s | main.rs:218:14:218:14 | ... | provenance | MaD:16 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:16 | +| main.rs:219:19:219:19 | s | main.rs:219:13:219:23 | apply(...) | provenance | MaD:16 | | main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | | main.rs:229:9:229:9 | s | main.rs:230:30:230:30 | s | provenance | | | main.rs:229:13:229:22 | source(...) | main.rs:229:9:229:9 | s | provenance | | @@ -219,12 +217,12 @@ edges | main.rs:230:13:230:31 | get_async_number(...) [future] | main.rs:230:13:230:37 | await ... | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:20 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:20 | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | -| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:9 | -| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:9 | +| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:8 | +| main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:8 | | main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | | main.rs:250:13:250:27 | enum_source(...) [D] | main.rs:250:9:250:9 | s [D] | provenance | | | main.rs:251:11:251:11 | s [D] | main.rs:253:9:253:37 | ...::D {...} [D] | provenance | | @@ -237,8 +235,8 @@ edges | main.rs:259:9:259:9 | s [C] | main.rs:260:11:260:11 | s [C] | provenance | | | main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | | main.rs:259:13:259:24 | e.source(...) [C] | main.rs:259:9:259:9 | s [C] | provenance | | -| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:7 | -| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:7 | +| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:6 | +| main.rs:259:15:259:20 | source | main.rs:259:13:259:24 | e.source(...) [C] | provenance | Src:MaD:6 | | main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | | main.rs:260:11:260:11 | s [C] | main.rs:261:9:261:37 | ...::C {...} [C] | provenance | | | main.rs:261:9:261:37 | ...::C {...} [C] | main.rs:261:35:261:35 | i | provenance | | @@ -247,18 +245,18 @@ edges | main.rs:261:35:261:35 | i | main.rs:261:47:261:47 | i | provenance | | | main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | | main.rs:275:18:275:18 | ... | main.rs:275:26:275:26 | a | provenance | | -| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:14 | -| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:14 | -| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:14 | -| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:14 | +| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:12 | +| main.rs:276:9:276:19 | pass_source | main.rs:275:18:275:18 | ... | provenance | Src:MaD:12 | +| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:12 | +| main.rs:278:9:278:19 | pass_source | main.rs:278:25:278:25 | ... | provenance | Src:MaD:12 | | main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | | main.rs:278:25:278:25 | ... | main.rs:279:18:279:18 | a | provenance | | | main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | | main.rs:282:14:282:19 | ...: i64 | main.rs:283:18:283:18 | a | provenance | | -| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:14 | -| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:14 | -| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:14 | -| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:14 | +| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:12 | +| main.rs:285:9:285:19 | pass_source | main.rs:282:14:282:19 | ...: i64 | provenance | Src:MaD:12 | +| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:12 | +| main.rs:287:9:287:19 | pass_source | main.rs:287:36:287:36 | ... | provenance | Src:MaD:12 | | main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | | main.rs:287:36:287:36 | ... | main.rs:288:18:288:18 | a | provenance | | | main.rs:297:9:297:9 | s | main.rs:298:41:298:41 | s | provenance | | @@ -283,60 +281,56 @@ edges | main.rs:305:5:305:5 | e [D] | main.rs:305:7:305:10 | sink | provenance | MaD:1 Sink:MaD:1 | | main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | | main.rs:314:9:314:9 | s | main.rs:315:10:315:10 | s | provenance | | -| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:13 MaD:13 | -| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:13 MaD:13 | +| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:11 MaD:11 | +| main.rs:314:13:314:25 | simple_source | main.rs:314:13:314:29 | simple_source(...) | provenance | Src:MaD:11 MaD:11 | | main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | | main.rs:314:13:314:29 | simple_source(...) | main.rs:314:9:314:9 | s | provenance | | | main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | | main.rs:322:9:322:9 | s | main.rs:323:17:323:17 | s | provenance | | | main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | | main.rs:322:13:322:22 | source(...) | main.rs:322:9:322:9 | s | provenance | | -| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:6 Sink:MaD:6 | -| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:6 Sink:MaD:6 | -| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:8 MaD:8 | -| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:8 MaD:8 | +| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:5 Sink:MaD:5 | +| main.rs:323:17:323:17 | s | main.rs:323:5:323:15 | simple_sink | provenance | MaD:5 Sink:MaD:5 | +| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:7 MaD:7 | +| main.rs:331:5:331:14 | arg_source | main.rs:331:16:331:16 | [post] i | provenance | Src:MaD:7 MaD:7 | | main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | | main.rs:331:16:331:16 | [post] i | main.rs:332:10:332:10 | i | provenance | | | main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | | main.rs:384:9:384:10 | x1 | main.rs:385:10:385:11 | x1 | provenance | | -| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:15 | -| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:15 | +| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:13 | +| main.rs:384:14:384:23 | source(...) | main.rs:384:14:384:30 | ... .max(...) | provenance | MaD:13 | | main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | | main.rs:384:14:384:30 | ... .max(...) | main.rs:384:9:384:10 | x1 | provenance | | | main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | | main.rs:387:9:387:10 | x2 [MyStruct.field1] | main.rs:395:10:395:11 | x2 [MyStruct.field1] | provenance | | | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | main.rs:387:9:387:10 | x2 [MyStruct.field1] | provenance | | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:15 | -| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:15 | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:13 | +| main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | main.rs:387:14:394:6 | ... .max(...) [MyStruct.field1] | provenance | MaD:13 | | main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:388:17:388:26 | source(...) | main.rs:387:15:390:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | | main.rs:395:10:395:11 | x2 [MyStruct.field1] | main.rs:395:10:395:18 | x2.field1 | provenance | | | main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | | main.rs:400:9:400:10 | x4 | main.rs:401:10:401:11 | x4 | provenance | | -| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:15 | -| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:15 | +| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:13 | +| main.rs:400:14:400:23 | source(...) | main.rs:400:14:400:30 | ... .max(...) | provenance | MaD:13 | | main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | | main.rs:400:14:400:30 | ... .max(...) | main.rs:400:9:400:10 | x4 | provenance | | | main.rs:403:9:403:10 | x5 | main.rs:404:10:404:11 | x5 | provenance | | -| main.rs:403:14:403:23 | source(...) | main.rs:403:14:403:30 | ... .lt(...) | provenance | MaD:16 | +| main.rs:403:14:403:23 | source(...) | main.rs:403:14:403:30 | ... .lt(...) | provenance | MaD:14 | | main.rs:403:14:403:30 | ... .lt(...) | main.rs:403:9:403:10 | x5 | provenance | | | main.rs:406:9:406:10 | x6 | main.rs:407:10:407:11 | x6 | provenance | | -| main.rs:406:14:406:23 | source(...) | main.rs:406:14:406:27 | ... < ... | provenance | MaD:16 | +| main.rs:406:14:406:23 | source(...) | main.rs:406:14:406:27 | ... < ... | provenance | MaD:14 | | main.rs:406:14:406:27 | ... < ... | main.rs:406:9:406:10 | x6 | provenance | | -| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:10 MaD:10 | -| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:10 MaD:10 | -| main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | provenance | Src:MaD:11 MaD:11 | -| main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | provenance | Src:MaD:11 MaD:11 | -| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:12 MaD:12 | -| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:12 MaD:12 | +| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | +| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | +| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | +| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | provenance | MaD:4 Sink:MaD:4 | -| main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | provenance | MaD:4 Sink:MaD:4 | -| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:5 Sink:MaD:5 | -| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:5 Sink:MaD:5 | +| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | +| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -694,10 +688,6 @@ nodes | main.rs:436:10:436:25 | generated_source | semmle.label | generated_source | | main.rs:436:10:436:28 | generated_source(...) | semmle.label | generated_source(...) | | main.rs:436:10:436:28 | generated_source(...) | semmle.label | generated_source(...) | -| main.rs:437:10:437:33 | neutral_generated_source | semmle.label | neutral_generated_source | -| main.rs:437:10:437:33 | neutral_generated_source | semmle.label | neutral_generated_source | -| main.rs:437:10:437:36 | neutral_generated_source(...) | semmle.label | neutral_generated_source(...) | -| main.rs:437:10:437:36 | neutral_generated_source(...) | semmle.label | neutral_generated_source(...) | | main.rs:438:10:438:30 | neutral_manual_source | semmle.label | neutral_manual_source | | main.rs:438:10:438:30 | neutral_manual_source | semmle.label | neutral_manual_source | | main.rs:438:10:438:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | @@ -706,10 +696,6 @@ nodes | main.rs:439:5:439:18 | generated_sink | semmle.label | generated_sink | | main.rs:439:20:439:28 | source(...) | semmle.label | source(...) | | main.rs:439:20:439:28 | source(...) | semmle.label | source(...) | -| main.rs:440:5:440:26 | neutral_generated_sink | semmle.label | neutral_generated_sink | -| main.rs:440:5:440:26 | neutral_generated_sink | semmle.label | neutral_generated_sink | -| main.rs:440:28:440:36 | source(...) | semmle.label | source(...) | -| main.rs:440:28:440:36 | source(...) | semmle.label | source(...) | | main.rs:441:5:441:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | | main.rs:441:5:441:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | | main.rs:441:25:441:33 | source(...) | semmle.label | source(...) | @@ -787,13 +773,9 @@ invalidSpecComponent | main.rs:407:10:407:11 | x6 | main.rs:406:14:406:23 | source(...) | main.rs:407:10:407:11 | x6 | $@ | main.rs:406:14:406:23 | source(...) | source(...) | | main.rs:436:10:436:28 | generated_source(...) | main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | $@ | main.rs:436:10:436:25 | generated_source | generated_source | | main.rs:436:10:436:28 | generated_source(...) | main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | $@ | main.rs:436:10:436:25 | generated_source | generated_source | -| main.rs:437:10:437:36 | neutral_generated_source(...) | main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | $@ | main.rs:437:10:437:33 | neutral_generated_source | neutral_generated_source | -| main.rs:437:10:437:36 | neutral_generated_source(...) | main.rs:437:10:437:33 | neutral_generated_source | main.rs:437:10:437:36 | neutral_generated_source(...) | $@ | main.rs:437:10:437:33 | neutral_generated_source | neutral_generated_source | | main.rs:438:10:438:33 | neutral_manual_source(...) | main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | $@ | main.rs:438:10:438:30 | neutral_manual_source | neutral_manual_source | | main.rs:438:10:438:33 | neutral_manual_source(...) | main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | $@ | main.rs:438:10:438:30 | neutral_manual_source | neutral_manual_source | | main.rs:439:5:439:18 | generated_sink | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | $@ | main.rs:439:20:439:28 | source(...) | source(...) | | main.rs:439:5:439:18 | generated_sink | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | $@ | main.rs:439:20:439:28 | source(...) | source(...) | -| main.rs:440:5:440:26 | neutral_generated_sink | main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | $@ | main.rs:440:28:440:36 | source(...) | source(...) | -| main.rs:440:5:440:26 | neutral_generated_sink | main.rs:440:28:440:36 | source(...) | main.rs:440:5:440:26 | neutral_generated_sink | $@ | main.rs:440:28:440:36 | source(...) | source(...) | | main.rs:441:5:441:23 | neutral_manual_sink | main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | $@ | main.rs:441:25:441:33 | source(...) | source(...) | | main.rs:441:5:441:23 | neutral_manual_sink | main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | $@ | main.rs:441:25:441:33 | source(...) | source(...) | From 9de5f5c72b2d4215d2487ca288cac0cedc59511c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 5 Feb 2026 08:46:40 +0000 Subject: [PATCH 003/243] Rust: Clean up and change note. --- .../change-notes/2026-02-05-neutral-models.md | 4 +++ .../rust/dataflow/internal/ModelsAsData.qll | 28 +++++++++---------- .../library-tests/dataflow/models/main.rs | 4 +-- 3 files changed, 19 insertions(+), 17 deletions(-) create mode 100644 rust/ql/lib/change-notes/2026-02-05-neutral-models.md diff --git a/rust/ql/lib/change-notes/2026-02-05-neutral-models.md b/rust/ql/lib/change-notes/2026-02-05-neutral-models.md new file mode 100644 index 000000000000..da232f093ffa --- /dev/null +++ b/rust/ql/lib/change-notes/2026-02-05-neutral-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added support for neutral models (`extensible: neutralModel`) to control where generated source, sink and flow summary models apply. diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index ce80664b3226..5eb05e84833e 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -90,9 +90,9 @@ extensible predicate summaryModel( ); /** - * Holds if a neutral model of kind `kind` exists for the function with canonical path `path`. The - * only effect of a neutral model is to prevent generated and inherited models of the corresponding - * `kind` (`source`, `sink` or `summary`) from being applied. + * Holds if a neutral model exists for the function with canonical path `path`. The only + * effect of a neutral model is to prevent generated and inherited models of the corresponding + * `kind` (`source`, `sink` or `summary`) from being applied to that function. */ extensible predicate neutralModel( string path, string kind, string provenance, QlBuiltins::ExtensionId madId @@ -148,18 +148,16 @@ private predicate summaryModelRelevant( summaryModel(f, input, output, kind, provenance, isInherited, madId) and // Only apply generated or inherited models to functions in library code and // when no strictly better model (or neutral model) exists - ( - if provenance.isGenerated() or isInherited = true - then - not f.fromSource() and - not exists(Provenance other | summaryModel(f, _, _, _, other, false, _) | - provenance.isGenerated() and other.isManual() - or - provenance = other and isInherited = true - ) and - not neutralModel(f.getCanonicalPath(), "summary", _, _) - else any() - ) + if provenance.isGenerated() or isInherited = true + then + not f.fromSource() and + not exists(Provenance other | summaryModel(f, _, _, _, other, false, _) | + provenance.isGenerated() and other.isManual() + or + provenance = other and isInherited = true + ) and + not neutralModel(f.getCanonicalPath(), "summary", _, _) + else any() } private class SummarizedCallableFromModel extends SummarizedCallable::Range { diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index a8461fe3e00b..34b7b9188f2b 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -430,8 +430,8 @@ pub fn neutral_manual_sink(i: i64) {} fn test_neutrals() { // neutral models should cause corresponding generated models to be ignored. - // Thus, the `neutral_generated_*` source/sink, which have both a - // generated and a neutral model, should not have flow. + // Thus, the `neutral_generated_source` and `neutral_generated_sink`, which + // have both a generated and a neutral model, should not have flow. sink(generated_source(1)); // $ hasValueFlow=1 sink(neutral_generated_source(2)); From 05a487ec3bae0bbcadd9019eb546760619a0988e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 5 Feb 2026 15:56:58 +0000 Subject: [PATCH 004/243] Rust: Repair following merge. --- .../rust/dataflow/internal/ModelsAsData.qll | 42 +++---------------- 1 file changed, 6 insertions(+), 36 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 161ee7d1bbda..d31d9229c494 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -125,41 +125,6 @@ predicate interpretModelForTest(QlBuiltins::ExtensionId madId, string model) { ) } -private predicate summaryModel( - Function f, string input, string output, string kind, Provenance provenance, boolean isInherited, - QlBuiltins::ExtensionId madId -) { - exists(string path, Function f0 | - summaryModel(path, input, output, kind, provenance, madId) and - f0.getCanonicalPath() = path - | - f = f0 and - isInherited = false - or - f.implements(f0) and - isInherited = true - ) -} - -private predicate summaryModelRelevant( - Function f, string input, string output, string kind, Provenance provenance, boolean isInherited, - QlBuiltins::ExtensionId madId -) { - summaryModel(f, input, output, kind, provenance, isInherited, madId) and - // Only apply generated or inherited models to functions in library code and - // when no strictly better model (or neutral model) exists - if provenance.isGenerated() or isInherited = true - then - not f.fromSource() and - not exists(Provenance other | summaryModel(f, _, _, _, other, false, _) | - provenance.isGenerated() and other.isManual() - or - provenance = other and isInherited = true - ) and - not neutralModel(f.getCanonicalPath(), "summary", _, _) - else any() -} - private class SummarizedCallableFromModel extends SummarizedCallable::Range { string input_; string output_; @@ -179,7 +144,12 @@ private class SummarizedCallableFromModel extends SummarizedCallable::Range { isExact_ = false and // making inherited models generated means that source code definitions and // exact generated models take precedence - p_ = "hq-generated" + p_ = "hq-generated" and + // Only apply generated models (including inherited models) when no neutral model exists + not ( + p_.isGenerated() and + neutralModel(path, "summary", _, _) + ) ) } From 9912aaaf1ab2a66f9d5bc28c777214bf09eb4773 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 30 Sep 2025 13:32:56 -0400 Subject: [PATCH 005/243] Adding azure sdk test cases and updated test expected file. --- .../FullServerSideRequestForgery.expected | 6 +++--- .../PartialServerSideRequestForgery.expected | 10 +++++----- .../test_azure_client.py | 4 ++++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected index 339703184610..ae554fa812c9 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected @@ -45,7 +45,7 @@ edges | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | +| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | | test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | @@ -110,7 +110,7 @@ nodes | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_http_client.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | @@ -148,7 +148,7 @@ subpaths | test_azure_client.py:19:9:19:47 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | | test_azure_client.py:21:9:21:39 | ControlFlowNode for KeyClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | | test_azure_client.py:23:9:23:89 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:31:5:36:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:32:5:37:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:14:5:14:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:14:5:14:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:19:5:19:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index bdcac7465387..bbe756e24b7c 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -89,12 +89,12 @@ edges | test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:18:39:18:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | | test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:20:19:20:21 | ControlFlowNode for url | provenance | Sink:MaD:14 | | test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:22:58:22:60 | ControlFlowNode for url | provenance | Sink:MaD:26 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:26:18:26:20 | ControlFlowNode for url | provenance | Sink:MaD:27 | +| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:27:18:27:20 | ControlFlowNode for url | provenance | Sink:MaD:27 | | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | +| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | | test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | @@ -207,8 +207,8 @@ nodes | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_azure_client.py:22:58:22:60 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:26:18:26:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:32:18:32:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:27:18:27:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_http_client.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | @@ -245,7 +245,7 @@ subpaths | test_azure_client.py:18:9:18:42 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:18:39:18:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | | test_azure_client.py:20:9:20:34 | ControlFlowNode for KeyClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:20:19:20:21 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | | test_azure_client.py:22:9:22:84 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:22:58:22:60 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:25:5:30:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:26:18:26:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:26:5:31:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:27:18:27:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:22:5:22:31 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:26:5:26:31 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:29:5:29:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py index d8de2092a2e5..f78b0a641370 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py @@ -22,6 +22,7 @@ def azure_sdk_test(credential, output_path): c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control + download_blob_from_url( blob_url=url, # NOT OK -- user only controlled fragment output=output_path, @@ -34,3 +35,6 @@ def azure_sdk_test(credential, output_path): credential=credential, overwrite=True ) + + + From b8ba9052533e62f30f361db281e86e0be583a685 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 30 Sep 2025 13:55:31 -0400 Subject: [PATCH 006/243] Added change logs. --- .../lib/change-notes/released/2025-09-30-azure_ssrf_models | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models diff --git a/python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models b/python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models new file mode 100644 index 000000000000..573d5ea109df --- /dev/null +++ b/python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Added `ssrf` MaD for the azure SDK +* Added MaD `ssrf` to `Http::Client::Request` \ No newline at end of file From 46a2a249f9d7d982bdb3dc829abade9c69f82e51 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 30 Sep 2025 14:00:16 -0400 Subject: [PATCH 007/243] Update python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../CWE-918-ServerSideRequestForgery/test_azure_client.py | 1 - 1 file changed, 1 deletion(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py index f78b0a641370..5d2b04b9c9dd 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py @@ -22,7 +22,6 @@ def azure_sdk_test(credential, output_path): c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control - download_blob_from_url( blob_url=url, # NOT OK -- user only controlled fragment output=output_path, From 08b72d0a868fe57d42bdac4f0c73f71e2851176f Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 30 Sep 2025 14:00:25 -0400 Subject: [PATCH 008/243] Update python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../CWE-918-ServerSideRequestForgery/test_azure_client.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py index 5d2b04b9c9dd..d8de2092a2e5 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py @@ -34,6 +34,3 @@ def azure_sdk_test(credential, output_path): credential=credential, overwrite=True ) - - - From 7db97799c1415a70502009fa31ca9fa5084253ae Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 30 Sep 2025 14:02:43 -0400 Subject: [PATCH 009/243] Moved change log to correct location. --- python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md | 4 ++-- .../lib/change-notes/released/2025-09-30-azure_ssrf_models | 5 ----- 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models diff --git a/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md b/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md index 283b703a4380..573d5ea109df 100644 --- a/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md +++ b/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md @@ -1,5 +1,5 @@ --- category: minorAnalysis --- -* Added request forgery sink models for the Azure SDK. -* Made it so that models-as-data sinks with the kind `request-forgery` contribute to the class `Http::Client::Request` which represents HTTP client requests. \ No newline at end of file +* Added `ssrf` MaD for the azure SDK +* Added MaD `ssrf` to `Http::Client::Request` \ No newline at end of file diff --git a/python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models b/python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models deleted file mode 100644 index 573d5ea109df..000000000000 --- a/python/ql/lib/change-notes/released/2025-09-30-azure_ssrf_models +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `ssrf` MaD for the azure SDK -* Added MaD `ssrf` to `Http::Client::Request` \ No newline at end of file From 265922d2e509bbd93fbbe87227eb49204a083a5f Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 30 Sep 2025 14:07:32 -0400 Subject: [PATCH 010/243] Adding docs. --- .../lib/semmle/python/frameworks/SSRFSink.qll | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 python/ql/lib/semmle/python/frameworks/SSRFSink.qll diff --git a/python/ql/lib/semmle/python/frameworks/SSRFSink.qll b/python/ql/lib/semmle/python/frameworks/SSRFSink.qll new file mode 100644 index 000000000000..e9b7ff9e4747 --- /dev/null +++ b/python/ql/lib/semmle/python/frameworks/SSRFSink.qll @@ -0,0 +1,42 @@ +/** + * Provides classes for SSRF sinks modeled using Models as Data (MaD). + */ + +private import python +private import semmle.python.Concepts +private import semmle.python.ApiGraphs +private import semmle.python.frameworks.data.ModelsAsData + +/** + * INTERNAL: Do not use. + * + * Sets up SSRF sinks as Http::Client::Request + */ +module SSRFMaDModel { + /** + * An HTTP request modeled from `ssrf` sinks, modeled using MaD. + */ + class SSRFSink extends Http::Client::Request::Range instanceof API::CallNode { + DataFlow::Node urlArg; + + SSRFSink() { + ( + this.getArg(_) = urlArg + or + this.getArgByName(_) = urlArg + ) and + urlArg = ModelOutput::getASinkNode("ssrf").asSink() + } + + override DataFlow::Node getAUrlPart() { result = urlArg } + + override string getFramework() { result = "MaD" } + + override predicate disablesCertificateValidation( + DataFlow::Node disablingNode, DataFlow::Node argumentOrigin + ) { + // NOTE: if you need to define this, you have to special case it for every possible API in MaD + none() + } + } +} From 88adb05d4b21928d26aafc8e5c3d083268ac2068 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 30 Sep 2025 14:09:06 -0400 Subject: [PATCH 011/243] Adjusting acryonym for SSRF for casing standards. --- python/ql/lib/semmle/python/frameworks/SSRFSink.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/SSRFSink.qll b/python/ql/lib/semmle/python/frameworks/SSRFSink.qll index e9b7ff9e4747..aeb228daf13b 100644 --- a/python/ql/lib/semmle/python/frameworks/SSRFSink.qll +++ b/python/ql/lib/semmle/python/frameworks/SSRFSink.qll @@ -12,14 +12,14 @@ private import semmle.python.frameworks.data.ModelsAsData * * Sets up SSRF sinks as Http::Client::Request */ -module SSRFMaDModel { +module SsrfMaDModel { /** * An HTTP request modeled from `ssrf` sinks, modeled using MaD. */ - class SSRFSink extends Http::Client::Request::Range instanceof API::CallNode { + class SsrfSink extends Http::Client::Request::Range instanceof API::CallNode { DataFlow::Node urlArg; - SSRFSink() { + SsrfSink() { ( this.getArg(_) = urlArg or From 27e19813bea78bcfbfca6b13354a8637529066aa Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Mon, 2 Feb 2026 10:13:59 -0500 Subject: [PATCH 012/243] Removing an upstream change log, not needed for local fork update. --- python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md diff --git a/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md b/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md deleted file mode 100644 index 573d5ea109df..000000000000 --- a/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `ssrf` MaD for the azure SDK -* Added MaD `ssrf` to `Http::Client::Request` \ No newline at end of file From 97ddab0724bc37dec318f02ff79d091423236db5 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Mon, 2 Feb 2026 16:09:53 -0500 Subject: [PATCH 013/243] Added support for new URIValidator in AntiSSRF library. Updated test caes to use postprocessing results. Currently results for partial ssrf still need work, it is flagging cases where the URL is fully controlled, but is sanitized. I'm not sure if this should be flagged yet. --- ...ServerSideRequestForgeryCustomizations.qll | 45 ++ .../FullServerSideRequestForgery.expected | 364 +++++++----- .../FullServerSideRequestForgery.qlref | 3 +- .../PartialServerSideRequestForgery.expected | 538 +++++++++++------- .../PartialServerSideRequestForgery.qlref | 3 +- .../full_partial_test.py | 75 ++- .../test_azure_client.py | 235 +++++++- .../test_http_client.py | 33 +- .../test_path_validation.py | 132 +++++ .../test_requests.py | 48 +- 10 files changed, 1062 insertions(+), 414 deletions(-) create mode 100644 python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py diff --git a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll index 274e7ee57ad6..2139ecf797db 100644 --- a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll @@ -176,4 +176,49 @@ module ServerSideRequestForgery { strNode = [call.getArg(0), call.getArgByName("string")] ) } + + /** A validation that a string does not contain certain characters, considered as a sanitizer. */ + private class UriValidator extends FullUrlControlSanitizer { + UriValidator() { this = DataFlow::BarrierGuard::getABarrierNode() } + } + + import semmle.python.dataflow.new.internal.DataFlowPublic + + private predicate uri_validator(DataFlow::GuardNode g, ControlFlowNode node, boolean branch) { + exists(DataFlow::CallCfgNode call, Node n, string funcs | + funcs in ["in_domain", "in_azure_keyvault_domain", "in_azure_storage_domain"] + | + call = API::moduleImport("AntiSSRF").getMember("URIValidator").getMember(funcs).getACall() and + call.getArg(0).asCfgNode() = node and + n.getALocalSource() = call and + ( + // validator used in a comparison + exists(CompareNode cn, Cmpop op | cn = g | + ( + // validator == true or validator == false or validator is True or validator is False + (op instanceof Eq or op instanceof Is) and + exists(ControlFlowNode l, boolean bool | + l.getNode().(BooleanLiteral).booleanValue() = bool and + bool in [true, false] and + branch = bool and + cn.operands(n.asCfgNode(), op, l) + ) + or + // validator != false or validator != true or validator is not True or validator is not False + (op instanceof NotEq or op instanceof IsNot) and + exists(ControlFlowNode l, boolean bool | + l.getNode().(BooleanLiteral).booleanValue() = bool and + bool in [true, false] and + branch = bool.booleanNot() and + cn.operands(n.asCfgNode(), op, l) + ) + ) + ) + or + // validator call directly (e.g., if URIValidator.in_domain(...) ) + g = call.asCfgNode() and + branch = true + ) + ) + } } diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected index ae554fa812c9..19b5f7efa9d7 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected @@ -1,156 +1,260 @@ +#select +| full_partial_test.py:11:5:11:28 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:15:5:15:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:15:18:15:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:22:5:22:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:22:18:22:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:27:5:27:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:27:18:27:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:47:5:47:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:47:18:47:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:51:5:51:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:55:5:55:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:55:18:55:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:59:5:59:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:59:18:59:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:63:5:63:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:63:18:63:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:72:5:72:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:72:18:72:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:76:5:76:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:89:5:89:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:93:5:93:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:93:18:93:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:97:5:97:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:97:18:97:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:16:9:16:63 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:18:9:18:47 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:20:9:20:39 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:22:9:22:89 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:25:5:25:104 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:15:5:15:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:15:5:15:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:21:5:21:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:21:5:21:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:21:13:21:67 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:37:13:37:64 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:53:13:53:51 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:64:13:64:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:64:36:64:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:71:13:71:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:71:36:71:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:74:13:74:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:74:36:74:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:79:13:79:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:87:13:87:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:87:36:87:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:90:13:90:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:90:36:90:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:95:13:95:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:95:36:95:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:102:13:102:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:102:36:102:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:107:13:107:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:107:36:107:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:110:13:110:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:110:36:110:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:115:13:115:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:115:36:115:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:122:13:122:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:122:36:122:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:125:13:125:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:125:36:125:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:132:13:132:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:132:36:132:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_requests.py:9:5:9:28 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_requests.py:17:5:17:27 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_requests.py:22:16:22:55 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | edges | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:41:18:41:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:66:18:66:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:83:18:83:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:13:5:13:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:20:5:20:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:25:5:25:7 | ControlFlowNode for url | provenance | | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:7:19:7:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:10:18:10:24 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:11:19:11:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | provenance | | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | full_partial_test.py:15:18:15:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | full_partial_test.py:22:18:22:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | full_partial_test.py:27:18:27:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:45:5:45:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:49:5:49:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:57:5:57:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | full_partial_test.py:47:18:47:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:55:18:55:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | full_partial_test.py:59:18:59:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:63:18:63:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:70:5:70:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:74:5:74:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | full_partial_test.py:72:18:72:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:87:5:87:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:91:5:91:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:95:5:95:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | full_partial_test.py:93:18:93:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | full_partial_test.py:97:18:97:20 | ControlFlowNode for url | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:6:19:6:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | provenance | | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | provenance | AdditionalTaintStep | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | provenance | | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:5:19:5:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:36:64:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:36:71:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:36:74:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:36:87:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:36:90:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:36:95:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:36:102:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:36:107:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:36:110:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:36:115:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:36:122:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:36:125:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:36:132:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | -| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | provenance | | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | provenance | | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:20:18:20:24 | ControlFlowNode for request | provenance | | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | provenance | | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | provenance | | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | provenance | | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:13:18:13:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:19:18:19:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:23:18:23:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:42:18:42:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:45:18:45:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:48:18:48:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:15:18:15:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:22:18:22:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:27:18:27:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:47:18:47:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:54:18:54:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:55:18:55:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:59:18:59:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:62:18:62:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:65:18:65:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:63:18:63:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:72:18:72:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:79:18:79:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:82:18:82:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:89:18:89:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:93:18:93:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:97:18:97:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:64:36:64:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:71:36:71:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:74:36:74:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:79:36:79:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:87:36:87:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:90:36:90:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:95:36:95:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:102:36:102:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:107:36:107:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:110:36:110:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:115:36:115:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:122:36:122:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:125:36:125:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:132:36:132:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_requests.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:8:18:8:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:9:18:9:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:17:17:17:26 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:22:45:22:54 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths -#select -| full_partial_test.py:10:5:10:28 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:13:5:13:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:19:5:19:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:23:5:23:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:42:5:42:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:45:5:45:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:48:5:48:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:51:5:51:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:54:5:54:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:62:5:62:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:65:5:65:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:76:5:76:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:79:5:79:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:82:5:82:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:17:9:17:63 | ControlFlowNode for SecretClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:19:9:19:47 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:21:9:21:39 | ControlFlowNode for KeyClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:23:9:23:89 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:32:5:37:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:14:5:14:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:14:5:14:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:19:5:19:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:19:5:19:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_requests.py:8:5:8:28 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +testFailures +| test_requests.py:39:40:39:62 | Comment # $ Alert[py/full-ssrf] | Missing result: Alert[py/full-ssrf] | +| test_requests.py:49:40:49:62 | Comment # $ Alert[py/full-ssrf] | Missing result: Alert[py/full-ssrf] | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref index 50d53b5f47e2..35a2814e7f40 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref @@ -1 +1,2 @@ -Security/CWE-918/FullServerSideRequestForgery.ql +query: Security/CWE-918/FullServerSideRequestForgery.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index bbe756e24b7c..875d8b62b62f 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -1,124 +1,199 @@ +#select +| full_partial_test.py:80:5:80:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:80:18:80:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:105:5:105:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:105:18:105:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:112:5:112:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:112:18:112:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:119:5:119:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:119:18:119:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:126:5:126:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:126:18:126:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:136:5:136:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:136:18:136:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| full_partial_test.py:143:5:143:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:143:18:143:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:15:9:15:58 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:15:32:15:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:17:9:17:42 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:17:39:17:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:19:9:19:34 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:19:19:19:21 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:21:9:21:84 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:21:58:21:60 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:24:5:24:100 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:25:5:25:31 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:30:5:30:31 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:34:5:34:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:39:5:39:29 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:39:25:39:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_http_client.py:44:5:44:29 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:44:25:44:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:14:13:14:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:14:36:14:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:16:13:16:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:16:36:16:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:30:13:30:59 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:30:33:30:35 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:32:13:32:59 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:32:33:32:35 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:46:13:46:46 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:46:43:46:45 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:48:13:48:46 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:48:43:48:45 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | edges | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:37:18:37:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:38:17:38:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:57:18:57:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:58:17:58:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:71:18:71:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:72:17:72:23 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:86:18:86:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:92:18:92:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:98:18:98:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:104:18:104:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:110:18:110:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:119:18:119:24 | ControlFlowNode for request | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:12:5:12:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:18:5:18:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:41:18:41:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:42:17:42:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:66:18:66:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:67:17:67:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:83:18:83:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:84:17:84:23 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:101:18:101:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:108:18:108:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:115:18:115:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:122:18:122:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:129:18:129:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:139:18:139:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:13:5:13:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:20:5:20:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | full_partial_test.py:25:5:25:7 | ControlFlowNode for url | provenance | | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | full_partial_test.py:22:5:22:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | full_partial_test.py:25:5:25:7 | ControlFlowNode for url | provenance | | | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | full_partial_test.py:13:18:13:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | full_partial_test.py:19:18:19:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | full_partial_test.py:23:18:23:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:41:5:41:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:44:5:44:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:50:5:50:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | full_partial_test.py:47:5:47:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:38:17:38:23 | ControlFlowNode for request | full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | full_partial_test.py:42:18:42:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | full_partial_test.py:45:18:45:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | full_partial_test.py:48:18:48:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:54:18:54:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:64:5:64:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | full_partial_test.py:67:5:67:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:58:17:58:23 | ControlFlowNode for request | full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:62:18:62:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | full_partial_test.py:65:18:65:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:67:5:67:7 | ControlFlowNode for url | full_partial_test.py:68:18:68:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:75:5:75:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | full_partial_test.py:81:5:81:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:72:17:72:23 | ControlFlowNode for request | full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:79:18:79:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | full_partial_test.py:82:18:82:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | full_partial_test.py:88:5:88:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:86:18:86:24 | ControlFlowNode for request | full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:88:5:88:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | full_partial_test.py:94:5:94:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:92:18:92:24 | ControlFlowNode for request | full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:94:5:94:7 | ControlFlowNode for url | full_partial_test.py:95:18:95:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | full_partial_test.py:100:5:100:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:98:18:98:24 | ControlFlowNode for request | full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:100:5:100:7 | ControlFlowNode for url | full_partial_test.py:101:18:101:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | full_partial_test.py:106:5:106:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:104:18:104:24 | ControlFlowNode for request | full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:106:5:106:7 | ControlFlowNode for url | full_partial_test.py:107:18:107:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | full_partial_test.py:115:5:115:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:110:18:110:24 | ControlFlowNode for request | full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:115:5:115:7 | ControlFlowNode for url | full_partial_test.py:116:18:116:20 | ControlFlowNode for url | provenance | | -| full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | full_partial_test.py:121:5:121:7 | ControlFlowNode for url | provenance | | -| full_partial_test.py:119:18:119:24 | ControlFlowNode for request | full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| full_partial_test.py:121:5:121:7 | ControlFlowNode for url | full_partial_test.py:122:18:122:20 | ControlFlowNode for url | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:7:19:7:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:10:18:10:24 | ControlFlowNode for request | provenance | | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | test_azure_client.py:11:19:11:25 | ControlFlowNode for request | provenance | | -| test_azure_client.py:10:5:10:14 | ControlFlowNode for user_input | test_azure_client.py:13:5:13:7 | ControlFlowNode for url | provenance | | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | provenance | | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:16:32:16:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:18:39:18:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:20:19:20:21 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:22:58:22:60 | ControlFlowNode for url | provenance | Sink:MaD:26 | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | test_azure_client.py:27:18:27:20 | ControlFlowNode for url | provenance | Sink:MaD:27 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:1:26:1:32 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | test_http_client.py:11:18:11:24 | ControlFlowNode for request | provenance | | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | full_partial_test.py:15:18:15:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | full_partial_test.py:22:18:22:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | full_partial_test.py:27:18:27:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:45:5:45:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:49:5:49:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:57:5:57:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:42:17:42:23 | ControlFlowNode for request | full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | full_partial_test.py:47:18:47:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:53:5:53:7 | ControlFlowNode for url | full_partial_test.py:55:18:55:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | full_partial_test.py:59:18:59:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:61:5:61:7 | ControlFlowNode for url | full_partial_test.py:63:18:63:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:70:5:70:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:74:5:74:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:67:17:67:23 | ControlFlowNode for request | full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | full_partial_test.py:72:18:72:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:78:5:78:7 | ControlFlowNode for url | full_partial_test.py:80:18:80:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:87:5:87:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:91:5:91:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | full_partial_test.py:95:5:95:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | full_partial_test.py:95:5:95:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:84:17:84:23 | ControlFlowNode for request | full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | provenance | AdditionalTaintStep | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | full_partial_test.py:93:18:93:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | full_partial_test.py:97:18:97:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:101:5:101:14 | ControlFlowNode for user_input | full_partial_test.py:103:5:103:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:101:18:101:24 | ControlFlowNode for request | full_partial_test.py:101:5:101:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:103:5:103:7 | ControlFlowNode for url | full_partial_test.py:105:18:105:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:108:5:108:14 | ControlFlowNode for user_input | full_partial_test.py:110:5:110:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:108:18:108:24 | ControlFlowNode for request | full_partial_test.py:108:5:108:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:110:5:110:7 | ControlFlowNode for url | full_partial_test.py:112:18:112:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:115:5:115:14 | ControlFlowNode for user_input | full_partial_test.py:117:5:117:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:115:18:115:24 | ControlFlowNode for request | full_partial_test.py:115:5:115:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:117:5:117:7 | ControlFlowNode for url | full_partial_test.py:119:18:119:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:122:5:122:14 | ControlFlowNode for user_input | full_partial_test.py:124:5:124:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:122:18:122:24 | ControlFlowNode for request | full_partial_test.py:122:5:122:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:124:5:124:7 | ControlFlowNode for url | full_partial_test.py:126:18:126:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:129:5:129:14 | ControlFlowNode for user_input | full_partial_test.py:134:5:134:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:129:18:129:24 | ControlFlowNode for request | full_partial_test.py:129:5:129:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:134:5:134:7 | ControlFlowNode for url | full_partial_test.py:136:18:136:20 | ControlFlowNode for url | provenance | | +| full_partial_test.py:139:5:139:14 | ControlFlowNode for user_input | full_partial_test.py:141:5:141:7 | ControlFlowNode for url | provenance | | +| full_partial_test.py:139:18:139:24 | ControlFlowNode for request | full_partial_test.py:139:5:139:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| full_partial_test.py:141:5:141:7 | ControlFlowNode for url | full_partial_test.py:143:18:143:20 | ControlFlowNode for url | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:6:19:6:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | provenance | | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_azure_client.py:9:5:9:14 | ControlFlowNode for user_input | test_azure_client.py:12:5:12:7 | ControlFlowNode for url | provenance | | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:9:5:9:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:15:32:15:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:17:39:17:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:19:19:19:21 | ControlFlowNode for url | provenance | Sink:MaD:14 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:21:58:21:60 | ControlFlowNode for url | provenance | Sink:MaD:26 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | provenance | Sink:MaD:27 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:11:18:11:24 | ControlFlowNode for request | provenance | | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | provenance | | -| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | provenance | | +| test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | provenance | | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | provenance | AdditionalTaintStep | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | provenance | | -| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | provenance | | +| test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | provenance | | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | provenance | AdditionalTaintStep | | test_http_client.py:10:19:10:25 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:31:5:31:8 | ControlFlowNode for path | provenance | | -| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:35:5:35:8 | ControlFlowNode for path | provenance | | +| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:36:5:36:8 | ControlFlowNode for path | provenance | | +| test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | test_http_client.py:41:5:41:8 | ControlFlowNode for path | provenance | | | test_http_client.py:11:18:11:24 | ControlFlowNode for request | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_http_client.py:31:5:31:8 | ControlFlowNode for path | test_http_client.py:33:25:33:28 | ControlFlowNode for path | provenance | | -| test_http_client.py:35:5:35:8 | ControlFlowNode for path | test_http_client.py:37:25:37:28 | ControlFlowNode for path | provenance | | +| test_http_client.py:36:5:36:8 | ControlFlowNode for path | test_http_client.py:39:25:39:28 | ControlFlowNode for path | provenance | | +| test_http_client.py:41:5:41:8 | ControlFlowNode for path | test_http_client.py:44:25:44:28 | ControlFlowNode for path | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:5:19:5:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | provenance | | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | provenance | | +| test_path_validation.py:8:5:8:14 | ControlFlowNode for user_input | test_path_validation.py:10:5:10:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:8:5:8:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:14:36:14:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:16:36:16:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:19:36:19:43 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | test_path_validation.py:26:5:26:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:30:33:30:35 | ControlFlowNode for url | provenance | Sink:MaD:14 | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:32:33:32:35 | ControlFlowNode for url | provenance | Sink:MaD:14 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:35:33:35:40 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | test_path_validation.py:42:5:42:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:46:43:46:45 | ControlFlowNode for url | provenance | Sink:MaD:38 | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:48:43:48:45 | ControlFlowNode for url | provenance | Sink:MaD:38 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:51:43:51:50 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:36:64:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:66:36:66:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:69:36:69:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:36:71:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:36:74:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:76:36:76:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:81:36:81:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | -| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:6:18:6:24 | ControlFlowNode for request | provenance | | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | test_requests.py:8:18:8:27 | ControlFlowNode for user_input | provenance | | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | test_requests.py:6:5:6:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | +| test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:20:18:20:24 | ControlFlowNode for request | provenance | | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | provenance | | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | provenance | | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | provenance | | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | @@ -126,91 +201,91 @@ nodes | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | full_partial_test.py:8:5:8:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | | full_partial_test.py:8:17:8:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:10:18:10:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:12:5:12:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:13:18:13:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:18:5:18:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:19:18:19:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:22:5:22:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:23:18:23:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:37:5:37:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:37:18:37:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:38:5:38:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | -| full_partial_test.py:38:17:38:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:41:5:41:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:42:18:42:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:44:5:44:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:45:18:45:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:47:5:47:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:48:18:48:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:50:5:50:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:11:18:11:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:13:5:13:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:15:18:15:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:20:5:20:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:22:18:22:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:25:5:25:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:27:18:27:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:41:5:41:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:41:18:41:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:42:5:42:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | +| full_partial_test.py:42:17:42:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:45:5:45:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:47:18:47:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:49:5:49:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:51:18:51:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:53:5:53:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:54:18:54:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:58:5:58:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | -| full_partial_test.py:58:17:58:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:55:18:55:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:57:5:57:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:59:18:59:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:62:18:62:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:64:5:64:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:65:18:65:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:67:5:67:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:68:18:68:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:71:5:71:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:71:18:71:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:72:5:72:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | -| full_partial_test.py:72:17:72:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:75:5:75:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:63:18:63:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:66:5:66:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:66:18:66:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:67:5:67:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | +| full_partial_test.py:67:17:67:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:70:5:70:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:72:18:72:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:74:5:74:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:76:18:76:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:78:5:78:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:79:18:79:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:81:5:81:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:82:18:82:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:86:5:86:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:86:18:86:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:88:5:88:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:80:18:80:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:83:5:83:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:83:18:83:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:84:5:84:13 | ControlFlowNode for query_val | semmle.label | ControlFlowNode for query_val | +| full_partial_test.py:84:17:84:23 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:87:5:87:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:92:5:92:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:92:18:92:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:94:5:94:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:95:18:95:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:98:5:98:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:98:18:98:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:100:5:100:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:101:18:101:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:104:5:104:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:104:18:104:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:106:5:106:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:107:18:107:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:110:5:110:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:110:18:110:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:115:5:115:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:116:18:116:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:119:5:119:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| full_partial_test.py:119:18:119:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| full_partial_test.py:121:5:121:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| full_partial_test.py:122:18:122:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_azure_client.py:7:19:7:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:10:5:10:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| test_azure_client.py:10:18:10:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:11:5:11:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | -| test_azure_client.py:11:19:11:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_azure_client.py:13:5:13:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:14:5:14:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:16:32:16:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:17:32:17:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:18:39:18:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:19:39:19:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:20:19:20:21 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:21:19:21:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:22:58:22:60 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:23:58:23:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:27:18:27:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:33:18:33:25 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | -| test_http_client.py:1:26:1:32 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:91:5:91:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:93:18:93:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:95:5:95:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:97:18:97:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:101:5:101:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:101:18:101:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:103:5:103:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:105:18:105:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:108:5:108:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:108:18:108:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:110:5:110:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:112:18:112:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:115:5:115:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:115:18:115:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:117:5:117:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:119:18:119:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:122:5:122:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:122:18:122:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:124:5:124:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:126:18:126:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:129:5:129:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:129:18:129:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:134:5:134:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:136:18:136:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:139:5:139:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| full_partial_test.py:139:18:139:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| full_partial_test.py:141:5:141:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| full_partial_test.py:143:18:143:20 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_azure_client.py:6:19:6:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:9:5:9:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_azure_client.py:9:18:9:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_azure_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:15:32:15:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:17:39:17:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:19:19:19:21 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:21:58:21:60 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:24:37:24:39 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_http_client.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:9:5:9:15 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | | test_http_client.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:10:5:10:15 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | @@ -218,36 +293,69 @@ nodes | test_http_client.py:11:5:11:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_http_client.py:11:18:11:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:14:25:14:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:19:25:19:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | -| test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | -| test_http_client.py:31:5:31:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | -| test_http_client.py:33:25:33:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | -| test_http_client.py:35:5:35:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | -| test_http_client.py:37:25:37:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | semmle.label | ControlFlowNode for unsafe_host | +| test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | semmle.label | ControlFlowNode for unsafe_path | +| test_http_client.py:36:5:36:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:39:25:39:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:41:5:41:8 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_http_client.py:44:25:44:28 | ControlFlowNode for path | semmle.label | ControlFlowNode for path | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | +| test_path_validation.py:5:19:5:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:8:5:8:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:8:18:8:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:14:36:14:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:16:36:16:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:19:36:19:43 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:24:18:24:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:25:19:25:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:30:33:30:35 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:32:33:32:35 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:35:33:35:40 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:40:18:40:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | +| test_path_validation.py:41:19:41:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:46:43:46:45 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:48:43:48:45 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:51:43:51:50 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_path_validation.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:64:36:64:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:66:36:66:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:69:36:69:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:71:36:71:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:74:36:74:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:76:36:76:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:79:36:79:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:81:36:81:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_requests.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:6:5:6:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | -| test_requests.py:6:18:6:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:8:18:8:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:7:18:7:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:9:18:9:27 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:5:14:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:14:18:14:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:17:17:17:26 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test_requests.py:22:45:22:54 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths -#select -| full_partial_test.py:68:5:68:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:68:18:68:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:89:5:89:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:95:5:95:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:95:18:95:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:101:5:101:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:101:18:101:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:107:5:107:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:107:18:107:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:116:5:116:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:116:18:116:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| full_partial_test.py:122:5:122:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:122:18:122:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:16:9:16:58 | ControlFlowNode for SecretClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:16:32:16:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:18:9:18:42 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:18:39:18:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:20:9:20:34 | ControlFlowNode for KeyClient() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:20:19:20:21 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:22:9:22:84 | ControlFlowNode for Attribute() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:22:58:22:60 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:26:5:31:5 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | test_azure_client.py:27:18:27:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:7:19:7:25 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:22:5:22:31 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:18:27:18:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:26:5:26:31 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:25:27:25:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:29:5:29:36 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:29:25:29:35 | ControlFlowNode for unsafe_path | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:33:5:33:29 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:33:25:33:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | -| test_http_client.py:37:5:37:29 | ControlFlowNode for Attribute() | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | test_http_client.py:37:25:37:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:26:1:32 | ControlFlowNode for ImportMember | user-provided value | +testFailures +| test_requests.py:1:27:1:36 | Comment # $ Source | Missing result: Source | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref index 88de9285e5e9..651b07aea55b 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref @@ -1 +1,2 @@ -Security/CWE-918/PartialServerSideRequestForgery.ql +query: Security/CWE-918/PartialServerSideRequestForgery.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py index 95ff9d64944e..e2f4fc050262 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py @@ -1,26 +1,30 @@ -from flask import request +from flask import request # $ Source -import requests +import requests import re def full_ssrf(): user_input = request.args['untrusted_input'] query_val = request.args['query_val'] - requests.get(user_input) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(user_input) # $ Alert[py/full-ssrf] url = "https://" + user_input - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] # although the path `/foo` is added here, this can be circumvented such that the # final URL is `https://evil.com/#/foo" -- since the fragment (#) is not sent to the # server. url = "https://" + user_input + "/foo" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] # this might seem like a dummy test, but it serves to check how our sanitizers work. url = "https://" + user_input + "/foo?key=" + query_val - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] # taint-steps are added as `fromNode -> toNode`, but when adding a sanitizer it's # currently only possible to so on either `fromNode` or `toNode` (either all edges in @@ -39,19 +43,24 @@ def full_ssrf_format(): # using .format url = "https://{}".format(user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{}/foo".format(user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{}/foo?key={}".format(user_input, query_val) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{x}".format(x=user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://{1}".format(0, user_input) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] def full_ssrf_percent_format(): user_input = request.args['untrusted_input'] @@ -59,13 +68,16 @@ def full_ssrf_percent_format(): # using %-formatting url = "https://%s" % user_input - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://%s/foo" % user_input - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = "https://%s/foo/key=%s" % (user_input, query_val) - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full and partial control + requests.get(url) # $ Alert[py/partial-ssrf] $ MISSING: Alert[py/full-ssrf] def full_ssrf_f_strings(): user_input = request.args['untrusted_input'] @@ -73,38 +85,45 @@ def full_ssrf_f_strings(): # using f-strings url = f"https://{user_input}" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = f"https://{user_input}/foo" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] url = f"https://{user_input}/foo?key={query_val}" - requests.get(url) # NOT OK -- user has full control + # NOT OK -- user has full control + requests.get(url) # $ Alert[py/full-ssrf] def partial_ssrf_1(): user_input = request.args['untrusted_input'] url = "https://example.com/foo?" + user_input - requests.get(url) # NOT OK -- user controls query parameters + # NOT OK -- user controls query parameters + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_2(): user_input = request.args['untrusted_input'] url = "https://example.com/" + user_input - requests.get(url) # NOT OK -- user controls path + # NOT OK -- user controls path + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_3(): user_input = request.args['untrusted_input'] url = "https://example.com/" + user_input - requests.get(url) # NOT OK -- user controls path + # NOT OK -- user controls path + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_4(): user_input = request.args['untrusted_input'] url = "https://example.com/foo#{}".format(user_input) - requests.get(url) # NOT OK -- user contollred fragment + # NOT OK -- user contollred fragment + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_5(): user_input = request.args['untrusted_input'] @@ -113,20 +132,22 @@ def partial_ssrf_5(): # controlled url = "https://example.com/foo#%s" % user_input - requests.get(url) # NOT OK -- user contollred fragment + # NOT OK -- user contollred fragment + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_6(): user_input = request.args['untrusted_input'] url = f"https://example.com/foo#{user_input}" - requests.get(url) # NOT OK -- user only controlled fragment + # NOT OK -- user only controlled fragment + requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_7(): user_input = request.args['untrusted_input'] if user_input.isalnum(): url = f"https://example.com/foo#{user_input}" - requests.get(url) # OK - user input can only contain alphanumerical characters + requests.get(url) # OK - user input can only contain alphanumerical characters if user_input.isalpha(): url = f"https://example.com/foo#{user_input}" @@ -154,7 +175,8 @@ def partial_ssrf_7(): if re.fullmatch(r'.*[a-zA-Z0-9]+.*', user_input): url = f"https://example.com/foo#{user_input}" - requests.get(url) # NOT OK, but NOT FOUND - user input can contain arbitrary characters + # NOT OK, but NOT FOUND - user input can contain arbitrary characters + requests.get(url) # $ MISSING: Alert[py/partial-ssrf] if re.match(r'^[a-zA-Z0-9]+$', user_input): @@ -163,7 +185,8 @@ def partial_ssrf_7(): if re.match(r'[a-zA-Z0-9]+', user_input): url = f"https://example.com/foo#{user_input}" - requests.get(url) # NOT OK, but NOT FOUND - user input can contain arbitrary character as a suffix. + # NOT OK, but NOT FOUND - user input can contain arbitrary character as a suffix. + requests.get(url) # $ MISSING: Alert[py/partial-ssrf] reg = re.compile(r'^[a-zA-Z0-9]+$') diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py index d8de2092a2e5..28570b7ab4a4 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py @@ -3,8 +3,7 @@ from azure.keyvault.keys import KeyClient from azure.storage.blob import ContainerClient from azure.storage.blob import download_blob_from_url - -from flask import request +from flask import request # $ Source def azure_sdk_test(credential, output_path): user_input = request.args['untrusted_input'] @@ -13,24 +12,214 @@ def azure_sdk_test(credential, output_path): url = f"https://example.com/foo#{user_input}" full_url = f"https://{user_input2}" # Testing Azure sink - c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment - c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control - c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment - c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control - c = KeyClient(url, credential)# NOT OK -- user only controlled fragment - c = KeyClient(full_url, credential) # NOT OK -- user has full control - c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment - c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control - - download_blob_from_url( - blob_url=url, # NOT OK -- user only controlled fragment - output=output_path, - credential=credential, - overwrite=True - ) - download_blob_from_url( - blob_url=full_url, # NOT OK -- user has full control - output=output_path, - credential=credential, - overwrite=True - ) + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + c = SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + c = ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + c = ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] + c = KeyClient(url, credential) # $ Alert[py/partial-ssrf] + c = KeyClient(full_url, credential) # $ Alert[py/full-ssrf] + c = ContainerClient.from_container_url(container_url=url, credential=credential) # $ Alert[py/partial-ssrf] + c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + + download_blob_from_url(blob_url=url, output=output_path, credential=credential, overwrite=True ) # $ Alert[py/partial-ssrf] + download_blob_from_url(blob_url=full_url, output=output_path, credential=credential, overwrite=True) # $ Alert[py/full-ssrf] + +# if URIValidator.in_domain(url, trusted_domain): +# # Testing Azure sink +# c = SecretClient(vault_url=url, credential=credential)# OK +# c = ShareFileClient.from_file_url(url) # OK +# c = KeyClient(url, credential)# OK +# c = ContainerClient.from_container_url(container_url=url, credential=credential) # OK + +# download_blob_from_url( +# blob_url=url, # OK +# output=output_path, +# credential=credential, +# overwrite=True +# ) +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment +# c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment +# c = KeyClient(url, credential)# NOT OK -- user only controlled fragment +# c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment + +# download_blob_from_url( +# blob_url=url, # NOT OK -- user only controlled fragment +# output=output_path, +# credential=credential, +# overwrite=True +# ) + + +# if URIValidator.in_domain(full_url, trusted_domain): +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # OK +# c = ShareFileClient.from_file_url(full_url) # OK +# c = KeyClient(full_url, credential) # OK +# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # OK + +# download_blob_from_url( +# blob_url=full_url, # OK +# output=output_path, +# credential=credential, +# overwrite=True +# ) +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control +# c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control +# c = KeyClient(full_url, credential) # NOT OK -- user has full control +# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control + +# download_blob_from_url( +# blob_url=full_url, # NOT OK -- user has full control +# output=output_path, +# credential=credential, +# overwrite=True +# ) + + +# if URIValidator.in_azure_keyvault_domain(url): +# # Testing Azure sink +# c = SecretClient(vault_url=url, credential=credential)# OK +# c = ShareFileClient.from_file_url(url) # OK +# c = KeyClient(url, credential)# OK +# c = ContainerClient.from_container_url(container_url=url, credential=credential) # OK + +# download_blob_from_url( +# blob_url=url, # OK +# output=output_path, +# credential=credential, +# overwrite=True +# ) +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment +# c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment +# c = KeyClient(url, credential)# NOT OK -- user only controlled fragment +# c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment + +# download_blob_from_url( +# blob_url=url, # NOT OK -- user only controlled fragment +# output=output_path, +# credential=credential, +# overwrite=True +# ) + + +# if URIValidator.in_azure_keyvault_domain(full_url): +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # OK +# c = ShareFileClient.from_file_url(full_url) # OK +# c = KeyClient(full_url, credential) # OK +# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # OK + +# download_blob_from_url( +# blob_url=full_url, # OK +# output=output_path, +# credential=credential, +# overwrite=True +# ) +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control +# c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control +# c = KeyClient(full_url, credential) # NOT OK -- user has full control +# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control + +# download_blob_from_url( +# blob_url=full_url, # NOT OK -- user has full control +# output=output_path, +# credential=credential, +# overwrite=True +# ) + +# if URIValidator.in_azure_storage_domain(url): +# # Testing Azure sink +# c = SecretClient(vault_url=url, credential=credential)# OK +# c = ShareFileClient.from_file_url(url) # OK +# c = KeyClient(url, credential)# OK +# c = ContainerClient.from_container_url(container_url=url, credential=credential) # OK + +# download_blob_from_url( +# blob_url=url, # OK +# output=output_path, +# credential=credential, +# overwrite=True +# ) +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment +# c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment +# c = KeyClient(url, credential)# NOT OK -- user only controlled fragment +# c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment + +# download_blob_from_url( +# blob_url=url, # NOT OK -- user only controlled fragment +# output=output_path, +# credential=credential, +# overwrite=True +# ) + + +# if URIValidator.in_azure_storage_domain(full_url): +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # OK +# c = ShareFileClient.from_file_url(full_url) # OK +# c = KeyClient(full_url, credential) # OK +# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # OK + +# download_blob_from_url( +# blob_url=full_url, # OK +# output=output_path, +# credential=credential, +# overwrite=True +# ) +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control +# c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control +# c = KeyClient(full_url, credential) # NOT OK -- user has full control +# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control + +# download_blob_from_url( +# blob_url=full_url, # NOT OK -- user has full control +# output=output_path, +# credential=credential, +# overwrite=True +# ) + +# def azure_sdk_logic_sanity_test(credential, output_path, trusted_domain): +# user_input = request.args['untrusted_input'] +# full_url = f"https://{user_input}" +# if not URIValidator.in_azure_storage_domain(full_url): +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # OK + + + +# if not not URIValidator.in_azure_storage_domain(full_url): +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # OK +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control + + +# if URIValidator.URIValidator.in_domain(full_url, trusted_domain) and trusted_domain == "example.com": +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # OK +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control + +# if not (URIValidator.URIValidator.in_domain(full_url, trusted_domain) and trusted_domain == "example.com"): +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control +# else: +# # Testing Azure sink +# c = SecretClient(vault_url=full_url, credential=credential) # OK \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py index c833907d8430..0a238878e35e 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py @@ -1,5 +1,5 @@ -from flask import Flask, request - +from flask import request # $ Source +from flask import Flask from http.client import HTTPConnection app = Flask(__name__) @@ -10,28 +10,35 @@ def ssrf_test(): unsafe_path = request.args["path"] user_input = request.args['untrusted_input'] - conn = HTTPConnection(unsafe_host) - conn.request("GET", unsafe_path) # NOT OK -- user has full control + conn = HTTPConnection(unsafe_host) # $ Sink[py/full-ssrf] + # NOT OK -- user has full control + conn.request("GET", unsafe_path) # $ Alert[py/full-ssrf] - # Full SSRF variant, where there is ALSO made a request with fixed URL on the same + # Full SSRF variant, where there is AlSO made a request with fixed URL on the same # connection later on. This should not change anything on the overall SSRF alerts. - conn = HTTPConnection(unsafe_host) - conn.request("GET", unsafe_path) # NOT OK -- user has full control + conn = HTTPConnection(unsafe_host) # $ Sink + # NOT OK -- user has full control + conn.request("GET", unsafe_path) # $ Alert[py/full-ssrf] # partial SSRF on SAME connection - conn.request("GET", "/foo") # NOT OK -- user has control of host + # NOT OK -- user has control of host + conn.request("GET", "/foo") # $ Alert[py/partial-ssrf] # the rest are partial SSRF - conn = HTTPConnection(unsafe_host) - conn.request("GET", "/foo") # NOT OK -- user controlled domain + conn = HTTPConnection(unsafe_host) # $ Sink[py/partial-ssrf] + # NOT OK -- user controlled domain + conn.request("GET", "/foo") # $ Alert[py/partial-ssrf] conn = HTTPConnection("example.com") - conn.request("GET", unsafe_path) # NOT OK -- user controlled path + # NOT OK -- user controlled path + conn.request("GET", unsafe_path) # $ Alert[py/partial-ssrf] path = "foo?" + user_input conn = HTTPConnection("example.com") - conn.request("GET", path) # NOT OK -- user controlled query parameters + # NOT OK -- user controlled query parameters + conn.request("GET", path) # $ Alert[py/partial-ssrf] path = "foo#" + user_input conn = HTTPConnection("example.com") - conn.request("GET", path) # NOT OK -- user controlled fragment + # NOT OK -- user controlled fragment + conn.request("GET", path) # $ Alert[py/partial-ssrf] \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py new file mode 100644 index 000000000000..44c569f625d0 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py @@ -0,0 +1,132 @@ +from azure.keyvault.secrets import SecretClient +from azure.storage.fileshare import ShareFileClient +from azure.keyvault.keys import KeyClient +from AntiSSRF import URIValidator +from flask import request # $ Source + +def urivalidator_path_in_domain_validation(credential, trusted_domain): + user_input = request.args['untrusted_input'] + user_input2 = request.args['untrusted_input2'] + url = f"https://example.com/foo#{user_input}" + full_url = f"https://{user_input2}" + + if URIValidator.in_domain(url, trusted_domain): + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_domain(full_url, trusted_domain): + c = SecretClient(vault_url=full_url, credential=credential) # OK + else: + c = SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + +def urivalidator_path_in_azure_keyvault_domain_validation(credential): + user_input = request.args['untrusted_input'] + user_input2 = request.args['untrusted_input2'] + url = f"https://example.com/foo#{user_input}" + full_url = f"https://{user_input2}" + + if URIValidator.in_azure_keyvault_domain(url): + c = KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + else: + c = KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + + if URIValidator.in_azure_keyvault_domain(full_url): + c = KeyClient(vault_url=full_url, credential=credential) # OK + else: + c = KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + +def urivalidator_path_in_azure_storage_domain_validation(credential): + user_input = request.args['untrusted_input'] + user_input2 = request.args['untrusted_input2'] + url = f"https://example.com/foo#{user_input}" + full_url = f"https://{user_input2}" + + if URIValidator.in_azure_storage_domain(url): + c = ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + else: + c = ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + + if URIValidator.in_azure_storage_domain(full_url): + c = ShareFileClient.from_file_url(full_url) # OK + else: + c = ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] + + +def complex_urivalidator_checks(credential, trusted_domain): + user_input = request.args['untrusted_input'] + # Focus on in_domain only here for simplicity + # It assumed the logic underlying checking paths would apply + # similarly other validator methods + url = f"https://{user_input}" + + if not URIValidator.in_domain(url, trusted_domain): + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + if URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com": + c = SecretClient(vault_url=url, credential=credential) # OK + else: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if not (URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com"): + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + if not not not URIValidator.in_domain(url, trusted_domain): + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + + if URIValidator.in_domain(url, trusted_domain) == True: + c = SecretClient(vault_url=url, credential=credential) # OK + else: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if URIValidator.in_domain(url, trusted_domain) == False: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + if URIValidator.in_domain(url, trusted_domain) != True: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + if URIValidator.in_domain(url, trusted_domain) != False: + c = SecretClient(vault_url=url, credential=credential) # OK + else: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if URIValidator.in_domain(url, trusted_domain) is True: + c = SecretClient(vault_url=url, credential=credential) # OK + else: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if URIValidator.in_domain(url, trusted_domain) is False: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + if URIValidator.in_domain(url, trusted_domain) is not True: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + if URIValidator.in_domain(url, trusted_domain) is not False: + c = SecretClient(vault_url=url, credential=credential) # OK + else: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + + if not URIValidator.in_domain(url, trusted_domain) is True: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + else: + c = SecretClient(vault_url=url, credential=credential) # OK + + if not URIValidator.in_domain(url, trusted_domain) is False: + c = SecretClient(vault_url=url, credential=credential) # OK + else: + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py index 443f5c3b81fe..cfa2e6aa5a70 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py @@ -1,11 +1,49 @@ -from flask import request +from flask import request # $ Source +from AntiSSRF import AntiSSRFPolicy import requests -def ssrf_test(): +def ssrf_test1(): user_input = request.args['untrusted_input'] - - requests.get(user_input) # NOT OK -- user has full control - + # NOT OK -- user has full control + requests.get(user_input) # $ Alert[py/full-ssrf] # since `requests`` always uses complete URLs, it's not interesting to test more of # the framework directly. See `full_partial_test.py` for different ways to do SSRF. + +def ssrf_test2(): + user_input = request.args['untrusted_input'] + # NOT OK -- user has full control + session = requests.Session() + session.get(user_input) # $ Alert[py/full-ssrf] + +def ssrf_test3(): + user_input = request.args['untrusted_input'] + # NOT OK -- user has full control + response = requests.request('', user_input) # $ Alert[py/full-ssrf] + +def ssrf_test_with_policy1(): + user_input = request.args['untrusted_input'] + policy = AntiSSRFPolicy() + session = policy.get_antissrf_session() + # OK -- dangerous user input is filtered by AntiSSRFPolicy + response = session.get(user_input) + +def ssrf_test_with_policy2(): + user_input = request.args['untrusted_input'] + policy = AntiSSRFPolicy() + session = policy.get_antissrf_session() + # overwriting the HTTPAdapter to default requests adapter + # this makes the session unsafe again + session.mount("http://", requests.adapters.HTTPAdapter()) + # NOT OK -- dangerous user input is no longer filtered by AntiSSRFPolicy + response = session.get(user_input) # $ Alert[py/full-ssrf] + +def ssrf_test_with_policy3(adapter): + user_input = request.args['untrusted_input'] + policy = AntiSSRFPolicy() + session = policy.get_antissrf_session() + # overwriting the HTTPAdapter to a custom requests adapter + # this could make the session unsafe again + session.mount("http://", adapter) + # NOT OK -- dangerous user input is no longer filtered by AntiSSRFPolicy + response = session.get(user_input) # $ Alert[py/full-ssrf] \ No newline at end of file From 97f19d03ad7b2f9fa8873f58ce91d46dee225e2a Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Mon, 2 Feb 2026 16:21:34 -0500 Subject: [PATCH 014/243] Updating test case expected alerts. --- .../PartialServerSideRequestForgery.expected | 57 +++++++++++++++++++ .../test_path_validation.py | 34 +++++------ 2 files changed, 74 insertions(+), 17 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index 875d8b62b62f..0d3f49c200eb 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -18,10 +18,27 @@ | test_http_client.py:44:5:44:29 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:44:25:44:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_path_validation.py:14:13:14:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:14:36:14:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | | test_path_validation.py:16:13:16:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:16:36:16:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:19:13:19:67 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:19:36:19:43 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | | test_path_validation.py:30:13:30:59 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:30:33:30:35 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | | test_path_validation.py:32:13:32:59 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:32:33:32:35 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:35:13:35:64 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:35:33:35:40 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | | test_path_validation.py:46:13:46:46 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:46:43:46:45 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | | test_path_validation.py:48:13:48:46 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:48:43:48:45 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:51:13:51:51 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:51:43:51:50 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:66:13:66:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:66:36:66:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:69:13:69:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:69:36:69:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:76:13:76:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:76:36:76:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:81:13:81:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:81:36:81:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:85:13:85:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:85:36:85:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:92:13:92:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:92:36:92:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:97:13:97:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:97:36:97:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:100:13:100:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:100:36:100:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:105:13:105:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:105:36:105:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:112:13:112:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:112:36:112:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:117:13:117:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:117:36:117:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:120:13:120:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:120:36:120:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:127:13:127:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:127:36:127:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:130:13:130:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:130:36:130:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | edges | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | @@ -184,6 +201,26 @@ edges | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:76:36:76:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:81:36:81:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:85:36:85:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:36:87:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:36:90:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:92:36:92:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:36:95:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:97:36:97:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:100:36:100:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:36:102:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:105:36:105:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:36:107:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:36:110:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:112:36:112:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:36:115:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:117:36:117:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:120:36:120:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:36:122:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:36:125:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:127:36:127:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:130:36:130:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:36:132:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | @@ -345,6 +382,26 @@ nodes | test_path_validation.py:76:36:76:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_path_validation.py:81:36:81:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:85:36:85:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:87:36:87:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:90:36:90:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:92:36:92:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:95:36:95:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:97:36:97:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:100:36:100:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:102:36:102:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:105:36:105:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:107:36:107:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:110:36:110:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:112:36:112:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:115:36:115:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:117:36:117:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:120:36:120:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:122:36:122:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:125:36:125:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:127:36:127:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:130:36:130:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:132:36:132:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_requests.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py index 44c569f625d0..3e6bb1f6d0c2 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py @@ -16,7 +16,7 @@ def urivalidator_path_in_domain_validation(credential, trusted_domain): c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(full_url, trusted_domain): - c = SecretClient(vault_url=full_url, credential=credential) # OK + c = SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] else: c = SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] @@ -32,7 +32,7 @@ def urivalidator_path_in_azure_keyvault_domain_validation(credential): c = KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_azure_keyvault_domain(full_url): - c = KeyClient(vault_url=full_url, credential=credential) # OK + c = KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] else: c = KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] @@ -48,7 +48,7 @@ def urivalidator_path_in_azure_storage_domain_validation(credential): c = ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] if URIValidator.in_azure_storage_domain(full_url): - c = ShareFileClient.from_file_url(full_url) # OK + c = ShareFileClient.from_file_url(full_url) # $ Alert[py/partial-ssrf] else: c = ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] @@ -63,70 +63,70 @@ def complex_urivalidator_checks(credential, trusted_domain): if not URIValidator.in_domain(url, trusted_domain): c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com": - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if not (URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com"): c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if not not not URIValidator.in_domain(url, trusted_domain): c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) == True: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if URIValidator.in_domain(url, trusted_domain) == False: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) != True: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) != False: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if URIValidator.in_domain(url, trusted_domain) is True: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if URIValidator.in_domain(url, trusted_domain) is False: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) is not True: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) is not False: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if not URIValidator.in_domain(url, trusted_domain) is True: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if not URIValidator.in_domain(url, trusted_domain) is False: - c = SecretClient(vault_url=url, credential=credential) # OK + c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] \ No newline at end of file From 42f6e6a19cdba380b2b0245cfe091c894204fda9 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 3 Feb 2026 11:44:34 -0500 Subject: [PATCH 015/243] Fixing inefficiently passed variable in nested existential quantification. --- .../dataflow/ServerSideRequestForgeryCustomizations.qll | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll index 2139ecf797db..e75217d608f5 100644 --- a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll @@ -185,15 +185,14 @@ module ServerSideRequestForgery { import semmle.python.dataflow.new.internal.DataFlowPublic private predicate uri_validator(DataFlow::GuardNode g, ControlFlowNode node, boolean branch) { - exists(DataFlow::CallCfgNode call, Node n, string funcs | + exists(DataFlow::CallCfgNode call, string funcs | funcs in ["in_domain", "in_azure_keyvault_domain", "in_azure_storage_domain"] | call = API::moduleImport("AntiSSRF").getMember("URIValidator").getMember(funcs).getACall() and call.getArg(0).asCfgNode() = node and - n.getALocalSource() = call and ( // validator used in a comparison - exists(CompareNode cn, Cmpop op | cn = g | + exists(CompareNode cn, Cmpop op, Node n | cn = g and n.getALocalSource() = call | ( // validator == true or validator == false or validator is True or validator is False (op instanceof Eq or op instanceof Is) and From 4f11913ee53aab76fff8457007c2bf83bce8b6ae Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 11:23:58 -0500 Subject: [PATCH 016/243] removing SSRFSink.qll --- .../lib/semmle/python/frameworks/SSRFSink.qll | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100644 python/ql/lib/semmle/python/frameworks/SSRFSink.qll diff --git a/python/ql/lib/semmle/python/frameworks/SSRFSink.qll b/python/ql/lib/semmle/python/frameworks/SSRFSink.qll deleted file mode 100644 index aeb228daf13b..000000000000 --- a/python/ql/lib/semmle/python/frameworks/SSRFSink.qll +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Provides classes for SSRF sinks modeled using Models as Data (MaD). - */ - -private import python -private import semmle.python.Concepts -private import semmle.python.ApiGraphs -private import semmle.python.frameworks.data.ModelsAsData - -/** - * INTERNAL: Do not use. - * - * Sets up SSRF sinks as Http::Client::Request - */ -module SsrfMaDModel { - /** - * An HTTP request modeled from `ssrf` sinks, modeled using MaD. - */ - class SsrfSink extends Http::Client::Request::Range instanceof API::CallNode { - DataFlow::Node urlArg; - - SsrfSink() { - ( - this.getArg(_) = urlArg - or - this.getArgByName(_) = urlArg - ) and - urlArg = ModelOutput::getASinkNode("ssrf").asSink() - } - - override DataFlow::Node getAUrlPart() { result = urlArg } - - override string getFramework() { result = "MaD" } - - override predicate disablesCertificateValidation( - DataFlow::Node disablingNode, DataFlow::Node argumentOrigin - ) { - // NOTE: if you need to define this, you have to special case it for every possible API in MaD - none() - } - } -} From f6c302b68cc107d8a361a9dd1e5dbddc88015ee2 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 11:28:48 -0500 Subject: [PATCH 017/243] Removing commented out test cases. --- .../test_azure_client.py | 200 ------------------ 1 file changed, 200 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py index 28570b7ab4a4..5dbb7e1ede47 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py @@ -23,203 +23,3 @@ def azure_sdk_test(credential, output_path): download_blob_from_url(blob_url=url, output=output_path, credential=credential, overwrite=True ) # $ Alert[py/partial-ssrf] download_blob_from_url(blob_url=full_url, output=output_path, credential=credential, overwrite=True) # $ Alert[py/full-ssrf] - -# if URIValidator.in_domain(url, trusted_domain): -# # Testing Azure sink -# c = SecretClient(vault_url=url, credential=credential)# OK -# c = ShareFileClient.from_file_url(url) # OK -# c = KeyClient(url, credential)# OK -# c = ContainerClient.from_container_url(container_url=url, credential=credential) # OK - -# download_blob_from_url( -# blob_url=url, # OK -# output=output_path, -# credential=credential, -# overwrite=True -# ) -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment -# c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment -# c = KeyClient(url, credential)# NOT OK -- user only controlled fragment -# c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment - -# download_blob_from_url( -# blob_url=url, # NOT OK -- user only controlled fragment -# output=output_path, -# credential=credential, -# overwrite=True -# ) - - -# if URIValidator.in_domain(full_url, trusted_domain): -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # OK -# c = ShareFileClient.from_file_url(full_url) # OK -# c = KeyClient(full_url, credential) # OK -# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # OK - -# download_blob_from_url( -# blob_url=full_url, # OK -# output=output_path, -# credential=credential, -# overwrite=True -# ) -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control -# c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control -# c = KeyClient(full_url, credential) # NOT OK -- user has full control -# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control - -# download_blob_from_url( -# blob_url=full_url, # NOT OK -- user has full control -# output=output_path, -# credential=credential, -# overwrite=True -# ) - - -# if URIValidator.in_azure_keyvault_domain(url): -# # Testing Azure sink -# c = SecretClient(vault_url=url, credential=credential)# OK -# c = ShareFileClient.from_file_url(url) # OK -# c = KeyClient(url, credential)# OK -# c = ContainerClient.from_container_url(container_url=url, credential=credential) # OK - -# download_blob_from_url( -# blob_url=url, # OK -# output=output_path, -# credential=credential, -# overwrite=True -# ) -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment -# c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment -# c = KeyClient(url, credential)# NOT OK -- user only controlled fragment -# c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment - -# download_blob_from_url( -# blob_url=url, # NOT OK -- user only controlled fragment -# output=output_path, -# credential=credential, -# overwrite=True -# ) - - -# if URIValidator.in_azure_keyvault_domain(full_url): -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # OK -# c = ShareFileClient.from_file_url(full_url) # OK -# c = KeyClient(full_url, credential) # OK -# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # OK - -# download_blob_from_url( -# blob_url=full_url, # OK -# output=output_path, -# credential=credential, -# overwrite=True -# ) -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control -# c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control -# c = KeyClient(full_url, credential) # NOT OK -- user has full control -# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control - -# download_blob_from_url( -# blob_url=full_url, # NOT OK -- user has full control -# output=output_path, -# credential=credential, -# overwrite=True -# ) - -# if URIValidator.in_azure_storage_domain(url): -# # Testing Azure sink -# c = SecretClient(vault_url=url, credential=credential)# OK -# c = ShareFileClient.from_file_url(url) # OK -# c = KeyClient(url, credential)# OK -# c = ContainerClient.from_container_url(container_url=url, credential=credential) # OK - -# download_blob_from_url( -# blob_url=url, # OK -# output=output_path, -# credential=credential, -# overwrite=True -# ) -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=url, credential=credential)# NOT OK -- user only controlled fragment -# c = ShareFileClient.from_file_url(url) # NOT OK -- user only controlled fragment -# c = KeyClient(url, credential)# NOT OK -- user only controlled fragment -# c = ContainerClient.from_container_url(container_url=url, credential=credential) # NOT OK -- user only controlled fragment - -# download_blob_from_url( -# blob_url=url, # NOT OK -- user only controlled fragment -# output=output_path, -# credential=credential, -# overwrite=True -# ) - - -# if URIValidator.in_azure_storage_domain(full_url): -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # OK -# c = ShareFileClient.from_file_url(full_url) # OK -# c = KeyClient(full_url, credential) # OK -# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # OK - -# download_blob_from_url( -# blob_url=full_url, # OK -# output=output_path, -# credential=credential, -# overwrite=True -# ) -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control -# c = ShareFileClient.from_file_url(full_url) # NOT OK -- user has full control -# c = KeyClient(full_url, credential) # NOT OK -- user has full control -# c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # NOT OK -- user has full control - -# download_blob_from_url( -# blob_url=full_url, # NOT OK -- user has full control -# output=output_path, -# credential=credential, -# overwrite=True -# ) - -# def azure_sdk_logic_sanity_test(credential, output_path, trusted_domain): -# user_input = request.args['untrusted_input'] -# full_url = f"https://{user_input}" -# if not URIValidator.in_azure_storage_domain(full_url): -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # OK - - - -# if not not URIValidator.in_azure_storage_domain(full_url): -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # OK -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control - - -# if URIValidator.URIValidator.in_domain(full_url, trusted_domain) and trusted_domain == "example.com": -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # OK -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control - -# if not (URIValidator.URIValidator.in_domain(full_url, trusted_domain) and trusted_domain == "example.com"): -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # NOT OK -- user has full control -# else: -# # Testing Azure sink -# c = SecretClient(vault_url=full_url, credential=credential) # OK \ No newline at end of file From 08174d7ec9d0067430c57c9ca2754f6cbbd1ff98 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:41:14 +0000 Subject: [PATCH 018/243] Rust: Add test cases for summaries as well. --- rust/ql/lib/codeql/files/FileSystem.qll | 9 + .../dataflow/models/external_file.rs | 30 +++ .../library-tests/dataflow/models/main.rs | 27 +-- .../dataflow/models/models.expected | 171 ++++++++++-------- .../dataflow/models/models.ext.yml | 30 ++- 5 files changed, 166 insertions(+), 101 deletions(-) create mode 100644 rust/ql/test/library-tests/dataflow/models/external_file.rs diff --git a/rust/ql/lib/codeql/files/FileSystem.qll b/rust/ql/lib/codeql/files/FileSystem.qll index ebc4085fbbb5..c6237775252f 100644 --- a/rust/ql/lib/codeql/files/FileSystem.qll +++ b/rust/ql/lib/codeql/files/FileSystem.qll @@ -36,6 +36,13 @@ class Folder = Impl::Folder; module Folder = Impl::Folder; +/** + * Holds if the file identified by `relativePath` should be treated as though it is external + * to the target project, even though it is within the source code directory. This is used for + * testing. + */ +extensible predicate additionalExternalFile(string relativePath); + /** A file. */ class File extends Container, Impl::File { /** @@ -44,6 +51,8 @@ class File extends Container, Impl::File { */ predicate fromSource() { exists(ExtractorStep s | s.getAction() = "Extract" and s.getFile() = this) + and + not additionalExternalFile(this.getRelativePath()) } /** diff --git a/rust/ql/test/library-tests/dataflow/models/external_file.rs b/rust/ql/test/library-tests/dataflow/models/external_file.rs new file mode 100644 index 000000000000..0e351a475d38 --- /dev/null +++ b/rust/ql/test/library-tests/dataflow/models/external_file.rs @@ -0,0 +1,30 @@ + +pub fn generated_source(i: i64) -> i64 { + 0 +} + +pub fn neutral_generated_source(i: i64) -> i64 { + 0 +} + +pub fn neutral_manual_source(i: i64) -> i64 { + 0 +} + +pub fn generated_sink(i: i64) {} + +pub fn neutral_generated_sink(i: i64) {} + +pub fn neutral_manual_sink(i: i64) {} + +pub fn generated_summary(i: i64) -> i64 { + 0 +} + +pub fn neutral_generated_summary(i: i64) -> i64 { + 0 +} + +pub fn neutral_manual_summary(i: i64) -> i64 { + 0 +} diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index 34b7b9188f2b..fdf79c95281f 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -410,28 +410,14 @@ fn test_trait_model(x: T) { sink(x7); } -pub fn generated_source(i: i64) -> i64 { - 0 -} - -pub fn neutral_generated_source(i: i64) -> i64 { - 0 -} - -pub fn neutral_manual_source(i: i64) -> i64 { - 0 -} - -pub fn generated_sink(i: i64) {} - -pub fn neutral_generated_sink(i: i64) {} - -pub fn neutral_manual_sink(i: i64) {} +mod external_file; +use external_file::*; fn test_neutrals() { // neutral models should cause corresponding generated models to be ignored. - // Thus, the `neutral_generated_source` and `neutral_generated_sink`, which - // have both a generated and a neutral model, should not have flow. + // Thus the `neutral_generated_source`, `neutral_generated_sink` and + // `neutral_generated_summary`, which have both a generated and a neutral + // model, should not have flow. sink(generated_source(1)); // $ hasValueFlow=1 sink(neutral_generated_source(2)); @@ -439,6 +425,9 @@ fn test_neutrals() { generated_sink(source(4)); // $ hasValueFlow=4 neutral_generated_sink(source(5)); neutral_manual_sink(source(6)); // $ hasValueFlow=6 + sink(generated_summary(source(7))); // $ hasValueFlow=7 + sink(neutral_generated_summary(source(8))); // $ SPURIOUS: hasValueFlow=8 + sink(neutral_manual_summary(source(9))); // $ hasValueFlow=9 } #[tokio::main] diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index 74e89ea1acd2..ddbf7a594f4d 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -1,14 +1,14 @@ models | 1 | Sink: ::sink; Argument[self].Field[main::MyFieldEnum::D::field_d]; test-sink | | 2 | Sink: main::enum_sink; Argument[0].Field[main::MyFieldEnum::C::field_c]; test-sink | -| 3 | Sink: main::generated_sink; Argument[0]; test-sink | -| 4 | Sink: main::neutral_manual_sink; Argument[0]; test-sink | +| 3 | Sink: main::external_file::generated_sink; Argument[0]; test-sink | +| 4 | Sink: main::external_file::neutral_manual_sink; Argument[0]; test-sink | | 5 | Sink: main::simple_sink; Argument[0]; test-sink | | 6 | Source: ::source; ReturnValue.Field[main::MyFieldEnum::C::field_c]; test-source | | 7 | Source: main::arg_source; Argument[0]; test-source | | 8 | Source: main::enum_source; ReturnValue.Field[main::MyFieldEnum::D::field_d]; test-source | -| 9 | Source: main::generated_source; ReturnValue; test-source | -| 10 | Source: main::neutral_manual_source; ReturnValue; test-source | +| 9 | Source: main::external_file::generated_source; ReturnValue; test-source | +| 10 | Source: main::external_file::neutral_manual_source; ReturnValue; test-source | | 11 | Source: main::simple_source; ReturnValue; test-source | | 12 | Source: main::source_into_function::pass_source; Argument[1].Parameter[0]; test-source | | 13 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | @@ -17,18 +17,21 @@ models | 16 | Summary: main::apply; Argument[0]; Argument[1].Parameter[0]; value | | 17 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | | 18 | Summary: main::coerce; Argument[0]; ReturnValue; taint | -| 19 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 20 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 21 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 22 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 23 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 24 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 25 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 26 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 27 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 28 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 29 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | -| 30 | Summary: main::snd; Argument[1]; ReturnValue; value | +| 19 | Summary: main::external_file::generated_summary; Argument[0]; ReturnValue; value | +| 20 | Summary: main::external_file::neutral_generated_summary; Argument[0]; ReturnValue; value | +| 21 | Summary: main::external_file::neutral_manual_summary; Argument[0]; ReturnValue; value | +| 22 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 23 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 24 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 25 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 26 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 27 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 28 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 29 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 30 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 31 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 32 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 33 | Summary: main::snd; Argument[1]; ReturnValue; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -43,8 +46,8 @@ edges | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:30 | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:30 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:33 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:33 | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:13:54:21 | source(...) | main.rs:54:9:54:9 | s | provenance | | @@ -55,8 +58,8 @@ edges | main.rs:55:14:55:28 | ...::A(...) [A] | main.rs:55:9:55:10 | e1 [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:24 | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:24 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:27 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:27 | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:13:67:21 | source(...) | main.rs:67:9:67:9 | s | provenance | | @@ -65,8 +68,8 @@ edges | main.rs:68:9:68:10 | e1 [B] | main.rs:69:11:69:12 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:29 | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:29 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:32 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:32 | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:71:9:71:23 | ...::B(...) [B] | main.rs:71:22:71:22 | i | provenance | | @@ -83,8 +86,8 @@ edges | main.rs:87:14:87:42 | ...::C {...} [C] | main.rs:87:9:87:10 | e1 [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:23 | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:23 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:26 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:26 | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:13:99:21 | source(...) | main.rs:99:9:99:9 | s | provenance | | @@ -93,8 +96,8 @@ edges | main.rs:100:9:100:10 | e1 [D] | main.rs:101:11:101:12 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:28 | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:28 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:31 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:31 | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:103:9:103:37 | ...::D {...} [D] | main.rs:103:35:103:35 | i | provenance | | @@ -111,8 +114,8 @@ edges | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | main.rs:119:9:119:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:21 | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:21 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:24 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:24 | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | s | provenance | | @@ -121,16 +124,16 @@ edges | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:26 | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:26 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:29 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:29 | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:19 | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:19 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:22 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:22 | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:162:9:162:9 | s | main.rs:163:33:163:33 | s | provenance | | @@ -141,8 +144,8 @@ edges | main.rs:163:9:163:11 | arr [element] | main.rs:164:10:164:12 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:25 | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:25 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:28 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:28 | | main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | | main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | @@ -155,8 +158,8 @@ edges | main.rs:174:13:174:18 | TupleExpr [tuple.0] | main.rs:174:9:174:9 | t [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:22 | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:22 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:25 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:25 | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:13:186:22 | source(...) | main.rs:186:9:186:9 | s | provenance | | @@ -165,8 +168,8 @@ edges | main.rs:187:9:187:9 | t [tuple.1] | main.rs:189:10:189:10 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:27 | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:27 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:30 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:30 | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:201:9:201:9 | s | main.rs:206:11:206:11 | s | provenance | | @@ -217,8 +220,8 @@ edges | main.rs:230:13:230:31 | get_async_number(...) [future] | main.rs:230:13:230:37 | await ... | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:20 | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:20 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:23 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:23 | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | | main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:8 | @@ -323,14 +326,20 @@ edges | main.rs:406:9:406:10 | x6 | main.rs:407:10:407:11 | x6 | provenance | | | main.rs:406:14:406:23 | source(...) | main.rs:406:14:406:27 | ... < ... | provenance | MaD:14 | | main.rs:406:14:406:27 | ... < ... | main.rs:406:9:406:10 | x6 | provenance | | -| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | -| main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | -| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | -| main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | -| main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | -| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | -| main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | +| main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | +| main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | provenance | Src:MaD:9 MaD:9 | +| main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | +| main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | provenance | Src:MaD:10 MaD:10 | +| main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | provenance | MaD:3 Sink:MaD:3 | +| main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | +| main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | +| main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | provenance | MaD:19 | +| main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | provenance | MaD:19 | +| main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | provenance | MaD:20 | +| main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | provenance | MaD:20 | +| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:21 | +| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:21 | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -684,22 +693,34 @@ nodes | main.rs:406:14:406:23 | source(...) | semmle.label | source(...) | | main.rs:406:14:406:27 | ... < ... | semmle.label | ... < ... | | main.rs:407:10:407:11 | x6 | semmle.label | x6 | -| main.rs:436:10:436:25 | generated_source | semmle.label | generated_source | -| main.rs:436:10:436:25 | generated_source | semmle.label | generated_source | -| main.rs:436:10:436:28 | generated_source(...) | semmle.label | generated_source(...) | -| main.rs:436:10:436:28 | generated_source(...) | semmle.label | generated_source(...) | -| main.rs:438:10:438:30 | neutral_manual_source | semmle.label | neutral_manual_source | -| main.rs:438:10:438:30 | neutral_manual_source | semmle.label | neutral_manual_source | -| main.rs:438:10:438:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | -| main.rs:438:10:438:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | -| main.rs:439:5:439:18 | generated_sink | semmle.label | generated_sink | -| main.rs:439:5:439:18 | generated_sink | semmle.label | generated_sink | -| main.rs:439:20:439:28 | source(...) | semmle.label | source(...) | -| main.rs:439:20:439:28 | source(...) | semmle.label | source(...) | -| main.rs:441:5:441:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | -| main.rs:441:5:441:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | -| main.rs:441:25:441:33 | source(...) | semmle.label | source(...) | -| main.rs:441:25:441:33 | source(...) | semmle.label | source(...) | +| main.rs:422:10:422:25 | generated_source | semmle.label | generated_source | +| main.rs:422:10:422:25 | generated_source | semmle.label | generated_source | +| main.rs:422:10:422:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:422:10:422:28 | generated_source(...) | semmle.label | generated_source(...) | +| main.rs:424:10:424:30 | neutral_manual_source | semmle.label | neutral_manual_source | +| main.rs:424:10:424:30 | neutral_manual_source | semmle.label | neutral_manual_source | +| main.rs:424:10:424:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:424:10:424:33 | neutral_manual_source(...) | semmle.label | neutral_manual_source(...) | +| main.rs:425:5:425:18 | generated_sink | semmle.label | generated_sink | +| main.rs:425:5:425:18 | generated_sink | semmle.label | generated_sink | +| main.rs:425:20:425:28 | source(...) | semmle.label | source(...) | +| main.rs:425:20:425:28 | source(...) | semmle.label | source(...) | +| main.rs:427:5:427:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | +| main.rs:427:5:427:23 | neutral_manual_sink | semmle.label | neutral_manual_sink | +| main.rs:427:25:427:33 | source(...) | semmle.label | source(...) | +| main.rs:427:25:427:33 | source(...) | semmle.label | source(...) | +| main.rs:428:10:428:37 | generated_summary(...) | semmle.label | generated_summary(...) | +| main.rs:428:10:428:37 | generated_summary(...) | semmle.label | generated_summary(...) | +| main.rs:428:28:428:36 | source(...) | semmle.label | source(...) | +| main.rs:428:28:428:36 | source(...) | semmle.label | source(...) | +| main.rs:429:10:429:45 | neutral_generated_summary(...) | semmle.label | neutral_generated_summary(...) | +| main.rs:429:10:429:45 | neutral_generated_summary(...) | semmle.label | neutral_generated_summary(...) | +| main.rs:429:36:429:44 | source(...) | semmle.label | source(...) | +| main.rs:429:36:429:44 | source(...) | semmle.label | source(...) | +| main.rs:430:10:430:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | +| main.rs:430:10:430:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | +| main.rs:430:33:430:41 | source(...) | semmle.label | source(...) | +| main.rs:430:33:430:41 | source(...) | semmle.label | source(...) | subpaths | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | | main.rs:212:23:212:23 | f [captured s] | main.rs:211:40:211:40 | s | main.rs:211:17:211:42 | if ... {...} else {...} | main.rs:212:13:212:24 | apply(...) | @@ -771,11 +792,17 @@ invalidSpecComponent | main.rs:401:10:401:11 | x4 | main.rs:400:14:400:23 | source(...) | main.rs:401:10:401:11 | x4 | $@ | main.rs:400:14:400:23 | source(...) | source(...) | | main.rs:404:10:404:11 | x5 | main.rs:403:14:403:23 | source(...) | main.rs:404:10:404:11 | x5 | $@ | main.rs:403:14:403:23 | source(...) | source(...) | | main.rs:407:10:407:11 | x6 | main.rs:406:14:406:23 | source(...) | main.rs:407:10:407:11 | x6 | $@ | main.rs:406:14:406:23 | source(...) | source(...) | -| main.rs:436:10:436:28 | generated_source(...) | main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | $@ | main.rs:436:10:436:25 | generated_source | generated_source | -| main.rs:436:10:436:28 | generated_source(...) | main.rs:436:10:436:25 | generated_source | main.rs:436:10:436:28 | generated_source(...) | $@ | main.rs:436:10:436:25 | generated_source | generated_source | -| main.rs:438:10:438:33 | neutral_manual_source(...) | main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | $@ | main.rs:438:10:438:30 | neutral_manual_source | neutral_manual_source | -| main.rs:438:10:438:33 | neutral_manual_source(...) | main.rs:438:10:438:30 | neutral_manual_source | main.rs:438:10:438:33 | neutral_manual_source(...) | $@ | main.rs:438:10:438:30 | neutral_manual_source | neutral_manual_source | -| main.rs:439:5:439:18 | generated_sink | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | $@ | main.rs:439:20:439:28 | source(...) | source(...) | -| main.rs:439:5:439:18 | generated_sink | main.rs:439:20:439:28 | source(...) | main.rs:439:5:439:18 | generated_sink | $@ | main.rs:439:20:439:28 | source(...) | source(...) | -| main.rs:441:5:441:23 | neutral_manual_sink | main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | $@ | main.rs:441:25:441:33 | source(...) | source(...) | -| main.rs:441:5:441:23 | neutral_manual_sink | main.rs:441:25:441:33 | source(...) | main.rs:441:5:441:23 | neutral_manual_sink | $@ | main.rs:441:25:441:33 | source(...) | source(...) | +| main.rs:422:10:422:28 | generated_source(...) | main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | $@ | main.rs:422:10:422:25 | generated_source | generated_source | +| main.rs:422:10:422:28 | generated_source(...) | main.rs:422:10:422:25 | generated_source | main.rs:422:10:422:28 | generated_source(...) | $@ | main.rs:422:10:422:25 | generated_source | generated_source | +| main.rs:424:10:424:33 | neutral_manual_source(...) | main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | $@ | main.rs:424:10:424:30 | neutral_manual_source | neutral_manual_source | +| main.rs:424:10:424:33 | neutral_manual_source(...) | main.rs:424:10:424:30 | neutral_manual_source | main.rs:424:10:424:33 | neutral_manual_source(...) | $@ | main.rs:424:10:424:30 | neutral_manual_source | neutral_manual_source | +| main.rs:425:5:425:18 | generated_sink | main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | $@ | main.rs:425:20:425:28 | source(...) | source(...) | +| main.rs:425:5:425:18 | generated_sink | main.rs:425:20:425:28 | source(...) | main.rs:425:5:425:18 | generated_sink | $@ | main.rs:425:20:425:28 | source(...) | source(...) | +| main.rs:427:5:427:23 | neutral_manual_sink | main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | $@ | main.rs:427:25:427:33 | source(...) | source(...) | +| main.rs:427:5:427:23 | neutral_manual_sink | main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | $@ | main.rs:427:25:427:33 | source(...) | source(...) | +| main.rs:428:10:428:37 | generated_summary(...) | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | $@ | main.rs:428:28:428:36 | source(...) | source(...) | +| main.rs:428:10:428:37 | generated_summary(...) | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | $@ | main.rs:428:28:428:36 | source(...) | source(...) | +| main.rs:429:10:429:45 | neutral_generated_summary(...) | main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | $@ | main.rs:429:36:429:44 | source(...) | source(...) | +| main.rs:429:10:429:45 | neutral_generated_summary(...) | main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | $@ | main.rs:429:36:429:44 | source(...) | source(...) | +| main.rs:430:10:430:42 | neutral_manual_summary(...) | main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | $@ | main.rs:430:33:430:41 | source(...) | source(...) | +| main.rs:430:10:430:42 | neutral_manual_summary(...) | main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | $@ | main.rs:430:33:430:41 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/models.ext.yml b/rust/ql/test/library-tests/dataflow/models/models.ext.yml index de84c6d14973..4e3377881a36 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.ext.yml +++ b/rust/ql/test/library-tests/dataflow/models/models.ext.yml @@ -8,9 +8,9 @@ extensions: - ["::source", "ReturnValue.Field[main::MyFieldEnum::C::field_c]", "test-source", "manual"] - ["main::arg_source", "Argument[0]", "test-source", "manual"] - ["main::source_into_function::pass_source", "Argument[1].Parameter[0]", "test-source", "manual"] - - ["main::generated_source", "ReturnValue", "test-source", "dfc-generated"] # not actually generated, but we want to test behaviour of generated models here. - - ["main::neutral_generated_source", "ReturnValue", "test-source", "dfc-generated"] - - ["main::neutral_manual_source", "ReturnValue", "test-source", "manual"] + - ["main::external_file::generated_source", "ReturnValue", "test-source", "dfc-generated"] # not actually generated, but we want to test behaviour of generated models here. + - ["main::external_file::neutral_generated_source", "ReturnValue", "test-source", "dfc-generated"] + - ["main::external_file::neutral_manual_source", "ReturnValue", "test-source", "manual"] - addsTo: pack: codeql/rust-all extensible: sinkModel @@ -18,9 +18,9 @@ extensions: - ["main::simple_sink", "Argument[0]", "test-sink", "manual"] - ["main::enum_sink", "Argument[0].Field[main::MyFieldEnum::C::field_c]", "test-sink", "manual"] - ["::sink", "Argument[self].Field[main::MyFieldEnum::D::field_d]", "test-sink", "manual"] - - ["main::generated_sink", "Argument[0]", "test-sink", "dfc-generated"] - - ["main::neutral_generated_sink", "Argument[0]", "test-sink", "dfc-generated"] - - ["main::neutral_manual_sink", "Argument[0]", "test-sink", "manual"] + - ["main::external_file::generated_sink", "Argument[0]", "test-sink", "dfc-generated"] + - ["main::external_file::neutral_generated_sink", "Argument[0]", "test-sink", "dfc-generated"] + - ["main::external_file::neutral_manual_sink", "Argument[0]", "test-sink", "manual"] - addsTo: pack: codeql/rust-all extensible: summaryModel @@ -45,11 +45,21 @@ extensions: - ["<_ as core::cmp::PartialOrd>::lt", "Argument[self].Reference", "ReturnValue", "taint", "manual"] # Overwrites the generic trait model for i32 - ["::lt", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["main::external_file::generated_summary", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["main::external_file::neutral_generated_summary", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["main::external_file::neutral_manual_summary", "Argument[0]", "ReturnValue", "value", "manual"] - addsTo: pack: codeql/rust-all extensible: neutralModel data: - - ["main::neutral_generated_source", "source", "manual"] - - ["main::neutral_manual_source", "source", "manual"] - - ["main::neutral_generated_sink", "sink", "manual"] - - ["main::neutral_manual_sink", "sink", "manual"] + - ["main::external_file::neutral_generated_source", "source", "manual"] + - ["main::external_file::neutral_manual_source", "source", "manual"] + - ["main::external_file::neutral_generated_sink", "sink", "manual"] + - ["main::external_file::neutral_manual_sink", "sink", "manual"] + - ["main::external_file::neutral_generated_summary", "summary", "manual"] + - ["main::external_file::neutral_manual_summary", "summary", "manual"] + - addsTo: + pack: codeql/rust-all + extensible: additionalExternalFile + data: + - ["external_file.rs"] From a5aeadd31d9e0628866c96bd55e0aa78af40819c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 6 Feb 2026 18:15:13 +0000 Subject: [PATCH 019/243] Rust: Fix for neutral summaries. --- .../rust/dataflow/internal/ModelsAsData.qll | 16 ++-- .../library-tests/dataflow/models/main.rs | 2 +- .../dataflow/models/models.expected | 87 +++++++++---------- 3 files changed, 50 insertions(+), 55 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index d31d9229c494..4b83b029c78e 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -138,18 +138,22 @@ private class SummarizedCallableFromModel extends SummarizedCallable::Range { summaryModel(path, input_, output_, kind, p, madId) and f.getCanonicalPath() = path | - this = f and isExact_ = true and p_ = p + this = f and + isExact_ = true and + p_ = p and + // Do not apply generated models where there is a neutral model + not ( + p_.isGenerated() and + neutralModel(path, "summary", _, _) + ) or this.implements(f) and isExact_ = false and // making inherited models generated means that source code definitions and // exact generated models take precedence p_ = "hq-generated" and - // Only apply generated models (including inherited models) when no neutral model exists - not ( - p_.isGenerated() and - neutralModel(path, "summary", _, _) - ) + // Do not apply inherited models where there is a neutral model + not neutralModel(path, "summary", _, _) ) } diff --git a/rust/ql/test/library-tests/dataflow/models/main.rs b/rust/ql/test/library-tests/dataflow/models/main.rs index fdf79c95281f..61e5928636d7 100644 --- a/rust/ql/test/library-tests/dataflow/models/main.rs +++ b/rust/ql/test/library-tests/dataflow/models/main.rs @@ -426,7 +426,7 @@ fn test_neutrals() { neutral_generated_sink(source(5)); neutral_manual_sink(source(6)); // $ hasValueFlow=6 sink(generated_summary(source(7))); // $ hasValueFlow=7 - sink(neutral_generated_summary(source(8))); // $ SPURIOUS: hasValueFlow=8 + sink(neutral_generated_summary(source(8))); sink(neutral_manual_summary(source(9))); // $ hasValueFlow=9 } diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index ddbf7a594f4d..e5ea563eaefe 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -18,20 +18,19 @@ models | 17 | Summary: main::apply; Argument[1].ReturnValue; ReturnValue; value | | 18 | Summary: main::coerce; Argument[0]; ReturnValue; taint | | 19 | Summary: main::external_file::generated_summary; Argument[0]; ReturnValue; value | -| 20 | Summary: main::external_file::neutral_generated_summary; Argument[0]; ReturnValue; value | -| 21 | Summary: main::external_file::neutral_manual_summary; Argument[0]; ReturnValue; value | -| 22 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | -| 23 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | -| 24 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | -| 25 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | -| 26 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | -| 27 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | -| 28 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | -| 29 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | -| 30 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | -| 31 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | -| 32 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | -| 33 | Summary: main::snd; Argument[1]; ReturnValue; value | +| 20 | Summary: main::external_file::neutral_manual_summary; Argument[0]; ReturnValue; value | +| 21 | Summary: main::get_array_element; Argument[0].Element; ReturnValue; value | +| 22 | Summary: main::get_async_number; Argument[0]; ReturnValue.Future; value | +| 23 | Summary: main::get_struct_field; Argument[0].Field[main::MyStruct::field1]; ReturnValue; value | +| 24 | Summary: main::get_tuple_element; Argument[0].Field[0]; ReturnValue; value | +| 25 | Summary: main::get_var_field; Argument[0].Field[main::MyFieldEnum::C::field_c]; ReturnValue; value | +| 26 | Summary: main::get_var_pos; Argument[0].Field[main::MyPosEnum::A(0)]; ReturnValue; value | +| 27 | Summary: main::set_array_element; Argument[0]; ReturnValue.Element; value | +| 28 | Summary: main::set_struct_field; Argument[0]; ReturnValue.Field[main::MyStruct::field2]; value | +| 29 | Summary: main::set_tuple_element; Argument[0]; ReturnValue.Field[1]; value | +| 30 | Summary: main::set_var_field; Argument[0]; ReturnValue.Field[main::MyFieldEnum::D::field_d]; value | +| 31 | Summary: main::set_var_pos; Argument[0]; ReturnValue.Field[main::MyPosEnum::B(0)]; value | +| 32 | Summary: main::snd; Argument[1]; ReturnValue; value | edges | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | | main.rs:15:9:15:9 | s | main.rs:16:19:16:19 | s | provenance | | @@ -46,8 +45,8 @@ edges | main.rs:41:9:41:10 | s1 | main.rs:42:17:42:18 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | | main.rs:41:14:41:23 | source(...) | main.rs:41:9:41:10 | s1 | provenance | | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:33 | -| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:33 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | +| main.rs:42:17:42:18 | s1 | main.rs:42:10:42:19 | snd(...) | provenance | MaD:32 | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:9:54:9 | s | main.rs:55:27:55:27 | s | provenance | | | main.rs:54:13:54:21 | source(...) | main.rs:54:9:54:9 | s | provenance | | @@ -58,8 +57,8 @@ edges | main.rs:55:14:55:28 | ...::A(...) [A] | main.rs:55:9:55:10 | e1 [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | | main.rs:55:27:55:27 | s | main.rs:55:14:55:28 | ...::A(...) [A] | provenance | | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:27 | -| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:27 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | +| main.rs:56:22:56:23 | e1 [A] | main.rs:56:10:56:24 | get_var_pos(...) | provenance | MaD:26 | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:9:67:9 | s | main.rs:68:26:68:26 | s | provenance | | | main.rs:67:13:67:21 | source(...) | main.rs:67:9:67:9 | s | provenance | | @@ -68,8 +67,8 @@ edges | main.rs:68:9:68:10 | e1 [B] | main.rs:69:11:69:12 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | | main.rs:68:14:68:27 | set_var_pos(...) [B] | main.rs:68:9:68:10 | e1 [B] | provenance | | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:32 | -| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:32 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | +| main.rs:68:26:68:26 | s | main.rs:68:14:68:27 | set_var_pos(...) [B] | provenance | MaD:31 | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:69:11:69:12 | e1 [B] | main.rs:71:9:71:23 | ...::B(...) [B] | provenance | | | main.rs:71:9:71:23 | ...::B(...) [B] | main.rs:71:22:71:22 | i | provenance | | @@ -86,8 +85,8 @@ edges | main.rs:87:14:87:42 | ...::C {...} [C] | main.rs:87:9:87:10 | e1 [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | | main.rs:87:40:87:40 | s | main.rs:87:14:87:42 | ...::C {...} [C] | provenance | | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:26 | -| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:26 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | +| main.rs:88:24:88:25 | e1 [C] | main.rs:88:10:88:26 | get_var_field(...) | provenance | MaD:25 | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:9:99:9 | s | main.rs:100:28:100:28 | s | provenance | | | main.rs:99:13:99:21 | source(...) | main.rs:99:9:99:9 | s | provenance | | @@ -96,8 +95,8 @@ edges | main.rs:100:9:100:10 | e1 [D] | main.rs:101:11:101:12 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | | main.rs:100:14:100:29 | set_var_field(...) [D] | main.rs:100:9:100:10 | e1 [D] | provenance | | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:31 | -| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:31 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | +| main.rs:100:28:100:28 | s | main.rs:100:14:100:29 | set_var_field(...) [D] | provenance | MaD:30 | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:101:11:101:12 | e1 [D] | main.rs:103:9:103:37 | ...::D {...} [D] | provenance | | | main.rs:103:9:103:37 | ...::D {...} [D] | main.rs:103:35:103:35 | i | provenance | | @@ -114,8 +113,8 @@ edges | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | main.rs:119:9:119:17 | my_struct [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | | main.rs:120:17:120:17 | s | main.rs:119:21:122:5 | MyStruct {...} [MyStruct.field1] | provenance | | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:24 | -| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:24 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | +| main.rs:123:27:123:35 | my_struct [MyStruct.field1] | main.rs:123:10:123:36 | get_struct_field(...) | provenance | MaD:23 | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:9:140:9 | s | main.rs:141:38:141:38 | s | provenance | | | main.rs:140:13:140:21 | source(...) | main.rs:140:9:140:9 | s | provenance | | @@ -124,16 +123,16 @@ edges | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | main.rs:141:9:141:17 | my_struct [MyStruct.field2] | provenance | | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:29 | -| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:29 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | +| main.rs:141:38:141:38 | s | main.rs:141:21:141:39 | set_struct_field(...) [MyStruct.field2] | provenance | MaD:28 | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:143:10:143:18 | my_struct [MyStruct.field2] | main.rs:143:10:143:25 | my_struct.field2 | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:9:152:9 | s | main.rs:153:29:153:29 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | | main.rs:152:13:152:21 | source(...) | main.rs:152:9:152:9 | s | provenance | | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:22 | -| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:22 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | +| main.rs:153:28:153:30 | [...] [element] | main.rs:153:10:153:31 | get_array_element(...) | provenance | MaD:21 | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:153:29:153:29 | s | main.rs:153:28:153:30 | [...] [element] | provenance | | | main.rs:162:9:162:9 | s | main.rs:163:33:163:33 | s | provenance | | @@ -144,8 +143,8 @@ edges | main.rs:163:9:163:11 | arr [element] | main.rs:164:10:164:12 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | | main.rs:163:15:163:34 | set_array_element(...) [element] | main.rs:163:9:163:11 | arr [element] | provenance | | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:28 | -| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:28 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | +| main.rs:163:33:163:33 | s | main.rs:163:15:163:34 | set_array_element(...) [element] | provenance | MaD:27 | | main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | | main.rs:164:10:164:12 | arr [element] | main.rs:164:10:164:15 | arr[0] | provenance | MaD:15 | | main.rs:173:9:173:9 | s | main.rs:174:14:174:14 | s | provenance | | @@ -158,8 +157,8 @@ edges | main.rs:174:13:174:18 | TupleExpr [tuple.0] | main.rs:174:9:174:9 | t [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | | main.rs:174:14:174:14 | s | main.rs:174:13:174:18 | TupleExpr [tuple.0] | provenance | | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:25 | -| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:25 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | +| main.rs:175:28:175:28 | t [tuple.0] | main.rs:175:10:175:29 | get_tuple_element(...) | provenance | MaD:24 | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:9:186:9 | s | main.rs:187:31:187:31 | s | provenance | | | main.rs:186:13:186:22 | source(...) | main.rs:186:9:186:9 | s | provenance | | @@ -168,8 +167,8 @@ edges | main.rs:187:9:187:9 | t [tuple.1] | main.rs:189:10:189:10 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | main.rs:187:9:187:9 | t [tuple.1] | provenance | | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:30 | -| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:30 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | +| main.rs:187:31:187:31 | s | main.rs:187:13:187:32 | set_tuple_element(...) [tuple.1] | provenance | MaD:29 | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:189:10:189:10 | t [tuple.1] | main.rs:189:10:189:12 | t.1 | provenance | | | main.rs:201:9:201:9 | s | main.rs:206:11:206:11 | s | provenance | | @@ -220,8 +219,8 @@ edges | main.rs:230:13:230:31 | get_async_number(...) [future] | main.rs:230:13:230:37 | await ... | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | | main.rs:230:13:230:37 | await ... | main.rs:230:9:230:9 | t | provenance | | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:23 | -| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:23 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | +| main.rs:230:30:230:30 | s | main.rs:230:13:230:31 | get_async_number(...) [future] | provenance | MaD:22 | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | | main.rs:250:9:250:9 | s [D] | main.rs:251:11:251:11 | s [D] | provenance | | | main.rs:250:13:250:23 | enum_source | main.rs:250:13:250:27 | enum_source(...) [D] | provenance | Src:MaD:8 | @@ -336,10 +335,8 @@ edges | main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | provenance | MaD:4 Sink:MaD:4 | | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | provenance | MaD:19 | | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | provenance | MaD:19 | -| main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | provenance | MaD:20 | -| main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | provenance | MaD:20 | -| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:21 | -| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:21 | +| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:20 | +| main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | provenance | MaD:20 | nodes | main.rs:15:9:15:9 | s | semmle.label | s | | main.rs:15:9:15:9 | s | semmle.label | s | @@ -713,10 +710,6 @@ nodes | main.rs:428:10:428:37 | generated_summary(...) | semmle.label | generated_summary(...) | | main.rs:428:28:428:36 | source(...) | semmle.label | source(...) | | main.rs:428:28:428:36 | source(...) | semmle.label | source(...) | -| main.rs:429:10:429:45 | neutral_generated_summary(...) | semmle.label | neutral_generated_summary(...) | -| main.rs:429:10:429:45 | neutral_generated_summary(...) | semmle.label | neutral_generated_summary(...) | -| main.rs:429:36:429:44 | source(...) | semmle.label | source(...) | -| main.rs:429:36:429:44 | source(...) | semmle.label | source(...) | | main.rs:430:10:430:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | | main.rs:430:10:430:42 | neutral_manual_summary(...) | semmle.label | neutral_manual_summary(...) | | main.rs:430:33:430:41 | source(...) | semmle.label | source(...) | @@ -802,7 +795,5 @@ invalidSpecComponent | main.rs:427:5:427:23 | neutral_manual_sink | main.rs:427:25:427:33 | source(...) | main.rs:427:5:427:23 | neutral_manual_sink | $@ | main.rs:427:25:427:33 | source(...) | source(...) | | main.rs:428:10:428:37 | generated_summary(...) | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | $@ | main.rs:428:28:428:36 | source(...) | source(...) | | main.rs:428:10:428:37 | generated_summary(...) | main.rs:428:28:428:36 | source(...) | main.rs:428:10:428:37 | generated_summary(...) | $@ | main.rs:428:28:428:36 | source(...) | source(...) | -| main.rs:429:10:429:45 | neutral_generated_summary(...) | main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | $@ | main.rs:429:36:429:44 | source(...) | source(...) | -| main.rs:429:10:429:45 | neutral_generated_summary(...) | main.rs:429:36:429:44 | source(...) | main.rs:429:10:429:45 | neutral_generated_summary(...) | $@ | main.rs:429:36:429:44 | source(...) | source(...) | | main.rs:430:10:430:42 | neutral_manual_summary(...) | main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | $@ | main.rs:430:33:430:41 | source(...) | source(...) | | main.rs:430:10:430:42 | neutral_manual_summary(...) | main.rs:430:33:430:41 | source(...) | main.rs:430:10:430:42 | neutral_manual_summary(...) | $@ | main.rs:430:33:430:41 | source(...) | source(...) | From 6c171c804f5d4765ef2bf265205442eb58875f42 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 15:20:52 -0500 Subject: [PATCH 020/243] C++: Add more tests for modified years with and without leap year checks (UncheckedLeapYearAfterYearModification). Switch to using 'postprocess' for unit tests. --- ...ckedLeapYearAfterYearModification.expected | 75 +- ...checkedLeapYearAfterYearModification.qlref | 3 +- ...heckedReturnValueForTimeFunctions.expected | 11 +- .../test.cpp | 1257 +++++++++++++++-- 4 files changed, 1232 insertions(+), 114 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected index a9c1bc66c50f..8fdc1339aa1e 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected @@ -1,15 +1,60 @@ -| test.cpp:314:5:314:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:309:13:309:14 | st | st | -| test.cpp:327:5:327:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:322:13:322:14 | st | st | -| test.cpp:338:6:338:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:333:62:333:63 | st | st | -| test.cpp:484:5:484:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:480:13:480:14 | st | st | -| test.cpp:497:5:497:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:492:13:492:14 | st | st | -| test.cpp:509:5:509:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:505:13:505:14 | st | st | -| test.cpp:606:11:606:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:602:12:602:19 | timeinfo | timeinfo | -| test.cpp:634:11:634:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:628:12:628:19 | timeinfo | timeinfo | -| test.cpp:636:11:636:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:56:6:56:12 | tm_year | tm_year | test.cpp:628:12:628:19 | timeinfo | timeinfo | -| test.cpp:640:5:640:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st | -| test.cpp:642:5:642:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:629:13:629:14 | st | st | -| test.cpp:718:5:718:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:712:13:712:14 | st | st | -| test.cpp:731:5:731:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st | -| test.cpp:732:5:732:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st | -| test.cpp:733:5:733:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:725:13:725:14 | st | st | +#select +| test.cpp:422:5:422:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:417:13:417:14 | st | st | +| test.cpp:440:5:440:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:435:13:435:14 | st | st | +| test.cpp:456:6:456:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:451:62:451:63 | st | st | +| test.cpp:647:5:647:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:643:13:643:14 | st | st | +| test.cpp:665:5:665:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:661:13:661:14 | st | st | +| test.cpp:681:5:681:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:677:13:677:14 | st | st | +| test.cpp:792:11:792:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:789:12:789:19 | timeinfo | timeinfo | +| test.cpp:813:11:813:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:806:12:806:19 | timeinfo | timeinfo | +| test.cpp:818:5:818:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:807:13:807:14 | st | st | +| test.cpp:954:6:954:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:947:14:947:15 | st | st | +| test.cpp:972:6:972:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:965:14:965:15 | st | st | +| test.cpp:990:6:990:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:984:14:984:15 | st | st | +| test.cpp:1077:5:1077:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:1071:13:1071:14 | st | st | +| test.cpp:1135:9:1135:15 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:92:17:92:23 | tm_year | tm_year | test.cpp:1126:35:1126:36 | tm | tm | +| test.cpp:1137:9:1137:15 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:92:17:92:23 | tm_year | tm_year | test.cpp:1126:35:1126:36 | tm | tm | +| test.cpp:1591:11:1591:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1590:41:1590:48 | timeinfo | timeinfo | +| test.cpp:1599:11:1599:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1598:41:1598:48 | timeinfo | timeinfo | +| test.cpp:1645:11:1645:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1644:57:1644:64 | timeinfo | timeinfo | +| test.cpp:1656:11:1656:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1655:57:1655:64 | timeinfo | timeinfo | +| test.cpp:1667:11:1667:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1666:30:1666:37 | timeinfo | timeinfo | +| test.cpp:1678:11:1678:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1677:30:1677:37 | timeinfo | timeinfo | +| test.cpp:1690:11:1690:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1689:30:1689:37 | timeinfo | timeinfo | +| test.cpp:1702:11:1702:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1701:30:1701:37 | timeinfo | timeinfo | +| test.cpp:1712:11:1712:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1711:30:1711:37 | timeinfo | timeinfo | +| test.cpp:1723:11:1723:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1722:40:1722:47 | timeinfo | timeinfo | +| test.cpp:1758:11:1758:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1757:45:1757:52 | timeinfo | timeinfo | +| test.cpp:1763:11:1763:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1762:45:1762:52 | timeinfo | timeinfo | +| test.cpp:1792:11:1792:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1788:38:1788:45 | timeinfo | timeinfo | +| test.cpp:1799:11:1799:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1798:36:1798:43 | timeinfo | timeinfo | +testFailures +| test.cpp:422:5:422:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:440:5:440:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:456:6:456:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:647:5:647:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:665:5:665:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:681:5:681:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:792:11:792:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:813:11:813:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:818:5:818:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:954:6:954:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:972:6:972:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:990:6:990:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1077:5:1077:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1135:9:1135:15 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1137:9:1137:15 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1591:11:1591:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1599:11:1599:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1645:11:1645:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1656:11:1656:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1667:11:1667:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1678:11:1678:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1690:11:1690:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1702:11:1702:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1712:11:1712:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1723:11:1723:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1758:11:1758:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1763:11:1763:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1792:11:1792:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1799:11:1799:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref index 22a30d72b689..12bb5eb1e69b 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.qlref @@ -1 +1,2 @@ -Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +query: Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected index fb79592b7f2d..e893ae1fff0e 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected @@ -1,5 +1,6 @@ -| test.cpp:317:2:317:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:309:13:309:14 | st | st | -| test.cpp:330:2:330:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:322:13:322:14 | st | st | -| test.cpp:341:2:341:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:333:62:333:63 | st | st | -| test.cpp:720:2:720:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:712:13:712:14 | st | st | -| test.cpp:735:2:735:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:63:1:63:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:725:13:725:14 | st | st | +| test.cpp:425:2:425:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:417:13:417:14 | st | st | +| test.cpp:443:2:443:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:435:13:435:14 | st | st | +| test.cpp:459:2:459:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:451:62:451:63 | st | st | +| test.cpp:956:3:956:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:947:14:947:15 | st | st | +| test.cpp:974:3:974:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:965:14:965:15 | st | st | +| test.cpp:1081:2:1081:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:1071:13:1071:14 | st | st | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp index 3db9b61edd2b..4451450fb254 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp @@ -46,6 +46,8 @@ typedef struct _TIME_DYNAMIC_ZONE_INFORMATION { BOOLEAN DynamicDaylightTimeDisabled; } DYNAMIC_TIME_ZONE_INFORMATION, *PDYNAMIC_TIME_ZONE_INFORMATION; +typedef const wchar_t* LPCWSTR; + struct tm { int tm_sec; // seconds after the minute - [0, 60] including leap second @@ -59,6 +61,42 @@ struct tm int tm_isdst; // daylight savings time flag }; +struct timespec +{ + time_t tv_sec; + long tv_nsec; +}; + +/* Timestamps of log entries. */ +struct logtime { + struct tm tm; + long usec; +}; + +/* + * Data structure representing a broken-down timestamp. + * + * CAUTION: the IANA timezone library (src/timezone/) follows the POSIX + * convention that tm_mon counts from 0 and tm_year is relative to 1900. + * However, Postgres' datetime functions generally treat tm_mon as counting + * from 1 and tm_year as relative to 1 BC. Be sure to make the appropriate + * adjustments when moving from one code domain to the other. + */ +struct pg_tm +{ + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; /* see above */ + int tm_year; /* see above */ + int tm_wday; + int tm_yday; + int tm_isdst; + long int tm_gmtoff; + const char *tm_zone; +}; + BOOL SystemTimeToFileTime( const SYSTEMTIME* lpSystemTime, @@ -99,9 +137,16 @@ TzSpecificLocalTimeToSystemTimeEx( LPSYSTEMTIME lpUniversalTime ); +int _wtoi( + const wchar_t *str +); + void GetSystemTime( LPSYSTEMTIME lpSystemTime ); +void GetLocalTime( + LPSYSTEMTIME lpSystemTime +); void GetSystemTimeAsFileTime( LPFILETIME lpSystemTimeAsFileTime @@ -149,6 +194,12 @@ GetFileTime( LPFILETIME lpLastWriteTime ); +struct tm *localtime_r( const time_t *timer, struct tm *buf ); + +/** + * Negative Case + * FileTimeToSystemTime is called and the return value is checked +*/ void Correct_FileTimeToSystemTime(const FILETIME* lpFileTime) { SYSTEMTIME systemTime; @@ -162,6 +213,10 @@ void Correct_FileTimeToSystemTime(const FILETIME* lpFileTime) /// Normal usage } +/** + * Positive (Out of Scope) Bug Case + * FileTimeToSystemTime is called but no check is conducted to verify the result of the operation +*/ void AntiPattern_FileTimeToSystemTime(const FILETIME* lpFileTime) { SYSTEMTIME systemTime; @@ -170,6 +225,10 @@ void AntiPattern_FileTimeToSystemTime(const FILETIME* lpFileTime) FileTimeToSystemTime(lpFileTime, &systemTime); } +/** + * Negative Case + * SystemTimeToTzSpecificLocalTime is called and the return value is verified +*/ void Correct_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -183,6 +242,10 @@ void Correct_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lpTime /// Normal usage } +/** + * Positive (Out of Scope) Case + * AntiPattern_SystemTimeToTzSpecificLocalTime is called but the return value is not validated +*/ void AntiPattern_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -191,6 +254,10 @@ void AntiPattern_SystemTimeToTzSpecificLocalTime(const TIME_ZONE_INFORMATION *lp SystemTimeToTzSpecificLocalTime(lpTimeZoneInformation, lpUniversalTime, &localTime); } +/** + * Negative Case + * SystemTimeToTzSpecificLocalTimeEx is called and the return value is validated +*/ void Correct_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -204,6 +271,10 @@ void Correct_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFORMATI /// Normal usage } +/** + * Positive Case + * SystemTimeToTzSpecificLocalTimeEx is called but the return value is not validated +*/ void AntiPattern_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpUniversalTime) { SYSTEMTIME localTime; @@ -212,6 +283,10 @@ void AntiPattern_SystemTimeToTzSpecificLocalTimeEx(const DYNAMIC_TIME_ZONE_INFOR SystemTimeToTzSpecificLocalTimeEx(lpTimeZoneInformation, lpUniversalTime, &localTime); } +/** + * Negative Case + * Correct use of TzSpecificLocalTimeToSystemTime, function is called and the return value is validated. +*/ void Correct_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -225,6 +300,10 @@ void Correct_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lpTime /// Normal usage } +/** + * Positive (Out of Scope) Case + * TzSpecificLocalTimeToSystemTime is called however the return value is not validated +*/ void AntiPattern_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -233,6 +312,10 @@ void AntiPattern_TzSpecificLocalTimeToSystemTime(const TIME_ZONE_INFORMATION *lp TzSpecificLocalTimeToSystemTime(lpTimeZoneInformation, lpLocalTime, &universalTime); } +/** + * Negative Case + * TzSpecificLocalTimeToSystemTimeEx is called and the return value is correctly validated +*/ void Correct_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -246,6 +329,10 @@ void Correct_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFORMATI /// Normal usage } +/** + * Positive (Out of Scope) Case + * TzSpecificLocalTimeToSystemTimeEx is called however the return value is not validated +*/ void AntiPattern_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFORMATION *lpTimeZoneInformation, const SYSTEMTIME *lpLocalTime) { SYSTEMTIME universalTime; @@ -258,6 +345,10 @@ void AntiPattern_TzSpecificLocalTimeToSystemTimeEx(const DYNAMIC_TIME_ZONE_INFOR SYSTEMTIME Cases *************************************************/ +/** + * Negative Case + * SystemTimeToFileTime is called and the return value is validated in a guard +*/ void Correct_filetime_conversion_check(SYSTEMTIME& st) { FILETIME ft; @@ -273,6 +364,10 @@ void Correct_filetime_conversion_check(SYSTEMTIME& st) ////////////////////////////////////////////// +/** + * Positive (Out of Scope) Case + * SystemTimeToFileTime is called but the return value is not validated in a guard +*/ void AntiPattern_unchecked_filetime_conversion(SYSTEMTIME& st) { FILETIME ft; @@ -281,6 +376,10 @@ void AntiPattern_unchecked_filetime_conversion(SYSTEMTIME& st) SystemTimeToFileTime(&st, &ft); } +/** + * Positive (Out of Scope) Case + * SystemTimeToFileTime is called but the return value is not validated in a guard +*/ void AntiPattern_unchecked_filetime_conversion2(SYSTEMTIME* st) { FILETIME ft; @@ -292,6 +391,10 @@ void AntiPattern_unchecked_filetime_conversion2(SYSTEMTIME* st) } } +/** + * Positive (Out of Scope) + * SYSTEMTIME.wDay is incremented by one (and no guard exists) +*/ void AntiPattern_unchecked_filetime_conversion2() { SYSTEMTIME st; @@ -304,6 +407,11 @@ void AntiPattern_unchecked_filetime_conversion2() SystemTimeToFileTime(&st, &ft); } +/** + * Positive Cases + * - Anti-pattern 1: [year ±n, month, day] + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion2a() { SYSTEMTIME st; @@ -311,12 +419,17 @@ void AntiPattern_unchecked_filetime_conversion2a() GetSystemTime(&st); // BUG - UncheckedLeapYearAfterYearModification - st.wYear += 2; + st.wYear += 2; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // BUG - UncheckedReturnValueForTimeFunctions SystemTimeToFileTime(&st, &ft); } +/** + * Positive Cases + * - Anti-pattern 1: [year ±n, month, day] + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion2b() { SYSTEMTIME st; @@ -324,23 +437,33 @@ void AntiPattern_unchecked_filetime_conversion2b() GetSystemTime(&st); // BUG - UncheckedLeapYearAfterYearModification - st.wYear++; + st.wYear++; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // BUG - UncheckedReturnValueForTimeFunctions SystemTimeToFileTime(&st, &ft); } +/** + * Positive Cases + * - Anti-pattern 1: [year ±n, month, day] + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion2b(SYSTEMTIME* st) { FILETIME ft; // BUG - UncheckedLeapYearAfterYearModification - st->wYear++; + st->wYear++; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // BUG - UncheckedReturnValueForTimeFunctions SystemTimeToFileTime(st, &ft); } +/** + * Positive Cases + * - Anti-pattern 3: datetime.AddDays(±28) + * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions +*/ void AntiPattern_unchecked_filetime_conversion3() { SYSTEMTIME st; @@ -349,11 +472,12 @@ void AntiPattern_unchecked_filetime_conversion3() if (st.wMonth < 12) { + // Anti-pattern 3: datetime.AddDays(±28) st.wMonth++; } else { - // Check for leap year, but... + // No check for leap year is required here, as the month is statically set to January. st.wMonth = 1; st.wYear++; } @@ -363,6 +487,11 @@ void AntiPattern_unchecked_filetime_conversion3() } ////////////////////////////////////////////// + +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Year is incremented and if we are on Feb the 29th, set to the 28th if the new year is a common year. +*/ void CorrectPattern_check1() { SYSTEMTIME st; @@ -370,7 +499,7 @@ void CorrectPattern_check1() st.wYear++; - // Guard + // Guard against February the 29th if (st.wMonth == 2 && st.wDay == 29) { // move back a day when landing on Feb 29 in an non-leap year @@ -385,6 +514,10 @@ void CorrectPattern_check1() AntiPattern_unchecked_filetime_conversion(st); } +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer and then the leap year case is correctly guarded and handled. +*/ void CorrectPattern_check2(int yearsToAdd) { SYSTEMTIME st; @@ -400,11 +533,18 @@ void CorrectPattern_check2(int yearsToAdd) AntiPattern_unchecked_filetime_conversion(st); } +/** + * Could give rise to AntiPattern 7: IsLeapYear (Conditional Logic) +*/ bool isLeapYear(SYSTEMTIME& st) { return st.wYear % 4 == 0 && (st.wYear % 100 != 0 || st.wYear % 400 == 0); } +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer and then the leap year case is correctly guarded and handled. +*/ void CorrectPattern_check3() { SYSTEMTIME st; @@ -413,6 +553,9 @@ void CorrectPattern_check3() st.wYear++; // Guard + /** Negative Case - Anti-pattern 7: IsLeapYear + * Body of conditional statement is safe recommended code + */ if (st.wMonth == 2 && st.wDay == 29 && isLeapYear(st)) { // move back a day when landing on Feb 29 in an non-leap year @@ -423,6 +566,9 @@ void CorrectPattern_check3() AntiPattern_unchecked_filetime_conversion(st); } +/** + * Could give rise to AntiPattern 7: IsLeapYear (Conditional Logic) +*/ bool isLeapYear2(int year) { return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); @@ -433,6 +579,10 @@ bool fixDate(int day, int month, int year) return (month == 2 && day == 29 && isLeapYear2(year)); } +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer and then the leap year case is correctly guarded and handled. +*/ void CorrectPattern_check4() { SYSTEMTIME st; @@ -442,18 +592,23 @@ void CorrectPattern_check4() st.wYear++; // Guard + /** Negative Case - Anti-pattern 7: IsLeapYear + * Body of conditional statement is safe recommended code + */ if (fixDate(st.wDay, st.wMonth, st.wYear)) { // move back a day when landing on Feb 29 in an non-leap year - st.wDay = 28; // GOOD [FALSE POSITIVE] + st.wDay = 28; // GOOD [FALSE POSITIVE] Anti-pattern 7 } // Safe to use AntiPattern_unchecked_filetime_conversion(st); } - - +/** + * Negative Case - Generic + * No manipulation is conducted on struct populated from GetSystemTime. +*/ void CorrectPattern_NotManipulated_DateFromAPI_0() { SYSTEMTIME st; @@ -464,6 +619,10 @@ void CorrectPattern_NotManipulated_DateFromAPI_0() SystemTimeToFileTime(&st, &ft); } +/** + * Negative Case - Generic + * No manipulation is conducted on struct populated from GetFileTime. +*/ void CorrectPattern_NotManipulated_DateFromAPI_1(HANDLE hWatchdog) { SYSTEMTIME st; @@ -475,43 +634,56 @@ void CorrectPattern_NotManipulated_DateFromAPI_1(HANDLE hWatchdog) ///////////////////////////////////////////////////////////////// +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Year is incremented by some integer and checked through a conversion through an inter procedural function check +*/ void AntiPattern_1_year_addition() { SYSTEMTIME st; GetSystemTime(&st); - // BUG - UncheckedLeapYearAfterYearModification - st.wYear++; + // Safe, checked interprocedurally through Correct_filetime_conversion_check + st.wYear++; // Usage of potentially invalid date Correct_filetime_conversion_check(st); } + + +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer and checked through a conversion through an inter procedural function check +*/ void AntiPattern_simple_addition(int yearAddition) { SYSTEMTIME st; GetSystemTime(&st); - // BUG - UncheckedLeapYearAfterYearModification - st.wYear += yearAddition; + st.wYear += yearAddition; // Usage of potentially invalid date Correct_filetime_conversion_check(st); } +/** + * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer but a leap year is not handled *correctly*. +*/ void AntiPattern_IncorrectGuard(int yearsToAdd) { SYSTEMTIME st; GetSystemTime(&st); // BUG - UncheckedLeapYearAfterYearModification - st.wYear += yearsToAdd; + st.wYear += yearsToAdd; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // Incorrect Guard if (st.wMonth == 2 && st.wDay == 29) { - // Part of a different anti-pattern. + // Part of a different anti-pattern (AntiPattern 5). // Make sure the guard includes the proper check bool isLeapYear = st.wYear % 4 == 0; if (!isLeapYear) @@ -519,9 +691,6 @@ void AntiPattern_IncorrectGuard(int yearsToAdd) st.wDay = 28; } } - - // Potentially Unsafe to use - Correct_filetime_conversion_check(st); } /************************************************* @@ -539,6 +708,10 @@ void CorrectUsageOf_mkgmtime(struct tm& timeinfo) /// _mkgmtime succeeded } +/** + * Positive Case - General (Out of Scope) + * Must Check for return value of _mkgmtime +*/ void AntiPattern_uncheckedUsageOf_mkgmtime(struct tm& timeinfo) { // (out-of-scope) GeneralBug: Must check return value for _mkgmtime @@ -550,6 +723,10 @@ void AntiPattern_uncheckedUsageOf_mkgmtime(struct tm& timeinfo) ////////////////////////////////////////////////////////// +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer and leap year is not handled correctly. +*/ void Correct_year_addition_struct_tm() { time_t rawtime; @@ -575,7 +752,11 @@ void Correct_year_addition_struct_tm() AntiPattern_uncheckedUsageOf_mkgmtime(timeinfo); } -void Correct_LinuxPattern() +/** + * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer and leap year is not handled correctly. +*/ +void Incorrect_LinuxPattern() { time_t rawtime; struct tm timeinfo; @@ -584,7 +765,8 @@ void Correct_LinuxPattern() errno_t err = gmtime_s(&timeinfo, &rawtime); /* from 1900 -> from 1980 */ - timeinfo.tm_year -= 80; + // BUG - UncheckedLeapYearAfterYearModification + timeinfo.tm_year -= 80; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] /* 0~11 -> 1~12 */ timeinfo.tm_mon++; /* 0~59 -> 0~29(2sec counts) */ @@ -596,34 +778,30 @@ void Correct_LinuxPattern() ////////////////////////////////////////// +/** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Years is incremented by some integer and leap year is assumed checked through + * check of a conversion functions return value. +*/ void AntiPattern_year_addition_struct_tm() { time_t rawtime; struct tm timeinfo; time(&rawtime); gmtime_s(&timeinfo, &rawtime); - // BUG - UncheckedLeapYearAfterYearModification - timeinfo.tm_year++; + timeinfo.tm_year++; - // Usage of potentially invalid date + // mkgmtime result checked in nested call here, assume leap year conversion is potentially handled CorrectUsageOf_mkgmtime(timeinfo); } ///////////////////////////////////////////////////////// -void FalsePositiveTests(int x) -{ - struct tm timeinfo; - SYSTEMTIME st; - - timeinfo.tm_year = x; - timeinfo.tm_year = 1970; - - st.wYear = x; - st.wYear = 1900 + x; -} -void FalseNegativeTests(int x) +/** + * Positive Case - Anti-pattern 1: [year ±n, month, day] +*/ +void test(int x) { struct tm timeinfo; SYSTEMTIME st; @@ -631,106 +809,999 @@ void FalseNegativeTests(int x) timeinfo.tm_year = x; // BUG - UncheckedLeapYearAfterYearModification - timeinfo.tm_year = x + timeinfo.tm_year; - // BUG - UncheckedLeapYearAfterYearModification - timeinfo.tm_year = 1970 + timeinfo.tm_year; + // Positive Case - Anti-pattern 1: [year ±n, month, day] + timeinfo.tm_year = x + timeinfo.tm_year; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] st.wYear = x; // BUG - UncheckedLeapYearAfterYearModification - st.wYear = x + st.wYear; - // BUG - UncheckedLeapYearAfterYearModification - st.wYear = (1986 + st.wYear) - 1; + // Positive Case - Anti-pattern 1: [year ±n, month, day] + st.wYear = x + st.wYear; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] } -// False positive -inline void -IncrementMonth(LPSYSTEMTIME pst) +/** + * Positive AntiPattern 1 NOTE: historically considered positive but mktime checks year validity, needs re-assessment + * Year field is modified but via an intermediary variable. +*/ +bool tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) { - if (pst->wMonth < 12) + struct tm tm_parsed; + bool timestamp_found = false; + + struct tm tm_now; + time_t t_now; + int year; + + timestamp_found = true; + + /* + * As the timestamp does not contain the year + * number, daylight saving time information, nor + * a time zone, attempt to infer it. Due to + * clock skews, the timestamp may even be part + * of the next year. Use the last year for which + * the timestamp is at most one week in the + * future. + * + * This loop can only run for at most three + * iterations before terminating. + */ + t_now = now.tv_sec; + localtime_r(&t_now, &tm_now); + + timestamp_remote.tm = tm_parsed; + timestamp_remote.tm.tm_isdst = -1; + timestamp_remote.usec = now.tv_nsec * 0.001; + for (year = tm_now.tm_year + 1;; --year) { - pst->wMonth++; + // assert(year >= tm_now.tm_year - 1); + timestamp_remote.tm.tm_year = year; + if (mktime(×tamp_remote.tm) < t_now + 7 * 24 * 60 * 60) + break; } - else +} + + + // False positive + inline void + IncrementMonth(LPSYSTEMTIME pst) + { + if (pst->wMonth < 12) + { + pst->wMonth++; + } + else + { + pst->wMonth = 1; + pst->wYear++; + } + } + + ///////////////////////////////////////////////////////// + + void mkDateTest(int year) { - pst->wMonth = 1; - pst->wYear++; + struct tm t; + + t.tm_sec = 0; + t.tm_min = 0; + t.tm_hour = 0; + t.tm_mday = 1; // day of the month - [1, 31] + t.tm_mon = 0; // months since January - [0, 11] + if (year >= 1900) + { + // 4-digit year + t.tm_year = year - 1900; // GOOD + } + else if ((year >= 0) && (year < 100)) + { + // 2-digit year assumed in the range 2000 - 2099 + t.tm_year = year + 100; // GOOD [FALSE POSITIVE] + } + else + { + // fail + } + // ... } -} -///////////////////////////////////////////////////////// + /** + * Negative Case - Anti-pattern 1a: [a.year, b.month, b.day] + * False positive: No modification of SYSTEMTIME struct. + */ + void unmodified1() + { + SYSTEMTIME st; + FILETIME ft; + WORD w; -void mkDateTest(int year) -{ - struct tm t; + GetSystemTime(&st); + + w = st.wYear; + + SystemTimeToFileTime(&st, &ft); // GOOD - no modification + } + + /** + * Negative Case - Anti-pattern 1a: [a.year, b.month, b.day] + * False positive: No modification of SYSTEMTIME struct. + */ + void unmodified2() + { + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + w_ptr = &(st.wYear); + + SystemTimeToFileTime(&st, &ft); // GOOD - no modification + } - t.tm_sec = 0; - t.tm_min = 0; - t.tm_hour = 0; - t.tm_mday = 1; // day of the month - [1, 31] - t.tm_mon = 0; // months since January - [0, 11] - if (year >= 1900) + /** + * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Modification of SYSTEMTIME struct adding to year but no leap year guard is conducted. + */ + void modified3() { - // 4-digit year - t.tm_year = year - 1900; // GOOD - } else if ((year >= 0) && (year < 100)) { - // 2-digit year assumed in the range 2000 - 2099 - t.tm_year = year + 100; // GOOD [FALSE POSITIVE] - } else { - // fail + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + // BUG - UncheckedLeapYearAfterYearModification + st.wYear = st.wYear + 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + SystemTimeToFileTime(&st, &ft); + } + + /** + * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Modification of SYSTEMTIME struct adding to year but no leap year guard is conducted. + */ + void modified4() + { + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + // BUG - UncheckedLeapYearAfterYearModification + st.wYear++; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + SystemTimeToFileTime(&st, &ft); + } + + /** + * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Modification of SYSTEMTIME struct adding to year but value passed to a + * conversion function that can be checked for success, and the result is checked. + */ + void modified5() + { + SYSTEMTIME st; + FILETIME ft; + WORD *w_ptr; + + GetSystemTime(&st); + + st.wYear++; + + // Presumed safe usage, as if the conversion is incorrect, a user can handle the error. + // NOTE: it doesn't mean the user actually does the correct conversion and it it also + // doesn't mean it will error our in all cases that may be invalid. + // For example, if a leap year and the date is 28, we may want 29 if the time is meant + // to capture the end of the month, but 28 is still valid and will not error out. + if (SystemTimeToFileTime(&st, &ft)) + { + ///... + } + } + + struct tm ltime(void) + { + SYSTEMTIME st; + struct tm tm; + bool isLeapYear; + + GetLocalTime(&st); + tm.tm_sec=st.wSecond; + tm.tm_min=st.wMinute; + tm.tm_hour=st.wHour; + tm.tm_mday=st.wDay; + tm.tm_mon=st.wMonth-1; + tm.tm_year=(st.wYear>=1900?st.wYear-1900:0); + + // Check for leap year, and adjust the date accordingly + isLeapYear = tm.tm_year % 4 == 0 && (tm.tm_year % 100 != 0 || tm.tm_year % 400 == 0); + tm.tm_mday = tm.tm_mon == 2 && tm.tm_mday == 29 && !isLeapYear ? 28 : tm.tm_mday; + return tm; } - // ... + +/** +* Negative Case - Anti-pattern 1: [year ±n, month, day] +* Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. +*/ +bool +FMAPITimeToSysTimeW(LPCWSTR wszTime, SYSTEMTIME *psystime) +{ + // if (!wszTime || SafeIsBadReadPtr(wszTime, 1) || lstrlenW(wszTime) != cchMAPITime) + // return false; + // AssertTag(!SafeIsBadWritePtr(psystime, sizeof(SYSTEMTIME)), 0x0004289a /* tag_abc80 */); + // memset(psystime, 0, sizeof(SYSTEMTIME)); + + psystime->wYear = (WORD)_wtoi(wszTime); + psystime->wMonth = (WORD)_wtoi(wszTime+5); + psystime->wDay = (WORD)_wtoi(wszTime+8); + psystime->wHour = (WORD)_wtoi(wszTime+11); + psystime->wMinute = (WORD)_wtoi(wszTime+14); + return true; } -void unmodified1() +/** +* Negative Case - Anti-pattern 1: [year ±n, month, day] +* Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. +*/ +bool +ATime_HrGetSysTime(SYSTEMTIME *pst) { + // if (!FValidSysTime()) + // { + // TrapSzTag("ATime cannot be converted to SYSTEMTIME", 0x1e14f5c3 /* tag_4fpxd */); + // CORgTag(E_FAIL, 0x6c373230 /* tag_l720 */); + // } + + // pst->wYear = static_cast(m_lYear); + // pst->wMonth = static_cast(m_lMonth); + // //pst->wDayOfWeek = ???; + // pst->wDay = static_cast(m_lDay); + // pst->wHour = static_cast(m_lHour); + // pst->wMinute = static_cast(m_lMinute); + // pst->wSecond = static_cast(m_lSecond); + // pst->wMilliseconds = 0; +} + +/** +* Negative Case - Anti-pattern 1: [year ±n, month, day] +* Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. +*/ +void fp_daymonth_guard(){ SYSTEMTIME st; FILETIME ft; - WORD w; + GetSystemTime(&st); + // FALSE POSITIVE: year is incremented but month is checked and day corrected + // in a ternary operation. It may be possible to fix this with a more sophisticated + // data flow analysis. + st.wYear++; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + st.wDay = st.wMonth == 2 && st.wDay == 29 ? 28 : st.wDay; + + SystemTimeToFileTime(&st, &ft); +} + +void increment_arg(WORD &x){ + x++; // $ Source +} + +void increment_arg_by_pointer(WORD *x){ + (*x)++; // $ Source +} + +void fn_year_set_through_out_arg(){ + SYSTEMTIME st; GetSystemTime(&st); + // BAD, year incremented without check + increment_arg(st.wYear); // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // GetSystemTime(&st); + // Bad, year incremented without check + increment_arg_by_pointer(&st.wYear); // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + - w = st.wYear; +/* TODO: don't alert on simple copies from another struct where all three {year,month,day} are copied +void +GetEpochTime(struct pg_tm *tm) +{ + struct pg_tm *t0; + pg_time_t epoch = 0; + + t0 = pg_gmtime(&epoch); + + tm->tm_year = t0->tm_year; + tm->tm_mon = t0->tm_mon; + tm->tm_mday = t0->tm_mday; + tm->tm_hour = t0->tm_hour; + tm->tm_min = t0->tm_min; + tm->tm_sec = t0->tm_sec; + + tm->tm_year += 1900; + tm->tm_mon++; +} */ + +void +fp_guarded_by_month(struct pg_tm *tm){ + int woy = 52; + int MONTHS_PER_YEAR = 12; + /* + * If it is week 52/53 and the month is January, then the + * week must belong to the previous year. Also, some + * December dates belong to the next year. + */ + if (woy >= 52 && tm->tm_mon == 1) + --tm->tm_year; // Negative Test Case + if (woy <= 1 && tm->tm_mon == MONTHS_PER_YEAR) + ++tm->tm_year; // Negative Test Case +} - SystemTimeToFileTime(&st, &ft); // GOOD - no modification +typedef unsigned short CSHORT; + +typedef struct _TIME_FIELDS { + CSHORT Year; + CSHORT Month; + CSHORT Day; + CSHORT Hour; + CSHORT Minute; + CSHORT Second; + CSHORT Milliseconds; + CSHORT Weekday; +} TIME_FIELDS, *PTIME_FIELDS; + +void +tp_ptime(PTIME_FIELDS ptm){ + ptm->Year = ptm->Year - 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] } -void unmodified2() + +bool isLeapYearRaw(WORD year) { - SYSTEMTIME st; - FILETIME ft; - WORD *w_ptr; + return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} - GetSystemTime(&st); +void leap_year_checked_raw_false_positive1(WORD year, WORD offset, WORD day){ + struct tm tmp; + + year += offset; + + if (isLeapYearRaw(year)){ + // in this simplified example, assume the logic of this function + // can assume a day is 28 by default + // this check is more to establish the leap year guard is present + day += 1; + } + + // Assume the check handled leap year correctly + tmp.tm_year = year; // GOOD + tmp.tm_mday = day; +} + + +void leap_year_checked_raw_false_positive2(WORD year, WORD offset, WORD day){ + struct tm tmp; + + year += offset; + + tmp.tm_year = year; // GOOD, check performed immediately after on raw year + + // Adding some additional checks to resemble cases observed in the wild + if ( day > 0) + { + if (isLeapYearRaw(year)){ + // Assume logic that would adjust the day correctly + } + } + else{ + if (isLeapYearRaw(year)){ + // Assume logic that would adjust the day correctly + } + } + + tmp.tm_mday = day; + + year += offset; // $ Source - w_ptr = &(st.wYear); + tmp.tm_year = year; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] - SystemTimeToFileTime(&st, &ft); // GOOD - no modification } -void modified3() + +bool isNotLeapYear(struct tm tm) { - SYSTEMTIME st; + return !(tm.tm_year % 4 == 0 && (tm.tm_year % 100 != 0 || tm.tm_year % 400 == 0)); +} + +bool isNotLeapYear2(struct tm tm) +{ + return (tm.tm_year % 4 != 0 || (tm.tm_year % 100 == 0 && tm.tm_year % 400 != 0)); +} + + +void inverted_leap_year_check(WORD year, WORD offset, WORD day){ + struct tm tmp; + + tmp.tm_year = year + offset; + + if (isNotLeapYear(tmp)){ + day = 28; + } + + tmp.tm_year = year + offset; + + if(isNotLeapYear2(tmp)){ + day = 28; + } + + + tmp.tm_year = year + offset; + bool isNotLeapYear = (tmp.tm_year % 4 != 0 || (tmp.tm_year % 100 == 0 && tmp.tm_year % 400 != 0)); + + if(isNotLeapYear){ + day = 28; + } + + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + +void simplified_leap_year_check1(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // OK + + bool isLeap = (!((tmp.tm_year + 1900) % 4)) && ((tmp.tm_year + 1900) % 100 || !((tmp.tm_year + 1900) % 400)); + if(isLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void simplified_leap_year_check2(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // OK + + bool isNotLeap = ((tmp.tm_year + 1900) % 4) || (!((tmp.tm_year + 1900) % 100) && ((tmp.tm_year + 1900) % 400)); + if(isNotLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void simplified_leap_year_check3(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // OK + + bool isLeap = (!(tmp.wYear % 4)) && (tmp.wYear % 100 || !(tmp.wYear% 400)); + if(isLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void simplified_leap_year_check4(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // OK + + bool isNotLeap = (tmp.wYear % 4) || (!(tmp.wYear % 100) && (tmp.wYear % 400)); + if(isNotLeap){ + // do something + } + + // Modified after check, could be dangerous + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void bad_simplified_leap_year_check1(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // incorrect logic, should negate the %4 result + bool isLeap = ((tmp.tm_year + 1900) % 4) && ((tmp.tm_year + 1900) % 100 || !((tmp.tm_year + 1900) % 400)); + if(isLeap){ + // do something + } +} + +void bad_simplified_leap_year_check2(WORD year, WORD offset){ + struct tm tmp; + + tmp.tm_year = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + + // incorrect logic, should not negate the %4 result + bool isNotLeap = (!((tmp.tm_year + 1900) % 4)) || (!((tmp.tm_year + 1900) % 100) && ((tmp.tm_year + 1900) % 400)); + if(isNotLeap){ + // do something + } +} + +void bad_simplified_leap_year_check3(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // incorrect logic, should negate the %4 result + bool isLeap = (tmp.wYear % 4) && (tmp.wYear % 100 || !(tmp.wYear % 400)); + if(isLeap){ + // do something + } +} + +void bad_simplified_leap_year_check4(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + + // incorrect logic, should not negate the %4 result + bool isNotLeap = (!(tmp.wYear % 4)) || (!(tmp.wYear % 100) && (tmp.wYear % 400)); + if(isNotLeap){ + // do something + } +} + + +void compound_leap_year_check(WORD year, WORD offset, WORD month, WORD day){ + struct tm tmp; + + tmp.tm_year = year + offset; + + bool isLeap = tmp.tm_year % 4 == 0 && (tmp.tm_year % 100 != 0 || tmp.tm_year % 400 == 0) && (month == 2 && day == 29); + + if(isLeap){ + // do something + } + tmp.tm_mday = day; + tmp.tm_mon = month; +} + +void indirect_time_conversion_check(WORD year, WORD offset){ + SYSTEMTIME tmp; + + tmp.wYear = year + offset; + FILETIME ft; - WORD *w_ptr; - GetSystemTime(&st); + // (out-of-scope) GeneralBug: Unchecked call to SystemTimeToFileTime. this may have failed, but we didn't check the return value! + BOOL res = SystemTimeToFileTime(&tmp, &ft); - st.wYear = st.wYear + 1; // BAD + // Assume this check of the result is sufficient as an implicit leap year check. + bool x = (res == 0) ? true : false; +} - SystemTimeToFileTime(&st, &ft); +void set_time(WORD year, WORD month, WORD day){ + SYSTEMTIME tmp; + + tmp.wYear = year; //$ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + tmp.wMonth = month; + tmp.wDay = day; +} + +void constant_month_on_year_modification1(WORD year, WORD offset, WORD month){ + SYSTEMTIME tmp; + + if(month++ > 12){ + tmp.wMonth = 1; + tmp.wYear = year + 1;// OK since the year is incremented with a known non-leap year month change + } + + if(month++ > 12){ + + set_time(year+1, 1, 31);// OK since the year is incremented with a known non-leap year month change + } +} + +void constant_month_on_year_modification2(WORD year, WORD offset, WORD month){ + SYSTEMTIME tmp; + + if(month++ > 12){ + tmp.wMonth = 1; + tmp.wYear = year + 1;// OK since the year is incremented with a known non-leap year month change + } + + + if(month++ > 12){ + // some hueristics to detect a false positive here rely on variable names + // which is often consistent in the wild. + // This variant uses the variable names yeartmp and monthtmp + WORD yeartmp; + WORD monthtmp; + yeartmp = year + 1; + monthtmp = 1; + set_time(yeartmp, monthtmp, 31);// OK since the year is incremented with a known non-leap year month change + } +} + +typedef struct parent_struct { + SYSTEMTIME t; +} PARENT_STRUCT; + + + +void nested_time_struct(WORD year, WORD offset){ + PARENT_STRUCT ps; + + ps.t.wYear = year + offset; // OK, checked below + + bool isLeap = isLeapYearRaw(ps.t.wYear); + + if(isLeap){ + // do something + } +} + +void intermediate_time_struct(WORD year, WORD offset){ + SYSTEMTIME tm, tm2; + FILETIME ftTime; + + tm.wYear = year + offset; + + tm2.wYear = tm.wYear; + + + while ( !SystemTimeToFileTime( &tm2, &ftTime ) ) + { + /// handle error + } + +} + +void constant_day_on_year_modification1(WORD year, WORD offset, WORD month){ + SYSTEMTIME tmp; + + if(month++ > 12){ + tmp.wDay = 1; + tmp.wYear = year + 1;// OK since the year is incremented with a known non-leap year day + } + + if(month++ > 12){ + + set_time(year+1, month, 1);// OK since the year is incremented with a known non-leap year day + } + + if(month++ > 12){ + + // BAD, year incremented, month unknown in block, and date is set to 31 + // which is dangerous. + set_time(year+1, month, 31);// $ Source + } +} + +void constant_day_on_year_modification2(WORD year, WORD month){ + SYSTEMTIME tmp; + + // FLASE POSITIVE SOURCE: + // flowing into set_time, the set time does pass a constant day + // but the source here and the source of that constant month don't align + // Current heuristics require the source of the constant day align with the + // source and/or the sink of the year modification. + // We could potentially improve this by checking the paths of both the year and day + // flows, but this may be more complex than is warranted for now. + year = year + 1; // $ SPURIOUS: Source + + if(month++ > 12){ + tmp.wDay = 1; + tmp.wYear = year;// OK since the year is incremented with a known non-leap year day + } + + if(month++ > 12){ + + set_time(year, month, 1);// OK since the year is incremented with a known non-leap year day + } + + year = year + 1; // $ Source + + if(month++ > 12){ + + // BAD, year incremented, month unknown in block, and date is set to 31 + // which is dangerous. + set_time(year, month, 31); + } +} + + +void modification_after_conversion1(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year += 1; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +WORD get_civil_year(tm timeinfo){ + return timeinfo.tm_year + 1900; +} + +void modification_after_conversion2(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + year += 1; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void modification_after_conversion_saved_to_other_time_struct1(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year += 1; // $ MISSING: Source + + SYSTEMTIME s; + // FALSE NEGATIVE: missing this because the conversion happens locally before + // the year adjustment, which seems as though it is part of a conversion itself + s.wYear = year; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + + +void modification_after_conversion_saved_to_other_time_struct2(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + + year += 1; // $ Source + + SYSTEMTIME s; + s.wYear = year; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] } -void modified4() +void modification_after_conversion_saved_to_other_time_struct3(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year = year + 1; // $ MISSING: Source + + SYSTEMTIME s; + // FALSE NEGATIVE: missing this because the conversion happens locally before + // the year adjustment, which seems as though it is part of a conversion itself + s.wYear = year; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + + +void year_saved_to_variable_then_modified1(tm timeinfo){ + // A modified year is not directly assigned to the year, rather, the year is + // saved to a variable, modified, used, but never assigned back. + WORD year = timeinfo.tm_year; + + // NOTE: should we even try to detect cases like this? + // Our current rationale is that a year in a struct is more dangerous than a year in isolation + // A year in isolation is harder to interpret + year += 1; // MISSING: $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] +} + +void modification_before_conversion1(tm timeinfo){ + timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; +} + +void modification_before_conversion2(tm timeinfo){ + timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); +} + + + +void year_saved_to_variable_then_modified_with_leap_check1(tm timeinfo){ + // A modified year is not directly assigned to the year, rather, the year is + // saved to a variable, modified, used, but never assigned back. + WORD year = timeinfo.tm_year; + + year += 1; + + // performing a check is considered good enough, even if not used correctly + bool b = (year+1900) % 4 == 0 && ((year+1900) % 100 != 0 || (year+1900) % 400 == 0); +} + + +void modification_after_conversion_with_leap_check1(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + year += 1; + + // performing a check is considered good enough, even if not used correctly + bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +void modification_after_conversion_with_leap_check2(tm timeinfo){ + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + + year += 1; + + // performing a check is considered good enough, even if not used correctly + bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +void modification_before_conversion_with_leap_check1(tm timeinfo){ + timeinfo.tm_year += 1; + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = timeinfo.tm_year + 1900; + + // performing a check is considered good enough, even if not used correctly + bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); +} + +void modification_before_conversion_with_leap_check2(tm timeinfo){ + timeinfo.tm_year += 1; + // convert a tm year into a civil year, then modify after conversion + // This case shows a false negative where the year might be used and it is incorrectly modified, + // and never reassigned to another struct. + WORD year = get_civil_year(timeinfo); + + // performing a check is considered good enough, even if not used correctly + bool b = (year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0); +} + +void odd_leap_year_check1(tm timeinfo){ + timeinfo.tm_year += 1; + + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + if(((timeinfo.tm_year+1900) & 3) == 0 && ((timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +void odd_leap_year_check2(tm timeinfo){ + timeinfo.tm_year += 1; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + // but also check unrelated conditions on the year as an optimization to rule out irrelevant years + // for gregorian leap years + if(timeinfo.tm_mon == 2 && ((timeinfo.tm_year+1900) & 3) == 0 && ((timeinfo.tm_year+1900) <= 1582 || (timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +void odd_leap_year_check3(tm timeinfo){ + timeinfo.tm_year += 1; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + // but also check unrelated conditions on the year as an optimization to rule out irrelevant years + // for gregorian leap years + if(timeinfo.tm_mon == 2 && ((timeinfo.tm_year+1900) % 4) == 0 && ((timeinfo.tm_year+1900) <= 1582 || (timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +void odd_leap_year_check4(tm timeinfo){ + timeinfo.tm_year += 1; + WORD year = timeinfo.tm_year + 1900; + + if( (year % 4 == 0) && (year % 100 > 0 || (year % 400 == 0))) + { + // do something + } +} + +void odd_leap_year_check5(tm timeinfo){ + timeinfo.tm_year += 1; + WORD year = timeinfo.tm_year + 1900; + + if( (year % 4 > 0) || (year % 100 == 0 && (year % 400 > 0))) + { + // do something + } +} + + +void date_adjusted_through_mkgmtime(tm timeinfo){ + timeinfo.tm_year += 1; // $ SPURIOUS: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + // Using an odd sytle of checking divisible by 4 presumably as an optimization trick + // but also check unrelated conditions on the year as an optimization to rule out irrelevant years + // for gregorian leap years + if(timeinfo.tm_mon == 2 && ((timeinfo.tm_year+1900) % 4) == 0 && ((timeinfo.tm_year+1900) <= 1582 || (timeinfo.tm_year+1900) % 100 != 0 || (timeinfo.tm_year+1900) % 400 == 0)) + { + // do something + } +} + +bool data_killer(WORD *d){ + (*d) = 1; + return true; +} + +void interproc_data_killer1(tm timeinfo, WORD delta){ + WORD year = delta + 1; + + if(data_killer(&year)){ + timeinfo.tm_year = year; + } +} + + +void leap_year_check_after_normalization(tm timeinfo, WORD delta){ + WORD year = delta + 1; + + if(data_killer(&year)){ + timeinfo.tm_year = year; + } +} + + +void leap_year_check_call_on_conversion1(tm timeinfo){ + timeinfo.tm_year += 1; + isLeapYearRaw(timeinfo.tm_year + 1900); +} + +void leap_year_check_call_on_conversion2(tm timeinfo){ + timeinfo.tm_year += 1; + WORD year = get_civil_year(timeinfo); + isLeapYearRaw(year); +} + +WORD getDaysInMonth(WORD year, WORD month){ + // simplified + if(month == 2){ + return isLeapYearRaw(year) ? 29 : 28; + } + // else assume logic for every other month, + // returning 30 for simplicity + return 30; +} + +WORD get_civil_year_raw(WORD year){ + return year + 1900; +} + +void leap_year_check_call_on_conversion3(tm timeinfo, WORD year, WORD month, WORD delta){ + year += delta; + WORD days = getDaysInMonth(get_civil_year_raw(year), month); + timeinfo.tm_year = year; +} + +void assumed_maketime_conversion1(tm timeinfo) { - SYSTEMTIME st; - FILETIME ft; - WORD *w_ptr; + //the docs of mktime suggest feb29 is handled, and conversion will occur automatically + //no check required. + timeinfo.tm_year += 1; - GetSystemTime(&st); + mktime(&timeinfo); +} - st.wYear++; // BAD - st.wYear++; // BAD - st.wYear++; // BAD - SystemTimeToFileTime(&st, &ft); +void bad_leap_year_check_logic1(tm timeinfo){ + timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + + WORD year = get_civil_year(timeinfo); + + // expected logic: + //(year % 4) && ((year % 100) || !(year % 400 ))) + WORD days = (!(year % 4) && (!(year % 100) || (year % 400))) ? 366 : 365; } + From 95d4a541bcdec7096807c03c617370448a3f4c92 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 15:42:43 -0500 Subject: [PATCH 021/243] C++: Refactor leap year logic for UncheckedLeapYearAfterYearModification. Includes new logic for detecting leap year checks, new forms of leap year checks detected, and various heuristics to remove false postives. Move TimeConversionFunction into LeapYear.qll and refactored to separate conversion functions that are expected to be checked for failure from those that auto correct leap year dates if feb 29 is provided on a non-leap year. Increas the set of known TimeConversionFunctions. --- cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll | 32 + .../UncheckedLeapYearAfterYearModification.ql | 853 +++++++++++++++++- .../UncheckedReturnValueForTimeFunctions.ql | 15 - 3 files changed, 850 insertions(+), 50 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll index 2b68730fa58d..77c23d97b020 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll +++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll @@ -308,3 +308,35 @@ private module PossibleYearArithmeticOperationCheckConfig implements DataFlow::C module PossibleYearArithmeticOperationCheckFlow = TaintTracking::Global; + +/** + * This list of APIs should check for the return value to detect problems during the conversion. + */ +class TimeConversionFunction extends Function { + boolean autoLeapYearCorrecting; + + TimeConversionFunction() { + autoLeapYearCorrecting = false and + ( + this.getName() = + [ + "FileTimeToSystemTime", "SystemTimeToFileTime", "SystemTimeToTzSpecificLocalTime", + "SystemTimeToTzSpecificLocalTimeEx", "TzSpecificLocalTimeToSystemTime", + "TzSpecificLocalTimeToSystemTimeEx", "RtlLocalTimeToSystemTime", + "RtlTimeToSecondsSince1970", "_mkgmtime", "SetSystemTime", "VarUdateFromDate", "from_tm" + ] + or + // Matches all forms of GetDateFormat, e.g. GetDateFormatA/W/Ex + this.getName().matches("GetDateFormat%") + ) + or + autoLeapYearCorrecting = true and + this.getName() = + ["mktime", "_mktime32", "_mktime64", "SystemTimeToVariantTime", "VariantTimeToSystemTime"] + } + + /** + * Holds if the function is expected to auto convert a bad leap year date. + */ + predicate isAutoLeapYearCorrecting() { autoLeapYearCorrecting = true } +} diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 03570b3611cd..8be4bbfbfe41 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -1,7 +1,7 @@ /** * @name Year field changed using an arithmetic operation without checking for leap year * @description A field that represents a year is being modified by an arithmetic operation, but no proper check for leap years can be detected afterwards. - * @kind problem + * @kind path-problem * @problem.severity warning * @id cpp/leap-year/unchecked-after-arithmetic-year-modification * @precision medium @@ -11,49 +11,832 @@ import cpp import LeapYear +import semmle.code.cpp.controlflow.IRGuards +import semmle.code.cpp.ir.IR +import semmle.code.cpp.commons.DateTime -from Variable var, LeapYearFieldAccess yfa -where - exists(VariableAccess va | - yfa.getQualifier() = va and - var.getAnAccess() = va and - // The year is modified with an arithmetic operation. Avoid values that are likely false positives - yfa.isModifiedByArithmeticOperationNotForNormalization() and - // Avoid false positives - not ( - // If there is a local check for leap year after the modification - exists(LeapYearFieldAccess yfacheck | - yfacheck.getQualifier() = var.getAnAccess() and - yfacheck.isUsedInCorrectLeapYearCheck() and - yfacheck.getBasicBlock() = yfa.getBasicBlock().getASuccessor*() +/** + * Functions whose operations should never be considered a + * source or sink of a dangerous leap year operation. + * The general concept is to add conversion functions + * that convert one time type to another. Often + * other ignorable operation heuristics will filter these, + * but some cases, the simplest approach is to simply filter + * the function entirely. + * Note that flow through these functions should still be allowed + * we just cannot start or end flow from an operation to a + * year assignment in one of these functions. + */ +class IgnorableFunction extends Function { + IgnorableFunction() { + this instanceof TimeConversionFunction + or + // Helper utility in postgres with string time conversions + this.getName() = "DecodeISO8601Interval" + or + // helper utility for date conversions in qtbase + this.getName() = "adjacentDay" + or + // Windows API function that does timezone conversions + this.getName().matches("%SystemTimeToTzSpecificLocalTime%") + or + // Windows APIs that do time conversions + this.getName().matches("%localtime%\\_s%") + or + // Windows APIs that do time conversions + this.getName().matches("%SpecificLocalTimeToSystemTime%") + or + // postgres function for diffing timestamps, date for leap year + // is not applicable. + this.getName().toLowerCase().matches("%timestamp%age%") + or + // Reading byte streams often involves operations of some base, but that's + // not a real source of leap year issues. + this.getName().toLowerCase().matches("%read%bytes%") + or + // A postgres function for local time conversions + // conversion operations (from one time structure to another) are generally ignorable + this.getName() = "localsub" + or + // Indication of a calendar not applicable to + // gregorian leap year, e.g., Hijri, Persian, Hebrew + this.getName().toLowerCase().matches("%hijri%") + or + this.getFile().getBaseName().toLowerCase().matches("%hijri%") + or + this.getName().toLowerCase().matches("%persian%") + or + this.getFile().getBaseName().toLowerCase().matches("%persian%") + or + this.getName().toLowerCase().matches("%hebrew%") + or + this.getFile().getBaseName().toLowerCase().matches("%hebrew%") + or + // misc. from string/char converters heuristic + this.getName() + .toLowerCase() + .matches(["%char%to%", "%string%to%", "%from%char%", "%from%string%"]) + or + // boost's gregorian.cpp has year manipulations that are checked in complex ways. + // ignore the entire file as a source or sink. + this.getFile().getAbsolutePath().toLowerCase().matches("%boost%gregorian.cpp%") + } +} + +/** + * The set of expressions which are ignorable; either because they seem to not be part of a year mutation, + * or because they seem to be a conversion pattern of mapping date scalars. + */ +abstract class IgnorableOperation extends Expr { } + +class IgnorableExprRem extends IgnorableOperation instanceof RemExpr { } + +/** + * Anything involving an operation with 10, 100, 1000, 10000 is often a sign of conversion + * or atoi. + */ +class IgnorableExpr10MulipleComponent extends IgnorableOperation { + IgnorableExpr10MulipleComponent() { + this.(Operation).getAnOperand().getValue().toInt() in [10, 100, 1000, 10000] + or + exists(AssignOperation a | a.getRValue() = this | + a.getRValue().getValue().toInt() in [10, 100, 1000, 10000] + ) + } +} + +/** + * Anything involving a sub expression with char literal 48, ignore as a likely string conversion + * e.g., X - '0' + */ +class IgnorableExpr48Mapping extends IgnorableOperation { + IgnorableExpr48Mapping() { + this.(SubExpr).getRightOperand().getValue().toInt() = 48 + or + exists(AssignSubExpr e | e.getRValue() = this | e.getRValue().getValue().toInt() = 48) + } +} + +/** + * A binary or arithemtic operation whereby one of the components is textual or a string. + */ +class IgnorableCharLiteralArithmetic extends IgnorableOperation { + IgnorableCharLiteralArithmetic() { + this.(BinaryArithmeticOperation).getAnOperand() instanceof TextLiteral + or + this instanceof TextLiteral and + any(AssignArithmeticOperation arith).getRValue() = this + } +} + +/** + * Constants often used in date conversions (from one date data type to another) + * Numerous examples exist, like 1900 or 2000 that convert years from one + * representation to another. + * Also '0' is sometimes observed as an atoi style conversion. + */ +bindingset[c] +predicate isLikelyConversionConstant(int c) { + exists(int i | i = c.abs() | + i = + [ + 146097, // days in 400-year Gregorian cycle + 36524, // days in 100-year Gregorian subcycle + 1461, // days in 4-year cycle (incl. 1 leap) + 32044, // Fliegel–van Flandern JDN epoch shift + 1721425, // JDN of 0001‑01‑01 (Gregorian) + 1721119, // alt epoch offset + 2400000, // MJD → JDN conversion + 2400001, // alt MJD → JDN conversion + 2141, // fixed‑point month/day extraction + 65536, // observed in some conversions + 7834, // observed in some conversions + 256, // observed in some conversions + 292275056, // qdatetime.h Qt Core year range first year constant + 292278994, // qdatetime.h Qt Core year range last year constant + 1601, // Windows FILETIME epoch start year + 1970, // Unix epoch start year + 70, // Unix epoch start year short form + 1899, // Observed in uses with 1900 to address off by one scenarios + 1900, // Used when converting a 2 digit year + 2000, // Used when converting a 2 digit year + 1400, // Hijri base year, used when converting a 2 digit year + 1980, // FAT filesystem epoch start year + 227013, // constant observed for Hirji year conversion, and Hirji years are not applicable for gregorian leap year + 10631, // constant observed for Hirji year conversion, and Hirji years are not applicable for gregorian leap year + 0 + ] + ) +} + +/** + * Some constants indicate conversion that are ignorable, e.g., + * julian to gregorian conversion or conversions from linux time structs + * that start at 1900, etc. + */ +class IgnorableConstantArithmetic extends IgnorableOperation { + IgnorableConstantArithmetic() { + exists(int i | isLikelyConversionConstant(i) | + this.(Operation).getAnOperand().getValue().toInt() = i + or + exists(AssignArithmeticOperation a | this = a.getRValue() | + a.getRValue().getValue().toInt() = i ) + ) + } +} + +// If a unary minus assume it is some sort of conversion +class IgnorableUnaryMinus extends IgnorableOperation { + IgnorableUnaryMinus() { + this instanceof UnaryMinusExpr + or + this.(Operation).getAnOperand() instanceof UnaryMinusExpr + } +} + +/** + * An argument to a function is ignorable if the function that is called is an ignored function + */ +class OperationAsArgToIgnorableFunction extends IgnorableOperation { + OperationAsArgToIgnorableFunction() { + exists(Call c | + c.getAnArgument().getAChild*() = this and + c.getTarget() instanceof IgnorableFunction + ) + } +} + +/** + * Literal OP literal means the result is constant/known + * and the operation is basically ignorable (it's not a real operation but + * probably one visual simplicity what it means). + */ +class ConstantBinaryArithmeticOperation extends IgnorableOperation, BinaryArithmeticOperation { + ConstantBinaryArithmeticOperation() { + this.getLeftOperand() instanceof Literal and + this.getRightOperand() instanceof Literal + } +} + +class IgnorableBinaryBitwiseOperation extends IgnorableOperation instanceof BinaryBitwiseOperation { +} + +class IgnorableUnaryBitwiseOperation extends IgnorableOperation instanceof UnaryBitwiseOperation { } + +class IgnorableAssignmentBitwiseOperation extends IgnorableOperation instanceof AssignBitwiseOperation +{ } + +/** + * Any arithmetic operation where one of the operands is a pointer or char type, ignore it + */ +class IgnorablePointerOrCharArithmetic extends IgnorableOperation { + IgnorablePointerOrCharArithmetic() { + this instanceof BinaryArithmeticOperation and + ( + this.(BinaryArithmeticOperation).getAnOperand().getUnspecifiedType() instanceof PointerType + or + this.(BinaryArithmeticOperation).getAnOperand().getUnspecifiedType() instanceof CharType + or + // Operations on calls to functions that accept char or char* + this.(BinaryArithmeticOperation) + .getAnOperand() + .(Call) + .getAnArgument() + .getUnspecifiedType() + .stripType() instanceof CharType + or + // Operations on calls to functions named like "strlen", "wcslen", etc + // NOTE: workaround for cases where the wchar_t type is not a char, but an unsigned short + // unclear if there is a best way to filter cases like these out based on type info. + this.(BinaryArithmeticOperation).getAnOperand().(Call).getTarget().getName().matches("%len%") + ) + or + exists(AssignArithmeticOperation a | a.getRValue() = this | + a.getAnOperand().getUnspecifiedType() instanceof PointerType + or + a.getAnOperand().getUnspecifiedType() instanceof CharType + or + // Operations on calls to functions that accept char or char* + a.getAnOperand().(Call).getAnArgument().getUnspecifiedType().stripType() instanceof CharType + or + // Operations on calls to functions named like "strlen", "wcslen", etc + this.(BinaryArithmeticOperation).getAnOperand().(Call).getTarget().getName().matches("%len%") + ) + } +} + +/** + * An expression that is a candidate source for an dataflow configuration for an Operation that could flow to a Year field. + */ +predicate isOperationSourceCandidate(Expr e) { + not e instanceof IgnorableOperation and + exists(Function f | + f = e.getEnclosingFunction() and + not f instanceof IgnorableFunction + ) and + ( + e instanceof SubExpr + or + e instanceof AddExpr + or + e instanceof CrementOperation + or + e instanceof AssignSubExpr + or + e instanceof AssignAddExpr + ) +} + +/** + * A dataflow that tracks an ignorable operation (eg. bitwise op) to a operation source, so we may disqualify it. + */ +module IgnorableOperationToOperationSourceCandidateConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr() instanceof IgnorableOperation } + + predicate isSink(DataFlow::Node n) { isOperationSourceCandidate(n.asExpr()) } + + // looking for sources and sinks in the same function + DataFlow::FlowFeature getAFeature() { + result instanceof DataFlow::FeatureEqualSourceSinkCallContext + } +} + +module IgnorableOperationToOperationSourceCandidateFlow = + TaintTracking::Global; + +/** + * The set of all expressions which is a candidate expression and also does not flow from to to some ignorable expression (eg. bitwise op) + * ``` + * a = something <<< 2; + * myDate.year = a + 1; // invalid + * ... + * a = someDate.year + 1; + * myDate.year = a; // valid + * ``` + */ +class OperationSource extends Expr { + OperationSource() { + isOperationSourceCandidate(this) and + // If the candidate came from an ignorable operation, ignore the candidate + // NOTE: we cannot easily flow the candidate to an ignorable operation as that can + // be tricky in practice, e.g., a mod operation on a year would be part of a leap year check + // but a mod operation ending in a year is more indicative of something to ignore (a conversion) + not exists(IgnorableOperationToOperationSourceCandidateFlow::PathNode sink | + sink.getNode().asExpr() = this and + sink.isSink() + ) + } +} + +class YearFieldAssignmentNode extends DataFlow::Node { + YearFieldAccess access; + + YearFieldAssignmentNode() { + exists(Function f | + f = this.getEnclosingCallable().getUnderlyingCallable() and not f instanceof IgnorableFunction + ) and + ( + this.asDefinition().(Assignment).getLValue() = access + or + this.asDefinition().(CrementOperation).getOperand() = access + or + exists(Call c | c.getAnArgument() = access and this.asDefiningArgument() = access) or - // If there is a data flow from the variable that was modified to a function that seems to check for leap year - exists(VariableAccess source, ChecksForLeapYearFunctionCall fc | - source = var.getAnAccess() and - LeapYearCheckFlow::flow(DataFlow::exprNode(source), DataFlow::exprNode(fc.getAnArgument())) + exists(Call c, AddressOfExpr aoe | + c.getAnArgument() = aoe and + aoe.getOperand() = access and + this.asDefiningArgument() = aoe ) + ) + } + + YearFieldAccess getYearFieldAccess() { result = access } +} + +/** + * A DataFlow configuration for identifying flows from some non trivial access or literal + * to the Year field of a date object. + */ +module OperationToYearAssignmentConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node n) { n.asExpr() instanceof OperationSource } + + predicate isSink(DataFlow::Node n) { + n instanceof YearFieldAssignmentNode and + not isYearModifiedWithCheck(n) and + not isControlledByMonthEqualityCheckNonFebruary(n.asExpr()) + } + + predicate isBarrier(DataFlow::Node n) { + exists(ArrayExpr arr | arr.getArrayOffset() = n.asExpr()) + or + n.getType().getUnspecifiedType() instanceof PointerType + or + n.getType().getUnspecifiedType() instanceof CharType + or + // If a type resembles "string" ignore flow (likely string conversion, currently ignored) + n.getType().getUnspecifiedType().stripType().getName().toLowerCase().matches("%string%") + or + n.asExpr() instanceof IgnorableOperation + or + // Flowing into variables that indicate likely non-gregorian years are barriers + // e.g., names similar to hijri, persian, lunar, chinese, hebrew, etc. + exists(Variable v | + v.getName() + .toLowerCase() + .matches(["%hijri%", "%persian%", "%lunar%", "%chinese%", "%hebrew%"]) and + v.getAnAccess() = [n.asIndirectExpr(), n.asExpr()] + ) + or + isLeapYearCheckSink(n) + or + // this is a bit of a hack to address cases where a year is normalized and checked, but the + // normalized year is never itself assigned to the final year struct + // isLeapYear(getCivilYear(year)) + // struct.year = year + // This is assuming a user would have done this all on one line though. + // setting a variable for the conversion and passing that separately would be more difficult to track + // considering this approach good enough for current observed false positives + exists(Call c, Expr arg | + isLeapYearCheckCall(c, arg) and arg.getAChild*() = [n.asExpr(), n.asIndirectExpr()] + ) + or + // If as the flow progresses, the value holding a dangerous operation result + // is apparently being passed by address to some function, it is more than likely + // intended to be modified, and therefore, the definition is killed. + exists(Call c | c.getAnArgument().(AddressOfExpr).getAnOperand() = n.asIndirectExpr()) + } + + /** Block flow out of an operation source to get the "closest" operation to the sink */ + predicate isBarrierIn(DataFlow::Node n) { isSource(n) } + + predicate isBarrierOut(DataFlow::Node n) { isSink(n) } +} + +module OperationToYearAssignmentFlow = TaintTracking::Global; + +predicate isLeapYearCheckSink(DataFlow::Node sink) { + exists(LeapYearGuardCondition lgc | + lgc.checkedYearAccess() = [sink.asExpr(), sink.asIndirectExpr()] + ) + or + isLeapYearCheckCall(_, [sink.asExpr(), sink.asIndirectExpr()]) +} + +/** + * A flow configuration from a Year field access to some Leap year check or guard + */ +module YearAssignmentToLeapYearCheckConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { source instanceof YearFieldAssignmentNode } + + predicate isSink(DataFlow::Node sink) { isLeapYearCheckSink(sink) } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + // flow from a YearFieldAccess to the qualifier + node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() + or + // Pass through any intermediate struct + exists(Assignment a, DataFlow::PostUpdateNode pun | + a.getLValue().(YearFieldAccess).getQualifier*() = pun.getPreUpdateNode().asExpr() and + a.getRValue() = node1.asExpr() and + node2.asExpr() = a.getLValue().(YearFieldAccess).getQualifier*() + ) + or + // flow from a year access qualifier to a year field + exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) + or + // in cases of x.year = x and the x is checked, but the year x.year isn't directly + // flow from a year assignment node to an RHS if it is an assignment + exists(YearFieldAssignmentNode yfan | + node1 = yfan and + node2.asExpr() = yfan.asDefinition().(Assignment).getRValue() + ) + } + + /** + * Enforcing the check must occur in the same call context as the source, + * i.e., do not return from the source function and check in a caller. + */ + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +module YearAssignmentToLeapYearCheckFlow = + TaintTracking::Global; + +/** Does there exist a flow from the given YearFieldAccess to a Leap Year check or guard? */ +predicate isYearModifiedWithCheck(YearFieldAssignmentNode n) { + exists(YearAssignmentToLeapYearCheckFlow::PathNode src | + src.isSource() and + src.getNode() = n + ) + or + // If the time flows to a time conversion whose value/result is checked, + // assume the leap year is being handled. + exists(YearAssignmentToCheckedTimeConversionFlow::PathNode timeQualSrc | + timeQualSrc.isSource() and + timeQualSrc.getNode() = n + ) +} + +/** + * An expression which checks the value of a Month field `a->month == 1`. + */ +class MonthEqualityCheck extends EqualityOperation { + MonthEqualityCheck() { this.getAnOperand() instanceof MonthFieldAccess } + + Expr getExprCompared() { + exists(Expr e | + e = this.getAnOperand() and + not e instanceof MonthFieldAccess and + result = e + ) + } +} + +final class FinalMonthEqualityCheck = MonthEqualityCheck; + +class MonthEqualityCheckGuard extends GuardCondition, FinalMonthEqualityCheck { } + +/** + * Verifies if the expression is guarded by a check on the Month property of a date struct, that is NOT February. + */ +bindingset[e] +pragma[inline_late] +predicate isControlledByMonthEqualityCheckNonFebruary(Expr e) { + exists(MonthEqualityCheckGuard monthGuard | + monthGuard.controls(e.getBasicBlock(), true) and + not monthGuard.getExprCompared().getValueText() = "2" + ) +} + +/** + * Flow from a year field access to a time conversion function + * that auto converts feb29 in non-leap year, or through a conversion function that doesn't + * auto convert to a sanity check guard of the result for error conditions. + */ +module YearAssignmentToCheckedTimeConversionConfig implements DataFlow::StateConfigSig { + class FlowState = boolean; + + predicate isSource(DataFlow::Node source, FlowState state) { + source instanceof YearFieldAssignmentNode and + state = false + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + state = true and + ( + exists(IfStmt ifs | ifs.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()]) or - // If there is a data flow from the field that was modified to a function that seems to check for leap year - exists(VariableAccess vacheck, YearFieldAccess yfacheck, ChecksForLeapYearFunctionCall fc | - vacheck = var.getAnAccess() and - yfacheck.getQualifier() = vacheck and - LeapYearCheckFlow::flow(DataFlow::exprNode(yfacheck), DataFlow::exprNode(fc.getAnArgument())) + exists(ConditionalExpr ce | + ce.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()] + ) + or + exists(Loop l | l.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()]) + ) + or + state in [true, false] and + exists(Call c, TimeConversionFunction f | + f.isAutoLeapYearCorrecting() and + c.getTarget() = f and + c.getAnArgument().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()] + ) + } + + predicate isAdditionalFlowStep( + DataFlow::Node node1, FlowState state1, DataFlow::Node node2, FlowState state2 + ) { + state1 in [true, false] and + state2 = true and + exists(Call c | + c.getTarget() instanceof TimeConversionFunction and + c.getAnArgument().getAChild*() = [node1.asExpr(), node1.asIndirectExpr()] and + node2.asExpr() = c + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + // flow from a YearFieldAccess to the qualifier + node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() + or + node1.(YearFieldAssignmentNode).getYearFieldAccess().getQualifier() = node2.asExpr() + or + // Pass through any intermediate struct + exists(Assignment a, DataFlow::PostUpdateNode pun | + a.getLValue().(YearFieldAccess).getQualifier*() = pun.getPreUpdateNode().asExpr() and + a.getRValue() = node1.asExpr() and + node2.asExpr() = a.getLValue().(YearFieldAccess).getQualifier*() + ) + or + // flow from a year access qualifier to a year field + exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) + } + + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +module YearAssignmentToCheckedTimeConversionFlow = + DataFlow::GlobalWithState; + +/** + * Finds flow from a parameter of a function to a leap year check. + * This is necessary to handle for scenarios like this: + * + * year = DANGEROUS_OP // source + * isLeap = isLeapYear(year); + * // logic based on isLeap + * struct.year = year; // sink + * + * In this case, we may flow a dangerous op to a year assignment, failing + * to barrier the flow through a leap year check, as the leap year check + * is nested, and dataflow does not progress down into the check and out. + * Instead, the point of this flow is to detect isLeapYear's argument + * is checked for leap year, making the isLeapYear call a barrier for + * the dangerous flow if we flow through the parameter identified to + * be checked. + */ +module ParameterToLeapYearCheckConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { exists(source.asParameter()) } + + predicate isSink(DataFlow::Node sink) { + exists(LeapYearGuardCondition lgc | + lgc.checkedYearAccess() = [sink.asExpr(), sink.asIndirectExpr()] + ) + } + + predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + // flow from a YearFieldAccess to the qualifier + node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() + or + // flow from a year access qualifier to a year field + exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) + } + + /** + * Enforcing the check must occur in the same call context as the source, + * i.e., do not return from the source function and check in a caller. + */ + DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } +} + +// NOTE: I do not believe taint flow is necessary here as we should +// be flowing directyly from some parameter to a leap year check. +module ParameterToLeapYearCheckFlow = DataFlow::Global; + +predicate isLeapYearCheckCall(Call c, Expr arg) { + exists(ParameterToLeapYearCheckFlow::PathNode src, Function f, int i | + src.isSource() and + f.getParameter(i) = src.getNode().asParameter() and + c.getTarget() = f and + c.getArgument(i) = arg + ) +} + +class LeapYearGuardCondition extends GuardCondition { + Expr yearSinkDiv4; + Expr yearSinkDiv100; + Expr yearSinkDiv400; + + LeapYearGuardCondition() { + exists( + LogicalAndExpr andExpr, LogicalOrExpr orExpr, GuardCondition div4Check, + GuardCondition div100Check, GuardCondition div400Check, GuardValue gv + | + // Cannonical case: + // form: `(year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)` + // `!((year % 4 == 0) && (year % 100 != 0 || year % 400 == 0))` + // `!(year % 4) && (year % 100 || !(year % 400))` + // Also accepting `((year & 3) == 0) && (year % 100 != 0 || year % 400 == 0)` + // and `(year % 4 == 0) && (year % 100 > 0 || year % 400 == 0)` + this = andExpr and + andExpr.hasOperands(div4Check, orExpr) and + orExpr.hasOperands(div100Check, div400Check) and + ( + // year % 4 == 0 + exists(RemExpr e | + div4Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 4 and + yearSinkDiv4 = e.getLeftOperand() + ) + or + // year & 3 == 0 + exists(BitwiseAndExpr e | + div4Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 3 and + yearSinkDiv4 = e.getLeftOperand() + ) + ) and + exists(RemExpr e | + // year % 100 != 0 or year % 100 > 0 + ( + div100Check.comparesEq(e, 0, false, gv) or + div100Check.comparesLt(e, 1, false, gv) + ) and + e.getRightOperand().getValue().toInt() = 100 and + yearSinkDiv100 = e.getLeftOperand() + ) and + // year % 400 == 0 + exists(RemExpr e | + div400Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 400 and + yearSinkDiv400 = e.getLeftOperand() ) or - // If there is a successor or predecessor that sets the month = 1 - exists(MonthFieldAccess mfa, AssignExpr ae | - mfa.getQualifier() = var.getAnAccess() and - mfa.isModified() and + // Inverted logic case: + // `year % 4 != 0 || (year % 100 == 0 && year % 400 != 0)` + // or `year & 3 != 0 || (year % 100 == 0 && year % 400 != 0)` + // also accepting `year % 4 > 0 || (year % 100 == 0 && year % 400 > 0)` + this = orExpr and + orExpr.hasOperands(div4Check, andExpr) and + andExpr.hasOperands(div100Check, div400Check) and + ( + // year % 4 != 0 or year % 4 > 0 + exists(RemExpr e | + ( + div4Check.comparesEq(e, 0, false, gv) + or + div4Check.comparesLt(e, 1, false, gv) + ) and + e.getRightOperand().getValue().toInt() = 4 and + yearSinkDiv4 = e.getLeftOperand() + ) + or + // year & 3 != 0 + exists(BitwiseAndExpr e | + div4Check.comparesEq(e, 0, false, gv) and + e.getRightOperand().getValue().toInt() = 3 and + yearSinkDiv4 = e.getLeftOperand() + ) + ) and + // year % 100 == 0 + exists(RemExpr e | + div100Check.comparesEq(e, 0, true, gv) and + e.getRightOperand().getValue().toInt() = 100 and + yearSinkDiv100 = e.getLeftOperand() + ) and + // year % 400 != 0 or year % 400 > 0 + exists(RemExpr e | ( - mfa.getBasicBlock() = yfa.getBasicBlock().getASuccessor*() or - yfa.getBasicBlock() = mfa.getBasicBlock().getASuccessor+() + div400Check.comparesEq(e, 0, false, gv) + or + div400Check.comparesLt(e, 1, false, gv) ) and - ae = mfa.getEnclosingElement() and - ae.getAnOperand().getValue().toInt() = 1 + e.getRightOperand().getValue().toInt() = 400 and + yearSinkDiv400 = e.getLeftOperand() + ) + ) + } + + Expr getYearSinkDiv4() { result = yearSinkDiv4 } + + Expr getYearSinkDiv100() { result = yearSinkDiv100 } + + Expr getYearSinkDiv400() { result = yearSinkDiv400 } + + /** + * The variable access that is used in all 3 components of the leap year check + * e.g., see getYearSinkDiv4/100/400.. + * If a field access is used, the qualifier and the field access are both returned + * in checked condition. + * NOTE: if the year is not checked using the same access in all 3 components, no result is returned. + * The typical case observed is a consistent variable access is used. If not, this may indicate a bug. + * We could check more accurately with a dataflow analysis, but this is likely sufficient for now. + */ + VariableAccess checkedYearAccess() { + exists(Variable var | + ( + this.getYearSinkDiv4().getAChild*() = var.getAnAccess() and + this.getYearSinkDiv100().getAChild*() = var.getAnAccess() and + this.getYearSinkDiv400().getAChild*() = var.getAnAccess() and + result = var.getAnAccess() and + ( + result = this.getYearSinkDiv4().getAChild*() or + result = this.getYearSinkDiv100().getAChild*() or + result = this.getYearSinkDiv400().getAChild*() + ) ) ) + } +} + +/** + * A difficult case to detect is if a year modification is tied to a month or day modification + * and the month or day is safe for leap year. + * e.g., + * year++; + * month = 1; + * // alternative: day = 15; + * ... values eventually used in the same time struct + * If this is even more challenging if the struct the values end up in are not + * local (set inter-procedurally). + * This flow flows constants 1-31 to a month or day assignment. + * It is assumed a user of this flow will check if the month/day source and month/day sink + * are in the same basic blocks as a year modification source and a year modification sink. + * It is also assumed a user will check if the constant source is a value that is ignorable + * e.g., if it is 2 and the sink is a month assignment, then it isn't ignorable or + * if the value is < 27 and is a day assignment, it is likely ignorable + * + * Obviously this does not handle all conditions (e.g., the month set in another block). + * It is meant to capture the most common cases of false positives. + */ +module CandidateConstantToDayOrMonthAssignmentConfig implements DataFlow::ConfigSig { + predicate isSource(DataFlow::Node source) { + source.asExpr().getValue().toInt() in [1 .. 31] and + ( + exists(Assignment a | a.getRValue() = source.asExpr()) + or + exists(Call c | c.getAnArgument() = source.asExpr()) + ) + } + + predicate isSink(DataFlow::Node sink) { + exists(Assignment a | + (a.getLValue() instanceof MonthFieldAccess or a.getLValue() instanceof DayFieldAccess) and + a.getRValue() = sink.asExpr() + ) + } +} + +// NOTE: only data flow here (no taint tracking) as we want the exact +// constant flowing to the month assignment +module CandidateConstantToDayOrMonthAssignmentFlow = + DataFlow::Global; + +/** + * The value that the assignment resolves to doesn't represent February, + * and/or if it represents a day, is a 'safe' day (meaning the 27th or prior). + */ +bindingset[dayOrMonthValSrcExpr] +predicate isSafeValueForAssignmentOfMonthOrDayValue(Assignment a, Expr dayOrMonthValSrcExpr) { + a.getLValue() instanceof MonthFieldAccess and + dayOrMonthValSrcExpr.getValue().toInt() != 2 + or + a.getLValue() instanceof DayFieldAccess and + dayOrMonthValSrcExpr.getValue().toInt() <= 27 +} + +import OperationToYearAssignmentFlow::PathGraph + +from OperationToYearAssignmentFlow::PathNode src, OperationToYearAssignmentFlow::PathNode sink +where + OperationToYearAssignmentFlow::flowPath(src, sink) and + // Check if a month is set in the same block as the year operation source + // and the month value would indicate its set to any other month than february. + // Finds if the source year node is in the same block as a source month block + // and if the same for the sinks. + not exists(DataFlow::Node dayOrMonthValSrc, DataFlow::Node dayOrMonthValSink, Assignment a | + CandidateConstantToDayOrMonthAssignmentFlow::flow(dayOrMonthValSrc, dayOrMonthValSink) and + a.getRValue() = dayOrMonthValSink.asExpr() and + dayOrMonthValSink.getBasicBlock() = sink.getNode().getBasicBlock() and + exists(IRBlock dayOrMonthValBB | + dayOrMonthValBB = dayOrMonthValSrc.getBasicBlock() and + // The source of the day is set in the same block as the source for the year + // or the source for the day is set in the same block as the sink for the year + dayOrMonthValBB in [ + src.getNode().getBasicBlock(), + sink.getNode().getBasicBlock() + ] + ) and + isSafeValueForAssignmentOfMonthOrDayValue(a, dayOrMonthValSrc.asExpr()) ) -select yfa, - "Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found.", - yfa.getTarget(), yfa.getTarget().toString(), var, var.toString() +select sink, src, sink, + "Year field has been modified, but no appropriate check for LeapYear was found." diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql index af02a2814a20..639eaf54e845 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql @@ -44,21 +44,6 @@ class SafeTimeGatheringFunction extends Function { } } -/** - * This list of APIs should check for the return value to detect problems during the conversion. - */ -class TimeConversionFunction extends Function { - TimeConversionFunction() { - this.getQualifiedName() = - [ - "FileTimeToSystemTime", "SystemTimeToFileTime", "SystemTimeToTzSpecificLocalTime", - "SystemTimeToTzSpecificLocalTimeEx", "TzSpecificLocalTimeToSystemTime", - "TzSpecificLocalTimeToSystemTimeEx", "RtlLocalTimeToSystemTime", - "RtlTimeToSecondsSince1970", "_mkgmtime" - ] - } -} - from FunctionCall fcall, TimeConversionFunction trf, Variable var where fcall = trf.getACallToThisFunction() and From d9feadcfec50bfceee158734df79da6d408f66eb Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 15:45:07 -0500 Subject: [PATCH 022/243] C++. Accept test changes. One false positive introduced, and one false negative remains. --- ...ckedLeapYearAfterYearModification.expected | 199 +++++++++++++----- ...heckedReturnValueForTimeFunctions.expected | 1 + 2 files changed, 142 insertions(+), 58 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected index 8fdc1339aa1e..64b21f1f9e42 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected @@ -1,60 +1,143 @@ #select -| test.cpp:422:5:422:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:417:13:417:14 | st | st | -| test.cpp:440:5:440:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:435:13:435:14 | st | st | -| test.cpp:456:6:456:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:451:62:451:63 | st | st | -| test.cpp:647:5:647:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:643:13:643:14 | st | st | -| test.cpp:665:5:665:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:661:13:661:14 | st | st | -| test.cpp:681:5:681:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:677:13:677:14 | st | st | -| test.cpp:792:11:792:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:789:12:789:19 | timeinfo | timeinfo | -| test.cpp:813:11:813:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:806:12:806:19 | timeinfo | timeinfo | -| test.cpp:818:5:818:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:807:13:807:14 | st | st | -| test.cpp:954:6:954:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:947:14:947:15 | st | st | -| test.cpp:972:6:972:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:965:14:965:15 | st | st | -| test.cpp:990:6:990:10 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:984:14:984:15 | st | st | -| test.cpp:1077:5:1077:9 | wYear | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:12:7:12:11 | wYear | wYear | test.cpp:1071:13:1071:14 | st | st | -| test.cpp:1135:9:1135:15 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:92:17:92:23 | tm_year | tm_year | test.cpp:1126:35:1126:36 | tm | tm | -| test.cpp:1137:9:1137:15 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:92:17:92:23 | tm_year | tm_year | test.cpp:1126:35:1126:36 | tm | tm | -| test.cpp:1591:11:1591:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1590:41:1590:48 | timeinfo | timeinfo | -| test.cpp:1599:11:1599:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1598:41:1598:48 | timeinfo | timeinfo | -| test.cpp:1645:11:1645:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1644:57:1644:64 | timeinfo | timeinfo | -| test.cpp:1656:11:1656:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1655:57:1655:64 | timeinfo | timeinfo | -| test.cpp:1667:11:1667:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1666:30:1666:37 | timeinfo | timeinfo | -| test.cpp:1678:11:1678:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1677:30:1677:37 | timeinfo | timeinfo | -| test.cpp:1690:11:1690:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1689:30:1689:37 | timeinfo | timeinfo | -| test.cpp:1702:11:1702:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1701:30:1701:37 | timeinfo | timeinfo | -| test.cpp:1712:11:1712:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1711:30:1711:37 | timeinfo | timeinfo | -| test.cpp:1723:11:1723:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1722:40:1722:47 | timeinfo | timeinfo | -| test.cpp:1758:11:1758:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1757:45:1757:52 | timeinfo | timeinfo | -| test.cpp:1763:11:1763:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1762:45:1762:52 | timeinfo | timeinfo | -| test.cpp:1792:11:1792:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1788:38:1788:45 | timeinfo | timeinfo | -| test.cpp:1799:11:1799:17 | tm_year | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | test.cpp:58:6:58:12 | tm_year | tm_year | test.cpp:1798:36:1798:43 | timeinfo | timeinfo | +| test.cpp:422:2:422:14 | ... += ... | test.cpp:422:2:422:14 | ... += ... | test.cpp:422:2:422:14 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:440:2:440:11 | ... ++ | test.cpp:440:2:440:11 | ... ++ | test.cpp:440:2:440:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:456:2:456:12 | ... ++ | test.cpp:456:2:456:12 | ... ++ | test.cpp:456:2:456:12 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:681:2:681:23 | ... += ... | test.cpp:681:2:681:23 | ... += ... | test.cpp:681:2:681:23 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:769:2:769:23 | ... -= ... | test.cpp:769:2:769:23 | ... -= ... | test.cpp:769:2:769:23 | ... -= ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:813:2:813:40 | ... = ... | test.cpp:813:21:813:40 | ... + ... | test.cpp:813:2:813:40 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:818:2:818:24 | ... = ... | test.cpp:818:13:818:24 | ... + ... | test.cpp:818:2:818:24 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:954:3:954:25 | ... = ... | test.cpp:954:14:954:25 | ... + ... | test.cpp:954:3:954:25 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:972:3:972:12 | ... ++ | test.cpp:972:3:972:12 | ... ++ | test.cpp:972:3:972:12 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1077:2:1077:11 | ... ++ | test.cpp:1077:2:1077:11 | ... ++ | test.cpp:1077:2:1077:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1097:16:1097:23 | increment_arg output argument | test.cpp:1085:2:1085:4 | ... ++ | test.cpp:1097:16:1097:23 | increment_arg output argument | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | test.cpp:1089:2:1089:7 | ... ++ | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1206:2:1206:19 | ... = ... | test.cpp:1204:2:1204:15 | ... += ... | test.cpp:1206:2:1206:19 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1245:2:1245:28 | ... = ... | test.cpp:1245:16:1245:28 | ... + ... | test.cpp:1245:2:1245:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1260:2:1260:28 | ... = ... | test.cpp:1260:16:1260:28 | ... + ... | test.cpp:1260:2:1260:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1274:2:1274:28 | ... = ... | test.cpp:1274:16:1274:28 | ... + ... | test.cpp:1274:2:1274:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1288:2:1288:26 | ... = ... | test.cpp:1288:14:1288:26 | ... + ... | test.cpp:1288:2:1288:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1302:2:1302:26 | ... = ... | test.cpp:1302:14:1302:26 | ... + ... | test.cpp:1302:2:1302:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1308:2:1308:28 | ... = ... | test.cpp:1308:16:1308:28 | ... + ... | test.cpp:1308:2:1308:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1320:2:1320:28 | ... = ... | test.cpp:1320:16:1320:28 | ... + ... | test.cpp:1320:2:1320:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1333:2:1333:26 | ... = ... | test.cpp:1333:14:1333:26 | ... + ... | test.cpp:1333:2:1333:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1345:2:1345:26 | ... = ... | test.cpp:1345:14:1345:26 | ... + ... | test.cpp:1345:2:1345:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1387:2:1387:17 | ... = ... | test.cpp:1478:12:1478:17 | ... + ... | test.cpp:1387:2:1387:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1387:2:1387:17 | ... = ... | test.cpp:1492:9:1492:16 | ... + ... | test.cpp:1387:2:1387:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1387:2:1387:17 | ... = ... | test.cpp:1504:9:1504:16 | ... + ... | test.cpp:1387:2:1387:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1561:2:1561:15 | ... = ... | test.cpp:1558:2:1558:10 | ... += ... | test.cpp:1561:2:1561:15 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1591:2:1591:22 | ... += ... | test.cpp:1591:2:1591:22 | ... += ... | test.cpp:1591:2:1591:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1599:2:1599:22 | ... += ... | test.cpp:1599:2:1599:22 | ... += ... | test.cpp:1599:2:1599:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1678:2:1678:22 | ... += ... | test.cpp:1678:2:1678:22 | ... += ... | test.cpp:1678:2:1678:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1690:2:1690:22 | ... += ... | test.cpp:1690:2:1690:22 | ... += ... | test.cpp:1690:2:1690:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1723:2:1723:22 | ... += ... | test.cpp:1723:2:1723:22 | ... += ... | test.cpp:1723:2:1723:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1799:2:1799:22 | ... += ... | test.cpp:1799:2:1799:22 | ... += ... | test.cpp:1799:2:1799:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +edges +| test.cpp:813:21:813:40 | ... + ... | test.cpp:813:2:813:40 | ... = ... | provenance | | +| test.cpp:818:13:818:24 | ... + ... | test.cpp:818:2:818:24 | ... = ... | provenance | | +| test.cpp:954:14:954:25 | ... + ... | test.cpp:954:3:954:25 | ... = ... | provenance | | +| test.cpp:1084:26:1084:26 | *x | test.cpp:1097:16:1097:23 | increment_arg output argument | provenance | | +| test.cpp:1085:2:1085:4 | ... ++ | test.cpp:1084:26:1084:26 | *x | provenance | | +| test.cpp:1088:37:1088:37 | *x | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | provenance | | +| test.cpp:1089:2:1089:7 | ... ++ | test.cpp:1088:37:1088:37 | *x | provenance | | +| test.cpp:1204:2:1204:15 | ... += ... | test.cpp:1206:2:1206:19 | ... = ... | provenance | | +| test.cpp:1245:16:1245:28 | ... + ... | test.cpp:1245:2:1245:28 | ... = ... | provenance | | +| test.cpp:1260:16:1260:28 | ... + ... | test.cpp:1260:2:1260:28 | ... = ... | provenance | | +| test.cpp:1274:16:1274:28 | ... + ... | test.cpp:1274:2:1274:28 | ... = ... | provenance | | +| test.cpp:1288:14:1288:26 | ... + ... | test.cpp:1288:2:1288:26 | ... = ... | provenance | | +| test.cpp:1302:14:1302:26 | ... + ... | test.cpp:1302:2:1302:26 | ... = ... | provenance | | +| test.cpp:1308:16:1308:28 | ... + ... | test.cpp:1308:2:1308:28 | ... = ... | provenance | | +| test.cpp:1320:16:1320:28 | ... + ... | test.cpp:1320:2:1320:28 | ... = ... | provenance | | +| test.cpp:1333:14:1333:26 | ... + ... | test.cpp:1333:2:1333:26 | ... = ... | provenance | | +| test.cpp:1345:14:1345:26 | ... + ... | test.cpp:1345:2:1345:26 | ... = ... | provenance | | +| test.cpp:1384:20:1384:23 | year | test.cpp:1387:2:1387:17 | ... = ... | provenance | | +| test.cpp:1397:15:1397:22 | ... + ... | test.cpp:1397:3:1397:22 | ... = ... | provenance | | +| test.cpp:1402:12:1402:17 | ... + ... | test.cpp:1384:20:1384:23 | year | provenance | | +| test.cpp:1411:15:1411:22 | ... + ... | test.cpp:1411:3:1411:22 | ... = ... | provenance | | +| test.cpp:1421:3:1421:20 | ... = ... | test.cpp:1423:12:1423:18 | yeartmp | provenance | | +| test.cpp:1421:13:1421:20 | ... + ... | test.cpp:1421:3:1421:20 | ... = ... | provenance | | +| test.cpp:1423:12:1423:18 | yeartmp | test.cpp:1384:20:1384:23 | year | provenance | | +| test.cpp:1466:15:1466:22 | ... + ... | test.cpp:1466:3:1466:22 | ... = ... | provenance | | +| test.cpp:1471:12:1471:17 | ... + ... | test.cpp:1384:20:1384:23 | year | provenance | | +| test.cpp:1478:12:1478:17 | ... + ... | test.cpp:1384:20:1384:23 | year | provenance | | +| test.cpp:1492:2:1492:16 | ... = ... | test.cpp:1496:3:1496:18 | ... = ... | provenance | | +| test.cpp:1492:2:1492:16 | ... = ... | test.cpp:1501:12:1501:15 | year | provenance | | +| test.cpp:1492:9:1492:16 | ... + ... | test.cpp:1492:2:1492:16 | ... = ... | provenance | | +| test.cpp:1501:12:1501:15 | year | test.cpp:1384:20:1384:23 | year | provenance | | +| test.cpp:1504:2:1504:16 | ... = ... | test.cpp:1510:12:1510:15 | year | provenance | | +| test.cpp:1504:9:1504:16 | ... + ... | test.cpp:1504:2:1504:16 | ... = ... | provenance | | +| test.cpp:1510:12:1510:15 | year | test.cpp:1384:20:1384:23 | year | provenance | | +| test.cpp:1558:2:1558:10 | ... += ... | test.cpp:1561:2:1561:15 | ... = ... | provenance | | +nodes +| test.cpp:422:2:422:14 | ... += ... | semmle.label | ... += ... | +| test.cpp:440:2:440:11 | ... ++ | semmle.label | ... ++ | +| test.cpp:456:2:456:12 | ... ++ | semmle.label | ... ++ | +| test.cpp:482:3:482:12 | ... ++ | semmle.label | ... ++ | +| test.cpp:681:2:681:23 | ... += ... | semmle.label | ... += ... | +| test.cpp:769:2:769:23 | ... -= ... | semmle.label | ... -= ... | +| test.cpp:813:2:813:40 | ... = ... | semmle.label | ... = ... | +| test.cpp:813:21:813:40 | ... + ... | semmle.label | ... + ... | +| test.cpp:818:2:818:24 | ... = ... | semmle.label | ... = ... | +| test.cpp:818:13:818:24 | ... + ... | semmle.label | ... + ... | +| test.cpp:875:4:875:15 | ... ++ | semmle.label | ... ++ | +| test.cpp:954:3:954:25 | ... = ... | semmle.label | ... = ... | +| test.cpp:954:14:954:25 | ... + ... | semmle.label | ... + ... | +| test.cpp:972:3:972:12 | ... ++ | semmle.label | ... ++ | +| test.cpp:1077:2:1077:11 | ... ++ | semmle.label | ... ++ | +| test.cpp:1084:26:1084:26 | *x | semmle.label | *x | +| test.cpp:1085:2:1085:4 | ... ++ | semmle.label | ... ++ | +| test.cpp:1088:37:1088:37 | *x | semmle.label | *x | +| test.cpp:1089:2:1089:7 | ... ++ | semmle.label | ... ++ | +| test.cpp:1097:16:1097:23 | increment_arg output argument | semmle.label | increment_arg output argument | +| test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | semmle.label | increment_arg_by_pointer output argument | +| test.cpp:1204:2:1204:15 | ... += ... | semmle.label | ... += ... | +| test.cpp:1206:2:1206:19 | ... = ... | semmle.label | ... = ... | +| test.cpp:1245:2:1245:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1245:16:1245:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1260:2:1260:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1260:16:1260:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1274:2:1274:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1274:16:1274:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1288:2:1288:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1288:14:1288:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1302:2:1302:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1302:14:1302:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1308:2:1308:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1308:16:1308:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1320:2:1320:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1320:16:1320:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1333:2:1333:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1333:14:1333:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1345:2:1345:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1345:14:1345:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1384:20:1384:23 | year | semmle.label | year | +| test.cpp:1387:2:1387:17 | ... = ... | semmle.label | ... = ... | +| test.cpp:1397:3:1397:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1397:15:1397:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1402:12:1402:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1411:3:1411:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1411:15:1411:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1421:3:1421:20 | ... = ... | semmle.label | ... = ... | +| test.cpp:1421:13:1421:20 | ... + ... | semmle.label | ... + ... | +| test.cpp:1423:12:1423:18 | yeartmp | semmle.label | yeartmp | +| test.cpp:1466:3:1466:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1466:15:1466:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1471:12:1471:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1478:12:1478:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1492:2:1492:16 | ... = ... | semmle.label | ... = ... | +| test.cpp:1492:9:1492:16 | ... + ... | semmle.label | ... + ... | +| test.cpp:1496:3:1496:18 | ... = ... | semmle.label | ... = ... | +| test.cpp:1501:12:1501:15 | year | semmle.label | year | +| test.cpp:1504:2:1504:16 | ... = ... | semmle.label | ... = ... | +| test.cpp:1504:9:1504:16 | ... + ... | semmle.label | ... + ... | +| test.cpp:1510:12:1510:15 | year | semmle.label | year | +| test.cpp:1558:2:1558:10 | ... += ... | semmle.label | ... += ... | +| test.cpp:1561:2:1561:15 | ... = ... | semmle.label | ... = ... | +| test.cpp:1591:2:1591:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1599:2:1599:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1678:2:1678:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1690:2:1690:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1723:2:1723:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1799:2:1799:22 | ... += ... | semmle.label | ... += ... | +subpaths testFailures -| test.cpp:422:5:422:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:440:5:440:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:456:6:456:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:647:5:647:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:665:5:665:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:681:5:681:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:792:11:792:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:813:11:813:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:818:5:818:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:954:6:954:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:972:6:972:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:990:6:990:10 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1077:5:1077:9 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1135:9:1135:15 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1137:9:1137:15 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1591:11:1591:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1599:11:1599:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1645:11:1645:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1656:11:1656:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1667:11:1667:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1678:11:1678:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1690:11:1690:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1702:11:1702:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1712:11:1712:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1723:11:1723:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1758:11:1758:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1763:11:1763:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1792:11:1792:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | -| test.cpp:1799:11:1799:17 | Field $@ on variable $@ has been modified, but no appropriate check for LeapYear was found. | Unexpected result: Alert | +| test.cpp:1155:29:1155:98 | // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] | Missing result: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected index e893ae1fff0e..f572f386be2b 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected @@ -4,3 +4,4 @@ | test.cpp:956:3:956:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:947:14:947:15 | st | st | | test.cpp:974:3:974:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:965:14:965:15 | st | st | | test.cpp:1081:2:1081:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:1071:13:1071:14 | st | st | +| test.cpp:1794:2:1794:7 | call to mktime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:166:12:166:17 | mktime | mktime | test.cpp:1788:38:1788:45 | timeinfo | timeinfo | From ca18179bd2d36f9cf3ad28b70a845bfada96dbed Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 16:07:07 -0500 Subject: [PATCH 023/243] C++: Correct false positive. Only TimeConversionFunction that do not auto correct for leap year should be considered. --- .../Leap Year/UncheckedReturnValueForTimeFunctions.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql index 639eaf54e845..8e2d6e9d10fe 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedReturnValueForTimeFunctions.ql @@ -46,6 +46,7 @@ class SafeTimeGatheringFunction extends Function { from FunctionCall fcall, TimeConversionFunction trf, Variable var where + not trf.isAutoLeapYearCorrecting() and fcall = trf.getACallToThisFunction() and fcall instanceof ExprInVoidContext and var.getUnderlyingType() instanceof UnpackedTimeType and From a534d26449e28c11ed671abb3cb3a2b1c3de4742 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 16:07:44 -0500 Subject: [PATCH 024/243] C++: Accept test changes. --- .../UncheckedReturnValueForTimeFunctions.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected index f572f386be2b..e893ae1fff0e 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected @@ -4,4 +4,3 @@ | test.cpp:956:3:956:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:947:14:947:15 | st | st | | test.cpp:974:3:974:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:965:14:965:15 | st | st | | test.cpp:1081:2:1081:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:1071:13:1071:14 | st | st | -| test.cpp:1794:2:1794:7 | call to mktime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:166:12:166:17 | mktime | mktime | test.cpp:1788:38:1788:45 | timeinfo | timeinfo | From 2b806ad6fdebb124c9f653b958917503fdcfe094 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 16:10:04 -0500 Subject: [PATCH 025/243] C++: Add missing DateTime models for PTIME_FIELDS and TIME_FIELDS --- .../lib/semmle/code/cpp/commons/DateTime.qll | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll b/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll index c67bf7cf96e3..a40221610763 100644 --- a/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll +++ b/cpp/ql/lib/semmle/code/cpp/commons/DateTime.qll @@ -14,7 +14,9 @@ class PackedTimeType extends Type { } } -private predicate timeType(string typeName) { typeName = ["_SYSTEMTIME", "SYSTEMTIME", "tm"] } +private predicate timeType(string typeName) { + typeName = ["_SYSTEMTIME", "SYSTEMTIME", "tm", "TIME_FIELDS", "_TIME_FIELDS", "PTIME_FIELDS"] +} /** * A type that is used to represent times and dates in an 'unpacked' form, that is, @@ -95,3 +97,24 @@ class StructTmMonthFieldAccess extends MonthFieldAccess { class StructTmYearFieldAccess extends YearFieldAccess { StructTmYearFieldAccess() { this.getTarget().getName() = "tm_year" } } + +/** + * A `DayFieldAccess` for the `TIME_FIELDS` struct. + */ +class TimeFieldsDayFieldAccess extends DayFieldAccess { + TimeFieldsDayFieldAccess() { this.getTarget().getName() = "Day" } +} + +/** + * A `MonthFieldAccess` for the `TIME_FIELDS` struct. + */ +class TimeFieldsMonthFieldAccess extends MonthFieldAccess { + TimeFieldsMonthFieldAccess() { this.getTarget().getName() = "Month" } +} + +/** + * A `YearFieldAccess` for the `TIME_FIELDS` struct. + */ +class TimeFieldsYearFieldAccess extends YearFieldAccess { + TimeFieldsYearFieldAccess() { this.getTarget().getName() = "Year" } +} From 36cc20989c22d646382d84926c7c0e65056243ef Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 16:11:51 -0500 Subject: [PATCH 026/243] C++: Accept test changes (removing false negative) --- .../UncheckedLeapYearAfterYearModification.expected | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected index 64b21f1f9e42..35a635ba903e 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected @@ -11,6 +11,7 @@ | test.cpp:1077:2:1077:11 | ... ++ | test.cpp:1077:2:1077:11 | ... ++ | test.cpp:1077:2:1077:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:1097:16:1097:23 | increment_arg output argument | test.cpp:1085:2:1085:4 | ... ++ | test.cpp:1097:16:1097:23 | increment_arg output argument | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | test.cpp:1089:2:1089:7 | ... ++ | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1155:2:1155:26 | ... = ... | test.cpp:1155:14:1155:26 | ... - ... | test.cpp:1155:2:1155:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:1206:2:1206:19 | ... = ... | test.cpp:1204:2:1204:15 | ... += ... | test.cpp:1206:2:1206:19 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:1245:2:1245:28 | ... = ... | test.cpp:1245:16:1245:28 | ... + ... | test.cpp:1245:2:1245:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:1260:2:1260:28 | ... = ... | test.cpp:1260:16:1260:28 | ... + ... | test.cpp:1260:2:1260:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | @@ -39,6 +40,7 @@ edges | test.cpp:1085:2:1085:4 | ... ++ | test.cpp:1084:26:1084:26 | *x | provenance | | | test.cpp:1088:37:1088:37 | *x | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | provenance | | | test.cpp:1089:2:1089:7 | ... ++ | test.cpp:1088:37:1088:37 | *x | provenance | | +| test.cpp:1155:14:1155:26 | ... - ... | test.cpp:1155:2:1155:26 | ... = ... | provenance | | | test.cpp:1204:2:1204:15 | ... += ... | test.cpp:1206:2:1206:19 | ... = ... | provenance | | | test.cpp:1245:16:1245:28 | ... + ... | test.cpp:1245:2:1245:28 | ... = ... | provenance | | | test.cpp:1260:16:1260:28 | ... + ... | test.cpp:1260:2:1260:28 | ... = ... | provenance | | @@ -89,6 +91,8 @@ nodes | test.cpp:1089:2:1089:7 | ... ++ | semmle.label | ... ++ | | test.cpp:1097:16:1097:23 | increment_arg output argument | semmle.label | increment_arg output argument | | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | semmle.label | increment_arg_by_pointer output argument | +| test.cpp:1155:2:1155:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1155:14:1155:26 | ... - ... | semmle.label | ... - ... | | test.cpp:1204:2:1204:15 | ... += ... | semmle.label | ... += ... | | test.cpp:1206:2:1206:19 | ... = ... | semmle.label | ... = ... | | test.cpp:1245:2:1245:28 | ... = ... | semmle.label | ... = ... | @@ -139,5 +143,3 @@ nodes | test.cpp:1723:2:1723:22 | ... += ... | semmle.label | ... += ... | | test.cpp:1799:2:1799:22 | ... += ... | semmle.label | ... += ... | subpaths -testFailures -| test.cpp:1155:29:1155:98 | // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] | Missing result: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] | From 1796bc0abbb43ca8f45e2da7109c4bccf6b48cfa Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Fri, 6 Feb 2026 16:19:11 -0500 Subject: [PATCH 027/243] C++: Add change note. --- .../2026-02-06-UncheckedLeapYearAfterModification_Refactor | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor diff --git a/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor b/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor new file mode 100644 index 000000000000..3d0f71c5a65f --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Refactor of UncheckedLeapYearAfterYearModification.ql to address large numbers of false positives. Reduced alerts from 40k to 2k. \ No newline at end of file From 8e36316ebfb898b23d5059173b6fd40e85d8b808 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Mon, 9 Feb 2026 10:42:34 -0500 Subject: [PATCH 028/243] C++: Addressing Copilot PR suggestions. --- .../UncheckedLeapYearAfterYearModification.ql | 35 ++- ...ckedLeapYearAfterYearModification.expected | 236 +++++++++--------- ...heckedReturnValueForTimeFunctions.expected | 6 +- .../test.cpp | 50 +--- 4 files changed, 140 insertions(+), 187 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 8be4bbfbfe41..3fd830acd972 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -12,8 +12,6 @@ import cpp import LeapYear import semmle.code.cpp.controlflow.IRGuards -import semmle.code.cpp.ir.IR -import semmle.code.cpp.commons.DateTime /** * Functions whose operations should never be considered a @@ -92,11 +90,11 @@ abstract class IgnorableOperation extends Expr { } class IgnorableExprRem extends IgnorableOperation instanceof RemExpr { } /** - * Anything involving an operation with 10, 100, 1000, 10000 is often a sign of conversion + * An operation with 10, 100, 1000, 10000 as an operand is often a sign of conversion * or atoi. */ -class IgnorableExpr10MulipleComponent extends IgnorableOperation { - IgnorableExpr10MulipleComponent() { +class IgnorableExpr10MultipleComponent extends IgnorableOperation { + IgnorableExpr10MultipleComponent() { this.(Operation).getAnOperand().getValue().toInt() in [10, 100, 1000, 10000] or exists(AssignOperation a | a.getRValue() = this | @@ -106,7 +104,7 @@ class IgnorableExpr10MulipleComponent extends IgnorableOperation { } /** - * Anything involving a sub expression with char literal 48, ignore as a likely string conversion + * An operation involving a sub expression with char literal 48, ignore as a likely string conversion * e.g., X - '0' */ class IgnorableExpr48Mapping extends IgnorableOperation { @@ -118,7 +116,7 @@ class IgnorableExpr48Mapping extends IgnorableOperation { } /** - * A binary or arithemtic operation whereby one of the components is textual or a string. + * A binary or arithmetic operation whereby one of the components is textual or a string. */ class IgnorableCharLiteralArithmetic extends IgnorableOperation { IgnorableCharLiteralArithmetic() { @@ -170,7 +168,7 @@ predicate isLikelyConversionConstant(int c) { } /** - * Some constants indicate conversion that are ignorable, e.g., + * An `isLikelyConversionConstant` constant indicates conversion that is ignorable, e.g., * julian to gregorian conversion or conversions from linux time structs * that start at 1900, etc. */ @@ -208,7 +206,7 @@ class OperationAsArgToIgnorableFunction extends IgnorableOperation { } /** - * Literal OP literal means the result is constant/known + * A Literal OP literal means the result is constant/known * and the operation is basically ignorable (it's not a real operation but * probably one visual simplicity what it means). */ @@ -228,7 +226,7 @@ class IgnorableAssignmentBitwiseOperation extends IgnorableOperation instanceof { } /** - * Any arithmetic operation where one of the operands is a pointer or char type, ignore it + * An arithmetic operation where one of the operands is a pointer or char type, ignore it */ class IgnorablePointerOrCharArithmetic extends IgnorableOperation { IgnorablePointerOrCharArithmetic() { @@ -267,7 +265,7 @@ class IgnorablePointerOrCharArithmetic extends IgnorableOperation { } /** - * An expression that is a candidate source for an dataflow configuration for an Operation that could flow to a Year field. + * Holds for an expression that is a operation that could flow to a Year field. */ predicate isOperationSourceCandidate(Expr e) { not e instanceof IgnorableOperation and @@ -397,8 +395,8 @@ module OperationToYearAssignmentConfig implements DataFlow::ConfigSig { // This is assuming a user would have done this all on one line though. // setting a variable for the conversion and passing that separately would be more difficult to track // considering this approach good enough for current observed false positives - exists(Call c, Expr arg | - isLeapYearCheckCall(c, arg) and arg.getAChild*() = [n.asExpr(), n.asIndirectExpr()] + exists(Expr arg | + isLeapYearCheckCall(_, arg) and arg.getAChild*() = [n.asExpr(), n.asIndirectExpr()] ) or // If as the flow progresses, the value holding a dangerous operation result @@ -503,9 +501,10 @@ class MonthEqualityCheckGuard extends GuardCondition, FinalMonthEqualityCheck { bindingset[e] pragma[inline_late] predicate isControlledByMonthEqualityCheckNonFebruary(Expr e) { - exists(MonthEqualityCheckGuard monthGuard | + exists(MonthEqualityCheckGuard monthGuard, Expr compared | monthGuard.controls(e.getBasicBlock(), true) and - not monthGuard.getExprCompared().getValueText() = "2" + compared = monthGuard.getExprCompared() and + not compared.getValue().toInt() = 2 ) } @@ -641,7 +640,7 @@ class LeapYearGuardCondition extends GuardCondition { LogicalAndExpr andExpr, LogicalOrExpr orExpr, GuardCondition div4Check, GuardCondition div100Check, GuardCondition div400Check, GuardValue gv | - // Cannonical case: + // canonical case: // form: `(year % 4 == 0) && (year % 100 != 0 || year % 400 == 0)` // `!((year % 4 == 0) && (year % 100 != 0 || year % 400 == 0))` // `!(year % 4) && (year % 100 || !(year % 400))` @@ -733,7 +732,7 @@ class LeapYearGuardCondition extends GuardCondition { Expr getYearSinkDiv400() { result = yearSinkDiv400 } /** - * The variable access that is used in all 3 components of the leap year check + * Gets the variable access that is used in all 3 components of the leap year check * e.g., see getYearSinkDiv4/100/400.. * If a field access is used, the qualifier and the field access are both returned * in checked condition. @@ -802,7 +801,7 @@ module CandidateConstantToDayOrMonthAssignmentFlow = DataFlow::Global; /** - * The value that the assignment resolves to doesn't represent February, + * Holds if value the assignment `a` resolves to (`dayOrMonthValSrcExpr`) doesn't represent February, * and/or if it represents a day, is a 'safe' day (meaning the 27th or prior). */ bindingset[dayOrMonthValSrcExpr] diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected index 35a635ba903e..30b6dad12083 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected @@ -6,69 +6,69 @@ | test.cpp:769:2:769:23 | ... -= ... | test.cpp:769:2:769:23 | ... -= ... | test.cpp:769:2:769:23 | ... -= ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:813:2:813:40 | ... = ... | test.cpp:813:21:813:40 | ... + ... | test.cpp:813:2:813:40 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:818:2:818:24 | ... = ... | test.cpp:818:13:818:24 | ... + ... | test.cpp:818:2:818:24 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:954:3:954:25 | ... = ... | test.cpp:954:14:954:25 | ... + ... | test.cpp:954:3:954:25 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:972:3:972:12 | ... ++ | test.cpp:972:3:972:12 | ... ++ | test.cpp:972:3:972:12 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1077:2:1077:11 | ... ++ | test.cpp:1077:2:1077:11 | ... ++ | test.cpp:1077:2:1077:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1097:16:1097:23 | increment_arg output argument | test.cpp:1085:2:1085:4 | ... ++ | test.cpp:1097:16:1097:23 | increment_arg output argument | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | test.cpp:1089:2:1089:7 | ... ++ | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1155:2:1155:26 | ... = ... | test.cpp:1155:14:1155:26 | ... - ... | test.cpp:1155:2:1155:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1206:2:1206:19 | ... = ... | test.cpp:1204:2:1204:15 | ... += ... | test.cpp:1206:2:1206:19 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1245:2:1245:28 | ... = ... | test.cpp:1245:16:1245:28 | ... + ... | test.cpp:1245:2:1245:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1260:2:1260:28 | ... = ... | test.cpp:1260:16:1260:28 | ... + ... | test.cpp:1260:2:1260:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:951:3:951:25 | ... = ... | test.cpp:951:14:951:25 | ... + ... | test.cpp:951:3:951:25 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:969:3:969:12 | ... ++ | test.cpp:969:3:969:12 | ... ++ | test.cpp:969:3:969:12 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1031:2:1031:11 | ... ++ | test.cpp:1031:2:1031:11 | ... ++ | test.cpp:1031:2:1031:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1051:16:1051:23 | increment_arg output argument | test.cpp:1039:2:1039:4 | ... ++ | test.cpp:1051:16:1051:23 | increment_arg output argument | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | test.cpp:1043:2:1043:7 | ... ++ | test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1109:2:1109:26 | ... = ... | test.cpp:1109:14:1109:26 | ... - ... | test.cpp:1109:2:1109:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1160:2:1160:19 | ... = ... | test.cpp:1158:2:1158:15 | ... += ... | test.cpp:1160:2:1160:19 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1199:2:1199:28 | ... = ... | test.cpp:1199:16:1199:28 | ... + ... | test.cpp:1199:2:1199:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1214:2:1214:28 | ... = ... | test.cpp:1214:16:1214:28 | ... + ... | test.cpp:1214:2:1214:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1228:2:1228:28 | ... = ... | test.cpp:1228:16:1228:28 | ... + ... | test.cpp:1228:2:1228:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1242:2:1242:26 | ... = ... | test.cpp:1242:14:1242:26 | ... + ... | test.cpp:1242:2:1242:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1256:2:1256:26 | ... = ... | test.cpp:1256:14:1256:26 | ... + ... | test.cpp:1256:2:1256:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1262:2:1262:28 | ... = ... | test.cpp:1262:16:1262:28 | ... + ... | test.cpp:1262:2:1262:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:1274:2:1274:28 | ... = ... | test.cpp:1274:16:1274:28 | ... + ... | test.cpp:1274:2:1274:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1288:2:1288:26 | ... = ... | test.cpp:1288:14:1288:26 | ... + ... | test.cpp:1288:2:1288:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1302:2:1302:26 | ... = ... | test.cpp:1302:14:1302:26 | ... + ... | test.cpp:1302:2:1302:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1308:2:1308:28 | ... = ... | test.cpp:1308:16:1308:28 | ... + ... | test.cpp:1308:2:1308:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1320:2:1320:28 | ... = ... | test.cpp:1320:16:1320:28 | ... + ... | test.cpp:1320:2:1320:28 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1333:2:1333:26 | ... = ... | test.cpp:1333:14:1333:26 | ... + ... | test.cpp:1333:2:1333:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1345:2:1345:26 | ... = ... | test.cpp:1345:14:1345:26 | ... + ... | test.cpp:1345:2:1345:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1387:2:1387:17 | ... = ... | test.cpp:1478:12:1478:17 | ... + ... | test.cpp:1387:2:1387:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1387:2:1387:17 | ... = ... | test.cpp:1492:9:1492:16 | ... + ... | test.cpp:1387:2:1387:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1387:2:1387:17 | ... = ... | test.cpp:1504:9:1504:16 | ... + ... | test.cpp:1387:2:1387:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1561:2:1561:15 | ... = ... | test.cpp:1558:2:1558:10 | ... += ... | test.cpp:1561:2:1561:15 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1591:2:1591:22 | ... += ... | test.cpp:1591:2:1591:22 | ... += ... | test.cpp:1591:2:1591:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1599:2:1599:22 | ... += ... | test.cpp:1599:2:1599:22 | ... += ... | test.cpp:1599:2:1599:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1678:2:1678:22 | ... += ... | test.cpp:1678:2:1678:22 | ... += ... | test.cpp:1678:2:1678:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1690:2:1690:22 | ... += ... | test.cpp:1690:2:1690:22 | ... += ... | test.cpp:1690:2:1690:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1723:2:1723:22 | ... += ... | test.cpp:1723:2:1723:22 | ... += ... | test.cpp:1723:2:1723:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:1799:2:1799:22 | ... += ... | test.cpp:1799:2:1799:22 | ... += ... | test.cpp:1799:2:1799:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1287:2:1287:26 | ... = ... | test.cpp:1287:14:1287:26 | ... + ... | test.cpp:1287:2:1287:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1299:2:1299:26 | ... = ... | test.cpp:1299:14:1299:26 | ... + ... | test.cpp:1299:2:1299:26 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1341:2:1341:17 | ... = ... | test.cpp:1432:12:1432:17 | ... + ... | test.cpp:1341:2:1341:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1341:2:1341:17 | ... = ... | test.cpp:1446:9:1446:16 | ... + ... | test.cpp:1341:2:1341:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1341:2:1341:17 | ... = ... | test.cpp:1458:9:1458:16 | ... + ... | test.cpp:1341:2:1341:17 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1515:2:1515:15 | ... = ... | test.cpp:1512:2:1512:10 | ... += ... | test.cpp:1515:2:1515:15 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1545:2:1545:22 | ... += ... | test.cpp:1545:2:1545:22 | ... += ... | test.cpp:1545:2:1545:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1553:2:1553:22 | ... += ... | test.cpp:1553:2:1553:22 | ... += ... | test.cpp:1553:2:1553:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1632:2:1632:22 | ... += ... | test.cpp:1632:2:1632:22 | ... += ... | test.cpp:1632:2:1632:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1644:2:1644:22 | ... += ... | test.cpp:1644:2:1644:22 | ... += ... | test.cpp:1644:2:1644:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1677:2:1677:22 | ... += ... | test.cpp:1677:2:1677:22 | ... += ... | test.cpp:1677:2:1677:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | +| test.cpp:1753:2:1753:22 | ... += ... | test.cpp:1753:2:1753:22 | ... += ... | test.cpp:1753:2:1753:22 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | edges | test.cpp:813:21:813:40 | ... + ... | test.cpp:813:2:813:40 | ... = ... | provenance | | | test.cpp:818:13:818:24 | ... + ... | test.cpp:818:2:818:24 | ... = ... | provenance | | -| test.cpp:954:14:954:25 | ... + ... | test.cpp:954:3:954:25 | ... = ... | provenance | | -| test.cpp:1084:26:1084:26 | *x | test.cpp:1097:16:1097:23 | increment_arg output argument | provenance | | -| test.cpp:1085:2:1085:4 | ... ++ | test.cpp:1084:26:1084:26 | *x | provenance | | -| test.cpp:1088:37:1088:37 | *x | test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | provenance | | -| test.cpp:1089:2:1089:7 | ... ++ | test.cpp:1088:37:1088:37 | *x | provenance | | -| test.cpp:1155:14:1155:26 | ... - ... | test.cpp:1155:2:1155:26 | ... = ... | provenance | | -| test.cpp:1204:2:1204:15 | ... += ... | test.cpp:1206:2:1206:19 | ... = ... | provenance | | -| test.cpp:1245:16:1245:28 | ... + ... | test.cpp:1245:2:1245:28 | ... = ... | provenance | | -| test.cpp:1260:16:1260:28 | ... + ... | test.cpp:1260:2:1260:28 | ... = ... | provenance | | +| test.cpp:951:14:951:25 | ... + ... | test.cpp:951:3:951:25 | ... = ... | provenance | | +| test.cpp:1038:26:1038:26 | *x | test.cpp:1051:16:1051:23 | increment_arg output argument | provenance | | +| test.cpp:1039:2:1039:4 | ... ++ | test.cpp:1038:26:1038:26 | *x | provenance | | +| test.cpp:1042:37:1042:37 | *x | test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | provenance | | +| test.cpp:1043:2:1043:7 | ... ++ | test.cpp:1042:37:1042:37 | *x | provenance | | +| test.cpp:1109:14:1109:26 | ... - ... | test.cpp:1109:2:1109:26 | ... = ... | provenance | | +| test.cpp:1158:2:1158:15 | ... += ... | test.cpp:1160:2:1160:19 | ... = ... | provenance | | +| test.cpp:1199:16:1199:28 | ... + ... | test.cpp:1199:2:1199:28 | ... = ... | provenance | | +| test.cpp:1214:16:1214:28 | ... + ... | test.cpp:1214:2:1214:28 | ... = ... | provenance | | +| test.cpp:1228:16:1228:28 | ... + ... | test.cpp:1228:2:1228:28 | ... = ... | provenance | | +| test.cpp:1242:14:1242:26 | ... + ... | test.cpp:1242:2:1242:26 | ... = ... | provenance | | +| test.cpp:1256:14:1256:26 | ... + ... | test.cpp:1256:2:1256:26 | ... = ... | provenance | | +| test.cpp:1262:16:1262:28 | ... + ... | test.cpp:1262:2:1262:28 | ... = ... | provenance | | | test.cpp:1274:16:1274:28 | ... + ... | test.cpp:1274:2:1274:28 | ... = ... | provenance | | -| test.cpp:1288:14:1288:26 | ... + ... | test.cpp:1288:2:1288:26 | ... = ... | provenance | | -| test.cpp:1302:14:1302:26 | ... + ... | test.cpp:1302:2:1302:26 | ... = ... | provenance | | -| test.cpp:1308:16:1308:28 | ... + ... | test.cpp:1308:2:1308:28 | ... = ... | provenance | | -| test.cpp:1320:16:1320:28 | ... + ... | test.cpp:1320:2:1320:28 | ... = ... | provenance | | -| test.cpp:1333:14:1333:26 | ... + ... | test.cpp:1333:2:1333:26 | ... = ... | provenance | | -| test.cpp:1345:14:1345:26 | ... + ... | test.cpp:1345:2:1345:26 | ... = ... | provenance | | -| test.cpp:1384:20:1384:23 | year | test.cpp:1387:2:1387:17 | ... = ... | provenance | | -| test.cpp:1397:15:1397:22 | ... + ... | test.cpp:1397:3:1397:22 | ... = ... | provenance | | -| test.cpp:1402:12:1402:17 | ... + ... | test.cpp:1384:20:1384:23 | year | provenance | | -| test.cpp:1411:15:1411:22 | ... + ... | test.cpp:1411:3:1411:22 | ... = ... | provenance | | -| test.cpp:1421:3:1421:20 | ... = ... | test.cpp:1423:12:1423:18 | yeartmp | provenance | | -| test.cpp:1421:13:1421:20 | ... + ... | test.cpp:1421:3:1421:20 | ... = ... | provenance | | -| test.cpp:1423:12:1423:18 | yeartmp | test.cpp:1384:20:1384:23 | year | provenance | | -| test.cpp:1466:15:1466:22 | ... + ... | test.cpp:1466:3:1466:22 | ... = ... | provenance | | -| test.cpp:1471:12:1471:17 | ... + ... | test.cpp:1384:20:1384:23 | year | provenance | | -| test.cpp:1478:12:1478:17 | ... + ... | test.cpp:1384:20:1384:23 | year | provenance | | -| test.cpp:1492:2:1492:16 | ... = ... | test.cpp:1496:3:1496:18 | ... = ... | provenance | | -| test.cpp:1492:2:1492:16 | ... = ... | test.cpp:1501:12:1501:15 | year | provenance | | -| test.cpp:1492:9:1492:16 | ... + ... | test.cpp:1492:2:1492:16 | ... = ... | provenance | | -| test.cpp:1501:12:1501:15 | year | test.cpp:1384:20:1384:23 | year | provenance | | -| test.cpp:1504:2:1504:16 | ... = ... | test.cpp:1510:12:1510:15 | year | provenance | | -| test.cpp:1504:9:1504:16 | ... + ... | test.cpp:1504:2:1504:16 | ... = ... | provenance | | -| test.cpp:1510:12:1510:15 | year | test.cpp:1384:20:1384:23 | year | provenance | | -| test.cpp:1558:2:1558:10 | ... += ... | test.cpp:1561:2:1561:15 | ... = ... | provenance | | +| test.cpp:1287:14:1287:26 | ... + ... | test.cpp:1287:2:1287:26 | ... = ... | provenance | | +| test.cpp:1299:14:1299:26 | ... + ... | test.cpp:1299:2:1299:26 | ... = ... | provenance | | +| test.cpp:1338:20:1338:23 | year | test.cpp:1341:2:1341:17 | ... = ... | provenance | | +| test.cpp:1351:15:1351:22 | ... + ... | test.cpp:1351:3:1351:22 | ... = ... | provenance | | +| test.cpp:1356:12:1356:17 | ... + ... | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1365:15:1365:22 | ... + ... | test.cpp:1365:3:1365:22 | ... = ... | provenance | | +| test.cpp:1375:3:1375:20 | ... = ... | test.cpp:1377:12:1377:18 | yeartmp | provenance | | +| test.cpp:1375:13:1375:20 | ... + ... | test.cpp:1375:3:1375:20 | ... = ... | provenance | | +| test.cpp:1377:12:1377:18 | yeartmp | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1420:15:1420:22 | ... + ... | test.cpp:1420:3:1420:22 | ... = ... | provenance | | +| test.cpp:1425:12:1425:17 | ... + ... | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1432:12:1432:17 | ... + ... | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1446:2:1446:16 | ... = ... | test.cpp:1450:3:1450:18 | ... = ... | provenance | | +| test.cpp:1446:2:1446:16 | ... = ... | test.cpp:1455:12:1455:15 | year | provenance | | +| test.cpp:1446:9:1446:16 | ... + ... | test.cpp:1446:2:1446:16 | ... = ... | provenance | | +| test.cpp:1455:12:1455:15 | year | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1458:2:1458:16 | ... = ... | test.cpp:1464:12:1464:15 | year | provenance | | +| test.cpp:1458:9:1458:16 | ... + ... | test.cpp:1458:2:1458:16 | ... = ... | provenance | | +| test.cpp:1464:12:1464:15 | year | test.cpp:1338:20:1338:23 | year | provenance | | +| test.cpp:1512:2:1512:10 | ... += ... | test.cpp:1515:2:1515:15 | ... = ... | provenance | | nodes | test.cpp:422:2:422:14 | ... += ... | semmle.label | ... += ... | | test.cpp:440:2:440:11 | ... ++ | semmle.label | ... ++ | @@ -80,66 +80,66 @@ nodes | test.cpp:813:21:813:40 | ... + ... | semmle.label | ... + ... | | test.cpp:818:2:818:24 | ... = ... | semmle.label | ... = ... | | test.cpp:818:13:818:24 | ... + ... | semmle.label | ... + ... | -| test.cpp:875:4:875:15 | ... ++ | semmle.label | ... ++ | -| test.cpp:954:3:954:25 | ... = ... | semmle.label | ... = ... | -| test.cpp:954:14:954:25 | ... + ... | semmle.label | ... + ... | -| test.cpp:972:3:972:12 | ... ++ | semmle.label | ... ++ | -| test.cpp:1077:2:1077:11 | ... ++ | semmle.label | ... ++ | -| test.cpp:1084:26:1084:26 | *x | semmle.label | *x | -| test.cpp:1085:2:1085:4 | ... ++ | semmle.label | ... ++ | -| test.cpp:1088:37:1088:37 | *x | semmle.label | *x | -| test.cpp:1089:2:1089:7 | ... ++ | semmle.label | ... ++ | -| test.cpp:1097:16:1097:23 | increment_arg output argument | semmle.label | increment_arg output argument | -| test.cpp:1101:27:1101:35 | increment_arg_by_pointer output argument | semmle.label | increment_arg_by_pointer output argument | -| test.cpp:1155:2:1155:26 | ... = ... | semmle.label | ... = ... | -| test.cpp:1155:14:1155:26 | ... - ... | semmle.label | ... - ... | -| test.cpp:1204:2:1204:15 | ... += ... | semmle.label | ... += ... | -| test.cpp:1206:2:1206:19 | ... = ... | semmle.label | ... = ... | -| test.cpp:1245:2:1245:28 | ... = ... | semmle.label | ... = ... | -| test.cpp:1245:16:1245:28 | ... + ... | semmle.label | ... + ... | -| test.cpp:1260:2:1260:28 | ... = ... | semmle.label | ... = ... | -| test.cpp:1260:16:1260:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:872:4:872:15 | ... ++ | semmle.label | ... ++ | +| test.cpp:951:3:951:25 | ... = ... | semmle.label | ... = ... | +| test.cpp:951:14:951:25 | ... + ... | semmle.label | ... + ... | +| test.cpp:969:3:969:12 | ... ++ | semmle.label | ... ++ | +| test.cpp:1031:2:1031:11 | ... ++ | semmle.label | ... ++ | +| test.cpp:1038:26:1038:26 | *x | semmle.label | *x | +| test.cpp:1039:2:1039:4 | ... ++ | semmle.label | ... ++ | +| test.cpp:1042:37:1042:37 | *x | semmle.label | *x | +| test.cpp:1043:2:1043:7 | ... ++ | semmle.label | ... ++ | +| test.cpp:1051:16:1051:23 | increment_arg output argument | semmle.label | increment_arg output argument | +| test.cpp:1055:27:1055:35 | increment_arg_by_pointer output argument | semmle.label | increment_arg_by_pointer output argument | +| test.cpp:1109:2:1109:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1109:14:1109:26 | ... - ... | semmle.label | ... - ... | +| test.cpp:1158:2:1158:15 | ... += ... | semmle.label | ... += ... | +| test.cpp:1160:2:1160:19 | ... = ... | semmle.label | ... = ... | +| test.cpp:1199:2:1199:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1199:16:1199:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1214:2:1214:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1214:16:1214:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1228:2:1228:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1228:16:1228:28 | ... + ... | semmle.label | ... + ... | +| test.cpp:1242:2:1242:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1242:14:1242:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1256:2:1256:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1256:14:1256:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1262:2:1262:28 | ... = ... | semmle.label | ... = ... | +| test.cpp:1262:16:1262:28 | ... + ... | semmle.label | ... + ... | | test.cpp:1274:2:1274:28 | ... = ... | semmle.label | ... = ... | | test.cpp:1274:16:1274:28 | ... + ... | semmle.label | ... + ... | -| test.cpp:1288:2:1288:26 | ... = ... | semmle.label | ... = ... | -| test.cpp:1288:14:1288:26 | ... + ... | semmle.label | ... + ... | -| test.cpp:1302:2:1302:26 | ... = ... | semmle.label | ... = ... | -| test.cpp:1302:14:1302:26 | ... + ... | semmle.label | ... + ... | -| test.cpp:1308:2:1308:28 | ... = ... | semmle.label | ... = ... | -| test.cpp:1308:16:1308:28 | ... + ... | semmle.label | ... + ... | -| test.cpp:1320:2:1320:28 | ... = ... | semmle.label | ... = ... | -| test.cpp:1320:16:1320:28 | ... + ... | semmle.label | ... + ... | -| test.cpp:1333:2:1333:26 | ... = ... | semmle.label | ... = ... | -| test.cpp:1333:14:1333:26 | ... + ... | semmle.label | ... + ... | -| test.cpp:1345:2:1345:26 | ... = ... | semmle.label | ... = ... | -| test.cpp:1345:14:1345:26 | ... + ... | semmle.label | ... + ... | -| test.cpp:1384:20:1384:23 | year | semmle.label | year | -| test.cpp:1387:2:1387:17 | ... = ... | semmle.label | ... = ... | -| test.cpp:1397:3:1397:22 | ... = ... | semmle.label | ... = ... | -| test.cpp:1397:15:1397:22 | ... + ... | semmle.label | ... + ... | -| test.cpp:1402:12:1402:17 | ... + ... | semmle.label | ... + ... | -| test.cpp:1411:3:1411:22 | ... = ... | semmle.label | ... = ... | -| test.cpp:1411:15:1411:22 | ... + ... | semmle.label | ... + ... | -| test.cpp:1421:3:1421:20 | ... = ... | semmle.label | ... = ... | -| test.cpp:1421:13:1421:20 | ... + ... | semmle.label | ... + ... | -| test.cpp:1423:12:1423:18 | yeartmp | semmle.label | yeartmp | -| test.cpp:1466:3:1466:22 | ... = ... | semmle.label | ... = ... | -| test.cpp:1466:15:1466:22 | ... + ... | semmle.label | ... + ... | -| test.cpp:1471:12:1471:17 | ... + ... | semmle.label | ... + ... | -| test.cpp:1478:12:1478:17 | ... + ... | semmle.label | ... + ... | -| test.cpp:1492:2:1492:16 | ... = ... | semmle.label | ... = ... | -| test.cpp:1492:9:1492:16 | ... + ... | semmle.label | ... + ... | -| test.cpp:1496:3:1496:18 | ... = ... | semmle.label | ... = ... | -| test.cpp:1501:12:1501:15 | year | semmle.label | year | -| test.cpp:1504:2:1504:16 | ... = ... | semmle.label | ... = ... | -| test.cpp:1504:9:1504:16 | ... + ... | semmle.label | ... + ... | -| test.cpp:1510:12:1510:15 | year | semmle.label | year | -| test.cpp:1558:2:1558:10 | ... += ... | semmle.label | ... += ... | -| test.cpp:1561:2:1561:15 | ... = ... | semmle.label | ... = ... | -| test.cpp:1591:2:1591:22 | ... += ... | semmle.label | ... += ... | -| test.cpp:1599:2:1599:22 | ... += ... | semmle.label | ... += ... | -| test.cpp:1678:2:1678:22 | ... += ... | semmle.label | ... += ... | -| test.cpp:1690:2:1690:22 | ... += ... | semmle.label | ... += ... | -| test.cpp:1723:2:1723:22 | ... += ... | semmle.label | ... += ... | -| test.cpp:1799:2:1799:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1287:2:1287:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1287:14:1287:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1299:2:1299:26 | ... = ... | semmle.label | ... = ... | +| test.cpp:1299:14:1299:26 | ... + ... | semmle.label | ... + ... | +| test.cpp:1338:20:1338:23 | year | semmle.label | year | +| test.cpp:1341:2:1341:17 | ... = ... | semmle.label | ... = ... | +| test.cpp:1351:3:1351:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1351:15:1351:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1356:12:1356:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1365:3:1365:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1365:15:1365:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1375:3:1375:20 | ... = ... | semmle.label | ... = ... | +| test.cpp:1375:13:1375:20 | ... + ... | semmle.label | ... + ... | +| test.cpp:1377:12:1377:18 | yeartmp | semmle.label | yeartmp | +| test.cpp:1420:3:1420:22 | ... = ... | semmle.label | ... = ... | +| test.cpp:1420:15:1420:22 | ... + ... | semmle.label | ... + ... | +| test.cpp:1425:12:1425:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1432:12:1432:17 | ... + ... | semmle.label | ... + ... | +| test.cpp:1446:2:1446:16 | ... = ... | semmle.label | ... = ... | +| test.cpp:1446:9:1446:16 | ... + ... | semmle.label | ... + ... | +| test.cpp:1450:3:1450:18 | ... = ... | semmle.label | ... = ... | +| test.cpp:1455:12:1455:15 | year | semmle.label | year | +| test.cpp:1458:2:1458:16 | ... = ... | semmle.label | ... = ... | +| test.cpp:1458:9:1458:16 | ... + ... | semmle.label | ... + ... | +| test.cpp:1464:12:1464:15 | year | semmle.label | year | +| test.cpp:1512:2:1512:10 | ... += ... | semmle.label | ... += ... | +| test.cpp:1515:2:1515:15 | ... = ... | semmle.label | ... = ... | +| test.cpp:1545:2:1545:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1553:2:1553:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1632:2:1632:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1644:2:1644:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1677:2:1677:22 | ... += ... | semmle.label | ... += ... | +| test.cpp:1753:2:1753:22 | ... += ... | semmle.label | ... += ... | subpaths diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected index e893ae1fff0e..9c1d83861f0a 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedReturnValueForTimeFunctions.expected @@ -1,6 +1,6 @@ | test.cpp:425:2:425:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:417:13:417:14 | st | st | | test.cpp:443:2:443:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:435:13:435:14 | st | st | | test.cpp:459:2:459:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:451:62:451:63 | st | st | -| test.cpp:956:3:956:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:947:14:947:15 | st | st | -| test.cpp:974:3:974:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:965:14:965:15 | st | st | -| test.cpp:1081:2:1081:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:1071:13:1071:14 | st | st | +| test.cpp:953:3:953:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:944:14:944:15 | st | st | +| test.cpp:971:3:971:22 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:962:14:962:15 | st | st | +| test.cpp:1035:2:1035:21 | call to SystemTimeToFileTime | Return value of $@ function should be verified to check for any error because variable $@ is not guaranteed to be safe. | test.cpp:101:1:101:20 | SystemTimeToFileTime | SystemTimeToFileTime | test.cpp:1025:13:1025:14 | st | st | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp index 4451450fb254..28bf66b34369 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp @@ -822,17 +822,14 @@ void test(int x) * Positive AntiPattern 1 NOTE: historically considered positive but mktime checks year validity, needs re-assessment * Year field is modified but via an intermediary variable. */ -bool tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) +void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) { struct tm tm_parsed; - bool timestamp_found = false; struct tm tm_now; time_t t_now; int year; - timestamp_found = true; - /* * As the timestamp does not contain the year * number, daylight saving time information, nor @@ -1000,26 +997,6 @@ bool tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) } } - struct tm ltime(void) - { - SYSTEMTIME st; - struct tm tm; - bool isLeapYear; - - GetLocalTime(&st); - tm.tm_sec=st.wSecond; - tm.tm_min=st.wMinute; - tm.tm_hour=st.wHour; - tm.tm_mday=st.wDay; - tm.tm_mon=st.wMonth-1; - tm.tm_year=(st.wYear>=1900?st.wYear-1900:0); - - // Check for leap year, and adjust the date accordingly - isLeapYear = tm.tm_year % 4 == 0 && (tm.tm_year % 100 != 0 || tm.tm_year % 400 == 0); - tm.tm_mday = tm.tm_mon == 2 && tm.tm_mday == 29 && !isLeapYear ? 28 : tm.tm_mday; - return tm; - } - /** * Negative Case - Anti-pattern 1: [year ±n, month, day] * Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. @@ -1040,29 +1017,6 @@ FMAPITimeToSysTimeW(LPCWSTR wszTime, SYSTEMTIME *psystime) return true; } -/** -* Negative Case - Anti-pattern 1: [year ±n, month, day] -* Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. -*/ -bool -ATime_HrGetSysTime(SYSTEMTIME *pst) -{ - // if (!FValidSysTime()) - // { - // TrapSzTag("ATime cannot be converted to SYSTEMTIME", 0x1e14f5c3 /* tag_4fpxd */); - // CORgTag(E_FAIL, 0x6c373230 /* tag_l720 */); - // } - - // pst->wYear = static_cast(m_lYear); - // pst->wMonth = static_cast(m_lMonth); - // //pst->wDayOfWeek = ???; - // pst->wDay = static_cast(m_lDay); - // pst->wHour = static_cast(m_lHour); - // pst->wMinute = static_cast(m_lMinute); - // pst->wSecond = static_cast(m_lSecond); - // pst->wMilliseconds = 0; -} - /** * Negative Case - Anti-pattern 1: [year ±n, month, day] * Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. @@ -1413,7 +1367,7 @@ void constant_month_on_year_modification2(WORD year, WORD offset, WORD month){ if(month++ > 12){ - // some hueristics to detect a false positive here rely on variable names + // some heuristics to detect a false positive here rely on variable names // which is often consistent in the wild. // This variant uses the variable names yeartmp and monthtmp WORD yeartmp; From 98b51149daefcd8cc75344b0db4fd58db787f3a3 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Mon, 9 Feb 2026 10:48:24 -0500 Subject: [PATCH 029/243] C++: Change log missing .md extension. --- ... => 2026-02-06-UncheckedLeapYearAfterModification_Refactor.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename cpp/ql/lib/change-notes/{2026-02-06-UncheckedLeapYearAfterModification_Refactor => 2026-02-06-UncheckedLeapYearAfterModification_Refactor.md} (100%) diff --git a/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor b/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md similarity index 100% rename from cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor rename to cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md From df544595525a8df1dab3030753ce673602550910 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Mon, 9 Feb 2026 13:19:02 -0500 Subject: [PATCH 030/243] Restore prior PR change log (accidentally removed) --- python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md diff --git a/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md b/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md new file mode 100644 index 000000000000..283b703a4380 --- /dev/null +++ b/python/ql/lib/change-notes/2025-09-30-azure_ssrf_models.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Added request forgery sink models for the Azure SDK. +* Made it so that models-as-data sinks with the kind `request-forgery` contribute to the class `Http::Client::Request` which represents HTTP client requests. \ No newline at end of file From 23bab818553cd00fac1704e75567d775981150b1 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Mon, 9 Feb 2026 13:22:35 -0500 Subject: [PATCH 031/243] Added change log --- ...026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md diff --git a/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md b/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md new file mode 100644 index 000000000000..d4373eadfb26 --- /dev/null +++ b/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* Modified SSRF tests to use postprocessing to more easily debug results. +* Added new full SSRF sanitization barrier from the new AntiSSRF library. \ No newline at end of file From d33375cd167f048f52dc94d8352d718ce71372bd Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:34:41 +0100 Subject: [PATCH 032/243] chore: upgrade Bazel to 9.0.0 Bazel 9 removes native.cc_* and native.java_* rules from Starlark, requiring explicit imports from rules_cc and rules_java. --- .bazelversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelversion b/.bazelversion index e7fdef7e2e63..f7ee06693c17 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -8.4.2 +9.0.0 From 39218f5e6b4306d0d7c03e9f9ef640bf2163c2b6 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:34:53 +0100 Subject: [PATCH 033/243] feat: add rules_cc and rules_java module dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add explicit dependencies required for Bazel 9: - rules_cc 0.2.16: provides cc_binary, cc_library, cc_test - rules_java 9.0.3: provides java_* rules Also update related dependencies: - rules_go: 0.56.1 → 0.59.0 (compatibility with Bazel 9) - gazelle: 0.40.0 → 0.47.0 (compatibility with rules_go 0.59.0) - rules_nodejs: 6.2.0-codeql.1 → 6.7.3 (upstream version) --- MODULE.bazel | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 4d1ba916ec11..aa58685a0701 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -15,9 +15,11 @@ local_path_override( # see https://registry.bazel.build/ for a list of available packages bazel_dep(name = "platforms", version = "1.0.0") -bazel_dep(name = "rules_go", version = "0.56.1") +bazel_dep(name = "rules_cc", version = "0.2.16") +bazel_dep(name = "rules_go", version = "0.59.0") +bazel_dep(name = "rules_java", version = "9.0.3") bazel_dep(name = "rules_pkg", version = "1.0.1") -bazel_dep(name = "rules_nodejs", version = "6.2.0-codeql.1") +bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "rules_python", version = "0.40.0") bazel_dep(name = "rules_shell", version = "0.5.0") bazel_dep(name = "bazel_skylib", version = "1.8.1") @@ -25,7 +27,7 @@ bazel_dep(name = "abseil-cpp", version = "20240116.1", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "12.1.0-codeql.1") bazel_dep(name = "rules_kotlin", version = "2.2.0-codeql.1") -bazel_dep(name = "gazelle", version = "0.40.0") +bazel_dep(name = "gazelle", version = "0.47.0") bazel_dep(name = "rules_dotnet", version = "0.21.5-codeql.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") bazel_dep(name = "rules_rust", version = "0.66.0") From 4d6fb873abac5fe4a8a14b0ec724ea6918fa5bfd Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:35:02 +0100 Subject: [PATCH 034/243] feat: add Python 3.12 toolchain registration rules_python 1.x requires explicit toolchain setup and no longer auto-registers toolchains. Register Python 3.12 toolchain to ensure Python tools work correctly with Bazel 9. --- MODULE.bazel | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MODULE.bazel b/MODULE.bazel index aa58685a0701..aaa0ea0f7d6f 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -190,6 +190,15 @@ pip.parse( ) use_repo(pip, "codegen_deps") +python = use_extension("@rules_python//python/extensions:python.bzl", "python") +python.toolchain( + is_default = True, + python_version = "3.12", +) +use_repo(python, "python_3_12", "python_versions") + +register_toolchains("@python_versions//3.12:all") + swift_deps = use_extension("//swift/third_party:load.bzl", "swift_deps") # following list can be kept in sync with `bazel mod tidy` From 578efeaaa3abc6f05790b4ae90421fbb5b75b819 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:35:09 +0100 Subject: [PATCH 035/243] feat: add rules_cc to autoload configuration Add +@rules_cc to --incompatible_autoload_externally to enable graceful migration path for cc_* rule usages before all files are updated with explicit imports. --- .bazelrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bazelrc b/.bazelrc index 679eeec77a32..eb9b1a793217 100644 --- a/.bazelrc +++ b/.bazelrc @@ -34,7 +34,7 @@ common --@rules_dotnet//dotnet/settings:strict_deps=false common --@rules_rust//rust/toolchain/channel=nightly # Reduce this eventually to empty, once we've fixed all our usages of java, and https://github.com/bazel-contrib/rules_go/issues/4193 is fixed -common --incompatible_autoload_externally="+@rules_java,+@rules_shell" +common --incompatible_autoload_externally="+@rules_cc,+@rules_java,+@rules_shell" build --java_language_version=17 build --tool_java_language_version=17 From d1c63603ee4acb6d0770bf23320873da00830f64 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:35:17 +0100 Subject: [PATCH 036/243] refactor: migrate Starlark files to explicit rules_cc imports Bazel 9 removes native.cc_* and CcInfo from global scope. Update: - swift/rules.bzl: Add cc_binary, cc_library, CcInfo imports; use explicit cc_binary/cc_library instead of native.cc_* - misc/bazel/cmake/cmake.bzl: Add CcInfo import for provider usage --- misc/bazel/cmake/cmake.bzl | 2 ++ swift/rules.bzl | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/misc/bazel/cmake/cmake.bzl b/misc/bazel/cmake/cmake.bzl index d98a480c69cd..8235b249a2e4 100644 --- a/misc/bazel/cmake/cmake.bzl +++ b/misc/bazel/cmake/cmake.bzl @@ -1,3 +1,5 @@ +load("@rules_cc//cc/common:cc_info.bzl", "CcInfo") + CmakeInfo = provider( fields = { "name": "", diff --git a/swift/rules.bzl b/swift/rules.bzl index cb16ca4382ad..f0fde7e71401 100644 --- a/swift/rules.bzl +++ b/swift/rules.bzl @@ -1,3 +1,5 @@ +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") +load("@rules_cc//cc/common:cc_info.bzl", "CcInfo") load("//misc/bazel:os.bzl", "os_select") # TODO: make a shared library with the internal repos for transitions @@ -124,7 +126,7 @@ def _wrap_cc(rule, kwargs): ) def swift_cc_binary(**kwargs): - _wrap_cc(native.cc_binary, kwargs) + _wrap_cc(cc_binary, kwargs) def swift_cc_library(**kwargs): - _wrap_cc(native.cc_library, kwargs) + _wrap_cc(cc_library, kwargs) From f881d368f04637d2e45022b0b56bb0b34d8d712d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:35:25 +0100 Subject: [PATCH 037/243] refactor: migrate BUILD files to explicit rules_cc imports Add explicit load statements for cc_binary, cc_library, and cc_test from @rules_cc//cc:defs.bzl in: - shared/cpp/BUILD.bazel - swift/logging/BUILD.bazel - misc/bazel/internal/zipmerge/BUILD.bazel --- misc/bazel/internal/zipmerge/BUILD.bazel | 4 +++- shared/cpp/BUILD.bazel | 2 ++ swift/logging/BUILD.bazel | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/misc/bazel/internal/zipmerge/BUILD.bazel b/misc/bazel/internal/zipmerge/BUILD.bazel index 07cbb34ce978..4b2723d6c64a 100644 --- a/misc/bazel/internal/zipmerge/BUILD.bazel +++ b/misc/bazel/internal/zipmerge/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_test") + cc_library( name = "lib", srcs = [ @@ -28,7 +30,7 @@ cc_test( linkstatic = True, # required to build the test in the internal repo deps = [ ":lib", - "@bazel_tools//tools/cpp/runfiles", "@googletest//:gtest_main", + "@rules_cc//cc/runfiles", ], ) diff --git a/shared/cpp/BUILD.bazel b/shared/cpp/BUILD.bazel index 5debed90086c..f78c4ede92fa 100644 --- a/shared/cpp/BUILD.bazel +++ b/shared/cpp/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_cc//cc:defs.bzl", "cc_library") + cc_library( name = "extractor_shared", srcs = glob(["*.cpp"]), diff --git a/swift/logging/BUILD.bazel b/swift/logging/BUILD.bazel index 1d6192b3c13a..e72a7071d069 100644 --- a/swift/logging/BUILD.bazel +++ b/swift/logging/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_cc//cc:defs.bzl", "cc_library") + cc_library( name = "logging", srcs = glob(["*.cpp"]), From 10a2824b8284a97b02278468ea4b222072b5e784 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:35:31 +0100 Subject: [PATCH 038/243] refactor: migrate BUILD files to explicit rules_java imports Add explicit load statements for java_library and java_test from @rules_java//java:defs.bzl in: - javascript/extractor/BUILD.bazel - javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel --- javascript/extractor/BUILD.bazel | 1 + .../extractor/test/com/semmle/js/extractor/test/BUILD.bazel | 2 ++ 2 files changed, 3 insertions(+) diff --git a/javascript/extractor/BUILD.bazel b/javascript/extractor/BUILD.bazel index 360dc9370f94..363ea42864fd 100644 --- a/javascript/extractor/BUILD.bazel +++ b/javascript/extractor/BUILD.bazel @@ -1,3 +1,4 @@ +load("@rules_java//java:defs.bzl", "java_library") load("@rules_pkg//pkg:mappings.bzl", "pkg_files") load("@semmle_code//:common.bzl", "codeql_fat_jar", "codeql_java_project") diff --git a/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel b/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel index 1bad97bb7cc8..2d6a5d01c660 100644 --- a/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel +++ b/javascript/extractor/test/com/semmle/js/extractor/test/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_java//java:defs.bzl", "java_test") + java_test( name = "test", srcs = glob(["**/*.java"]), From f8ed810a4470121e1dc23c1cf151a8e0b59eb02d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 17:35:39 +0100 Subject: [PATCH 039/243] refactor: migrate C++ runfiles API from bazel_tools to rules_cc Bazel 9 moves the C++ runfiles library from @bazel_tools to @rules_cc. Update zipmerge_test.cpp: - Change include from tools/cpp/runfiles to rules_cc/cc/runfiles - Update namespace from bazel::tools::cpp::runfiles to rules_cc::cc::runfiles Note: The BUILD.bazel dependency change is in a separate commit. --- misc/bazel/internal/zipmerge/zipmerge_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/bazel/internal/zipmerge/zipmerge_test.cpp b/misc/bazel/internal/zipmerge/zipmerge_test.cpp index 65278a679f5b..616365c7cbdb 100644 --- a/misc/bazel/internal/zipmerge/zipmerge_test.cpp +++ b/misc/bazel/internal/zipmerge/zipmerge_test.cpp @@ -9,9 +9,9 @@ #include #include -#include "tools/cpp/runfiles/runfiles.h" +#include "rules_cc/cc/runfiles/runfiles.h" -using bazel::tools::cpp::runfiles::Runfiles; +using rules_cc::cc::runfiles::Runfiles; using namespace std::string_literals; namespace fs = std::filesystem; From ca90de2bedbc594bb34b250d4494c9f060909b48 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 Feb 2026 18:14:25 +0100 Subject: [PATCH 040/243] fix: disable Android SDK auto-detection for Bazel 9 compatibility rules_android has repository visibility issues with Bazel 9 when the Android SDK is present. Since we don't use Android, disable detection by setting ANDROID_HOME to empty. --- .bazelrc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.bazelrc b/.bazelrc index eb9b1a793217..8687f4406cb9 100644 --- a/.bazelrc +++ b/.bazelrc @@ -11,6 +11,8 @@ build --compilation_mode opt common --override_module=semmle_code=%workspace%/misc/bazel/semmle_code_stub build --repo_env=CC=clang --repo_env=CXX=clang++ +# Disable Android SDK auto-detection (we don't use it, and rules_android has Bazel 9 compatibility issues) +build --repo_env=ANDROID_HOME= # print test output, like sembuild does. # Set to `errors` if this is too verbose. From b38c3268fb2a8a63ee5320dae3df563ca72242cb Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 6 Feb 2026 12:18:07 +0100 Subject: [PATCH 041/243] fix: upgrade rules_kotlin to 2.2.2 for Windows compatibility Upgrade from 2.2.0-codeql.1 to 2.2.2-codeql.1 which includes: - Fix Windows bzlmod builder classpath issue - Move to official bazel worker api This eliminates the need for --legacy_external_runfiles on Windows. Also fix codegen templates to be included in runfiles. --- MODULE.bazel | 2 +- .../rules_kotlin/2.2.0-codeql.1/source.json | 4 +- .../rules_kotlin/2.2.2-codeql.1/MODULE.bazel | 38 +++++++++++++++++++ .../codeql_add_language_version_option.patch | 30 +++++++++++++++ .../patches/codeql_do_not_emit_jdeps.patch | 14 +++++++ .../rules_kotlin/2.2.2-codeql.1/source.json | 9 +++++ .../modules/rules_kotlin/metadata.json | 1 + misc/codegen/BUILD.bazel | 3 ++ misc/codegen/templates/BUILD.bazel | 15 ++++++++ 9 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel create mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch create mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch create mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json diff --git a/MODULE.bazel b/MODULE.bazel index aaa0ea0f7d6f..f2c23b9ce857 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -26,7 +26,7 @@ bazel_dep(name = "bazel_skylib", version = "1.8.1") bazel_dep(name = "abseil-cpp", version = "20240116.1", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.11.3", repo_name = "json") bazel_dep(name = "fmt", version = "12.1.0-codeql.1") -bazel_dep(name = "rules_kotlin", version = "2.2.0-codeql.1") +bazel_dep(name = "rules_kotlin", version = "2.2.2-codeql.1") bazel_dep(name = "gazelle", version = "0.47.0") bazel_dep(name = "rules_dotnet", version = "0.21.5-codeql.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json index bfa243b5a22e..ca35aa4a5c12 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json @@ -2,8 +2,8 @@ "integrity": "sha256-4STROYYIW8ChW+LIXBQVurVwhEK3jSSf4iv430OlNA0=", "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.2.0/rules_kotlin-v2.2.0.tar.gz", "patches": { - "codeql_do_not_emit_jdeps.patch": "sha256-gIlhXEY71vlCkpr5wj2vm3yv6RwcuKLhgbTGqdVvQfU=", - "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=" + "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=", + "codeql_do_not_emit_jdeps.patch": "sha256-gIlhXEY71vlCkpr5wj2vm3yv6RwcuKLhgbTGqdVvQfU=" }, "patch_strip": 1 } diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel new file mode 100644 index 000000000000..2c77fc8adb2c --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel @@ -0,0 +1,38 @@ +module( + name = "rules_kotlin", + version = "2.2.2-codeql.1", + compatibility_level = 1, + repo_name = "rules_kotlin", +) + +bazel_dep(name = "platforms", version = "0.0.11") +bazel_dep(name = "bazel_skylib", version = "1.7.1") +bazel_dep(name = "rules_java", version = "8.9.0") +bazel_dep(name = "rules_android", version = "0.6.4") +bazel_dep(name = "bazel_features", version = "1.25.0") +bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") +bazel_dep(name = "rules_proto", version = "6.0.2", repo_name = "rules_proto") +bazel_dep(name = "abseil-py", version = "2.1.0", repo_name = "py_absl") +bazel_dep(name = "rules_cc", version = "0.0.16") +bazel_dep(name = "bazel_worker_api", version = "0.0.8") +bazel_dep(name = "bazel_worker_java", version = "0.0.8") + +rules_java_toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains") +use_repo(rules_java_toolchains, "remote_java_tools") + +rules_kotlin_extensions = use_extension( + "//src/main/starlark/core/repositories:bzlmod_setup.bzl", + "rules_kotlin_extensions", +) +use_repo( + rules_kotlin_extensions, + "com_github_google_ksp", + "com_github_jetbrains_kotlin", + "com_github_pinterest_ktlint", + "kotlinx_serialization_core_jvm", + "kotlinx_serialization_json", + "kotlinx_serialization_json_jvm", + "kotlin_build_tools_impl", +) + +register_toolchains("//kotlin/internal:default_toolchain") diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch new file mode 100644 index 000000000000..795d1f88f387 --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch @@ -0,0 +1,30 @@ +--- a/src/main/starlark/core/options/opts.kotlinc.bzl 2000-01-01 01:00:00.000000000 +0100 ++++ b/src/main/starlark/core/options/opts.kotlinc.bzl 2025-11-17 16:51:01.012063056 +0100 +@@ -51,6 +51,11 @@ + return None + return ["-Xjdk-release=%s" % version] + ++def _map_language_version_to_flag(version): ++ if not version: ++ return None ++ return ["-language-version=%s" % version, "-api-version=%s" % version] ++ + _KOPTS_ALL = { + "include_stdlibs": struct( + args = dict( +@@ -495,6 +500,15 @@ + value_to_flag = None, + map_value_to_flag = _map_warning_level, + ), ++ "language_version": struct( ++ args = dict( ++ default = "1.9", ++ doc = "-language-version", ++ ), ++ type = attr.string, ++ value_to_flag = None, ++ map_value_to_flag = _map_language_version_to_flag, ++ ), + } + + def _merge(key, rule_defined): diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch new file mode 100644 index 000000000000..e6b71ab0c4f5 --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch @@ -0,0 +1,14 @@ +Emitting jdeps is broken for the 2.0.0 kotlin extractor, and we don't need those files. +Patching it here rather than passing `--@rules_kotlin//kotlin/settings:jvm_emit_jdeps=false` +allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in `semmle-code`. +--- a/kotlin/settings/BUILD.bazel ++++ b/kotlin/settings/BUILD.bazel +@@ -16,6 +16,6 @@ release_archive( + # Flag that controls the emission of jdeps files during kotlin jvm compilation. + bool_flag( + name = "jvm_emit_jdeps", +- build_setting_default = True, # Upstream default behavior ++ build_setting_default = False, + visibility = ["//visibility:public"], + ) + diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json new file mode 100644 index 000000000000..23deb231a09f --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json @@ -0,0 +1,9 @@ +{ + "integrity": "sha256-QR2yavs0ksyDUbW1NJkxUir+LFTyZRttEncwoSVtD2A=", + "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.2.2/rules_kotlin-v2.2.2.tar.gz", + "patches": { + "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=", + "codeql_do_not_emit_jdeps.patch": "sha256-gIlhXEY71vlCkpr5wj2vm3yv6RwcuKLhgbTGqdVvQfU=" + }, + "patch_strip": 1 +} diff --git a/misc/bazel/registry/modules/rules_kotlin/metadata.json b/misc/bazel/registry/modules/rules_kotlin/metadata.json index 3609865f4d5b..23266f29c4e1 100644 --- a/misc/bazel/registry/modules/rules_kotlin/metadata.json +++ b/misc/bazel/registry/modules/rules_kotlin/metadata.json @@ -22,6 +22,7 @@ ], "versions": [ "2.2.0-codeql.1", + "2.2.2-codeql.1" ], "yanked_versions": {} } diff --git a/misc/codegen/BUILD.bazel b/misc/codegen/BUILD.bazel index c7b88de96b7d..90e9842a9410 100644 --- a/misc/codegen/BUILD.bazel +++ b/misc/codegen/BUILD.bazel @@ -5,6 +5,9 @@ py_binary( srcs = ["codegen.py"], data = [ "//misc/codegen/templates:cpp", + "//misc/codegen/templates:dbscheme", + "//misc/codegen/templates:ql", + "//misc/codegen/templates:rust", "//misc/codegen/templates:trap", ], visibility = ["//visibility:public"], diff --git a/misc/codegen/templates/BUILD.bazel b/misc/codegen/templates/BUILD.bazel index a86346245af1..9068cc7f66ec 100644 --- a/misc/codegen/templates/BUILD.bazel +++ b/misc/codegen/templates/BUILD.bazel @@ -1,5 +1,10 @@ package(default_visibility = ["//misc/codegen:__subpackages__"]) +filegroup( + name = "dbscheme", + srcs = ["dbscheme.mustache"], +) + filegroup( name = "trap", srcs = glob(["trap_*.mustache"]), @@ -9,3 +14,13 @@ filegroup( name = "cpp", srcs = glob(["cpp_*.mustache"]), ) + +filegroup( + name = "ql", + srcs = glob(["ql_*.mustache"]), +) + +filegroup( + name = "rust", + srcs = glob(["rust_*.mustache"]), +) From 37261b2f5c9eec1966f750b7241161232a7eb9b7 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 6 Feb 2026 13:04:59 +0100 Subject: [PATCH 042/243] fix: sort use_repo alphabetically in rules_kotlin MODULE.bazel --- .../registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel index 2c77fc8adb2c..ec37914a8f73 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel @@ -29,10 +29,10 @@ use_repo( "com_github_google_ksp", "com_github_jetbrains_kotlin", "com_github_pinterest_ktlint", + "kotlin_build_tools_impl", "kotlinx_serialization_core_jvm", "kotlinx_serialization_json", "kotlinx_serialization_json_jvm", - "kotlin_build_tools_impl", ) register_toolchains("//kotlin/internal:default_toolchain") From 9f8ed710e28870ccd1044c53055bcce57ce062cf Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 10 Feb 2026 11:09:25 -0500 Subject: [PATCH 043/243] Update python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../CWE-918-ServerSideRequestForgery/test_path_validation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py index 3e6bb1f6d0c2..4560479d2b3e 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py @@ -56,8 +56,8 @@ def urivalidator_path_in_azure_storage_domain_validation(credential): def complex_urivalidator_checks(credential, trusted_domain): user_input = request.args['untrusted_input'] # Focus on in_domain only here for simplicity - # It assumed the logic underlying checking paths would apply - # similarly other validator methods + # It is assumed that the logic underlying path checking would apply + # similarly to other validator methods. url = f"https://{user_input}" if not URIValidator.in_domain(url, trusted_domain): From a91cf6b7cba78087cc011eea9cd15555c07a0c29 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 10 Feb 2026 11:37:11 -0500 Subject: [PATCH 044/243] Applying copilot PR suggestions. --- ...ServerSideRequestForgeryCustomizations.qll | 2 +- .../FullServerSideRequestForgery.expected | 129 +++++---- .../PartialServerSideRequestForgery.expected | 248 +++++++++--------- .../full_partial_test.py | 6 +- .../test_azure_client.py | 16 +- .../test_http_client.py | 2 +- .../test_path_validation.py | 80 +++--- .../test_requests.py | 8 +- 8 files changed, 244 insertions(+), 247 deletions(-) diff --git a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll index e75217d608f5..afce799d8acd 100644 --- a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll @@ -177,7 +177,7 @@ module ServerSideRequestForgery { ) } - /** A validation that a string does not contain certain characters, considered as a sanitizer. */ + /** A validation of a URI using the `AntiSSRF` library, considered as a full-ssrf sanitizer. */ private class UriValidator extends FullUrlControlSanitizer { UriValidator() { this = DataFlow::BarrierGuard::getABarrierNode() } } diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected index 19b5f7efa9d7..cb46c54ca702 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected @@ -13,32 +13,32 @@ | full_partial_test.py:89:5:89:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:89:18:89:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | full_partial_test.py:93:5:93:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:93:18:93:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | full_partial_test.py:97:5:97:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:97:18:97:20 | ControlFlowNode for url | The full URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:16:9:16:63 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:18:9:18:47 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:20:9:20:39 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:22:9:22:89 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:16:5:16:59 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:18:5:18:43 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:20:5:20:35 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:22:5:22:85 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | | test_azure_client.py:25:5:25:104 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:15:5:15:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:13:27:13:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:15:5:15:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:15:25:15:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:21:5:21:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:21:5:21:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:21:25:21:35 | ControlFlowNode for unsafe_path | The full URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:21:13:21:67 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:37:13:37:64 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:53:13:53:51 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:64:13:64:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:64:36:64:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:71:13:71:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:71:36:71:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:74:13:74:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:74:36:74:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:79:13:79:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:87:13:87:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:87:36:87:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:90:13:90:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:90:36:90:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:95:13:95:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:95:36:95:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:102:13:102:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:102:36:102:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:107:13:107:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:107:36:107:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:110:13:110:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:110:36:110:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:115:13:115:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:115:36:115:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:122:13:122:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:122:36:122:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:125:13:125:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:125:36:125:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:132:13:132:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:132:36:132:38 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:21:9:21:63 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:37:9:37:60 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:53:9:53:47 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:64:9:64:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:71:9:71:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:74:9:74:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:79:9:79:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:87:9:87:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:90:9:90:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:95:9:95:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:102:9:102:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:107:9:107:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:110:9:110:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:115:9:115:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:122:9:122:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:125:9:125:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:132:9:132:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | | test_requests.py:9:5:9:28 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_requests.py:17:5:17:27 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_requests.py:22:16:22:55 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | @@ -85,10 +85,10 @@ edges | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | @@ -113,31 +113,31 @@ edges | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:36:64:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:36:71:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:36:74:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:36:87:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:36:90:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:36:95:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:36:102:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:36:107:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:36:110:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:36:115:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:36:122:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:36:125:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:36:132:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | @@ -192,10 +192,10 @@ nodes | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_http_client.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | @@ -215,34 +215,34 @@ nodes | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:64:36:64:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:71:36:71:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:74:36:74:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:79:36:79:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:87:36:87:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:90:36:90:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:95:36:95:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:102:36:102:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:107:36:107:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:110:36:110:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:115:36:115:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:122:36:122:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:125:36:125:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:132:36:132:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:64:32:64:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:71:32:71:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:74:32:74:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:79:32:79:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:87:32:87:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:90:32:90:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:95:32:95:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:102:32:102:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:107:32:107:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:110:32:110:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:115:32:115:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:122:32:122:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:125:32:125:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:132:32:132:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_requests.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | @@ -255,6 +255,3 @@ nodes | test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths -testFailures -| test_requests.py:39:40:39:62 | Comment # $ Alert[py/full-ssrf] | Missing result: Alert[py/full-ssrf] | -| test_requests.py:49:40:49:62 | Comment # $ Alert[py/full-ssrf] | Missing result: Alert[py/full-ssrf] | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index 0d3f49c200eb..314aa99ef60f 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -6,39 +6,39 @@ | full_partial_test.py:126:5:126:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:126:18:126:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | full_partial_test.py:136:5:136:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:136:18:136:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | full_partial_test.py:143:5:143:21 | ControlFlowNode for Attribute() | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:143:18:143:20 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:15:9:15:58 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:15:32:15:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:17:9:17:42 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:17:39:17:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:19:9:19:34 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:19:19:19:21 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | -| test_azure_client.py:21:9:21:84 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:21:58:21:60 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:15:5:15:54 | ControlFlowNode for SecretClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:15:28:15:30 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:17:5:17:38 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:17:35:17:37 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:19:5:19:30 | ControlFlowNode for KeyClient() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:19:15:19:17 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | +| test_azure_client.py:21:5:21:80 | ControlFlowNode for Attribute() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:21:54:21:56 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | | test_azure_client.py:24:5:24:100 | ControlFlowNode for download_blob_from_url() | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_azure_client.py:6:19:6:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:25:5:25:31 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:19:27:19:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:30:5:30:31 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:28:27:28:37 | ControlFlowNode for unsafe_host | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:34:5:34:36 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:34:25:34:35 | ControlFlowNode for unsafe_path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:39:5:39:29 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:39:25:39:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_http_client.py:44:5:44:29 | ControlFlowNode for Attribute() | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:44:25:44:28 | ControlFlowNode for path | Part of the URL of this request depends on a $@. | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:14:13:14:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:14:36:14:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:16:13:16:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:16:36:16:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:19:13:19:67 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:19:36:19:43 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:30:13:30:59 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:30:33:30:35 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:32:13:32:59 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:32:33:32:35 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:35:13:35:64 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:35:33:35:40 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:46:13:46:46 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:46:43:46:45 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:48:13:48:46 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:48:43:48:45 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:51:13:51:51 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:51:43:51:50 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:66:13:66:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:66:36:66:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:69:13:69:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:69:36:69:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:76:13:76:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:76:36:76:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:81:13:81:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:81:36:81:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:85:13:85:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:85:36:85:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:92:13:92:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:92:36:92:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:97:13:97:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:97:36:97:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:100:13:100:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:100:36:100:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:105:13:105:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:105:36:105:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:112:13:112:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:112:36:112:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:117:13:117:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:117:36:117:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:120:13:120:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:120:36:120:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:127:13:127:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:127:36:127:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | -| test_path_validation.py:130:13:130:62 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:130:36:130:38 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:14:9:14:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:14:32:14:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:16:9:16:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:16:32:16:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:19:9:19:63 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:30:9:30:55 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:30:29:30:31 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:32:9:32:55 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:32:29:32:31 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:35:9:35:60 | ControlFlowNode for KeyClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:46:9:46:42 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:46:39:46:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:48:9:48:42 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:48:39:48:41 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:51:9:51:47 | ControlFlowNode for Attribute() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:66:9:66:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:66:32:66:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:69:9:69:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:69:32:69:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:76:9:76:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:76:32:76:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:81:9:81:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:81:32:81:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:85:9:85:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:85:32:85:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:92:9:92:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:92:32:92:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:97:9:97:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:97:32:97:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:100:9:100:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:100:32:100:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:105:9:105:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:105:32:105:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:112:9:112:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:112:32:112:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:117:9:117:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:117:32:117:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:120:9:120:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:120:32:120:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:127:9:127:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:127:32:127:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | +| test_path_validation.py:130:9:130:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:130:32:130:34 | ControlFlowNode for url | Part of the URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | edges | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | @@ -126,15 +126,15 @@ edges | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:15:32:15:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:17:39:17:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:19:19:19:21 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:21:58:21:60 | ControlFlowNode for url | provenance | Sink:MaD:26 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:15:28:15:30 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:17:35:17:37 | ControlFlowNode for url | provenance | Sink:MaD:38 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:19:15:19:17 | ControlFlowNode for url | provenance | Sink:MaD:14 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:21:54:21:56 | ControlFlowNode for url | provenance | Sink:MaD:26 | | test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | provenance | Sink:MaD:27 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | @@ -169,58 +169,58 @@ edges | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:14:36:14:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:16:36:16:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:19:36:19:43 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:14:32:14:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:16:32:16:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | | test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | test_path_validation.py:26:5:26:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:30:33:30:35 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:32:33:32:35 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:35:33:35:40 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:30:29:30:31 | ControlFlowNode for url | provenance | Sink:MaD:14 | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:32:29:32:31 | ControlFlowNode for url | provenance | Sink:MaD:14 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | | test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | test_path_validation.py:42:5:42:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:46:43:46:45 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:48:43:48:45 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:51:43:51:50 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:46:39:46:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:48:39:48:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:36:64:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:66:36:66:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:69:36:69:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:36:71:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:36:74:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:76:36:76:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:36:79:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:81:36:81:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:85:36:85:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:36:87:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:36:90:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:92:36:92:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:36:95:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:97:36:97:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:100:36:100:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:36:102:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:105:36:105:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:36:107:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:36:110:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:112:36:112:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:36:115:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:117:36:117:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:120:36:120:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:36:122:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:36:125:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:127:36:127:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:130:36:130:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:36:132:38 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:66:32:66:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:69:32:69:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:76:32:76:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:81:32:81:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:85:32:85:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:92:32:92:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:97:32:97:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:100:32:100:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:105:32:105:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:112:32:112:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:117:32:117:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:120:32:120:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:127:32:127:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:130:32:130:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | @@ -311,14 +311,14 @@ nodes | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_azure_client.py:12:5:12:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:15:32:15:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:16:32:16:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:17:39:17:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:18:39:18:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:19:19:19:21 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:20:19:20:26 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_azure_client.py:21:58:21:60 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_azure_client.py:22:58:22:65 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:15:28:15:30 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:17:35:17:37 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:19:15:19:17 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_azure_client.py:21:54:21:56 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | @@ -347,61 +347,61 @@ nodes | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:10:5:10:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:14:36:14:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:16:36:16:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:19:36:19:43 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:21:36:21:43 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:14:32:14:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:16:32:16:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:26:5:26:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:30:33:30:35 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:32:33:32:35 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:35:33:35:40 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:37:33:37:40 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:30:29:30:31 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:32:29:32:31 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | semmle.label | ControlFlowNode for user_input2 | | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:42:5:42:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:46:43:46:45 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:48:43:48:45 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:51:43:51:50 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | -| test_path_validation.py:53:43:53:50 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:46:39:46:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:48:39:48:41 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | +| test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | semmle.label | ControlFlowNode for full_url | | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:64:36:64:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:66:36:66:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:69:36:69:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:71:36:71:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:74:36:74:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:76:36:76:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:79:36:79:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:81:36:81:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:85:36:85:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:87:36:87:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:90:36:90:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:92:36:92:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:95:36:95:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:97:36:97:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:100:36:100:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:102:36:102:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:105:36:105:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:107:36:107:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:110:36:110:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:112:36:112:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:115:36:115:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:117:36:117:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:120:36:120:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:122:36:122:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:125:36:125:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:127:36:127:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:130:36:130:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | -| test_path_validation.py:132:36:132:38 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:64:32:64:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:66:32:66:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:69:32:69:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:71:32:71:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:74:32:74:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:76:32:76:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:79:32:79:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:81:32:81:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:85:32:85:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:87:32:87:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:90:32:90:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:92:32:92:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:95:32:95:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:97:32:97:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:100:32:100:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:102:32:102:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:105:32:105:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:107:32:107:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:110:32:110:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:112:32:112:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:115:32:115:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:117:32:117:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:120:32:120:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:122:32:122:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:125:32:125:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:127:32:127:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:130:32:130:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | +| test_path_validation.py:132:32:132:34 | ControlFlowNode for url | semmle.label | ControlFlowNode for url | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | test_requests.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | @@ -414,5 +414,3 @@ nodes | test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths -testFailures -| test_requests.py:1:27:1:36 | Comment # $ Source | Missing result: Source | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py index e2f4fc050262..7b7d067b611c 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/full_partial_test.py @@ -1,6 +1,6 @@ from flask import request # $ Source -import requests +import requests import re def full_ssrf(): @@ -122,7 +122,7 @@ def partial_ssrf_4(): user_input = request.args['untrusted_input'] url = "https://example.com/foo#{}".format(user_input) - # NOT OK -- user contollred fragment + # NOT OK -- user controlled fragment requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_5(): @@ -132,7 +132,7 @@ def partial_ssrf_5(): # controlled url = "https://example.com/foo#%s" % user_input - # NOT OK -- user contollred fragment + # NOT OK -- user controlled fragment requests.get(url) # $ Alert[py/partial-ssrf] def partial_ssrf_6(): diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py index 5dbb7e1ede47..ac4ff4d365e5 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_azure_client.py @@ -12,14 +12,14 @@ def azure_sdk_test(credential, output_path): url = f"https://example.com/foo#{user_input}" full_url = f"https://{user_input2}" # Testing Azure sink - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] - c = SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] - c = ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] - c = ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] - c = KeyClient(url, credential) # $ Alert[py/partial-ssrf] - c = KeyClient(full_url, credential) # $ Alert[py/full-ssrf] - c = ContainerClient.from_container_url(container_url=url, credential=credential) # $ Alert[py/partial-ssrf] - c = ContainerClient.from_container_url(container_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] + KeyClient(url, credential) # $ Alert[py/partial-ssrf] + KeyClient(full_url, credential) # $ Alert[py/full-ssrf] + ContainerClient.from_container_url(container_url=url, credential=credential) # $ Alert[py/partial-ssrf] + ContainerClient.from_container_url(container_url=full_url, credential=credential) # $ Alert[py/full-ssrf] download_blob_from_url(blob_url=url, output=output_path, credential=credential, overwrite=True ) # $ Alert[py/partial-ssrf] download_blob_from_url(blob_url=full_url, output=output_path, credential=credential, overwrite=True) # $ Alert[py/full-ssrf] diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py index 0a238878e35e..da812eb6c549 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_http_client.py @@ -14,7 +14,7 @@ def ssrf_test(): # NOT OK -- user has full control conn.request("GET", unsafe_path) # $ Alert[py/full-ssrf] - # Full SSRF variant, where there is AlSO made a request with fixed URL on the same + # Full SSRF variant, where there is also a request with fixed URL on the same # connection later on. This should not change anything on the overall SSRF alerts. conn = HTTPConnection(unsafe_host) # $ Sink # NOT OK -- user has full control diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py index 4560479d2b3e..ce5a6d33833b 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_path_validation.py @@ -11,14 +11,14 @@ def urivalidator_path_in_domain_validation(credential, trusted_domain): full_url = f"https://{user_input2}" if URIValidator.in_domain(url, trusted_domain): - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(full_url, trusted_domain): - c = SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] def urivalidator_path_in_azure_keyvault_domain_validation(credential): user_input = request.args['untrusted_input'] @@ -27,14 +27,14 @@ def urivalidator_path_in_azure_keyvault_domain_validation(credential): full_url = f"https://{user_input2}" if URIValidator.in_azure_keyvault_domain(url): - c = KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + KeyClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_azure_keyvault_domain(full_url): - c = KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] + KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] + KeyClient(vault_url=full_url, credential=credential) # $ Alert[py/full-ssrf] def urivalidator_path_in_azure_storage_domain_validation(credential): user_input = request.args['untrusted_input'] @@ -43,14 +43,14 @@ def urivalidator_path_in_azure_storage_domain_validation(credential): full_url = f"https://{user_input2}" if URIValidator.in_azure_storage_domain(url): - c = ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] else: - c = ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] + ShareFileClient.from_file_url(url) # $ Alert[py/partial-ssrf] if URIValidator.in_azure_storage_domain(full_url): - c = ShareFileClient.from_file_url(full_url) # $ Alert[py/partial-ssrf] + ShareFileClient.from_file_url(full_url) # $ Alert[py/partial-ssrf] else: - c = ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] + ShareFileClient.from_file_url(full_url) # $ Alert[py/full-ssrf] def complex_urivalidator_checks(credential, trusted_domain): @@ -61,72 +61,72 @@ def complex_urivalidator_checks(credential, trusted_domain): url = f"https://{user_input}" if not URIValidator.in_domain(url, trusted_domain): - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com": - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if not (URIValidator.in_domain(url, trusted_domain) and trusted_domain == "example.com"): - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if not not not URIValidator.in_domain(url, trusted_domain): - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) == True: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if URIValidator.in_domain(url, trusted_domain) == False: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) != True: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) != False: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if URIValidator.in_domain(url, trusted_domain) is True: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if URIValidator.in_domain(url, trusted_domain) is False: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) is not True: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if URIValidator.in_domain(url, trusted_domain) is not False: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] if not URIValidator.in_domain(url, trusted_domain) is True: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] if not URIValidator.in_domain(url, trusted_domain) is False: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] + SecretClient(vault_url=url, credential=credential) # $ Alert[py/partial-ssrf] else: - c = SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] \ No newline at end of file + SecretClient(vault_url=url, credential=credential) # $ Alert[py/full-ssrf] \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py index cfa2e6aa5a70..fa5da6cef490 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py @@ -1,4 +1,4 @@ -from flask import request # $ Source +from flask import request # $ Source[py/full-ssrf] from AntiSSRF import AntiSSRFPolicy import requests @@ -36,7 +36,8 @@ def ssrf_test_with_policy2(): # this makes the session unsafe again session.mount("http://", requests.adapters.HTTPAdapter()) # NOT OK -- dangerous user input is no longer filtered by AntiSSRFPolicy - response = session.get(user_input) # $ Alert[py/full-ssrf] + # TODO: not currently a scenario we detect. + session.get(user_input) # $ MISSING: Alert[py/full-ssrf] def ssrf_test_with_policy3(adapter): user_input = request.args['untrusted_input'] @@ -46,4 +47,5 @@ def ssrf_test_with_policy3(adapter): # this could make the session unsafe again session.mount("http://", adapter) # NOT OK -- dangerous user input is no longer filtered by AntiSSRFPolicy - response = session.get(user_input) # $ Alert[py/full-ssrf] \ No newline at end of file + # TODO: not currently a scenario we detect. + session.get(user_input) # $ MISSING: Alert[py/full-ssrf] \ No newline at end of file From 4bb110beb87256fdef01f122b2bf9f8c7d254b70 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 10 Feb 2026 11:46:16 -0500 Subject: [PATCH 045/243] More copilot suggestions. --- .../CWE-918-ServerSideRequestForgery/test_requests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py index fa5da6cef490..6489096c969e 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/test_requests.py @@ -19,14 +19,14 @@ def ssrf_test2(): def ssrf_test3(): user_input = request.args['untrusted_input'] # NOT OK -- user has full control - response = requests.request('', user_input) # $ Alert[py/full-ssrf] + requests.request('', user_input) # $ Alert[py/full-ssrf] def ssrf_test_with_policy1(): user_input = request.args['untrusted_input'] policy = AntiSSRFPolicy() session = policy.get_antissrf_session() # OK -- dangerous user input is filtered by AntiSSRFPolicy - response = session.get(user_input) + session.get(user_input) def ssrf_test_with_policy2(): user_input = request.args['untrusted_input'] From 9f9c353806ae05361c5bf4515036e722f89b4176 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Tue, 10 Feb 2026 11:47:23 -0500 Subject: [PATCH 046/243] Update expected files. Copilot suggestions broke unit test expected results (column numbers). --- .../FullServerSideRequestForgery.expected | 6 +++--- .../PartialServerSideRequestForgery.expected | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected index cb46c54ca702..c2fd16bfab7e 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected @@ -41,7 +41,7 @@ | test_path_validation.py:132:9:132:58 | ControlFlowNode for SecretClient() | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | The full URL of this request depends on a $@. | test_path_validation.py:5:19:5:25 | ControlFlowNode for ImportMember | user-provided value | | test_requests.py:9:5:9:28 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:9:18:9:27 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | | test_requests.py:17:5:17:27 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | -| test_requests.py:22:16:22:55 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | +| test_requests.py:22:5:22:44 | ControlFlowNode for Attribute() | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | The full URL of this request depends on a $@. | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | user-provided value | edges | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | provenance | | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | full_partial_test.py:7:18:7:24 | ControlFlowNode for request | provenance | | @@ -146,7 +146,7 @@ edges | test_requests.py:7:18:7:24 | ControlFlowNode for request | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | provenance | | | test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | provenance | | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | provenance | | | test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | @@ -253,5 +253,5 @@ nodes | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:22:45:22:54 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:22:34:22:43 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index 314aa99ef60f..8cc69590b7e0 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -229,7 +229,7 @@ edges | test_requests.py:7:18:7:24 | ControlFlowNode for request | test_requests.py:7:5:7:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | provenance | | | test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:45:22:54 | ControlFlowNode for user_input | provenance | | +| test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | provenance | | | test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | @@ -412,5 +412,5 @@ nodes | test_requests.py:17:17:17:26 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | | test_requests.py:20:18:20:24 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test_requests.py:22:45:22:54 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | +| test_requests.py:22:34:22:43 | ControlFlowNode for user_input | semmle.label | ControlFlowNode for user_input | subpaths From 000d8244c4cabb38cc145971b63c5a866c3a3411 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 11 Feb 2026 09:29:42 +0100 Subject: [PATCH 047/243] address review --- misc/bazel/registry/fix.py | 4 +-- .../rules_kotlin/2.2.0-codeql.1/MODULE.bazel | 36 ------------------- .../codeql_add_language_version_option.patch | 30 ---------------- .../patches/codeql_do_not_emit_jdeps.patch | 14 -------- .../rules_kotlin/2.2.0-codeql.1/source.json | 9 ----- .../patches/codeql_do_not_emit_jdeps.patch | 3 +- .../rules_kotlin/2.2.2-codeql.1/source.json | 2 +- .../modules/rules_kotlin/metadata.json | 1 - swift/rules.bzl | 3 +- 9 files changed, 6 insertions(+), 96 deletions(-) delete mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/MODULE.bazel delete mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_add_language_version_option.patch delete mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch delete mode 100644 misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json diff --git a/misc/bazel/registry/fix.py b/misc/bazel/registry/fix.py index 863c832be59d..57a2bf3b3f97 100755 --- a/misc/bazel/registry/fix.py +++ b/misc/bazel/registry/fix.py @@ -62,10 +62,10 @@ def update(data): patch_json( version / "source.json", patches={ - p.name: sha256(p) for p in patches.iterdir() + p.name: sha256(p) for p in sorted(patches.iterdir()) } if patches.is_dir() else None, patch_strip=1 if patches.is_dir() else None, overlay={ - o.name: sha256(o) for o in overlay.iterdir() + o.name: sha256(o) for o in sorted(overlay.iterdir()) } if overlay.is_dir() else None, ) diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/MODULE.bazel deleted file mode 100644 index df66ce2051ab..000000000000 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/MODULE.bazel +++ /dev/null @@ -1,36 +0,0 @@ -module( - name = "rules_kotlin", - version = "2.2.0-codeql.1", - compatibility_level = 1, - repo_name = "rules_kotlin", -) - -bazel_dep(name = "platforms", version = "0.0.11") -bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "rules_java", version = "7.2.0") -bazel_dep(name = "rules_android", version = "0.6.4") -bazel_dep(name = "bazel_features", version = "1.25.0") -bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") -bazel_dep(name = "rules_proto", version = "6.0.2", repo_name = "rules_proto") -bazel_dep(name = "abseil-py", version = "2.1.0", repo_name = "py_absl") -bazel_dep(name = "rules_cc", version = "0.0.16") - -rules_java_toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains") -use_repo(rules_java_toolchains, "remote_java_tools") - -rules_kotlin_extensions = use_extension( - "//src/main/starlark/core/repositories:bzlmod_setup.bzl", - "rules_kotlin_extensions", -) -use_repo( - rules_kotlin_extensions, - "com_github_google_ksp", - "com_github_jetbrains_kotlin", - "com_github_pinterest_ktlint", - "kotlin_build_tools_impl", - "kotlinx_serialization_core_jvm", - "kotlinx_serialization_json", - "kotlinx_serialization_json_jvm", -) - -register_toolchains("//kotlin/internal:default_toolchain") diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_add_language_version_option.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_add_language_version_option.patch deleted file mode 100644 index 795d1f88f387..000000000000 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_add_language_version_option.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/src/main/starlark/core/options/opts.kotlinc.bzl 2000-01-01 01:00:00.000000000 +0100 -+++ b/src/main/starlark/core/options/opts.kotlinc.bzl 2025-11-17 16:51:01.012063056 +0100 -@@ -51,6 +51,11 @@ - return None - return ["-Xjdk-release=%s" % version] - -+def _map_language_version_to_flag(version): -+ if not version: -+ return None -+ return ["-language-version=%s" % version, "-api-version=%s" % version] -+ - _KOPTS_ALL = { - "include_stdlibs": struct( - args = dict( -@@ -495,6 +500,15 @@ - value_to_flag = None, - map_value_to_flag = _map_warning_level, - ), -+ "language_version": struct( -+ args = dict( -+ default = "1.9", -+ doc = "-language-version", -+ ), -+ type = attr.string, -+ value_to_flag = None, -+ map_value_to_flag = _map_language_version_to_flag, -+ ), - } - - def _merge(key, rule_defined): diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch deleted file mode 100644 index e6b71ab0c4f5..000000000000 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/patches/codeql_do_not_emit_jdeps.patch +++ /dev/null @@ -1,14 +0,0 @@ -Emitting jdeps is broken for the 2.0.0 kotlin extractor, and we don't need those files. -Patching it here rather than passing `--@rules_kotlin//kotlin/settings:jvm_emit_jdeps=false` -allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in `semmle-code`. ---- a/kotlin/settings/BUILD.bazel -+++ b/kotlin/settings/BUILD.bazel -@@ -16,6 +16,6 @@ release_archive( - # Flag that controls the emission of jdeps files during kotlin jvm compilation. - bool_flag( - name = "jvm_emit_jdeps", -- build_setting_default = True, # Upstream default behavior -+ build_setting_default = False, - visibility = ["//visibility:public"], - ) - diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json deleted file mode 100644 index ca35aa4a5c12..000000000000 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.0-codeql.1/source.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "integrity": "sha256-4STROYYIW8ChW+LIXBQVurVwhEK3jSSf4iv430OlNA0=", - "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.2.0/rules_kotlin-v2.2.0.tar.gz", - "patches": { - "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=", - "codeql_do_not_emit_jdeps.patch": "sha256-gIlhXEY71vlCkpr5wj2vm3yv6RwcuKLhgbTGqdVvQfU=" - }, - "patch_strip": 1 -} diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch index e6b71ab0c4f5..838750ba12eb 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch @@ -1,6 +1,7 @@ Emitting jdeps is broken for the 2.0.0 kotlin extractor, and we don't need those files. Patching it here rather than passing `--@rules_kotlin//kotlin/settings:jvm_emit_jdeps=false` -allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in `semmle-code`. +allows us to not have to specify that option (and therefore pull in `rules_kotlin`) in the +internal repo. --- a/kotlin/settings/BUILD.bazel +++ b/kotlin/settings/BUILD.bazel @@ -16,6 +16,6 @@ release_archive( diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json index 23deb231a09f..7025fb00a273 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json +++ b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json @@ -3,7 +3,7 @@ "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.2.2/rules_kotlin-v2.2.2.tar.gz", "patches": { "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=", - "codeql_do_not_emit_jdeps.patch": "sha256-gIlhXEY71vlCkpr5wj2vm3yv6RwcuKLhgbTGqdVvQfU=" + "codeql_do_not_emit_jdeps.patch": "sha256-cg06knW+Eq13qHCaelbnZka/WnGPvRrcqXHtpXsy/rA=" }, "patch_strip": 1 } diff --git a/misc/bazel/registry/modules/rules_kotlin/metadata.json b/misc/bazel/registry/modules/rules_kotlin/metadata.json index 23266f29c4e1..ea756f783643 100644 --- a/misc/bazel/registry/modules/rules_kotlin/metadata.json +++ b/misc/bazel/registry/modules/rules_kotlin/metadata.json @@ -21,7 +21,6 @@ "github:bazelbuild/rules_kotlin" ], "versions": [ - "2.2.0-codeql.1", "2.2.2-codeql.1" ], "yanked_versions": {} diff --git a/swift/rules.bzl b/swift/rules.bzl index f0fde7e71401..d479f6bff112 100644 --- a/swift/rules.bzl +++ b/swift/rules.bzl @@ -1,5 +1,4 @@ -load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library") -load("@rules_cc//cc/common:cc_info.bzl", "CcInfo") +load("@rules_cc//cc:defs.bzl", "CcInfo", "cc_binary", "cc_library") load("//misc/bazel:os.bzl", "os_select") # TODO: make a shared library with the internal repos for transitions From 9f5b8141f01c961f82f83b1c04ea030b8d1722e9 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 11 Feb 2026 16:11:30 +0100 Subject: [PATCH 048/243] Rust: Fix bad join Before ``` Pipeline standard for TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc@be110b6w was evaluated in 512 iterations totaling 114ms (delta sizes total: 10942). 8395 ~0% {5} r1 = JOIN `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev_delta` WITH `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#prev` ON FIRST 3 OUTPUT Lhs.1, Lhs.2, _, Lhs.0, Lhs.3 8395 ~0% {4} | REWRITE WITH Tmp.2 := 1, Out.2 := (Tmp.2 + In.4) KEEPING 4 8448 ~0% {5} | JOIN WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2_0132#join_rhs` ON FIRST 3 OUTPUT Lhs.3, Rhs.3, Lhs.0, Lhs.1, Lhs.2 7440 ~0% {5} | JOIN WITH TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::MkCallAndPos#53e3fb94#prev ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.0, Lhs.3, Lhs.4 0 ~0% {4} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::ArgIsInstantiationOfToIndex::ArgSubstIsInstantiationOf::isInstantiationOf/3#5154f0d6#prev` ON FIRST 2 OUTPUT Lhs.2, Lhs.1, Lhs.3, Lhs.4 2937 ~0% {5} r2 = JOIN TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::MkCallAndPos#53e3fb94#prev_delta WITH `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#prev` ON FIRST 1 OUTPUT Lhs.2, Rhs.1, Lhs.0, Lhs.1, Rhs.2 0 ~0% {4} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::ArgIsInstantiationOfToIndex::ArgSubstIsInstantiationOf::isInstantiationOf/3#5154f0d6#prev` ON FIRST 2 OUTPUT Lhs.1, Lhs.4, Lhs.3, Lhs.2 0 ~0% {6} r3 = JOIN r2 WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 3 OUTPUT Lhs.3, Lhs.2, Lhs.0, Lhs.1, Rhs.3, _ {5} | REWRITE WITH Tmp.5 := 0, TEST InOut.4 = Tmp.5 KEEPING 5 0 ~0% {5} | SCAN OUTPUT In.2, In.3, In.1, _, In.0 0 ~0% {5} | REWRITE WITH Out.3 := 0 0 ~0% {4} | JOIN WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 4 OUTPUT Lhs.4, Lhs.0, Lhs.1, _ 0 ~0% {4} | REWRITE WITH Out.3 := 0 12463 ~0% {2} r4 = SCAN `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::ArgIsInstantiationOfToIndex::ArgSubstIsInstantiationOf::isInstantiationOf/3#5154f0d6#prev_delta` OUTPUT In.1, In.0 22532135 ~0% {4} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#reorder_1_0_2#prev` ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0, Rhs.2 12463 ~0% {4} | JOIN WITH TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::MkCallAndPos#53e3fb94#reorder_0_2_1#prev ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Rhs.2, Lhs.0 12463 ~2% {6} r5 = JOIN r4 WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 3 OUTPUT Lhs.0, Lhs.3, Lhs.1, Lhs.2, Rhs.3, _ {5} | REWRITE WITH Tmp.5 := 0, TEST InOut.4 = Tmp.5 KEEPING 5 4285 ~0% {5} | SCAN OUTPUT In.0, In.2, In.3, _, In.1 4285 ~0% {5} | REWRITE WITH Out.3 := 0 4285 ~1% {4} | JOIN WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 4 OUTPUT Lhs.4, Lhs.0, Lhs.1, _ 4285 ~1% {4} | REWRITE WITH Out.3 := 0 0 ~0% {4} r6 = JOIN r2 WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 3 OUTPUT Lhs.3, Lhs.0, Lhs.1, Rhs.3 0 ~0% {6} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Rhs.3, _ {6} | REWRITE WITH Tmp.5 := 1, Out.5 := (InOut.3 - Tmp.5), TEST Out.5 = InOut.4 0 ~0% {4} | SCAN OUTPUT In.0, In.1, In.2, In.3 12463 ~45% {4} r7 = JOIN r4 WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 3 OUTPUT Lhs.3, Lhs.0, Lhs.1, Rhs.3 8178 ~50% {6} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev` ON FIRST 3 OUTPUT Lhs.1, Lhs.0, Lhs.2, Lhs.3, Rhs.3, _ {6} | REWRITE WITH Tmp.5 := 1, Out.5 := (InOut.3 - Tmp.5), TEST Out.5 = InOut.4 7428 ~58% {4} | SCAN OUTPUT In.1, In.0, In.2, In.3 4264 ~0% {3} r8 = SCAN `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#prev_delta` OUTPUT In.1, In.2, In.0 4312 ~0% {5} r9 = JOIN r8 WITH `_project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/__#join_rhs#1` ON FIRST 2 OUTPUT Lhs.0, Lhs.1, Rhs.2, _, Lhs.2 4312 ~0% {5} | REWRITE WITH Out.3 := 0 4312 ~0% {5} | JOIN WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 4 OUTPUT Lhs.4, Lhs.2, Lhs.0, Lhs.1, _ 4312 ~0% {5} | REWRITE WITH Out.4 := 0 12760 ~0% {5} r10 = JOIN r8 WITH `project#TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::toCheckRanked/5#52f6d5e0#2` ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.1, Rhs.2, Rhs.3 0 ~0% {7} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev` ON FIRST 3 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.0, Rhs.3, _ {7} | REWRITE WITH Tmp.6 := 1, Out.6 := (InOut.3 - Tmp.6), TEST Out.6 = InOut.5 0 ~0% {5} | SCAN OUTPUT In.4, In.2, In.0, In.1, In.3 4312 ~0% {5} r11 = r9 UNION r10 4288 ~0% {5} | JOIN WITH TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::MkCallAndPos#53e3fb94#prev ON FIRST 2 OUTPUT Rhs.2, Lhs.2, Lhs.3, Lhs.4, Lhs.0 0 ~0% {4} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::ArgIsInstantiationOfToIndex::ArgSubstIsInstantiationOf::isInstantiationOf/3#5154f0d6#prev` ON FIRST 2 OUTPUT Lhs.4, Lhs.1, Lhs.2, Lhs.3 11713 ~36% {4} r12 = r1 UNION r3 UNION r5 UNION r6 UNION r7 UNION r11 10942 ~39% {4} | AND NOT `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev`(FIRST 4) return r12 ``` After ``` Pipeline standard for TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc@07309ry7 was evaluated in 168 iterations totaling 145ms (delta sizes total: 8395). 12517 ~0% {6} r1 = SCAN `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argIsInstantiationOf/5#efdc1fbb#reorder_0_2_3_4_1#prev_delta` OUTPUT In.0, In.1, In.2, In.3, In.4, _ 4337 ~0% {5} | REWRITE WITH Tmp.5 := 0, TEST InOut.3 = Tmp.5 KEEPING 5 4285 ~1% {4} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, _ 4285 ~1% {4} | REWRITE WITH Out.3 := 0 0 ~0% {4} r2 = JOIN `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#prev_delta` WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argIsInstantiationOf/5#efdc1fbb#reorder_0_2_3_4_1#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Rhs.3 0 ~0% {5} r3 = SCAN r2 OUTPUT In.0, In.1, In.2, In.3, _ {4} | REWRITE WITH Tmp.4 := 0, TEST InOut.3 = Tmp.4 KEEPING 4 0 ~0% {4} | SCAN OUTPUT In.0, In.1, In.2, _ 0 ~0% {4} | REWRITE WITH Out.3 := 0 8395 ~0% {5} r4 = JOIN `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev_delta` WITH `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, _, Lhs.3 8395 ~0% {4} | REWRITE WITH Tmp.3 := 1, Out.3 := (Tmp.3 + In.4) KEEPING 4 0 ~0% {4} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argIsInstantiationOf/5#efdc1fbb#reorder_0_2_3_4_1#prev` ON FIRST 4 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3 0 ~0% {6} r5 = JOIN r2 WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Rhs.3, _ {6} | REWRITE WITH Tmp.5 := 1, Out.5 := (InOut.3 - Tmp.5), TEST Out.5 = InOut.4 0 ~0% {4} | SCAN OUTPUT In.0, In.1, In.2, In.3 12517 ~18% {4} r6 = SCAN `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argIsInstantiationOf/5#efdc1fbb#reorder_0_2_3_4_1#prev_delta` OUTPUT In.0, In.1, In.2, In.3 11759 ~12% {4} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodCall.resolveCallTargetBlanketCand/1#dispred#f8b86f2d#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3 9874 ~12% {6} | JOIN WITH `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev` ON FIRST 3 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Rhs.3, _ {6} | REWRITE WITH Tmp.5 := 1, Out.5 := (InOut.3 - Tmp.5), TEST Out.5 = InOut.4 7476 ~18% {4} | SCAN OUTPUT In.0, In.1, In.2, In.3 11761 ~12% {4} r7 = r1 UNION r3 UNION r4 UNION r5 UNION r6 8395 ~0% {4} | AND NOT `TypeInference::NonMethodResolution::NonMethodArgsAreInstantiationsOfBlanket::argsAreInstantiationsOfToIndex/4#f6ff35dc#prev`(FIRST 4) return r7 ``` --- .../rust/internal/typeinference/FunctionType.qll | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll index aeb186c0cdcb..74d8385bdf20 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/FunctionType.qll @@ -419,14 +419,21 @@ module ArgsAreInstantiationsOf { private module ArgIsInstantiationOfToIndex = ArgIsInstantiationOf; + pragma[nomagic] + private predicate argIsInstantiationOf( + Input::Call call, FunctionPosition pos, ImplOrTraitItemNode i, Function f, int rnk + ) { + ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPos(call, pos), i, _) and + toCheckRanked(i, f, _, pos, rnk) + } + pragma[nomagic] private predicate argsAreInstantiationsOfToIndex( Input::Call call, ImplOrTraitItemNode i, Function f, int rnk ) { exists(FunctionPosition pos | - ArgIsInstantiationOfToIndex::argIsInstantiationOf(MkCallAndPos(call, pos), i, _) and - call.hasTargetCand(i, f) and - toCheckRanked(i, f, _, pos, rnk) + argIsInstantiationOf(call, pos, i, f, rnk) and + call.hasTargetCand(i, f) | rnk = 0 or From 4d4e7a1b5c21badf976d5647c34aae8eac49908d Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Thu, 12 Feb 2026 08:28:08 -0500 Subject: [PATCH 049/243] Pretty print for tests. --- .../FullServerSideRequestForgery.expected | 50 +++++---- .../FullServerSideRequestForgery.qlref | 4 +- .../PartialServerSideRequestForgery.expected | 106 +++++++++--------- .../PartialServerSideRequestForgery.qlref | 4 +- 4 files changed, 90 insertions(+), 74 deletions(-) diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected index c2fd16bfab7e..7434eca6978b 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.expected @@ -85,11 +85,11 @@ edges | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:3 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:5 | | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | @@ -113,31 +113,31 @@ edges | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | @@ -148,6 +148,12 @@ edges | test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | provenance | | | test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +models +| 1 | Sink: azure.keyvault.keys.KeyClient!; Call.Argument[0,vault_url:]; request-forgery | +| 2 | Sink: azure.keyvault.secrets.SecretClient!; Call.Argument[0,vault_url:]; request-forgery | +| 3 | Sink: azure.storage.blob.ContainerClient!; Member[from_container_url].Argument[0,container_url:]; request-forgery | +| 4 | Sink: azure.storage.fileshare.ShareFileClient!; Member[from_file_url].Argument[0,file_url:]; request-forgery | +| 5 | Sink: azure; Member[storage].Member[blob].Member[download_blob_from_url].Argument[0,blob_url:]; request-forgery | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref index 35a2814e7f40..f0a8d1e6b15c 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/FullServerSideRequestForgery.qlref @@ -1,2 +1,4 @@ query: Security/CWE-918/FullServerSideRequestForgery.ql -postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file +postprocess: +- utils/test/InlineExpectationsTestQuery.ql +- utils/test/PrettyPrintModels.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected index 8cc69590b7e0..0b8756071573 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.expected @@ -126,16 +126,16 @@ edges | test_azure_client.py:9:18:9:24 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | provenance | | | test_azure_client.py:10:19:10:25 | ControlFlowNode for request | test_azure_client.py:10:5:10:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:15:28:15:30 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:17:35:17:37 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:19:15:19:17 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:21:54:21:56 | ControlFlowNode for url | provenance | Sink:MaD:26 | -| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | provenance | Sink:MaD:27 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:26 | -| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:27 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:15:28:15:30 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:17:35:17:37 | ControlFlowNode for url | provenance | Sink:MaD:4 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:19:15:19:17 | ControlFlowNode for url | provenance | Sink:MaD:1 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:21:54:21:56 | ControlFlowNode for url | provenance | Sink:MaD:3 | +| test_azure_client.py:12:5:12:7 | ControlFlowNode for url | test_azure_client.py:24:37:24:39 | ControlFlowNode for url | provenance | Sink:MaD:5 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:16:28:16:35 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:18:35:18:42 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:20:15:20:22 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:22:54:22:61 | ControlFlowNode for full_url | provenance | Sink:MaD:3 | +| test_azure_client.py:13:5:13:12 | ControlFlowNode for full_url | test_azure_client.py:25:37:25:44 | ControlFlowNode for full_url | provenance | Sink:MaD:5 | | test_http_client.py:1:19:1:25 | ControlFlowNode for ImportMember | test_http_client.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:9:19:9:25 | ControlFlowNode for request | provenance | | | test_http_client.py:1:19:1:25 | ControlFlowNode for request | test_http_client.py:10:19:10:25 | ControlFlowNode for request | provenance | | @@ -169,58 +169,58 @@ edges | test_path_validation.py:8:18:8:24 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:9:19:9:25 | ControlFlowNode for request | test_path_validation.py:9:5:9:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:14:32:14:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:16:32:16:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | -| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:15 | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:14:32:14:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:10:5:10:7 | ControlFlowNode for url | test_path_validation.py:16:32:16:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:19:32:19:39 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | +| test_path_validation.py:11:5:11:12 | ControlFlowNode for full_url | test_path_validation.py:21:32:21:39 | ControlFlowNode for full_url | provenance | Sink:MaD:2 | | test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | test_path_validation.py:26:5:26:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:24:5:24:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_path_validation.py:24:18:24:24 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:25:19:25:25 | ControlFlowNode for request | test_path_validation.py:25:5:25:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:30:29:30:31 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:32:29:32:31 | ControlFlowNode for url | provenance | Sink:MaD:14 | -| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | -| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:14 | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:30:29:30:31 | ControlFlowNode for url | provenance | Sink:MaD:1 | +| test_path_validation.py:26:5:26:7 | ControlFlowNode for url | test_path_validation.py:32:29:32:31 | ControlFlowNode for url | provenance | Sink:MaD:1 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:35:29:35:36 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | +| test_path_validation.py:27:5:27:12 | ControlFlowNode for full_url | test_path_validation.py:37:29:37:36 | ControlFlowNode for full_url | provenance | Sink:MaD:1 | | test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | test_path_validation.py:42:5:42:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:40:5:40:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_path_validation.py:40:18:40:24 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | provenance | | | test_path_validation.py:41:19:41:25 | ControlFlowNode for request | test_path_validation.py:41:5:41:15 | ControlFlowNode for user_input2 | provenance | AdditionalTaintStep | -| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:46:39:46:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:48:39:48:41 | ControlFlowNode for url | provenance | Sink:MaD:38 | -| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | -| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:38 | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:46:39:46:41 | ControlFlowNode for url | provenance | Sink:MaD:4 | +| test_path_validation.py:42:5:42:7 | ControlFlowNode for url | test_path_validation.py:48:39:48:41 | ControlFlowNode for url | provenance | Sink:MaD:4 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:51:39:51:46 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | +| test_path_validation.py:43:5:43:12 | ControlFlowNode for full_url | test_path_validation.py:53:39:53:46 | ControlFlowNode for full_url | provenance | Sink:MaD:4 | | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | test_path_validation.py:61:5:61:7 | ControlFlowNode for url | provenance | | | test_path_validation.py:57:18:57:24 | ControlFlowNode for request | test_path_validation.py:57:5:57:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:66:32:66:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:69:32:69:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:76:32:76:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:81:32:81:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:85:32:85:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:92:32:92:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:97:32:97:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:100:32:100:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:105:32:105:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:112:32:112:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:117:32:117:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:120:32:120:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:127:32:127:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:130:32:130:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | -| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:15 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:64:32:64:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:66:32:66:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:69:32:69:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:71:32:71:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:74:32:74:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:76:32:76:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:79:32:79:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:81:32:81:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:85:32:85:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:87:32:87:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:90:32:90:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:92:32:92:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:95:32:95:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:97:32:97:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:100:32:100:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:102:32:102:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:105:32:105:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:107:32:107:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:110:32:110:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:112:32:112:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:115:32:115:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:117:32:117:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:120:32:120:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:122:32:122:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:125:32:125:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:127:32:127:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:130:32:130:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | +| test_path_validation.py:61:5:61:7 | ControlFlowNode for url | test_path_validation.py:132:32:132:34 | ControlFlowNode for url | provenance | Sink:MaD:2 | | test_requests.py:1:19:1:25 | ControlFlowNode for ImportMember | test_requests.py:1:19:1:25 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:7:18:7:24 | ControlFlowNode for request | provenance | | | test_requests.py:1:19:1:25 | ControlFlowNode for request | test_requests.py:14:18:14:24 | ControlFlowNode for request | provenance | | @@ -231,6 +231,12 @@ edges | test_requests.py:14:18:14:24 | ControlFlowNode for request | test_requests.py:14:5:14:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | test_requests.py:22:34:22:43 | ControlFlowNode for user_input | provenance | | | test_requests.py:20:18:20:24 | ControlFlowNode for request | test_requests.py:20:5:20:14 | ControlFlowNode for user_input | provenance | AdditionalTaintStep | +models +| 1 | Sink: azure.keyvault.keys.KeyClient!; Call.Argument[0,vault_url:]; request-forgery | +| 2 | Sink: azure.keyvault.secrets.SecretClient!; Call.Argument[0,vault_url:]; request-forgery | +| 3 | Sink: azure.storage.blob.ContainerClient!; Member[from_container_url].Argument[0,container_url:]; request-forgery | +| 4 | Sink: azure.storage.fileshare.ShareFileClient!; Member[from_file_url].Argument[0,file_url:]; request-forgery | +| 5 | Sink: azure; Member[storage].Member[blob].Member[download_blob_from_url].Argument[0,blob_url:]; request-forgery | nodes | full_partial_test.py:1:19:1:25 | ControlFlowNode for ImportMember | semmle.label | ControlFlowNode for ImportMember | | full_partial_test.py:1:19:1:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | diff --git a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref index 651b07aea55b..1161c990e220 100644 --- a/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref +++ b/python/ql/test/query-tests/Security/CWE-918-ServerSideRequestForgery/PartialServerSideRequestForgery.qlref @@ -1,2 +1,4 @@ query: Security/CWE-918/PartialServerSideRequestForgery.ql -postprocess: utils/test/InlineExpectationsTestQuery.ql \ No newline at end of file +postprocess: +- utils/test/InlineExpectationsTestQuery.ql +- utils/test/PrettyPrintModels.ql \ No newline at end of file From e2ad1f65111e75d22bfc8b0dad9b944b8c54d425 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Thu, 12 Feb 2026 09:20:55 -0500 Subject: [PATCH 050/243] C++: Updating comment per PR reveiw suggestions. --- cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll index 77c23d97b020..6916818cdc51 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll +++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll @@ -310,7 +310,9 @@ module PossibleYearArithmeticOperationCheckFlow = TaintTracking::Global; /** - * This list of APIs should check for the return value to detect problems during the conversion. + * Time conversion functions where either + * 1) an incorrect leap year date would result in an error that can be checked from the return value or + * 2) an incorrect leap year date is auto corrected (no checks required) */ class TimeConversionFunction extends Function { boolean autoLeapYearCorrecting; From d1eb9ab5d211dff88d46ab0087da78849ee4e88f Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Thu, 12 Feb 2026 09:36:36 -0500 Subject: [PATCH 051/243] Update cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 3fd830acd972..7c16922c46a0 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -767,7 +767,7 @@ class LeapYearGuardCondition extends GuardCondition { * ... values eventually used in the same time struct * If this is even more challenging if the struct the values end up in are not * local (set inter-procedurally). - * This flow flows constants 1-31 to a month or day assignment. + * This configuration looks for constants 1-31 flowing to a month or day assignment. * It is assumed a user of this flow will check if the month/day source and month/day sink * are in the same basic blocks as a year modification source and a year modification sink. * It is also assumed a user will check if the constant source is a value that is ignorable From a53218c2ce424b69428cbb4e621a08ec60db3151 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Thu, 12 Feb 2026 09:36:57 -0500 Subject: [PATCH 052/243] Update cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../2026-02-06-UncheckedLeapYearAfterModification_Refactor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md b/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md index 3d0f71c5a65f..4a2cf3ef189d 100644 --- a/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md +++ b/cpp/ql/lib/change-notes/2026-02-06-UncheckedLeapYearAfterModification_Refactor.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Refactor of UncheckedLeapYearAfterYearModification.ql to address large numbers of false positives. Reduced alerts from 40k to 2k. \ No newline at end of file +* Refactored the "Year field changed using an arithmetic operation without checking for leap year" query (`cpp/leap-year/unchecked-after-arithmetic-year-modification`) to address large numbers of false positive results. \ No newline at end of file From f7231f40eb31c9cde646cf5a6bef27af23340f9e Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Thu, 12 Feb 2026 09:52:19 -0500 Subject: [PATCH 053/243] C++: misc comment clean up per PR suggestions. Unified additional flow steps for two similar flows into a common additional step predicate. --- cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll | 2 +- .../UncheckedLeapYearAfterYearModification.ql | 82 +++++++++++-------- 2 files changed, 50 insertions(+), 34 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll index 6916818cdc51..99981873d26d 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll +++ b/cpp/ql/src/Likely Bugs/Leap Year/LeapYear.qll @@ -310,7 +310,7 @@ module PossibleYearArithmeticOperationCheckFlow = TaintTracking::Global; /** - * Time conversion functions where either + * A time conversion function where either * 1) an incorrect leap year date would result in an error that can be checked from the return value or * 2) an incorrect leap year date is auto corrected (no checks required) */ diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 3fd830acd972..70ce862c3c22 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -27,6 +27,8 @@ import semmle.code.cpp.controlflow.IRGuards */ class IgnorableFunction extends Function { IgnorableFunction() { + // arithmetic in known time conversion functions may look like dangerous operations + // we assume all known time conversion functions are safe. this instanceof TimeConversionFunction or // Helper utility in postgres with string time conversions @@ -421,6 +423,41 @@ predicate isLeapYearCheckSink(DataFlow::Node sink) { isLeapYearCheckCall(_, [sink.asExpr(), sink.asIndirectExpr()]) } +predicate yearAssignmentToCheckCommonSteps(DataFlow::Node node1, DataFlow::Node node2) { + // flow from a YearFieldAccess to the qualifier + node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() + or + // getting the 'access' can be tricky at definitions (assignments especially) + // as dataflow uses asDefinition not asExpr. + // the YearFieldAssignmentNode holds the access in these cases + node1.(YearFieldAssignmentNode).getYearFieldAccess().getQualifier() = node2.asExpr() + or + // flow from a year access qualifier to a year field + exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) + or + node1.(YearFieldAssignmentNode).getYearFieldAccess().getQualifier() = node2.asExpr() + or + // Pass through any intermediate struct + exists(Assignment a, DataFlow::PostUpdateNode pun | + a.getLValue().(YearFieldAccess).getQualifier*() = pun.getPreUpdateNode().asExpr() and + a.getRValue() = node1.asExpr() and + node2.asExpr() = a.getLValue().(YearFieldAccess).getQualifier*() + ) + or + // in cases of t.year = x and the value of x is checked, but the year t.year isn't directly checked + // flow from a year assignment node to an RHS if it is an assignment + // e.g., + // t.year = x; + // isLeapYear(x); + // --> at this point there is no flow of t.year to a check, but only its raw value + // To detect the flow of 'x' to the isLeapYear check, + // flow from t.year to 'x' (at assignment, t.year = x, flow to the RHS to track use-use flow of x) + exists(YearFieldAssignmentNode yfan | + node1 = yfan and + node2.asExpr() = yfan.asDefinition().(Assignment).getRValue() + ) +} + /** * A flow configuration from a Year field access to some Leap year check or guard */ @@ -430,25 +467,7 @@ module YearAssignmentToLeapYearCheckConfig implements DataFlow::ConfigSig { predicate isSink(DataFlow::Node sink) { isLeapYearCheckSink(sink) } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - // flow from a YearFieldAccess to the qualifier - node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() - or - // Pass through any intermediate struct - exists(Assignment a, DataFlow::PostUpdateNode pun | - a.getLValue().(YearFieldAccess).getQualifier*() = pun.getPreUpdateNode().asExpr() and - a.getRValue() = node1.asExpr() and - node2.asExpr() = a.getLValue().(YearFieldAccess).getQualifier*() - ) - or - // flow from a year access qualifier to a year field - exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) - or - // in cases of x.year = x and the x is checked, but the year x.year isn't directly - // flow from a year assignment node to an RHS if it is an assignment - exists(YearFieldAssignmentNode yfan | - node1 = yfan and - node2.asExpr() = yfan.asDefinition().(Assignment).getRValue() - ) + yearAssignmentToCheckCommonSteps(node1, node2) } /** @@ -514,6 +533,11 @@ predicate isControlledByMonthEqualityCheckNonFebruary(Expr e) { * auto convert to a sanity check guard of the result for error conditions. */ module YearAssignmentToCheckedTimeConversionConfig implements DataFlow::StateConfigSig { + // Flow state tracks if flow goes through a known time conversion function + // see `TimeConversionFunction`. + // A valid check with a time conversion function is either the case: + // 1) the year flows into a time conversion function, and the time conversion function's result is checked or + // 2) the year flows into a time conversion function that auto corrects for leap year, so no check is necessary. class FlowState = boolean; predicate isSource(DataFlow::Node source, FlowState state) { @@ -522,6 +546,9 @@ module YearAssignmentToCheckedTimeConversionConfig implements DataFlow::StateCon } predicate isSink(DataFlow::Node sink, FlowState state) { + // Case 1: Flow through a time conversion function that requires a check, + // and we have arrived at a guard, implying the result was checked for possible error, including leap year error. + // state = true indicates the flow went through a time conversion function state = true and ( exists(IfStmt ifs | ifs.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()]) @@ -533,6 +560,8 @@ module YearAssignmentToCheckedTimeConversionConfig implements DataFlow::StateCon exists(Loop l | l.getCondition().getAChild*() = [sink.asExpr(), sink.asIndirectExpr()]) ) or + // Case 2: Flow through a time conversion function that auto corrects for leap year, so no check is necessary. + // state true or false, as flowing through a time conversion function is not necessary in this instance. state in [true, false] and exists(Call c, TimeConversionFunction f | f.isAutoLeapYearCorrecting() and @@ -554,20 +583,7 @@ module YearAssignmentToCheckedTimeConversionConfig implements DataFlow::StateCon } predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - // flow from a YearFieldAccess to the qualifier - node2.asExpr() = node1.asExpr().(YearFieldAccess).getQualifier*() - or - node1.(YearFieldAssignmentNode).getYearFieldAccess().getQualifier() = node2.asExpr() - or - // Pass through any intermediate struct - exists(Assignment a, DataFlow::PostUpdateNode pun | - a.getLValue().(YearFieldAccess).getQualifier*() = pun.getPreUpdateNode().asExpr() and - a.getRValue() = node1.asExpr() and - node2.asExpr() = a.getLValue().(YearFieldAccess).getQualifier*() - ) - or - // flow from a year access qualifier to a year field - exists(YearFieldAccess yfa | node2.asExpr() = yfa and node1.asExpr() = yfa.getQualifier()) + yearAssignmentToCheckCommonSteps(node1, node2) } DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } From dfe6ed2171f872c8760e5ca789500523dabac8d4 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Thu, 12 Feb 2026 10:09:25 -0500 Subject: [PATCH 054/243] Update cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 5ebd8af43929..0273440a49f2 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -106,8 +106,7 @@ class IgnorableExpr10MultipleComponent extends IgnorableOperation { } /** - * An operation involving a sub expression with char literal 48, ignore as a likely string conversion - * e.g., X - '0' + * An operation involving a sub expression with char literal `48`, ignore as a likely string conversion. For example: `X - '0'` */ class IgnorableExpr48Mapping extends IgnorableOperation { IgnorableExpr48Mapping() { From b39732ba02c515f6223ac528853cc878b9a8ad6f Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Thu, 12 Feb 2026 10:10:11 -0500 Subject: [PATCH 055/243] Update cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 0273440a49f2..d22a6b5e5579 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -207,7 +207,7 @@ class OperationAsArgToIgnorableFunction extends IgnorableOperation { } /** - * A Literal OP literal means the result is constant/known + * A binary operation on two literals means the result is constant/known * and the operation is basically ignorable (it's not a real operation but * probably one visual simplicity what it means). */ From f5a38b47015d929477324ea1844f3f5213c047a7 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Thu, 12 Feb 2026 10:17:56 -0500 Subject: [PATCH 056/243] Apply suggestion from @geoffw0 Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index d22a6b5e5579..032363979797 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -266,7 +266,7 @@ class IgnorablePointerOrCharArithmetic extends IgnorableOperation { } /** - * Holds for an expression that is a operation that could flow to a Year field. + * Holds for an expression that is an add or similar operation that could flow to a Year field. */ predicate isOperationSourceCandidate(Expr e) { not e instanceof IgnorableOperation and From 36e4efe77e55c237be39dbe2ea79ab0d190b8588 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Thu, 12 Feb 2026 10:20:32 -0500 Subject: [PATCH 057/243] Apply suggestion from @geoffw0 Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 032363979797..1d8b92a85d3e 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -354,7 +354,7 @@ class YearFieldAssignmentNode extends DataFlow::Node { } /** - * A DataFlow configuration for identifying flows from some non trivial access or literal + * A DataFlow configuration for identifying flows from an identified source * to the Year field of a date object. */ module OperationToYearAssignmentConfig implements DataFlow::ConfigSig { From 9bbbbefd34116b220dd345d77e345861373cda50 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Thu, 12 Feb 2026 10:20:59 -0500 Subject: [PATCH 058/243] Apply suggestion from @geoffw0 Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 1d8b92a85d3e..21310ab2048c 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -288,7 +288,7 @@ predicate isOperationSourceCandidate(Expr e) { } /** - * A dataflow that tracks an ignorable operation (eg. bitwise op) to a operation source, so we may disqualify it. + * A data flow that tracks an ignorable operation (such as a bitwise operation) to an operation source, so we may disqualify it. */ module IgnorableOperationToOperationSourceCandidateConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node n) { n.asExpr() instanceof IgnorableOperation } From 4a7395b0171d7f84aeaf10e7e10376c2cea2c4dd Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Thu, 12 Feb 2026 11:11:43 -0500 Subject: [PATCH 059/243] C++ Suggested code clean up. --- .../UncheckedLeapYearAfterYearModification.ql | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 5ebd8af43929..e7bd8fe8ff09 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -233,32 +233,29 @@ class IgnorableAssignmentBitwiseOperation extends IgnorableOperation instanceof class IgnorablePointerOrCharArithmetic extends IgnorableOperation { IgnorablePointerOrCharArithmetic() { this instanceof BinaryArithmeticOperation and - ( - this.(BinaryArithmeticOperation).getAnOperand().getUnspecifiedType() instanceof PointerType + exists(Expr op | op = this.(BinaryArithmeticOperation).getAnOperand() | + op.getUnspecifiedType() instanceof PointerType or - this.(BinaryArithmeticOperation).getAnOperand().getUnspecifiedType() instanceof CharType + op.getUnspecifiedType() instanceof CharType or // Operations on calls to functions that accept char or char* - this.(BinaryArithmeticOperation) - .getAnOperand() - .(Call) - .getAnArgument() - .getUnspecifiedType() - .stripType() instanceof CharType + op.(Call).getAnArgument().getUnspecifiedType().stripType() instanceof CharType or // Operations on calls to functions named like "strlen", "wcslen", etc // NOTE: workaround for cases where the wchar_t type is not a char, but an unsigned short // unclear if there is a best way to filter cases like these out based on type info. - this.(BinaryArithmeticOperation).getAnOperand().(Call).getTarget().getName().matches("%len%") + op.(Call).getTarget().getName().matches("%len%") ) or exists(AssignArithmeticOperation a | a.getRValue() = this | - a.getAnOperand().getUnspecifiedType() instanceof PointerType - or - a.getAnOperand().getUnspecifiedType() instanceof CharType - or - // Operations on calls to functions that accept char or char* - a.getAnOperand().(Call).getAnArgument().getUnspecifiedType().stripType() instanceof CharType + exists(Expr op | op = a.getAnOperand() | + op.getUnspecifiedType() instanceof PointerType + or + op.getUnspecifiedType() instanceof CharType + or + // Operations on calls to functions that accept char or char* + op.(Call).getAnArgument().getUnspecifiedType().stripType() instanceof CharType + ) or // Operations on calls to functions named like "strlen", "wcslen", etc this.(BinaryArithmeticOperation).getAnOperand().(Call).getTarget().getName().matches("%len%") From d1811bc1fe27b8934e29206fb079d242b8eb1ecf Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Thu, 12 Feb 2026 11:19:24 -0500 Subject: [PATCH 060/243] C++: Removing unnecessary post update node. --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index decaa6fb9b43..87733f0f69db 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -434,8 +434,7 @@ predicate yearAssignmentToCheckCommonSteps(DataFlow::Node node1, DataFlow::Node node1.(YearFieldAssignmentNode).getYearFieldAccess().getQualifier() = node2.asExpr() or // Pass through any intermediate struct - exists(Assignment a, DataFlow::PostUpdateNode pun | - a.getLValue().(YearFieldAccess).getQualifier*() = pun.getPreUpdateNode().asExpr() and + exists(Assignment a | a.getRValue() = node1.asExpr() and node2.asExpr() = a.getLValue().(YearFieldAccess).getQualifier*() ) From edb2ed8df278890c96267cf49a1498f29a73a1a8 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 11 Feb 2026 14:10:14 +0100 Subject: [PATCH 061/243] C#: Extract the implicit property backing field when referenced via the field keyword. --- .../Entities/Expressions/Factory.cs | 3 ++ .../Expressions/PropertyFieldAccess.cs | 28 +++++++++++ .../Entities/Field.cs | 2 +- .../Entities/PropertyField.cs | 50 +++++++++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PropertyFieldAccess.cs create mode 100644 csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs index 0da8de1e5d59..ed8dae3738fc 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs @@ -160,6 +160,9 @@ internal static Expression Create(ExpressionNodeInfo info) case SyntaxKind.ThisExpression: return This.CreateExplicit(info); + case SyntaxKind.FieldExpression: + return PropertyFieldAccess.Create(info); + case SyntaxKind.AddressOfExpression: return Unary.Create(info.SetKind(ExprKind.ADDRESS_OF)); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PropertyFieldAccess.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PropertyFieldAccess.cs new file mode 100644 index 000000000000..a9d2afa84c9e --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PropertyFieldAccess.cs @@ -0,0 +1,28 @@ +using System.IO; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Semmle.Extraction.Kinds; + +namespace Semmle.Extraction.CSharp.Entities.Expressions +{ + internal class PropertyFieldAccess : Expression + { + private PropertyFieldAccess(ExpressionNodeInfo info) : base(info.SetKind(ExprKind.FIELD_ACCESS)) { } + + public static Expression Create(ExpressionNodeInfo info) => new PropertyFieldAccess(info).TryPopulate(); + + protected override void PopulateExpression(TextWriter trapFile) + { + var symbolInfo = Context.GetSymbolInfo(Syntax); + if (symbolInfo.Symbol is IFieldSymbol field) + { + var target = PropertyField.Create(Context, field); + trapFile.expr_access(this, target); + if (!field.IsStatic) + { + This.CreateImplicit(Context, field.ContainingType, Location, this, -1); + } + } + } + } +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs index 9a010aad3760..329115f11c7a 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Field.cs @@ -10,7 +10,7 @@ namespace Semmle.Extraction.CSharp.Entities { internal class Field : CachedSymbol, IExpressionParentEntity { - private Field(Context cx, IFieldSymbol init) + protected Field(Context cx, IFieldSymbol init) : base(cx, init) { type = new Lazy(() => Entities.Type.Create(cx, Symbol.Type)); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs new file mode 100644 index 000000000000..7567a9e89608 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs @@ -0,0 +1,50 @@ +using System.IO; +using Microsoft.CodeAnalysis; +using Semmle.Extraction.CSharp.Util; +using Semmle.Extraction.Kinds; + +namespace Semmle.Extraction.CSharp.Entities +{ + /// + /// Represents the autogenerated backing field `field` for a property. + /// It is only created for properties that use the `field` keyword in their getter or setter, and + /// is not created for auto-properties. + /// + internal class PropertyField : Field + { + protected PropertyField(Context cx, IFieldSymbol init) + : base(cx, init) + { + } + + public static new PropertyField Create(Context cx, IFieldSymbol field) => PropertyFieldFactory.Instance.CreateEntity(cx, (field, field.AssociatedSymbol), field); + + public override bool NeedsPopulation => true; + + public override void Populate(TextWriter trapFile) + { + PopulateNullability(trapFile, Symbol.GetAnnotatedType()); + + var unboundFieldKey = PropertyField.Create(Context, Symbol.OriginalDefinition); + var name = Symbol.AssociatedSymbol is not null ? $"{Symbol.AssociatedSymbol.GetName()}.field" : Symbol.Name; + trapFile.fields(this, VariableKind.None, name, ContainingType!, Type.TypeRef, unboundFieldKey); + + if (Context.OnlyScaffold) + { + return; + } + + if (Context.ExtractLocation(Symbol)) + { + WriteLocationsToTrap(trapFile.field_location, this, Locations); + } + } + + private class PropertyFieldFactory : CachedEntityFactory + { + public static PropertyFieldFactory Instance { get; } = new PropertyFieldFactory(); + + public override PropertyField Create(Context cx, IFieldSymbol init) => new PropertyField(cx, init); + } + } +} From 113f3e880b403b1bf04bc60ca8cc11df5546a4d9 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 11 Feb 2026 14:55:55 +0100 Subject: [PATCH 062/243] C#: Add property test case where the field keyword is used. --- .../library-tests/properties/PrintAst.expected | 16 ++++++++++++++++ .../properties/Properties17.expected | 1 + .../library-tests/properties/Properties17.ql | 2 +- .../test/library-tests/properties/properties.cs | 9 +++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/csharp/ql/test/library-tests/properties/PrintAst.expected b/csharp/ql/test/library-tests/properties/PrintAst.expected index 2df3ee3f5e85..711e417558ed 100644 --- a/csharp/ql/test/library-tests/properties/PrintAst.expected +++ b/csharp/ql/test/library-tests/properties/PrintAst.expected @@ -230,3 +230,19 @@ properties.cs: #-----| 2: (Parameters) # 124| 0: [Parameter] value # 124| 4: [BlockStmt] {...} +# 128| 10: [Class] UseFieldKeyword +# 130| 6: [Property] Prop +# 130| -1: [TypeMention] object +# 132| 3: [Getter] get_Prop +# 132| 4: [BlockStmt] {...} +# 132| 0: [ReturnStmt] return ...; +# 132| 0: [FieldAccess] access to field Prop.field +# 133| 4: [Setter] set_Prop +#-----| 2: (Parameters) +# 133| 0: [Parameter] value +# 133| 4: [BlockStmt] {...} +# 133| 0: [ExprStmt] ...; +# 133| 0: [AssignExpr] ... = ... +# 133| 0: [FieldAccess] access to field Prop.field +# 133| 1: [ParameterAccess] access to parameter value +# 130| 7: [Field] Prop.field diff --git a/csharp/ql/test/library-tests/properties/Properties17.expected b/csharp/ql/test/library-tests/properties/Properties17.expected index 47b563e26761..ee817a63df94 100644 --- a/csharp/ql/test/library-tests/properties/Properties17.expected +++ b/csharp/ql/test/library-tests/properties/Properties17.expected @@ -1,3 +1,4 @@ +| Prop.field | | caption | | next | | y | diff --git a/csharp/ql/test/library-tests/properties/Properties17.ql b/csharp/ql/test/library-tests/properties/Properties17.ql index ca53f5423aa2..6bd668ec1189 100644 --- a/csharp/ql/test/library-tests/properties/Properties17.ql +++ b/csharp/ql/test/library-tests/properties/Properties17.ql @@ -1,5 +1,5 @@ /** - * @name Test that there are no backing fields + * @name Test that there are no backing fields except for properties that use the `field` keyword in their getter or setter. */ import csharp diff --git a/csharp/ql/test/library-tests/properties/properties.cs b/csharp/ql/test/library-tests/properties/properties.cs index 57ffa7a31a58..2f88214ec755 100644 --- a/csharp/ql/test/library-tests/properties/properties.cs +++ b/csharp/ql/test/library-tests/properties/properties.cs @@ -124,4 +124,13 @@ int InterfaceWithProperties.Prop2 set { } } } + + class UseFieldKeyword + { + public object Prop + { + get { return field; } + set { field = value; } + } + } } From 97c026761478941374a9975de02709973177487a Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 12 Feb 2026 11:44:39 +0100 Subject: [PATCH 063/243] C#: Add data flow test for properties using the field keyword. --- .../test/library-tests/dataflow/fields/D.cs | 62 +++++ .../dataflow/fields/FieldFlow.expected | 254 ++++++++++++++++++ 2 files changed, 316 insertions(+) diff --git a/csharp/ql/test/library-tests/dataflow/fields/D.cs b/csharp/ql/test/library-tests/dataflow/fields/D.cs index 7f07cf5ca0b9..45dfbffc8017 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/D.cs +++ b/csharp/ql/test/library-tests/dataflow/fields/D.cs @@ -89,3 +89,65 @@ public static void Sink(object o) { } static T Source(object source) => throw null; } + +public class DFieldProps +{ + object FieldProp0 + { + get { return field; } + set { field = value; } + } = Source(0); + + object FieldProp1 + { + get { return field; } + set { field = value; } + } + + object FieldProp2 + { + get { return field; } + set + { + var x = value; + field = x; + } + } + + static object StaticFieldProp + { + get { return field; } + set { field = value; } + } + + private void M() + { + var d0 = new DFieldProps(); + Sink(d0.FieldProp0); // $ hasValueFlow=0 + Sink(d0.FieldProp1); // no flow + Sink(d0.FieldProp2); // no flow + + var d1 = new DFieldProps(); + var o1 = Source(1); + d1.FieldProp1 = o1; + Sink(d1.FieldProp0); // $ hasValueFlow=0 + Sink(d1.FieldProp1); // $ hasValueFlow=1 + Sink(d1.FieldProp2); // no flow + + var d2 = new DFieldProps(); + var o2 = Source(2); + d2.FieldProp2 = o2; + Sink(d2.FieldProp0); // $ hasValueFlow=0 + Sink(d2.FieldProp1); // no flow + Sink(d2.FieldProp2); // $ hasValueFlow=2 + + var o3 = Source(3); + DFieldProps.StaticFieldProp = o3; + Sink(DFieldProps.StaticFieldProp); // $ hasValueFlow=3 + } + + public static void Sink(object o) { } + + static T Source(object source) => throw null; + +} diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index 4e469e118870..44789d1f8475 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -532,6 +532,118 @@ edges | D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:60:9:60:11 | this : DPartial [field _backingField] : Object | provenance | | | D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:84:14:84:27 | access to property PartialProp1 | provenance | | | D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:84:14:84:27 | access to property PartialProp1 | provenance | | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | provenance | | +| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | provenance | | +| D.cs:98:9:98:11 | value : Object | D.cs:98:23:98:27 | access to parameter value : Object | provenance | | +| D.cs:98:9:98:11 | value : Object | D.cs:98:23:98:27 | access to parameter value : Object | provenance | | +| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:98:23:98:27 | access to parameter value : Object | D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:98:23:98:27 | access to parameter value : Object | D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:99:9:99:25 | call to method Source : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:99:9:99:25 | call to method Source : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:99:9:99:25 | call to method Source : Object | D.cs:98:9:98:11 | value : Object | provenance | | +| D.cs:99:9:99:25 | call to method Source : Object | D.cs:98:9:98:11 | value : Object | provenance | | +| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | provenance | | +| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | provenance | | +| D.cs:104:9:104:11 | value : Object | D.cs:104:23:104:27 | access to parameter value : Object | provenance | | +| D.cs:104:9:104:11 | value : Object | D.cs:104:23:104:27 | access to parameter value : Object | provenance | | +| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:104:23:104:27 | access to parameter value : Object | D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:104:23:104:27 | access to parameter value : Object | D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | provenance | | +| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | provenance | | +| D.cs:110:9:110:11 | value : Object | D.cs:112:17:112:17 | access to local variable x : Object | provenance | | +| D.cs:110:9:110:11 | value : Object | D.cs:112:17:112:17 | access to local variable x : Object | provenance | | +| D.cs:112:17:112:17 | access to local variable x : Object | D.cs:113:21:113:21 | access to local variable x : Object | provenance | | +| D.cs:112:17:112:17 | access to local variable x : Object | D.cs:113:21:113:21 | access to local variable x : Object | provenance | | +| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:113:21:113:21 | access to local variable x : Object | D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:113:21:113:21 | access to local variable x : Object | D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | | +| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | | +| D.cs:120:9:120:11 | value : Object | D.cs:120:23:120:27 | access to parameter value : Object | provenance | | +| D.cs:120:9:120:11 | value : Object | D.cs:120:23:120:27 | access to parameter value : Object | provenance | | +| D.cs:120:23:120:27 | access to parameter value : Object | D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | provenance | | +| D.cs:120:23:120:27 | access to parameter value : Object | D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | provenance | | +| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:26 | access to property FieldProp0 | provenance | | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:126:14:126:26 | access to property FieldProp0 | provenance | | +| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:131:13:131:14 | access to local variable o1 : Object | D.cs:132:25:132:26 | access to local variable o1 : Object | provenance | | +| D.cs:131:13:131:14 | access to local variable o1 : Object | D.cs:132:25:132:26 | access to local variable o1 : Object | provenance | | +| D.cs:131:18:131:34 | call to method Source : Object | D.cs:131:13:131:14 | access to local variable o1 : Object | provenance | | +| D.cs:131:18:131:34 | call to method Source : Object | D.cs:131:13:131:14 | access to local variable o1 : Object | provenance | | +| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | provenance | | +| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | provenance | | +| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:26 | access to property FieldProp0 | provenance | | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:133:14:133:26 | access to property FieldProp0 | provenance | | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | provenance | | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:26 | access to property FieldProp1 | provenance | | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:134:14:134:26 | access to property FieldProp1 | provenance | | +| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:138:13:138:14 | access to local variable o2 : Object | D.cs:139:25:139:26 | access to local variable o2 : Object | provenance | | +| D.cs:138:13:138:14 | access to local variable o2 : Object | D.cs:139:25:139:26 | access to local variable o2 : Object | provenance | | +| D.cs:138:18:138:34 | call to method Source : Object | D.cs:138:13:138:14 | access to local variable o2 : Object | provenance | | +| D.cs:138:18:138:34 | call to method Source : Object | D.cs:138:13:138:14 | access to local variable o2 : Object | provenance | | +| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | provenance | | +| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | provenance | | +| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | provenance | | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:26 | access to property FieldProp0 | provenance | | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:140:14:140:26 | access to property FieldProp0 | provenance | | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | provenance | | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:26 | access to property FieldProp2 | provenance | | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:142:14:142:26 | access to property FieldProp2 | provenance | | +| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:9:145:35 | access to property StaticFieldProp : Object | provenance | | +| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:9:145:35 | access to property StaticFieldProp : Object | provenance | | +| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:39:145:40 | access to local variable o3 : Object | provenance | | +| D.cs:144:13:144:14 | access to local variable o3 : Object | D.cs:145:39:145:40 | access to local variable o3 : Object | provenance | | +| D.cs:144:18:144:34 | call to method Source : Object | D.cs:144:13:144:14 | access to local variable o3 : Object | provenance | | +| D.cs:144:18:144:34 | call to method Source : Object | D.cs:144:13:144:14 | access to local variable o3 : Object | provenance | | +| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | | +| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | provenance | | +| D.cs:145:39:145:40 | access to local variable o3 : Object | D.cs:120:9:120:11 | value : Object | provenance | | +| D.cs:145:39:145:40 | access to local variable o3 : Object | D.cs:120:9:120:11 | value : Object | provenance | | | E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | | | E.cs:8:29:8:29 | o : Object | E.cs:11:21:11:21 | access to parameter o : Object | provenance | | | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | provenance | | @@ -1807,6 +1919,120 @@ nodes | D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | semmle.label | access to local variable d : DPartial [field _backingField] : Object | | D.cs:84:14:84:27 | access to property PartialProp1 | semmle.label | access to property PartialProp1 | | D.cs:84:14:84:27 | access to property PartialProp1 | semmle.label | access to property PartialProp1 | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:93:14:93:24 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | semmle.label | this : DFieldProps [field FieldProp0.field] : Object | +| D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | semmle.label | this : DFieldProps [field FieldProp0.field] : Object | +| D.cs:97:22:97:26 | access to field FieldProp0.field : Object | semmle.label | access to field FieldProp0.field : Object | +| D.cs:97:22:97:26 | access to field FieldProp0.field : Object | semmle.label | access to field FieldProp0.field : Object | +| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:97:22:97:26 | this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp0.field] : Object | +| D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp0.field] : Object | +| D.cs:98:9:98:11 | value : Object | semmle.label | value : Object | +| D.cs:98:9:98:11 | value : Object | semmle.label | value : Object | +| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:98:15:98:19 | [post] this access : DFieldProps [field FieldProp0.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:98:23:98:27 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:98:23:98:27 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:99:9:99:25 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:99:9:99:25 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | semmle.label | this : DFieldProps [field FieldProp1.field] : Object | +| D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | semmle.label | this : DFieldProps [field FieldProp1.field] : Object | +| D.cs:103:22:103:26 | access to field FieldProp1.field : Object | semmle.label | access to field FieldProp1.field : Object | +| D.cs:103:22:103:26 | access to field FieldProp1.field : Object | semmle.label | access to field FieldProp1.field : Object | +| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | this access : DFieldProps [field FieldProp1.field] : Object | +| D.cs:103:22:103:26 | this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | this access : DFieldProps [field FieldProp1.field] : Object | +| D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp1.field] : Object | +| D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp1.field] : Object | +| D.cs:104:9:104:11 | value : Object | semmle.label | value : Object | +| D.cs:104:9:104:11 | value : Object | semmle.label | value : Object | +| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp1.field] : Object | +| D.cs:104:15:104:19 | [post] this access : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp1.field] : Object | +| D.cs:104:23:104:27 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:104:23:104:27 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | semmle.label | this : DFieldProps [field FieldProp2.field] : Object | +| D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | semmle.label | this : DFieldProps [field FieldProp2.field] : Object | +| D.cs:109:22:109:26 | access to field FieldProp2.field : Object | semmle.label | access to field FieldProp2.field : Object | +| D.cs:109:22:109:26 | access to field FieldProp2.field : Object | semmle.label | access to field FieldProp2.field : Object | +| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | this access : DFieldProps [field FieldProp2.field] : Object | +| D.cs:109:22:109:26 | this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | this access : DFieldProps [field FieldProp2.field] : Object | +| D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp2.field] : Object | +| D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | semmle.label | this [Return] : DFieldProps [field FieldProp2.field] : Object | +| D.cs:110:9:110:11 | value : Object | semmle.label | value : Object | +| D.cs:110:9:110:11 | value : Object | semmle.label | value : Object | +| D.cs:112:17:112:17 | access to local variable x : Object | semmle.label | access to local variable x : Object | +| D.cs:112:17:112:17 | access to local variable x : Object | semmle.label | access to local variable x : Object | +| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp2.field] : Object | +| D.cs:113:13:113:17 | [post] this access : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] this access : DFieldProps [field FieldProp2.field] : Object | +| D.cs:113:21:113:21 | access to local variable x : Object | semmle.label | access to local variable x : Object | +| D.cs:113:21:113:21 | access to local variable x : Object | semmle.label | access to local variable x : Object | +| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | semmle.label | access to field StaticFieldProp.field : Object | +| D.cs:119:22:119:26 | access to field StaticFieldProp.field : Object | semmle.label | access to field StaticFieldProp.field : Object | +| D.cs:120:9:120:11 | value : Object | semmle.label | value : Object | +| D.cs:120:9:120:11 | value : Object | semmle.label | value : Object | +| D.cs:120:23:120:27 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:120:23:120:27 | access to parameter value : Object | semmle.label | access to parameter value : Object | +| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:125:13:125:14 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | +| D.cs:125:18:125:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:126:14:126:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 | +| D.cs:126:14:126:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 | +| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:130:13:130:14 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | +| D.cs:130:18:130:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | +| D.cs:131:13:131:14 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| D.cs:131:13:131:14 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| D.cs:131:18:131:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:131:18:131:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | +| D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | +| D.cs:132:25:132:26 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| D.cs:132:25:132:26 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:133:14:133:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 | +| D.cs:133:14:133:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | semmle.label | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | +| D.cs:134:14:134:26 | access to property FieldProp1 | semmle.label | access to property FieldProp1 | +| D.cs:134:14:134:26 | access to property FieldProp1 | semmle.label | access to property FieldProp1 | +| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:137:13:137:14 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | +| D.cs:137:18:137:34 | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | semmle.label | object creation of type DFieldProps : DFieldProps [field FieldProp0.field] : Object | +| D.cs:138:13:138:14 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| D.cs:138:13:138:14 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| D.cs:138:18:138:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:138:18:138:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | +| D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | +| D.cs:139:25:139:26 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| D.cs:139:25:139:26 | access to local variable o2 : Object | semmle.label | access to local variable o2 : Object | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | +| D.cs:140:14:140:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 | +| D.cs:140:14:140:26 | access to property FieldProp0 | semmle.label | access to property FieldProp0 | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | semmle.label | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | +| D.cs:142:14:142:26 | access to property FieldProp2 | semmle.label | access to property FieldProp2 | +| D.cs:142:14:142:26 | access to property FieldProp2 | semmle.label | access to property FieldProp2 | +| D.cs:144:13:144:14 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object | +| D.cs:144:13:144:14 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object | +| D.cs:144:18:144:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:144:18:144:34 | call to method Source : Object | semmle.label | call to method Source : Object | +| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | semmle.label | access to property StaticFieldProp : Object | +| D.cs:145:9:145:35 | access to property StaticFieldProp : Object | semmle.label | access to property StaticFieldProp : Object | +| D.cs:145:39:145:40 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object | +| D.cs:145:39:145:40 | access to local variable o3 : Object | semmle.label | access to local variable o3 : Object | +| D.cs:146:14:146:40 | access to property StaticFieldProp | semmle.label | access to property StaticFieldProp | +| D.cs:146:14:146:40 | access to property StaticFieldProp | semmle.label | access to property StaticFieldProp | | E.cs:8:29:8:29 | o : Object | semmle.label | o : Object | | E.cs:8:29:8:29 | o : Object | semmle.label | o : Object | | E.cs:11:9:11:11 | [post] access to local variable ret : S [field Field] : Object | semmle.label | [post] access to local variable ret : S [field Field] : Object | @@ -2648,6 +2874,22 @@ subpaths | D.cs:81:26:81:26 | access to local variable o : Object | D.cs:61:9:61:11 | value : Object | D.cs:61:9:61:11 | this [Return] : DPartial [field _backingField] : Object | D.cs:81:9:81:9 | [post] access to local variable d : DPartial [field _backingField] : Object | | D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:60:9:60:11 | this : DPartial [field _backingField] : Object | D.cs:60:22:60:34 | access to field _backingField : Object | D.cs:84:14:84:27 | access to property PartialProp1 | | D.cs:84:14:84:14 | access to local variable d : DPartial [field _backingField] : Object | D.cs:60:9:60:11 | this : DPartial [field _backingField] : Object | D.cs:60:22:60:34 | access to field _backingField : Object | D.cs:84:14:84:27 | access to property PartialProp1 | +| D.cs:99:9:99:25 | call to method Source : Object | D.cs:98:9:98:11 | value : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:99:9:99:25 | call to method Source : Object | D.cs:98:9:98:11 | value : Object | D.cs:98:9:98:11 | this [Return] : DFieldProps [field FieldProp0.field] : Object | D.cs:95:12:95:21 | [post] this access : DFieldProps [field FieldProp0.field] : Object | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:126:14:126:26 | access to property FieldProp0 | +| D.cs:126:14:126:15 | access to local variable d0 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:126:14:126:26 | access to property FieldProp0 | +| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | +| D.cs:132:25:132:26 | access to local variable o1 : Object | D.cs:104:9:104:11 | value : Object | D.cs:104:9:104:11 | this [Return] : DFieldProps [field FieldProp1.field] : Object | D.cs:132:9:132:10 | [post] access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:133:14:133:26 | access to property FieldProp0 | +| D.cs:133:14:133:15 | access to local variable d1 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:133:14:133:26 | access to property FieldProp0 | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | D.cs:134:14:134:26 | access to property FieldProp1 | +| D.cs:134:14:134:15 | access to local variable d1 : DFieldProps [field FieldProp1.field] : Object | D.cs:103:9:103:11 | this : DFieldProps [field FieldProp1.field] : Object | D.cs:103:22:103:26 | access to field FieldProp1.field : Object | D.cs:134:14:134:26 | access to property FieldProp1 | +| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | +| D.cs:139:25:139:26 | access to local variable o2 : Object | D.cs:110:9:110:11 | value : Object | D.cs:110:9:110:11 | this [Return] : DFieldProps [field FieldProp2.field] : Object | D.cs:139:9:139:10 | [post] access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:140:14:140:26 | access to property FieldProp0 | +| D.cs:140:14:140:15 | access to local variable d2 : DFieldProps [field FieldProp0.field] : Object | D.cs:97:9:97:11 | this : DFieldProps [field FieldProp0.field] : Object | D.cs:97:22:97:26 | access to field FieldProp0.field : Object | D.cs:140:14:140:26 | access to property FieldProp0 | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | D.cs:142:14:142:26 | access to property FieldProp2 | +| D.cs:142:14:142:15 | access to local variable d2 : DFieldProps [field FieldProp2.field] : Object | D.cs:109:9:109:11 | this : DFieldProps [field FieldProp2.field] : Object | D.cs:109:22:109:26 | access to field FieldProp2.field : Object | D.cs:142:14:142:26 | access to property FieldProp2 | | E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | | E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | | E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | @@ -2758,6 +3000,18 @@ testFailures | D.cs:47:14:47:26 | access to property ComplexProp | D.cs:43:32:43:48 | call to method Source : Object | D.cs:47:14:47:26 | access to property ComplexProp | $@ | D.cs:43:32:43:48 | call to method Source : Object | call to method Source : Object | | D.cs:84:14:84:27 | access to property PartialProp1 | D.cs:78:17:78:33 | call to method Source : Object | D.cs:84:14:84:27 | access to property PartialProp1 | $@ | D.cs:78:17:78:33 | call to method Source : Object | call to method Source : Object | | D.cs:84:14:84:27 | access to property PartialProp1 | D.cs:78:17:78:33 | call to method Source : Object | D.cs:84:14:84:27 | access to property PartialProp1 | $@ | D.cs:78:17:78:33 | call to method Source : Object | call to method Source : Object | +| D.cs:126:14:126:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:126:14:126:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:126:14:126:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:126:14:126:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:133:14:133:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:133:14:133:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:133:14:133:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:133:14:133:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:134:14:134:26 | access to property FieldProp1 | D.cs:131:18:131:34 | call to method Source : Object | D.cs:134:14:134:26 | access to property FieldProp1 | $@ | D.cs:131:18:131:34 | call to method Source : Object | call to method Source : Object | +| D.cs:134:14:134:26 | access to property FieldProp1 | D.cs:131:18:131:34 | call to method Source : Object | D.cs:134:14:134:26 | access to property FieldProp1 | $@ | D.cs:131:18:131:34 | call to method Source : Object | call to method Source : Object | +| D.cs:140:14:140:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:140:14:140:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:140:14:140:26 | access to property FieldProp0 | D.cs:99:9:99:25 | call to method Source : Object | D.cs:140:14:140:26 | access to property FieldProp0 | $@ | D.cs:99:9:99:25 | call to method Source : Object | call to method Source : Object | +| D.cs:142:14:142:26 | access to property FieldProp2 | D.cs:138:18:138:34 | call to method Source : Object | D.cs:142:14:142:26 | access to property FieldProp2 | $@ | D.cs:138:18:138:34 | call to method Source : Object | call to method Source : Object | +| D.cs:142:14:142:26 | access to property FieldProp2 | D.cs:138:18:138:34 | call to method Source : Object | D.cs:142:14:142:26 | access to property FieldProp2 | $@ | D.cs:138:18:138:34 | call to method Source : Object | call to method Source : Object | +| D.cs:146:14:146:40 | access to property StaticFieldProp | D.cs:144:18:144:34 | call to method Source : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | $@ | D.cs:144:18:144:34 | call to method Source : Object | call to method Source : Object | +| D.cs:146:14:146:40 | access to property StaticFieldProp | D.cs:144:18:144:34 | call to method Source : Object | D.cs:146:14:146:40 | access to property StaticFieldProp | $@ | D.cs:144:18:144:34 | call to method Source : Object | call to method Source : Object | | E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source : Object | call to method Source : Object | | E.cs:24:14:24:20 | access to field Field | E.cs:22:17:22:33 | call to method Source : Object | E.cs:24:14:24:20 | access to field Field | $@ | E.cs:22:17:22:33 | call to method Source : Object | call to method Source : Object | | E.cs:57:14:57:26 | access to field RefField | E.cs:54:21:54:37 | call to method Source : Object | E.cs:57:14:57:26 | access to field RefField | $@ | E.cs:54:21:54:37 | call to method Source : Object | call to method Source : Object | From d93f4850df3c46b5dcb61a033afde056bebea8c0 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 12 Feb 2026 11:53:05 +0100 Subject: [PATCH 064/243] C#: Add change-note. --- csharp/ql/lib/change-notes/2026-02-12-field-keyword.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2026-02-12-field-keyword.md diff --git a/csharp/ql/lib/change-notes/2026-02-12-field-keyword.md b/csharp/ql/lib/change-notes/2026-02-12-field-keyword.md new file mode 100644 index 000000000000..7ca6548b27f0 --- /dev/null +++ b/csharp/ql/lib/change-notes/2026-02-12-field-keyword.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 14: Added support for the `field` keyword in properties. From c3a1eb181eb7643d023eae9058d40e5e296cd8aa Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 13 Feb 2026 12:41:51 +0100 Subject: [PATCH 065/243] C#: Extract field modifiers and tag the field as being compiler generated. --- .../Semmle.Extraction.CSharp/Entities/PropertyField.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs index 7567a9e89608..9e9b1f41fff2 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PropertyField.cs @@ -28,6 +28,9 @@ public override void Populate(TextWriter trapFile) var unboundFieldKey = PropertyField.Create(Context, Symbol.OriginalDefinition); var name = Symbol.AssociatedSymbol is not null ? $"{Symbol.AssociatedSymbol.GetName()}.field" : Symbol.Name; trapFile.fields(this, VariableKind.None, name, ContainingType!, Type.TypeRef, unboundFieldKey); + trapFile.compiler_generated(this); + + PopulateModifiers(trapFile); if (Context.OnlyScaffold) { From a5e6f6daf93e1ff8b57e5b19e5fb4571832fda17 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 12 Feb 2026 12:21:04 +0000 Subject: [PATCH 066/243] Replace "javax" with `javaxOrJakarta()` This is just a find-replace of `"javax` with `javaxOrJakarta() + "`. --- java/ql/lib/experimental/quantum/JCA.qll | 58 ++++++---- java/ql/lib/semmle/code/java/J2EE.qll | 30 ++++-- java/ql/lib/semmle/code/java/JMX.qll | 16 +-- .../semmle/code/java/deadcode/EntryPoints.qll | 8 +- .../code/java/deadcode/WebEntryPoints.qll | 2 +- .../lib/semmle/code/java/frameworks/JAXB.qll | 6 +- .../code/java/frameworks/JavaxAnnotations.qll | 58 ++++++---- .../lib/semmle/code/java/frameworks/JaxWS.qll | 12 ++- .../lib/semmle/code/java/frameworks/Jms.qll | 2 +- .../lib/semmle/code/java/frameworks/Jndi.qll | 14 +-- .../lib/semmle/code/java/frameworks/Mail.qll | 2 +- .../code/java/frameworks/Networking.qll | 2 +- .../semmle/code/java/frameworks/Servlets.qll | 38 ++++--- .../frameworks/javaee/JavaServerFaces.qll | 2 +- .../java/frameworks/javaee/Persistence.qll | 4 +- .../code/java/frameworks/javaee/Xml.qll | 2 +- .../code/java/frameworks/javaee/ejb/EJB.qll | 100 +++++++++++------- .../frameworks/javaee/ejb/EJBRestrictions.qll | 4 +- .../frameworks/javaee/jsf/JSFAnnotations.qll | 4 +- .../frameworks/javaee/jsf/JSFRenderer.qll | 3 +- .../java/frameworks/spring/SpringAutowire.qll | 8 +- .../frameworks/spring/SpringController.qll | 20 +++- .../security/CleartextStorageCookieQuery.qll | 7 +- .../semmle/code/java/security/Encryption.qll | 38 ++++--- .../security/InsecureBeanValidationQuery.qll | 2 +- java/ql/lib/semmle/code/java/security/XSS.qll | 2 +- .../semmle/code/java/security/XmlParsers.qll | 40 ++++--- .../code/java/security/XsltInjection.qll | 10 +- .../Compatibility/JDK9/JdkInternalAccess.ql | 4 +- .../Swing/BadlyOverriddenAdapter.ql | 2 +- .../Frameworks/Swing/ThreadSafety.ql | 7 +- .../CWE-1004/SensitiveCookieNotHttpOnly.ql | 7 +- .../CWE/CWE-319/UseSSLSocketFactories.ql | 2 +- .../CWE-094/JakartaExpressionInjectionLib.qll | 2 +- .../Security/CWE/CWE-094/ScriptInjection.ql | 17 ++- .../CWE/CWE-094/SpringViewManipulationLib.qll | 2 +- .../NonConstantTimeCheckOnSignatureQuery.qll | 12 +-- .../Security/CWE/CWE-327/SslLib.qll | 2 +- .../CWE/CWE-400/LocalThreadResourceAbuse.ql | 5 +- .../Security/CWE/CWE-489/WebComponentMain.ql | 7 +- .../CWE/CWE-625/PermissiveDotRegexQuery.qll | 4 +- .../CWE/CWE-652/XQueryInjectionLib.qll | 8 +- .../InsecureRmiJmxEnvironmentConfiguration.ql | 8 +- .../semmle/code/java/frameworks/Jsf.qll | 3 +- .../modelgenerator/internal/CaptureModels.qll | 2 +- 45 files changed, 370 insertions(+), 218 deletions(-) diff --git a/java/ql/lib/experimental/quantum/JCA.qll b/java/ql/lib/experimental/quantum/JCA.qll index b1b536a3ccb6..feac5aaf0ea3 100644 --- a/java/ql/lib/experimental/quantum/JCA.qll +++ b/java/ql/lib/experimental/quantum/JCA.qll @@ -295,7 +295,7 @@ module JCAModel { class CipherGetInstanceCall extends MethodCall { CipherGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "Cipher", "getInstance") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", "getInstance") } Expr getAlgorithmArg() { result = this.getArgument(0) } @@ -307,7 +307,8 @@ module JCAModel { private class CipherOperationCall extends MethodCall { CipherOperationCall() { this.getMethod() - .hasQualifiedName("javax.crypto", "Cipher", ["update", "doFinal", "wrap", "unwrap"]) + .hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", + ["update", "doFinal", "wrap", "unwrap"]) } predicate isIntermediate() { this.getMethod().getName() = "update" } @@ -474,7 +475,9 @@ module JCAModel { * An access to the `javax.crypto.Cipher` class. */ private class CipherAccess extends TypeAccess { - CipherAccess() { this.getType().(Class).hasQualifiedName("javax.crypto", "Cipher") } + CipherAccess() { + this.getType().(Class).hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher") + } } /** @@ -708,7 +711,9 @@ module JCAModel { // and through setter methods class IvParameterSpecInstance extends NonceParameterInstantiation { IvParameterSpecInstance() { - super.getConstructedType().hasQualifiedName("javax.crypto.spec", "IvParameterSpec") + super + .getConstructedType() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "IvParameterSpec") } override DataFlow::Node getInputNode() { result.asExpr() = super.getArgument(0) } @@ -717,7 +722,9 @@ module JCAModel { // TODO: this also specifies the tag length for GCM class GCMParameterSpecInstance extends NonceParameterInstantiation { GCMParameterSpecInstance() { - super.getConstructedType().hasQualifiedName("javax.crypto.spec", "GCMParameterSpec") + super + .getConstructedType() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "GCMParameterSpec") } override DataFlow::Node getInputNode() { result.asExpr() = super.getArgument(1) } @@ -725,7 +732,8 @@ module JCAModel { class IvParameterSpecGetIvCall extends MethodCall { IvParameterSpecGetIvCall() { - this.getMethod().hasQualifiedName("javax.crypto.spec", "IvParameterSpec", "getIV") + this.getMethod() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "IvParameterSpec", "getIV") } } @@ -797,7 +805,9 @@ module JCAModel { } class CipherInitCall extends MethodCall { - CipherInitCall() { this.getCallee().hasQualifiedName("javax.crypto", "Cipher", "init") } + CipherInitCall() { + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", "init") + } /** * Returns the mode argument to the `init` method @@ -966,7 +976,9 @@ module JCAModel { class DHGenParameterSpecInstance extends KeyGeneratorParameterSpecClassInstanceExpr { DHGenParameterSpecInstance() { - super.getConstructedType().hasQualifiedName("javax.crypto.spec", "DHGenParameterSpec") + super + .getConstructedType() + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "DHGenParameterSpec") } Expr getPrimeSizeArg() { result = this.getArgument(0) } @@ -1067,7 +1079,7 @@ module JCAModel { //TODO: Link getAlgorithm from KeyPairGenerator to algorithm instances or AVCs? High priority. class KeyGeneratorGetInstanceCall extends MethodCall { KeyGeneratorGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyGenerator", "getInstance") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator", "getInstance") or this.getCallee().hasQualifiedName("java.security", "KeyPairGenerator", "getInstance") } @@ -1082,7 +1094,8 @@ module JCAModel { this.getCallee().hasQualifiedName("java.security", "KeyPairGenerator", "initialize") and keyType = Crypto::TAsymmetricKeyType() or - this.getCallee().hasQualifiedName("javax.crypto", "KeyGenerator", ["init", "initialize"]) and + this.getCallee() + .hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator", ["init", "initialize"]) and keyType = Crypto::TSymmetricKeyType() } @@ -1111,7 +1124,7 @@ module JCAModel { Crypto::KeyArtifactType type; KeyGeneratorGenerateCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyGenerator", "generateKey") and + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator", "generateKey") and type instanceof Crypto::TSymmetricKeyType or this.getCallee() @@ -1176,7 +1189,7 @@ module JCAModel { class KeySpecInstantiation extends ClassInstanceExpr { KeySpecInstantiation() { this.getConstructedType() - .hasQualifiedName("javax.crypto.spec", + .hasQualifiedName(javaxOrJakarta() + ".crypto.spec", ["PBEKeySpec", "SecretKeySpec", "PBEKeySpec", "DESedeKeySpec"]) } @@ -1227,7 +1240,8 @@ module JCAModel { class SecretKeyFactoryGetInstanceCall extends MethodCall { SecretKeyFactoryGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "SecretKeyFactory", "getInstance") + this.getCallee() + .hasQualifiedName(javaxOrJakarta() + ".crypto", "SecretKeyFactory", "getInstance") } Expr getAlgorithmArg() { result = this.getArgument(0) } @@ -1235,7 +1249,8 @@ module JCAModel { class SecretKeyFactoryGenerateSecretCall extends MethodCall { SecretKeyFactoryGenerateSecretCall() { - this.getCallee().hasQualifiedName("javax.crypto", "SecretKeyFactory", "generateSecret") + this.getCallee() + .hasQualifiedName(javaxOrJakarta() + ".crypto", "SecretKeyFactory", "generateSecret") } Expr getKeySpecArg() { result = this.getArgument(0) } @@ -1430,7 +1445,7 @@ module JCAModel { class KeyAgreementInitCall extends MethodCall { KeyAgreementInitCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyAgreement", "init") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", "init") } Expr getServerKeyArg() { result = this.getArgument(0) } @@ -1438,7 +1453,7 @@ module JCAModel { class KeyAgreementGetInstanceCall extends MethodCall { KeyAgreementGetInstanceCall() { - this.getCallee().hasQualifiedName("javax.crypto", "KeyAgreement", "getInstance") + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", "getInstance") } Expr getAlgorithmArg() { result = super.getArgument(0) } @@ -1482,7 +1497,8 @@ module JCAModel { class KeyAgreementCall extends MethodCall { KeyAgreementCall() { this.getCallee() - .hasQualifiedName("javax.crypto", "KeyAgreement", ["generateSecret", "doPhase"]) + .hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", + ["generateSecret", "doPhase"]) } predicate isIntermediate() { this.getCallee().getName() = "doPhase" } @@ -1647,7 +1663,9 @@ module JCAModel { } class MacGetInstanceCall extends MethodCall { - MacGetInstanceCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "getInstance") } + MacGetInstanceCall() { + this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Mac", "getInstance") + } Expr getAlgorithmArg() { result = this.getArgument(0) } @@ -1663,7 +1681,7 @@ module JCAModel { } class MacInitCall extends MethodCall { - MacInitCall() { this.getCallee().hasQualifiedName("javax.crypto", "Mac", "init") } + MacInitCall() { this.getCallee().hasQualifiedName(javaxOrJakarta() + ".crypto", "Mac", "init") } Expr getKeyArg() { result = this.getArgument(0) and this.getMethod().getParameterType(0).hasName("Key") @@ -1691,7 +1709,7 @@ module JCAModel { Expr output; MacOperationCall() { - super.getMethod().getDeclaringType().hasQualifiedName("javax.crypto", "Mac") and + super.getMethod().getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".crypto", "Mac") and ( super.getMethod().hasStringSignature(["doFinal()", "doFinal(byte[])"]) and this = output or diff --git a/java/ql/lib/semmle/code/java/J2EE.qll b/java/ql/lib/semmle/code/java/J2EE.qll index 4412b3715e34..0f7473505dfd 100644 --- a/java/ql/lib/semmle/code/java/J2EE.qll +++ b/java/ql/lib/semmle/code/java/J2EE.qll @@ -9,49 +9,61 @@ import Type /** An entity bean. */ class EntityBean extends Class { EntityBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EntityBean") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EntityBean") | + this.hasSupertype+(i) + ) } } /** An enterprise bean. */ class EnterpriseBean extends RefType { EnterpriseBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EnterpriseBean") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EnterpriseBean") | + this.hasSupertype+(i) + ) } } /** A local EJB home interface. */ class LocalEjbHomeInterface extends Interface { LocalEjbHomeInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBLocalHome") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBLocalHome") | + this.hasSupertype+(i) + ) } } /** A remote EJB home interface. */ class RemoteEjbHomeInterface extends Interface { RemoteEjbHomeInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBHome") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBHome") | + this.hasSupertype+(i) + ) } } /** A local EJB interface. */ class LocalEjbInterface extends Interface { LocalEjbInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBLocalObject") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBLocalObject") | + this.hasSupertype+(i) + ) } } /** A remote EJB interface. */ class RemoteEjbInterface extends Interface { RemoteEjbInterface() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "EJBObject") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBObject") | + this.hasSupertype+(i) + ) } } /** A message bean. */ class MessageBean extends Class { MessageBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "MessageDrivenBean") | + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "MessageDrivenBean") | this.hasSupertype+(i) ) } @@ -60,6 +72,8 @@ class MessageBean extends Class { /** A session bean. */ class SessionBean extends Class { SessionBean() { - exists(Interface i | i.hasQualifiedName("javax.ejb", "SessionBean") | this.hasSupertype+(i)) + exists(Interface i | i.hasQualifiedName(javaxOrJakarta() + ".ejb", "SessionBean") | + this.hasSupertype+(i) + ) } } diff --git a/java/ql/lib/semmle/code/java/JMX.qll b/java/ql/lib/semmle/code/java/JMX.qll index 3f18e0ecf3d3..a951b2a7d1a2 100644 --- a/java/ql/lib/semmle/code/java/JMX.qll +++ b/java/ql/lib/semmle/code/java/JMX.qll @@ -18,7 +18,7 @@ class MBean extends ManagedBean { class MXBean extends ManagedBean { MXBean() { this.getQualifiedName().matches("%MXBean%") or - this.getAnAnnotation().getType().hasQualifiedName("javax.management", "MXBean") + this.getAnAnnotation().getType().hasQualifiedName(javaxOrJakarta() + ".management", "MXBean") } } @@ -61,7 +61,7 @@ class JmxRegistrationCall extends MethodCall { class JmxRegistrationMethod extends Method { JmxRegistrationMethod() { // A direct registration with the `MBeanServer`. - this.getDeclaringType().hasQualifiedName("javax.management", "MBeanServer") and + this.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".management", "MBeanServer") and this.getName() = "registerMBean" or // The `MBeanServer` is often wrapped by an application specific management class, so identify @@ -78,7 +78,7 @@ class JmxRegistrationMethod extends Method { */ int getObjectPosition() { // Passed as the first argument to `registerMBean`. - this.getDeclaringType().hasQualifiedName("javax.management", "MBeanServer") and + this.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".management", "MBeanServer") and this.getName() = "registerMBean" and result = 0 or @@ -92,16 +92,20 @@ class JmxRegistrationMethod extends Method { /** The class `javax.management.remote.JMXConnectorFactory`. */ class TypeJmxConnectorFactory extends Class { TypeJmxConnectorFactory() { - this.hasQualifiedName("javax.management.remote", "JMXConnectorFactory") + this.hasQualifiedName(javaxOrJakarta() + ".management.remote", "JMXConnectorFactory") } } /** The class `javax.management.remote.JMXServiceURL`. */ class TypeJmxServiceUrl extends Class { - TypeJmxServiceUrl() { this.hasQualifiedName("javax.management.remote", "JMXServiceURL") } + TypeJmxServiceUrl() { + this.hasQualifiedName(javaxOrJakarta() + ".management.remote", "JMXServiceURL") + } } /** The class `javax.management.remote.rmi.RMIConnector`. */ class TypeRmiConnector extends Class { - TypeRmiConnector() { this.hasQualifiedName("javax.management.remote.rmi", "RMIConnector") } + TypeRmiConnector() { + this.hasQualifiedName(javaxOrJakarta() + ".management.remote.rmi", "RMIConnector") + } } diff --git a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll index ec8ad6e2d4ff..26444920a7e3 100644 --- a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll @@ -316,7 +316,7 @@ class FacesComponentReflectivelyConstructedClass extends ReflectivelyConstructed * Entry point for EJB home interfaces. */ class EjbHome extends Interface, EntryPoint { - EjbHome() { this.getAnAncestor().hasQualifiedName("javax.ejb", "EJBHome") } + EjbHome() { this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBHome") } override Callable getALiveCallable() { result = this.getACallable() } } @@ -325,7 +325,7 @@ class EjbHome extends Interface, EntryPoint { * Entry point for EJB object interfaces. */ class EjbObject extends Interface, EntryPoint { - EjbObject() { this.getAnAncestor().hasQualifiedName("javax.ejb", "EJBObject") } + EjbObject() { this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBObject") } override Callable getALiveCallable() { result = this.getACallable() } } @@ -341,7 +341,9 @@ class GsonDeserializationEntryPoint extends ReflectivelyConstructedClass { class JaxbDeserializationEntryPoint extends ReflectivelyConstructedClass { JaxbDeserializationEntryPoint() { // A class can be deserialized by JAXB if it's an `XmlRootElement`... - this.getAnAnnotation().getType().hasQualifiedName("javax.xml.bind.annotation", "XmlRootElement") + this.getAnAnnotation() + .getType() + .hasQualifiedName(javaxOrJakarta() + ".xml.bind.annotation", "XmlRootElement") or // ... or the type of an `XmlElement` field. exists(Field elementField | diff --git a/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll index df9ef0a7b7c5..63b142ae3add 100644 --- a/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/WebEntryPoints.qll @@ -45,7 +45,7 @@ class ServletListenerClass extends ReflectivelyConstructedClass { */ class ServletFilterClass extends ReflectivelyConstructedClass { ServletFilterClass() { - this.getAnAncestor().hasQualifiedName("javax.servlet", "Filter") and + this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".servlet", "Filter") and // If we have seen any `web.xml` files, this filter will be considered to be live only if it is // referred to as a filter-class in at least one. If no `web.xml` files are found, we assume // that XML extraction was not enabled, and therefore consider all filter classes as live. diff --git a/java/ql/lib/semmle/code/java/frameworks/JAXB.qll b/java/ql/lib/semmle/code/java/frameworks/JAXB.qll index 1283aa3d21e2..c781abdb8287 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JAXB.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JAXB.qll @@ -6,20 +6,20 @@ import semmle.code.java.Type class JaxbElement extends Class { JaxbElement() { - this.getAnAncestor().hasQualifiedName("javax.xml.bind", "JAXBElement") or + this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".xml.bind", "JAXBElement") or this.getAnAnnotation().getType().getName() = "XmlRootElement" } } class JaxbMarshalMethod extends Method { JaxbMarshalMethod() { - this.getDeclaringType().hasQualifiedName("javax.xml.bind", "Marshaller") and + this.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".xml.bind", "Marshaller") and this.getName() = "marshal" } } class JaxbAnnotationType extends AnnotationType { - JaxbAnnotationType() { this.getPackage().getName() = "javax.xml.bind.annotation" } + JaxbAnnotationType() { this.getPackage().getName() = javaxOrJakarta() + ".xml.bind.annotation" } } class JaxbAnnotated extends Annotatable { diff --git a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll index 517f55fcc868..feb7381e4962 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll @@ -14,35 +14,45 @@ import java * A `@javax.annotation.Generated` annotation. */ class GeneratedAnnotation extends Annotation { - GeneratedAnnotation() { this.getType().hasQualifiedName("javax.annotation", "Generated") } + GeneratedAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "Generated") + } } /** * A `@javax.annotation.PostConstruct` annotation. */ class PostConstructAnnotation extends Annotation { - PostConstructAnnotation() { this.getType().hasQualifiedName("javax.annotation", "PostConstruct") } + PostConstructAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "PostConstruct") + } } /** * A `@javax.annotation.PreDestroy` annotation. */ class PreDestroyAnnotation extends Annotation { - PreDestroyAnnotation() { this.getType().hasQualifiedName("javax.annotation", "PreDestroy") } + PreDestroyAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "PreDestroy") + } } /** * A `@javax.annotation.Resource` annotation. */ class ResourceAnnotation extends Annotation { - ResourceAnnotation() { this.getType().hasQualifiedName("javax.annotation", "Resource") } + ResourceAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "Resource") + } } /** * A `@javax.annotation.Resources` annotation. */ class ResourcesAnnotation extends Annotation { - ResourcesAnnotation() { this.getType().hasQualifiedName("javax.annotation", "Resources") } + ResourcesAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "Resources") + } } /** @@ -50,7 +60,7 @@ class ResourcesAnnotation extends Annotation { */ class JavaxManagedBeanAnnotation extends Annotation { JavaxManagedBeanAnnotation() { - this.getType().hasQualifiedName("javax.annotation", "ManagedBean") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation", "ManagedBean") } } @@ -63,7 +73,7 @@ class JavaxManagedBeanAnnotation extends Annotation { */ class DeclareRolesAnnotation extends Annotation { DeclareRolesAnnotation() { - this.getType().hasQualifiedName("javax.annotation.security", "DeclareRoles") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "DeclareRoles") } } @@ -71,7 +81,9 @@ class DeclareRolesAnnotation extends Annotation { * A `@javax.annotation.security.DenyAll` annotation. */ class DenyAllAnnotation extends Annotation { - DenyAllAnnotation() { this.getType().hasQualifiedName("javax.annotation.security", "DenyAll") } + DenyAllAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "DenyAll") + } } /** @@ -79,7 +91,7 @@ class DenyAllAnnotation extends Annotation { */ class PermitAllAnnotation extends Annotation { PermitAllAnnotation() { - this.getType().hasQualifiedName("javax.annotation.security", "PermitAll") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "PermitAll") } } @@ -88,7 +100,7 @@ class PermitAllAnnotation extends Annotation { */ class RolesAllowedAnnotation extends Annotation { RolesAllowedAnnotation() { - this.getType().hasQualifiedName("javax.annotation.security", "RolesAllowed") + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "RolesAllowed") } } @@ -96,7 +108,9 @@ class RolesAllowedAnnotation extends Annotation { * A `@javax.annotation.security.RunAs` annotation. */ class RunAsAnnotation extends Annotation { - RunAsAnnotation() { this.getType().hasQualifiedName("javax.annotation.security", "RunAs") } + RunAsAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".annotation.security", "RunAs") + } } /* @@ -107,7 +121,9 @@ class RunAsAnnotation extends Annotation { * A `@javax.interceptor.AroundInvoke` annotation. */ class AroundInvokeAnnotation extends Annotation { - AroundInvokeAnnotation() { this.getType().hasQualifiedName("javax.interceptor", "AroundInvoke") } + AroundInvokeAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "AroundInvoke") + } } /** @@ -115,7 +131,7 @@ class AroundInvokeAnnotation extends Annotation { */ class ExcludeClassInterceptorsAnnotation extends Annotation { ExcludeClassInterceptorsAnnotation() { - this.getType().hasQualifiedName("javax.interceptor", "ExcludeClassInterceptors") + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "ExcludeClassInterceptors") } } @@ -124,7 +140,7 @@ class ExcludeClassInterceptorsAnnotation extends Annotation { */ class ExcludeDefaultInterceptorsAnnotation extends Annotation { ExcludeDefaultInterceptorsAnnotation() { - this.getType().hasQualifiedName("javax.interceptor", "ExcludeDefaultInterceptors") + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "ExcludeDefaultInterceptors") } } @@ -132,7 +148,9 @@ class ExcludeDefaultInterceptorsAnnotation extends Annotation { * A `@javax.interceptor.Interceptors` annotation. */ class InterceptorsAnnotation extends Annotation { - InterceptorsAnnotation() { this.getType().hasQualifiedName("javax.interceptor", "Interceptors") } + InterceptorsAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".interceptor", "Interceptors") + } } /* @@ -143,14 +161,16 @@ class InterceptorsAnnotation extends Annotation { * A `@javax.jws.WebMethod` annotation. */ class WebMethodAnnotation extends Annotation { - WebMethodAnnotation() { this.getType().hasQualifiedName("javax.jws", "WebMethod") } + WebMethodAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".jws", "WebMethod") } } /** * A `@javax.jws.WebService` annotation. */ class WebServiceAnnotation extends Annotation { - WebServiceAnnotation() { this.getType().hasQualifiedName("javax.jws", "WebService") } + WebServiceAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".jws", "WebService") + } } /* @@ -161,7 +181,9 @@ class WebServiceAnnotation extends Annotation { * A `@javax.xml.ws.WebServiceRef` annotation. */ class WebServiceRefAnnotation extends Annotation { - WebServiceRefAnnotation() { this.getType().hasQualifiedName("javax.xml.ws", "WebServiceRef") } + WebServiceRefAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".xml.ws", "WebServiceRef") + } } /* diff --git a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll index 8b3ab081ee0f..374941365650 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll @@ -13,7 +13,7 @@ private import semmle.code.java.security.XSS /** * Gets a name for the root package of JAX-RS. */ -string getAJaxRsPackage() { result in ["javax.ws.rs", "jakarta.ws.rs"] } +string getAJaxRsPackage() { result in [javaxOrJakarta() + ".ws.rs", "jakarta.ws.rs"] } /** * Gets a name for package `subpackage` within the JAX-RS hierarchy. @@ -42,7 +42,7 @@ class JaxWsEndpoint extends Class { result.isPublic() and not result instanceof InitializerMethod and not exists(Annotation a | a = result.getAnAnnotation() | - a.getType().hasQualifiedName(["javax", "jakarta"] + ".jws", "WebMethod") and + a.getType().hasQualifiedName([javaxOrJakarta() + "", "jakarta"] + ".jws", "WebMethod") and a.getValue("exclude").(BooleanLiteral).getBooleanValue() = true ) and forex(ParamOrReturn paramOrRet | paramOrRet = result.getAParameter() or paramOrRet = result | @@ -62,7 +62,7 @@ class JaxWsEndpoint extends Class { /** The annotation type `@XmlJavaTypeAdapter`. */ class XmlJavaTypeAdapter extends AnnotationType { XmlJavaTypeAdapter() { - this.hasQualifiedName(["javax", "jakarta"] + ".xml.bind.annotation.adapters", + this.hasQualifiedName([javaxOrJakarta() + "", "jakarta"] + ".xml.bind.annotation.adapters", "XmlJavaTypeAdapter") } } @@ -115,7 +115,7 @@ private class JaxAcceptableStandardClass extends RefType { this.hasQualifiedName("java.util", "Calendar") or this.hasQualifiedName("java.math", "BigInteger") or this.hasQualifiedName("java.math", "BigDecimal") or - this.hasQualifiedName("javax.xml.namespace", "QName") or + this.hasQualifiedName(javaxOrJakarta() + ".xml.namespace", "QName") or this instanceof TypeUri } } @@ -292,7 +292,9 @@ class JaxRSAnnotation extends Annotation { JaxRSAnnotation() { exists(AnnotationType a | a = this.getType() and - a.getPackage().getName().regexpMatch(["javax\\.ws\\.rs(\\..*)?", "jakarta\\.ws\\.rs(\\..*)?"]) + a.getPackage() + .getName() + .regexpMatch([javaxOrJakarta() + "\\.ws\\.rs(\\..*)?", "jakarta\\.ws\\.rs(\\..*)?"]) ) } } diff --git a/java/ql/lib/semmle/code/java/frameworks/Jms.qll b/java/ql/lib/semmle/code/java/frameworks/Jms.qll index 3cc76771a776..8c86481b4ca5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jms.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jms.qll @@ -7,6 +7,6 @@ import java /** The method `ObjectMessage.getObject`. */ class ObjectMessageGetObjectMethod extends Method { ObjectMessageGetObjectMethod() { - this.hasQualifiedName(["javax", "jakarta"] + ".jms", "ObjectMessage", "getObject") + this.hasQualifiedName([javaxOrJakarta() + "", "jakarta"] + ".jms", "ObjectMessage", "getObject") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll index 0d7d481dc1d0..d2b14d5f58ec 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jndi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jndi.qll @@ -9,32 +9,34 @@ import java /*--- Types ---*/ /** The interface `javax.naming.Context`. */ class TypeNamingContext extends Interface { - TypeNamingContext() { this.hasQualifiedName("javax.naming", "Context") } + TypeNamingContext() { this.hasQualifiedName(javaxOrJakarta() + ".naming", "Context") } } /** The class `javax.naming.CompositeName`. */ class TypeCompositeName extends Class { - TypeCompositeName() { this.hasQualifiedName("javax.naming", "CompositeName") } + TypeCompositeName() { this.hasQualifiedName(javaxOrJakarta() + ".naming", "CompositeName") } } /** The class `javax.naming.CompoundName`. */ class TypeCompoundName extends Class { - TypeCompoundName() { this.hasQualifiedName("javax.naming", "CompoundName") } + TypeCompoundName() { this.hasQualifiedName(javaxOrJakarta() + ".naming", "CompoundName") } } /** The interface `javax.naming.directory.DirContext`. */ class TypeDirContext extends Interface { - TypeDirContext() { this.hasQualifiedName("javax.naming.directory", "DirContext") } + TypeDirContext() { this.hasQualifiedName(javaxOrJakarta() + ".naming.directory", "DirContext") } } /** The class `javax.naming.directory.SearchControls` */ class TypeSearchControls extends Class { - TypeSearchControls() { this.hasQualifiedName("javax.naming.directory", "SearchControls") } + TypeSearchControls() { + this.hasQualifiedName(javaxOrJakarta() + ".naming.directory", "SearchControls") + } } /** The class `javax.naming.ldap.LdapName`. */ class TypeLdapName extends Class { - TypeLdapName() { this.hasQualifiedName("javax.naming.ldap", "LdapName") } + TypeLdapName() { this.hasQualifiedName(javaxOrJakarta() + ".naming.ldap", "LdapName") } } /*--- Methods ---*/ diff --git a/java/ql/lib/semmle/code/java/frameworks/Mail.qll b/java/ql/lib/semmle/code/java/frameworks/Mail.qll index c61e5ae34f99..5793da4cceb1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Mail.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Mail.qll @@ -8,7 +8,7 @@ import java * The class `javax.mail.Session` or `jakarta.mail.Session`. */ class MailSession extends Class { - MailSession() { this.hasQualifiedName(["javax.mail", "jakarta.mail"], "Session") } + MailSession() { this.hasQualifiedName([javaxOrJakarta() + ".mail", "jakarta.mail"], "Session") } } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/Networking.qll b/java/ql/lib/semmle/code/java/frameworks/Networking.qll index 6eeb5aa90241..21df7ae7f8d2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Networking.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Networking.qll @@ -20,7 +20,7 @@ class TypeSocket extends RefType { /** The type `javax.net.SocketFactory` */ class TypeSocketFactory extends RefType { - TypeSocketFactory() { this.hasQualifiedName("javax.net", "SocketFactory") } + TypeSocketFactory() { this.hasQualifiedName(javaxOrJakarta() + ".net", "SocketFactory") } } /** The type `java.net.URL`. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll index 7d7beb74fc30..30cd248d4d1b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll @@ -12,7 +12,7 @@ import semmle.code.java.Type */ class ServletRequest extends RefType { ServletRequest() { - this.hasQualifiedName("javax.servlet", "ServletRequest") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequest") or this instanceof HttpServletRequest } } @@ -21,7 +21,9 @@ class ServletRequest extends RefType { * The interface `javax.servlet.http.HttpServletRequest`. */ class HttpServletRequest extends RefType { - HttpServletRequest() { this.hasQualifiedName("javax.servlet.http", "HttpServletRequest") } + HttpServletRequest() { + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpServletRequest") + } } /** @@ -168,7 +170,7 @@ class ServletRequestGetBodyMethod extends Method { */ class ServletResponse extends RefType { ServletResponse() { - this.hasQualifiedName("javax.servlet", "ServletResponse") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletResponse") or this instanceof HttpServletResponse } } @@ -177,7 +179,9 @@ class ServletResponse extends RefType { * The interface `javax.servlet.http.HttpServletResponse`. */ class HttpServletResponse extends RefType { - HttpServletResponse() { this.hasQualifiedName("javax.servlet.http", "HttpServletResponse") } + HttpServletResponse() { + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpServletResponse") + } } /** @@ -239,7 +243,7 @@ class ServletResponseGetOutputStreamMethod extends Method { /** The class `javax.servlet.http.Cookie`. */ class TypeCookie extends Class { - TypeCookie() { this.hasQualifiedName("javax.servlet.http", "Cookie") } + TypeCookie() { this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "Cookie") } } /** @@ -331,7 +335,7 @@ class ResponseSetContentTypeMethod extends Method { * A class that has `javax.servlet.Servlet` as an ancestor. */ class ServletClass extends Class { - ServletClass() { this.getAnAncestor().hasQualifiedName("javax.servlet", "Servlet") } + ServletClass() { this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".servlet", "Servlet") } } /** @@ -342,13 +346,13 @@ class ServletClass extends Class { */ class ServletWebXmlListenerType extends RefType { ServletWebXmlListenerType() { - this.hasQualifiedName("javax.servlet", "ServletContextAttributeListener") or - this.hasQualifiedName("javax.servlet", "ServletContextListener") or - this.hasQualifiedName("javax.servlet", "ServletRequestAttributeListener") or - this.hasQualifiedName("javax.servlet", "ServletRequestListener") or - this.hasQualifiedName("javax.servlet.http", "HttpSessionAttributeListener") or - this.hasQualifiedName("javax.servlet.http", "HttpSessionIdListener") or - this.hasQualifiedName("javax.servlet.http", "HttpSessionListener") + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletContextAttributeListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletContextListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequestAttributeListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequestListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSessionAttributeListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSessionIdListener") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSessionListener") // Listeners that are not configured in `web.xml`: // - `HttpSessionActivationListener` // - `HttpSessionBindingListener` @@ -373,8 +377,8 @@ predicate isRequestGetParamMethod(MethodCall ma) { /** The Java EE RequestDispatcher. */ class RequestDispatcher extends RefType { RequestDispatcher() { - this.hasQualifiedName(["javax.servlet", "jakarta.servlet"], "RequestDispatcher") or - this.hasQualifiedName("javax.portlet", "PortletRequestDispatcher") + this.hasQualifiedName([javaxOrJakarta() + ".servlet", "jakarta.servlet"], "RequestDispatcher") or + this.hasQualifiedName(javaxOrJakarta() + ".portlet", "PortletRequestDispatcher") } } @@ -398,7 +402,7 @@ class RequestDispatchMethod extends Method { * The interface `javax.servlet.ServletContext`. */ class ServletContext extends RefType { - ServletContext() { this.hasQualifiedName("javax.servlet", "ServletContext") } + ServletContext() { this.hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletContext") } } /** The `getResource` method of `ServletContext`. */ @@ -419,5 +423,5 @@ class GetServletResourceAsStreamMethod extends Method { /** The interface `javax.servlet.http.HttpSession` */ class HttpServletSession extends RefType { - HttpServletSession() { this.hasQualifiedName("javax.servlet.http", "HttpSession") } + HttpServletSession() { this.hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSession") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll index 2f749962e94d..285bd7fd670f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/JavaServerFaces.qll @@ -61,7 +61,7 @@ class FacesAccessibleType extends RefType { class FacesComponent extends Class { FacesComponent() { // Must extend UIComponent for it to be a valid component. - this.getAnAncestor().hasQualifiedName("javax.faces.component", "UIComponent") and + this.getAnAncestor().hasQualifiedName(javaxOrJakarta() + ".faces.component", "UIComponent") and ( // Must be registered using either an annotation exists(FacesComponentAnnotation componentAnnotation | diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index b5031d7dff08..05a7e6155524 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -9,7 +9,9 @@ import java /** * Gets a JavaEE Persistence API package name. */ -string getAPersistencePackageName() { result = ["javax.persistence", "jakarta.persistence"] } +string getAPersistencePackageName() { + result = [javaxOrJakarta() + ".persistence", "jakarta.persistence"] +} /** * A `RefType` with the `@Entity` annotation that indicates that it can be persisted using a JPA diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll index 222b778ba588..6943c8023d43 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Xml.qll @@ -33,7 +33,7 @@ private class ValidatorConfig extends TransformerConfig { /** The class `javax.xml.validation.Validator`. */ private class Validator extends RefType { - Validator() { this.hasQualifiedName("javax.xml.validation", "Validator") } + Validator() { this.hasQualifiedName(javaxOrJakarta() + ".xml.validation", "Validator") } } /** A safely configured `Validator`. */ diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll index a866d84df21d..efbd0c0b1eb5 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJB.qll @@ -64,7 +64,7 @@ class SessionEjb extends EJB { result = this.getASupertype() and not result.hasQualifiedName("java.io", "Serializable") and not result.hasQualifiedName("java.io", "Externalizable") and - not result.getPackage().getName() = "javax.ejb" + not result.getPackage().getName() = javaxOrJakarta() + ".ejb" } /** Any remote interfaces of this EJB. */ @@ -216,14 +216,14 @@ abstract class BusinessInterfaceAnnotation extends EjbInterfaceAnnotation { } * An instance of a `@Remote` annotation. */ class RemoteAnnotation extends BusinessInterfaceAnnotation { - RemoteAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Remote") } + RemoteAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Remote") } } /** * An instance of a `@Local` annotation. */ class LocalAnnotation extends BusinessInterfaceAnnotation { - LocalAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Local") } + LocalAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Local") } } /** @@ -330,7 +330,7 @@ class LocalAnnotatedBusinessInterface extends AnnotatedBusinessInterface { * A `@javax.ejb.Init` annotation. */ class InitAnnotation extends Annotation { - InitAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Init") } + InitAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Init") } } /** @@ -383,14 +383,16 @@ abstract class HomeAnnotation extends EjbInterfaceAnnotation { } * An instance of a `@RemoteHome` annotation. */ class RemoteHomeAnnotation extends HomeAnnotation { - RemoteHomeAnnotation() { this.getType().hasQualifiedName("javax.ejb", "RemoteHome") } + RemoteHomeAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "RemoteHome") + } } /** * An instance of a `@LocalHome` annotation. */ class LocalHomeAnnotation extends HomeAnnotation { - LocalHomeAnnotation() { this.getType().hasQualifiedName("javax.ejb", "LocalHome") } + LocalHomeAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "LocalHome") } } /** @@ -748,7 +750,9 @@ Type inheritsMatchingCreateMethodExceptThrows(StatefulSessionEjb ejb, EjbInterfa * A `@javax.ejb.AccessTimeout` annotation. */ class AccessTimeoutAnnotation extends Annotation { - AccessTimeoutAnnotation() { this.getType().hasQualifiedName("javax.ejb", "AccessTimeout") } + AccessTimeoutAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "AccessTimeout") + } } /** @@ -756,7 +760,7 @@ class AccessTimeoutAnnotation extends Annotation { */ class ActivationConfigPropertyAnnotation extends Annotation { ActivationConfigPropertyAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "ActivationConfigProperty") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "ActivationConfigProperty") } } @@ -764,14 +768,18 @@ class ActivationConfigPropertyAnnotation extends Annotation { * A `@javax.ejb.AfterBegin` annotation. */ class AfterBeginAnnotation extends Annotation { - AfterBeginAnnotation() { this.getType().hasQualifiedName("javax.ejb", "AfterBegin") } + AfterBeginAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "AfterBegin") + } } /** * A `@javax.ejb.AfterCompletion` annotation. */ class AfterCompletionAnnotation extends Annotation { - AfterCompletionAnnotation() { this.getType().hasQualifiedName("javax.ejb", "AfterCompletion") } + AfterCompletionAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "AfterCompletion") + } } /** @@ -779,7 +787,7 @@ class AfterCompletionAnnotation extends Annotation { */ class ApplicationExceptionAnnotation extends Annotation { ApplicationExceptionAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "ApplicationException") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "ApplicationException") } } @@ -787,14 +795,18 @@ class ApplicationExceptionAnnotation extends Annotation { * A `@javax.ejb.Asynchronous` annotation. */ class AsynchronousAnnotation extends Annotation { - AsynchronousAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Asynchronous") } + AsynchronousAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Asynchronous") + } } /** * A `@javax.ejb.BeforeCompletion` annotation. */ class BeforeCompletionAnnotation extends Annotation { - BeforeCompletionAnnotation() { this.getType().hasQualifiedName("javax.ejb", "BeforeCompletion") } + BeforeCompletionAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "BeforeCompletion") + } } /** @@ -802,7 +814,7 @@ class BeforeCompletionAnnotation extends Annotation { */ class ConcurrencyManagementAnnotation extends Annotation { ConcurrencyManagementAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "ConcurrencyManagement") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "ConcurrencyManagement") } } @@ -810,119 +822,127 @@ class ConcurrencyManagementAnnotation extends Annotation { * A `@javax.ejb.DependsOn` annotation. */ class DependsOnAnnotation extends Annotation { - DependsOnAnnotation() { this.getType().hasQualifiedName("javax.ejb", "DependsOn") } + DependsOnAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "DependsOn") } } /** * A `@javax.ejb.EJB` annotation. */ class EjbAnnotation extends Annotation { - EjbAnnotation() { this.getType().hasQualifiedName("javax.ejb", "EJB") } + EjbAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJB") } } /** * A `@javax.ejb.EJBs` annotation. */ class EJBsAnnotation extends Annotation { - EJBsAnnotation() { this.getType().hasQualifiedName("javax.ejb", "EJBs") } + EJBsAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBs") } } /** * A `@javax.ejb.LocalBean` annotation. */ class LocalBeanAnnotation extends Annotation { - LocalBeanAnnotation() { this.getType().hasQualifiedName("javax.ejb", "LocalBean") } + LocalBeanAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "LocalBean") } } /** * A `@javax.ejb.Lock` annotation. */ class LockAnnotation extends Annotation { - LockAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Lock") } + LockAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Lock") } } /** * A `@javax.ejb.MessageDriven` annotation. */ class MessageDrivenAnnotation extends Annotation { - MessageDrivenAnnotation() { this.getType().hasQualifiedName("javax.ejb", "MessageDriven") } + MessageDrivenAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "MessageDriven") + } } /** * A `@javax.ejb.PostActivate` annotation. */ class PostActivateAnnotation extends Annotation { - PostActivateAnnotation() { this.getType().hasQualifiedName("javax.ejb", "PostActivate") } + PostActivateAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "PostActivate") + } } /** * A `@javax.ejb.PrePassivate` annotation. */ class PrePassivateAnnotation extends Annotation { - PrePassivateAnnotation() { this.getType().hasQualifiedName("javax.ejb", "PrePassivate") } + PrePassivateAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "PrePassivate") + } } /** * A `@javax.ejb.Remove` annotation. */ class RemoveAnnotation extends Annotation { - RemoveAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Remove") } + RemoveAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Remove") } } /** * A `@javax.ejb.Schedule` annotation. */ class ScheduleAnnotation extends Annotation { - ScheduleAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Schedule") } + ScheduleAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Schedule") } } /** * A `@javax.ejb.Schedules` annotation. */ class SchedulesAnnotation extends Annotation { - SchedulesAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Schedules") } + SchedulesAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Schedules") } } /** * A `@javax.ejb.Singleton` annotation. */ class SingletonAnnotation extends Annotation { - SingletonAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Singleton") } + SingletonAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Singleton") } } /** * A `@javax.ejb.Startup` annotation. */ class StartupAnnotation extends Annotation { - StartupAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Startup") } + StartupAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Startup") } } /** * A `@javax.ejb.Stateful` annotation. */ class StatefulAnnotation extends Annotation { - StatefulAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Stateful") } + StatefulAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Stateful") } } /** * A `@javax.ejb.StatefulTimeout` annotation. */ class StatefulTimeoutAnnotation extends Annotation { - StatefulTimeoutAnnotation() { this.getType().hasQualifiedName("javax.ejb", "StatefulTimeout") } + StatefulTimeoutAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "StatefulTimeout") + } } /** * A `@javax.ejb.Stateless` annotation. */ class StatelessAnnotation extends Annotation { - StatelessAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Stateless") } + StatelessAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Stateless") } } /** * A `@javax.ejb.Timeout` annotation. */ class TimeoutAnnotation extends Annotation { - TimeoutAnnotation() { this.getType().hasQualifiedName("javax.ejb", "Timeout") } + TimeoutAnnotation() { this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "Timeout") } } /** @@ -930,7 +950,7 @@ class TimeoutAnnotation extends Annotation { */ class TransactionAttributeAnnotation extends Annotation { TransactionAttributeAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "TransactionAttribute") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionAttribute") } } @@ -939,7 +959,7 @@ class TransactionAttributeAnnotation extends Annotation { */ class TransactionManagementAnnotation extends Annotation { TransactionManagementAnnotation() { - this.getType().hasQualifiedName("javax.ejb", "TransactionManagement") + this.getType().hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionManagement") } } @@ -951,7 +971,10 @@ class RequiredTransactionAttributeAnnotation extends TransactionAttributeAnnotat RequiredTransactionAttributeAnnotation() { exists(FieldRead fr | this.getValue("value") = fr and - fr.getField().getType().(RefType).hasQualifiedName("javax.ejb", "TransactionAttributeType") and + fr.getField() + .getType() + .(RefType) + .hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionAttributeType") and fr.getField().getName() = "REQUIRED" ) } @@ -965,7 +988,10 @@ class RequiresNewTransactionAttributeAnnotation extends TransactionAttributeAnno RequiresNewTransactionAttributeAnnotation() { exists(FieldRead fr | this.getValue("value") = fr and - fr.getField().getType().(RefType).hasQualifiedName("javax.ejb", "TransactionAttributeType") and + fr.getField() + .getType() + .(RefType) + .hasQualifiedName(javaxOrJakarta() + ".ejb", "TransactionAttributeType") and fr.getField().getName() = "REQUIRES_NEW" ) } @@ -999,7 +1025,9 @@ TransactionAttributeAnnotation getInnermostTransactionAttributeAnnotation(Method */ class SetRollbackOnlyMethod extends Method { SetRollbackOnlyMethod() { - this.getDeclaringType().getAnAncestor().hasQualifiedName("javax.ejb", "EJBContext") and + this.getDeclaringType() + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".ejb", "EJBContext") and this.getName() = "setRollbackOnly" and this.hasNoParameters() } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll index 10b6e7f3df2f..478728168253 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/ejb/EJBRestrictions.qll @@ -159,8 +159,8 @@ class GraphicsPackage extends Package { GraphicsPackage() { this.getName() = "java.awt" or this.getName().matches("java.awt.%") or - this.getName() = "javax.swing" or - this.getName().matches("javax.swing.%") + this.getName() = javaxOrJakarta() + ".swing" or + this.getName().matches(javaxOrJakarta() + ".swing.%") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll index 3338fa840ab0..f62d9e50b687 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFAnnotations.qll @@ -9,7 +9,7 @@ import default */ class FacesManagedBeanAnnotation extends Annotation { FacesManagedBeanAnnotation() { - this.getType().hasQualifiedName("javax.faces.bean", "ManagedBean") + this.getType().hasQualifiedName(javaxOrJakarta() + ".faces.bean", "ManagedBean") } /** @@ -25,7 +25,7 @@ class FacesManagedBeanAnnotation extends Annotation { */ class FacesComponentAnnotation extends Annotation { FacesComponentAnnotation() { - this.getType().hasQualifiedName("javax.faces.component", "FacesComponent") + this.getType().hasQualifiedName(javaxOrJakarta() + ".faces.component", "FacesComponent") } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll index df646e8a9a2c..6e6bad91d471 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -9,7 +9,8 @@ import java */ class FacesContext extends RefType { FacesContext() { - this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "FacesContext") + this.hasQualifiedName([javaxOrJakarta() + ".faces.context", "jakarta.faces.context"], + "FacesContext") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll index e758811b368e..970870f95037 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringAutowire.qll @@ -14,7 +14,7 @@ import SpringComponentScan predicate hasInjectAnnotation(Annotatable a) { a.hasAnnotation("org.springframework.beans.factory.annotation", "Autowired") or a.getAnAnnotation() instanceof SpringResourceAnnotation or - a.hasAnnotation("javax.inject", "Inject") + a.hasAnnotation(javaxOrJakarta() + ".inject", "Inject") } /** @@ -292,7 +292,7 @@ class SpringBeanAutowiredField extends Field { class SpringQualifierAnnotationType extends AnnotationType { SpringQualifierAnnotationType() { this.hasQualifiedName("org.springframework.beans.factory.annotation", "Qualifier") or - this.hasQualifiedName("javax.inject", "Qualifier") or + this.hasQualifiedName(javaxOrJakarta() + ".inject", "Qualifier") or this.getAnAnnotation().getType() instanceof SpringQualifierAnnotationType } } @@ -340,7 +340,9 @@ class SpringQualifierAnnotation extends Annotation { * autowired by Spring, and can optionally specify a qualifier in the "name". */ class SpringResourceAnnotation extends Annotation { - SpringResourceAnnotation() { this.getType().hasQualifiedName("javax.inject", "Resource") } + SpringResourceAnnotation() { + this.getType().hasQualifiedName(javaxOrJakarta() + ".inject", "Resource") + } /** * Gets the specified name value, if any. diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll index a444dc96d5a4..a26e4edc2771 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringController.qll @@ -210,10 +210,22 @@ class SpringRequestMappingParameter extends Parameter { predicate isNotDirectlyTaintedInput() { this.getType().(RefType).getAnAncestor() instanceof SpringWebRequest or this.getType().(RefType).getAnAncestor() instanceof SpringNativeWebRequest or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet", "ServletRequest") or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet", "ServletResponse") or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet.http", "HttpSession") or - this.getType().(RefType).getAnAncestor().hasQualifiedName("javax.servlet.http", "PushBuilder") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletRequest") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet", "ServletResponse") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpSession") or + this.getType() + .(RefType) + .getAnAncestor() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "PushBuilder") or this.getType().(RefType).getAnAncestor().hasQualifiedName("java.security", "Principal") or this.getType() .(RefType) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll index 1c99821386da..9f04aff7e40a 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageCookieQuery.qll @@ -23,7 +23,9 @@ private class CookieCleartextStorageSink extends CleartextStorageSink { /** The instantiation of a cookie, which can act as storage. */ class Cookie extends Storable, ClassInstanceExpr { Cookie() { - this.getConstructor().getDeclaringType().hasQualifiedName("javax.servlet.http", "Cookie") + this.getConstructor() + .getDeclaringType() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "Cookie") } /** Gets an input, for example `input` in `new Cookie("...", input);`. */ @@ -42,7 +44,8 @@ private predicate cookieStore(DataFlow::Node cookie, Expr store) { exists(MethodCall m, Method def | m.getMethod() = def and def.getName() = "addCookie" and - def.getDeclaringType().hasQualifiedName("javax.servlet.http", "HttpServletResponse") and + def.getDeclaringType() + .hasQualifiedName(javaxOrJakarta() + ".servlet.http", "HttpServletResponse") and store = m and cookie.asExpr() = m.getAnArgument() ) diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index b948a94962c7..73c91433bdc5 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -9,56 +9,58 @@ import java class SslClass extends RefType { SslClass() { exists(Class c | this.getAnAncestor() = c | - c.hasQualifiedName("javax.net.ssl", _) or - c.hasQualifiedName("javax.rmi.ssl", _) + c.hasQualifiedName(javaxOrJakarta() + ".net.ssl", _) or + c.hasQualifiedName(javaxOrJakarta() + ".rmi.ssl", _) ) } } class X509TrustManager extends RefType { - X509TrustManager() { this.hasQualifiedName("javax.net.ssl", "X509TrustManager") } + X509TrustManager() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "X509TrustManager") } } /** The `javax.net.ssl.HttpsURLConnection` class. */ class HttpsUrlConnection extends RefType { - HttpsUrlConnection() { this.hasQualifiedName("javax.net.ssl", "HttpsURLConnection") } + HttpsUrlConnection() { + this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "HttpsURLConnection") + } } class SslSocketFactory extends RefType { - SslSocketFactory() { this.hasQualifiedName("javax.net.ssl", "SSLSocketFactory") } + SslSocketFactory() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLSocketFactory") } } class SslContext extends RefType { - SslContext() { this.hasQualifiedName("javax.net.ssl", "SSLContext") } + SslContext() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLContext") } } /** The `javax.net.ssl.SslSession` class. */ class SslSession extends RefType { - SslSession() { this.hasQualifiedName("javax.net.ssl", "SSLSession") } + SslSession() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLSession") } } /** The `javax.net.ssl.SslEngine` class. */ class SslEngine extends RefType { - SslEngine() { this.hasQualifiedName("javax.net.ssl", "SSLEngine") } + SslEngine() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLEngine") } } /** The `javax.net.ssl.SslSocket` class. */ class SslSocket extends RefType { - SslSocket() { this.hasQualifiedName("javax.net.ssl", "SSLSocket") } + SslSocket() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLSocket") } } /** The `javax.net.ssl.SslParameters` class. */ class SslParameters extends RefType { - SslParameters() { this.hasQualifiedName("javax.net.ssl", "SSLParameters") } + SslParameters() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLParameters") } } class HostnameVerifier extends RefType { - HostnameVerifier() { this.hasQualifiedName("javax.net.ssl", "HostnameVerifier") } + HostnameVerifier() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "HostnameVerifier") } } /** The Java class `javax.crypto.KeyGenerator`. */ class KeyGenerator extends RefType { - KeyGenerator() { this.hasQualifiedName("javax.crypto", "KeyGenerator") } + KeyGenerator() { this.hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator") } } /** The Java class `java.security.KeyPairGenerator`. */ @@ -292,7 +294,7 @@ abstract class JavaxCryptoAlgoSpec extends CryptoAlgoSpec { } class JavaxCryptoCipher extends JavaxCryptoAlgoSpec { JavaxCryptoCipher() { exists(Method m | m.getAReference() = this | - m.hasQualifiedName("javax.crypto", "Cipher", "getInstance") + m.hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", "getInstance") ) } @@ -302,7 +304,7 @@ class JavaxCryptoCipher extends JavaxCryptoAlgoSpec { class JavaxCryptoSecretKey extends JavaxCryptoAlgoSpec { JavaxCryptoSecretKey() { exists(Constructor c | c.getAReference() = this | - c.getDeclaringType().hasQualifiedName("javax.crypto.spec", "SecretKeySpec") + c.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "SecretKeySpec") ) } @@ -327,7 +329,7 @@ class JavaxCryptoKeyGenerator extends JavaxCryptoAlgoSpec { class JavaxCryptoKeyAgreement extends JavaxCryptoAlgoSpec { JavaxCryptoKeyAgreement() { exists(Method m | m.getAReference() = this | - m.hasQualifiedName("javax.crypto", "KeyAgreement", "getInstance") + m.hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", "getInstance") ) } @@ -337,7 +339,7 @@ class JavaxCryptoKeyAgreement extends JavaxCryptoAlgoSpec { class JavaxCryptoKeyFactory extends JavaxCryptoAlgoSpec { JavaxCryptoKeyFactory() { exists(Method m | m.getAReference() = this | - m.hasQualifiedName("javax.crypto", "SecretKeyFactory", "getInstance") + m.hasQualifiedName(javaxOrJakarta() + ".crypto", "SecretKeyFactory", "getInstance") ) } @@ -429,5 +431,7 @@ class DsaGenParameterSpec extends AlgorithmParameterSpec { /** The Java class `javax.crypto.spec.DHGenParameterSpec`. */ class DhGenParameterSpec extends AlgorithmParameterSpec { - DhGenParameterSpec() { this.hasQualifiedName("javax.crypto.spec", "DHGenParameterSpec") } + DhGenParameterSpec() { + this.hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "DHGenParameterSpec") + } } diff --git a/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll b/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll index e1c840ce2642..88fb540e83bd 100644 --- a/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll +++ b/java/ql/lib/semmle/code/java/security/InsecureBeanValidationQuery.qll @@ -25,7 +25,7 @@ class SetMessageInterpolatorCall extends MethodCall { this.getMethod() = m and m.getDeclaringType().getASourceSupertype*() = t and ( - t.hasQualifiedName("javax.validation", ["Configuration", "ValidatorContext"]) and + t.hasQualifiedName(javaxOrJakarta() + ".validation", ["Configuration", "ValidatorContext"]) and m.getName() = "messageInterpolator" or t.hasQualifiedName("org.springframework.validation.beanvalidation", diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index 0d52d480ae7b..b094346b753e 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -127,7 +127,7 @@ class XssVulnerableWriterSource extends MethodCall { ) or exists(Method m | m = this.getMethod() | - m.hasQualifiedName("javax.servlet.jsp", "JspContext", "getOut") + m.hasQualifiedName(javaxOrJakarta() + ".servlet.jsp", "JspContext", "getOut") ) or this.getMethod() instanceof FacesGetResponseWriterMethod diff --git a/java/ql/lib/semmle/code/java/security/XmlParsers.qll b/java/ql/lib/semmle/code/java/security/XmlParsers.qll index 8bb2a015a14d..bd1520034eb9 100644 --- a/java/ql/lib/semmle/code/java/security/XmlParsers.qll +++ b/java/ql/lib/semmle/code/java/security/XmlParsers.qll @@ -62,12 +62,14 @@ abstract class ParserConfig extends MethodCall { /** The class `javax.xml.parsers.DocumentBuilderFactory`. */ class DocumentBuilderFactory extends RefType { - DocumentBuilderFactory() { this.hasQualifiedName("javax.xml.parsers", "DocumentBuilderFactory") } + DocumentBuilderFactory() { + this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "DocumentBuilderFactory") + } } /** The class `javax.xml.parsers.DocumentBuilder`. */ class DocumentBuilder extends RefType { - DocumentBuilder() { this.hasQualifiedName("javax.xml.parsers", "DocumentBuilder") } + DocumentBuilder() { this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "DocumentBuilder") } } /** A call to `DocumentBuilder.parse`. */ @@ -174,7 +176,7 @@ class SafeDocumentBuilder extends DocumentBuilderConstruction { /** The class `javax.xml.stream.XMLInputFactory`. */ class XmlInputFactory extends RefType { - XmlInputFactory() { this.hasQualifiedName("javax.xml.stream", "XMLInputFactory") } + XmlInputFactory() { this.hasQualifiedName(javaxOrJakarta() + ".xml.stream", "XMLInputFactory") } } /** A call to `XMLInputFactory.createXMLStreamReader`. */ @@ -243,7 +245,8 @@ class XmlInputFactoryConfig extends ParserConfig { * An `XmlInputFactory` specific expression that indicates whether parsing external entities is supported. */ Expr configOptionIsSupportingExternalEntities() { - result.(ConstantStringExpr).getStringValue() = "javax.xml.stream.isSupportingExternalEntities" + result.(ConstantStringExpr).getStringValue() = + javaxOrJakarta() + ".xml.stream.isSupportingExternalEntities" or exists(Field f | result = f.getAnAccess() and @@ -256,7 +259,7 @@ Expr configOptionIsSupportingExternalEntities() { * An `XmlInputFactory` specific expression that indicates whether DTD is supported. */ Expr configOptionSupportDtd() { - result.(ConstantStringExpr).getStringValue() = "javax.xml.stream.supportDTD" + result.(ConstantStringExpr).getStringValue() = javaxOrJakarta() + ".xml.stream.supportDTD" or exists(Field f | result = f.getAnAccess() and @@ -357,12 +360,14 @@ class SafeSaxBuilder extends VarAccess { * The class `javax.xml.parsers.SAXParser`. */ class SaxParser extends RefType { - SaxParser() { this.hasQualifiedName("javax.xml.parsers", "SAXParser") } + SaxParser() { this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "SAXParser") } } /** The class `javax.xml.parsers.SAXParserFactory`. */ class SaxParserFactory extends RefType { - SaxParserFactory() { this.hasQualifiedName("javax.xml.parsers", "SAXParserFactory") } + SaxParserFactory() { + this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "SAXParserFactory") + } } /** A call to `SAXParser.parse`. */ @@ -635,7 +640,7 @@ class CreatedSafeXmlReader extends Call { /** The class `javax.xml.transform.sax.SAXSource` */ class SaxSource extends RefType { - SaxSource() { this.hasQualifiedName("javax.xml.transform.sax", "SAXSource") } + SaxSource() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.sax", "SAXSource") } } /** A call to the constructor of `SAXSource` with `XmlReader` and `InputSource`. */ @@ -697,7 +702,7 @@ abstract class TransformerConfig extends MethodCall { /** The class `javax.xml.XMLConstants`. */ class XmlConstants extends RefType { - XmlConstants() { this.hasQualifiedName("javax.xml", "XMLConstants") } + XmlConstants() { this.hasQualifiedName(javaxOrJakarta() + ".xml", "XMLConstants") } } /** A configuration specific for transformers and schema. */ @@ -739,14 +744,14 @@ Expr configAccessExternalSchema() { /** The class `javax.xml.transform.TransformerFactory` or `javax.xml.transform.sax.SAXTransformerFactory`. */ class TransformerFactory extends RefType { TransformerFactory() { - this.hasQualifiedName("javax.xml.transform", "TransformerFactory") or - this.hasQualifiedName("javax.xml.transform.sax", "SAXTransformerFactory") + this.hasQualifiedName(javaxOrJakarta() + ".xml.transform", "TransformerFactory") or + this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.sax", "SAXTransformerFactory") } } /** The class `javax.xml.transform.Transformer`. */ class Transformer extends RefType { - Transformer() { this.hasQualifiedName("javax.xml.transform", "Transformer") } + Transformer() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform", "Transformer") } } /** A call to `Transformer.transform`. */ @@ -843,7 +848,8 @@ class SaxTransformerFactoryNewXmlFilter extends XmlParserCall { SaxTransformerFactoryNewXmlFilter() { exists(Method m | this.getMethod() = m and - m.getDeclaringType().hasQualifiedName("javax.xml.transform.sax", "SAXTransformerFactory") and + m.getDeclaringType() + .hasQualifiedName(javaxOrJakarta() + ".xml.transform.sax", "SAXTransformerFactory") and m.hasName("newXMLFilter") ) } @@ -858,7 +864,7 @@ class SaxTransformerFactoryNewXmlFilter extends XmlParserCall { /* Schema: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#schemafactory */ /** The class `javax.xml.validation.SchemaFactory`. */ class SchemaFactory extends RefType { - SchemaFactory() { this.hasQualifiedName("javax.xml.validation", "SchemaFactory") } + SchemaFactory() { this.hasQualifiedName(javaxOrJakarta() + ".xml.validation", "SchemaFactory") } } /** A `ParserConfig` specific to `SchemaFactory`. */ @@ -913,7 +919,7 @@ class SafeSchemaFactory extends VarAccess { /* Unmarshaller: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#jaxb-unmarshaller */ /** The class `javax.xml.bind.Unmarshaller`. */ class XmlUnmarshaller extends RefType { - XmlUnmarshaller() { this.hasQualifiedName("javax.xml.bind", "Unmarshaller") } + XmlUnmarshaller() { this.hasQualifiedName(javaxOrJakarta() + ".xml.bind", "Unmarshaller") } } /** A call to `Unmarshaller.unmarshal`. */ @@ -934,12 +940,12 @@ class XmlUnmarshal extends XmlParserCall { /* XPathExpression: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#xpathexpression */ /** The interface `javax.xml.xpath.XPathExpression`. */ class XPathExpression extends Interface { - XPathExpression() { this.hasQualifiedName("javax.xml.xpath", "XPathExpression") } + XPathExpression() { this.hasQualifiedName(javaxOrJakarta() + ".xml.xpath", "XPathExpression") } } /** The interface `java.xml.xpath.XPath`. */ class XPath extends Interface { - XPath() { this.hasQualifiedName("javax.xml.xpath", "XPath") } + XPath() { this.hasQualifiedName(javaxOrJakarta() + ".xml.xpath", "XPath") } } /** A call to the method `evaluate` of the classes `XPathExpression` or `XPath`. */ diff --git a/java/ql/lib/semmle/code/java/security/XsltInjection.qll b/java/ql/lib/semmle/code/java/security/XsltInjection.qll index d54e92066443..a6b18e1518f0 100644 --- a/java/ql/lib/semmle/code/java/security/XsltInjection.qll +++ b/java/ql/lib/semmle/code/java/security/XsltInjection.qll @@ -163,17 +163,17 @@ private predicate xsltPackageStep(DataFlow::Node n1, DataFlow::Node n2) { /** The class `javax.xml.transform.stax.StAXSource`. */ private class TypeStAXSource extends Class { - TypeStAXSource() { this.hasQualifiedName("javax.xml.transform.stax", "StAXSource") } + TypeStAXSource() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.stax", "StAXSource") } } /** The class `javax.xml.transform.dom.DOMSource`. */ private class TypeDomSource extends Class { - TypeDomSource() { this.hasQualifiedName("javax.xml.transform.dom", "DOMSource") } + TypeDomSource() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform.dom", "DOMSource") } } /** The interface `javax.xml.transform.Templates`. */ private class TypeTemplates extends Interface { - TypeTemplates() { this.hasQualifiedName("javax.xml.transform", "Templates") } + TypeTemplates() { this.hasQualifiedName(javaxOrJakarta() + ".xml.transform", "Templates") } } /** The class `net.sf.saxon.s9api.XsltCompiler`. */ @@ -205,7 +205,7 @@ private class DocumentBuilderParse extends MethodCall { /** The class `javax.xml.parsers.DocumentBuilder`. */ private class DocumentBuilder extends RefType { - DocumentBuilder() { this.hasQualifiedName("javax.xml.parsers", "DocumentBuilder") } + DocumentBuilder() { this.hasQualifiedName(javaxOrJakarta() + ".xml.parsers", "DocumentBuilder") } } /** A call to `XMLInputFactory.createXMLStreamReader`. */ @@ -232,5 +232,5 @@ private class XmlInputFactoryEventReader extends MethodCall { /** The class `javax.xml.stream.XMLInputFactory`. */ private class XmlInputFactory extends RefType { - XmlInputFactory() { this.hasQualifiedName("javax.xml.stream", "XMLInputFactory") } + XmlInputFactory() { this.hasQualifiedName(javaxOrJakarta() + ".xml.stream", "XMLInputFactory") } } diff --git a/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql b/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql index 9eddcb64a14e..4bc0b99c3f5e 100644 --- a/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql +++ b/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql @@ -115,8 +115,8 @@ predicate jdkPackage(Package p) { | pkgName = [ - "com.sun", "sun", "java", "javax", "com.oracle.net", "genstubs", "jdk", "build.tools", - "org.omg.CORBA", "org.ietf.jgss" + "com.sun", "sun", "java", javaxOrJakarta() + "", "com.oracle.net", "genstubs", "jdk", + "build.tools", "org.omg.CORBA", "org.ietf.jgss" ] ) } diff --git a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql index 6a2db4b695f3..34fd190ccf11 100644 --- a/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql +++ b/java/ql/src/Likely Bugs/Frameworks/Swing/BadlyOverriddenAdapter.ql @@ -19,7 +19,7 @@ class Adapter extends Class { this.getName().matches("%Adapter") and ( this.getPackage().hasName("java.awt.event") or - this.getPackage().hasName("javax.swing.event") + this.getPackage().hasName(javaxOrJakarta() + ".swing.event") ) } } diff --git a/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql b/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql index 8d49cf1d59e8..623470aefc19 100644 --- a/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql +++ b/java/ql/src/Likely Bugs/Frameworks/Swing/ThreadSafety.ql @@ -15,7 +15,12 @@ import java from MethodCall ma, Method m, MainMethod main where - ma.getQualifier().getType().getCompilationUnit().getPackage().getName().matches("javax.swing%") and + ma.getQualifier() + .getType() + .getCompilationUnit() + .getPackage() + .getName() + .matches(javaxOrJakarta() + ".swing%") and ( m.hasName("show") and m.hasNoParameters() or diff --git a/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql index 494e851a5333..08d622b576ef 100644 --- a/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql +++ b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql @@ -77,7 +77,9 @@ module MatchesHttpOnlyToRawHeaderFlow = TaintTracking::Global Date: Thu, 12 Feb 2026 12:21:38 +0000 Subject: [PATCH 067/243] Define new predicate `javaxOrJakarta()` --- java/ql/lib/semmle/code/java/J2EE.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/ql/lib/semmle/code/java/J2EE.qll b/java/ql/lib/semmle/code/java/J2EE.qll index 0f7473505dfd..20aa1aa3ab5a 100644 --- a/java/ql/lib/semmle/code/java/J2EE.qll +++ b/java/ql/lib/semmle/code/java/J2EE.qll @@ -6,6 +6,8 @@ module; import Type +string javaxOrJakarta() { result = ["javax", "jakarta"] } + /** An entity bean. */ class EntityBean extends Class { EntityBean() { From 31840902cdf27fd9443d909bce69de8b8d4d379a Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 12 Feb 2026 12:32:25 +0000 Subject: [PATCH 068/243] Fix places which already dealt with both javax and jakarta --- java/ql/lib/semmle/code/java/frameworks/JaxWS.qll | 11 ++++------- java/ql/lib/semmle/code/java/frameworks/Jms.qll | 2 +- java/ql/lib/semmle/code/java/frameworks/Mail.qll | 2 +- java/ql/lib/semmle/code/java/frameworks/Servlets.qll | 2 +- .../code/java/frameworks/javaee/Persistence.qll | 4 +--- .../code/java/frameworks/javaee/jsf/JSFRenderer.qll | 5 +---- .../CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql | 3 +-- .../CWE/CWE-094/JakartaExpressionInjectionLib.qll | 2 +- .../Security/CWE/CWE-400/LocalThreadResourceAbuse.ql | 5 ++--- .../experimental/semmle/code/java/frameworks/Jsf.qll | 3 +-- 10 files changed, 14 insertions(+), 25 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll index 374941365650..46feac077c5e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll @@ -13,7 +13,7 @@ private import semmle.code.java.security.XSS /** * Gets a name for the root package of JAX-RS. */ -string getAJaxRsPackage() { result in [javaxOrJakarta() + ".ws.rs", "jakarta.ws.rs"] } +string getAJaxRsPackage() { result in [javaxOrJakarta() + ".ws.rs"] } /** * Gets a name for package `subpackage` within the JAX-RS hierarchy. @@ -42,7 +42,7 @@ class JaxWsEndpoint extends Class { result.isPublic() and not result instanceof InitializerMethod and not exists(Annotation a | a = result.getAnAnnotation() | - a.getType().hasQualifiedName([javaxOrJakarta() + "", "jakarta"] + ".jws", "WebMethod") and + a.getType().hasQualifiedName(javaxOrJakarta() + ".jws", "WebMethod") and a.getValue("exclude").(BooleanLiteral).getBooleanValue() = true ) and forex(ParamOrReturn paramOrRet | paramOrRet = result.getAParameter() or paramOrRet = result | @@ -62,8 +62,7 @@ class JaxWsEndpoint extends Class { /** The annotation type `@XmlJavaTypeAdapter`. */ class XmlJavaTypeAdapter extends AnnotationType { XmlJavaTypeAdapter() { - this.hasQualifiedName([javaxOrJakarta() + "", "jakarta"] + ".xml.bind.annotation.adapters", - "XmlJavaTypeAdapter") + this.hasQualifiedName(javaxOrJakarta() + ".xml.bind.annotation.adapters", "XmlJavaTypeAdapter") } } @@ -292,9 +291,7 @@ class JaxRSAnnotation extends Annotation { JaxRSAnnotation() { exists(AnnotationType a | a = this.getType() and - a.getPackage() - .getName() - .regexpMatch([javaxOrJakarta() + "\\.ws\\.rs(\\..*)?", "jakarta\\.ws\\.rs(\\..*)?"]) + a.getPackage().getName().regexpMatch(javaxOrJakarta() + "\\.ws\\.rs(\\..*)?") ) } } diff --git a/java/ql/lib/semmle/code/java/frameworks/Jms.qll b/java/ql/lib/semmle/code/java/frameworks/Jms.qll index 8c86481b4ca5..abee6b3a4279 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Jms.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Jms.qll @@ -7,6 +7,6 @@ import java /** The method `ObjectMessage.getObject`. */ class ObjectMessageGetObjectMethod extends Method { ObjectMessageGetObjectMethod() { - this.hasQualifiedName([javaxOrJakarta() + "", "jakarta"] + ".jms", "ObjectMessage", "getObject") + this.hasQualifiedName(javaxOrJakarta() + ".jms", "ObjectMessage", "getObject") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/Mail.qll b/java/ql/lib/semmle/code/java/frameworks/Mail.qll index 5793da4cceb1..b99220c17376 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Mail.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Mail.qll @@ -8,7 +8,7 @@ import java * The class `javax.mail.Session` or `jakarta.mail.Session`. */ class MailSession extends Class { - MailSession() { this.hasQualifiedName([javaxOrJakarta() + ".mail", "jakarta.mail"], "Session") } + MailSession() { this.hasQualifiedName(javaxOrJakarta() + ".mail", "Session") } } /** diff --git a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll index 30cd248d4d1b..826636ce0737 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll @@ -377,7 +377,7 @@ predicate isRequestGetParamMethod(MethodCall ma) { /** The Java EE RequestDispatcher. */ class RequestDispatcher extends RefType { RequestDispatcher() { - this.hasQualifiedName([javaxOrJakarta() + ".servlet", "jakarta.servlet"], "RequestDispatcher") or + this.hasQualifiedName(javaxOrJakarta() + ".servlet", "RequestDispatcher") or this.hasQualifiedName(javaxOrJakarta() + ".portlet", "PortletRequestDispatcher") } } diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index 05a7e6155524..a6cedcc3fee1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -9,9 +9,7 @@ import java /** * Gets a JavaEE Persistence API package name. */ -string getAPersistencePackageName() { - result = [javaxOrJakarta() + ".persistence", "jakarta.persistence"] -} +string getAPersistencePackageName() { result = javaxOrJakarta() + ".persistence" } /** * A `RefType` with the `@Entity` annotation that indicates that it can be persisted using a JPA diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll index 6e6bad91d471..21f8fba67859 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/jsf/JSFRenderer.qll @@ -8,10 +8,7 @@ import java * The JSF class `FacesContext` for processing HTTP requests. */ class FacesContext extends RefType { - FacesContext() { - this.hasQualifiedName([javaxOrJakarta() + ".faces.context", "jakarta.faces.context"], - "FacesContext") - } + FacesContext() { this.hasQualifiedName(javaxOrJakarta() + ".faces.context", "FacesContext") } } /** diff --git a/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql index 08d622b576ef..afa08fb6928e 100644 --- a/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql +++ b/java/ql/src/Security/CWE/CWE-1004/SensitiveCookieNotHttpOnly.ql @@ -145,8 +145,7 @@ class CookieResponseWithoutHttpOnlySink extends DataFlow::ExprNode { /** Holds if `cie` is an invocation of a JAX-RS `NewCookie` constructor that sets `HttpOnly` to true. */ predicate setsHttpOnlyInNewCookie(ClassInstanceExpr cie) { - cie.getConstructedType() - .hasQualifiedName([javaxOrJakarta() + ".ws.rs.core", "jakarta.ws.rs.core"], "NewCookie") and + cie.getConstructedType().hasQualifiedName(javaxOrJakarta() + ".ws.rs.core", "NewCookie") and ( cie.getNumArgument() = 6 and mayBeBooleanTrue(cie.getArgument(5)) // NewCookie(Cookie cookie, String comment, int maxAge, Date expiry, boolean secure, boolean httpOnly) diff --git a/java/ql/src/experimental/Security/CWE/CWE-094/JakartaExpressionInjectionLib.qll b/java/ql/src/experimental/Security/CWE/CWE-094/JakartaExpressionInjectionLib.qll index 0b59f1b723af..6f7cb040e79e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-094/JakartaExpressionInjectionLib.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-094/JakartaExpressionInjectionLib.qll @@ -89,7 +89,7 @@ private class TaintPropagatingCall extends Call { } private class JakartaType extends RefType { - JakartaType() { this.getPackage().hasName([javaxOrJakarta() + ".el", "jakarta.el"]) } + JakartaType() { this.getPackage().hasName(javaxOrJakarta() + ".el") } } private class ELProcessor extends JakartaType { diff --git a/java/ql/src/experimental/Security/CWE/CWE-400/LocalThreadResourceAbuse.ql b/java/ql/src/experimental/Security/CWE/CWE-400/LocalThreadResourceAbuse.ql index eb5353af4c71..fc9eea832193 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-400/LocalThreadResourceAbuse.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-400/LocalThreadResourceAbuse.ql @@ -21,12 +21,11 @@ class GetInitParameter extends Method { ( this.getDeclaringType() .getAnAncestor() - .hasQualifiedName([javaxOrJakarta() + ".servlet", "jakarta.servlet"], + .hasQualifiedName(javaxOrJakarta() + ".servlet", ["FilterConfig", "Registration", "ServletConfig", "ServletContext"]) or this.getDeclaringType() .getAnAncestor() - .hasQualifiedName([javaxOrJakarta() + ".faces.context", "jakarta.faces.context"], - "ExternalContext") + .hasQualifiedName(javaxOrJakarta() + ".faces.context", "ExternalContext") ) and this.getName() = "getInitParameter" } diff --git a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll index aa5a29f85cbb..97706ea6d639 100644 --- a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll +++ b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll @@ -10,8 +10,7 @@ import java */ class ExternalContext extends RefType { ExternalContext() { - this.hasQualifiedName([javaxOrJakarta() + ".faces.context", "jakarta.faces.context"], - "ExternalContext") + this.hasQualifiedName(javaxOrJakarta() + ".faces.context", "ExternalContext") } } From 6da3a4557e3a841c2f56450c19c8e2fcd1e01a49 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 12 Feb 2026 13:28:38 +0000 Subject: [PATCH 069/243] Add change note --- java/ql/lib/change-notes/2026-02-12-jakarta.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2026-02-12-jakarta.md diff --git a/java/ql/lib/change-notes/2026-02-12-jakarta.md b/java/ql/lib/change-notes/2026-02-12-jakarta.md new file mode 100644 index 000000000000..062e202cb8a5 --- /dev/null +++ b/java/ql/lib/change-notes/2026-02-12-jakarta.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Some modelling which previously only worked for Java EE packages beginning with "javax" will now also work for Java EE packages beginning with "jakarta" as well. This may lead to some alert changes. From 178fbf9600414f21b9fbc2e608f16e3626488edd Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 12 Feb 2026 13:36:44 +0000 Subject: [PATCH 070/243] Add missing QLDoc --- java/ql/lib/semmle/code/java/J2EE.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/lib/semmle/code/java/J2EE.qll b/java/ql/lib/semmle/code/java/J2EE.qll index 20aa1aa3ab5a..4cfffcdfa9fa 100644 --- a/java/ql/lib/semmle/code/java/J2EE.qll +++ b/java/ql/lib/semmle/code/java/J2EE.qll @@ -6,6 +6,7 @@ module; import Type +/** Gets "java" or "jakarta". */ string javaxOrJakarta() { result = ["javax", "jakarta"] } /** An entity bean. */ From 53b8f2abb18c8bc958af2b0a4ccf36e77ff600bc Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 12 Feb 2026 13:48:22 +0000 Subject: [PATCH 071/243] Apply copilot's fixes --- .../semmle/code/java/security/Encryption.qll | 39 +++++++++---------- .../Compatibility/JDK9/JdkInternalAccess.ql | 4 +- 2 files changed, 20 insertions(+), 23 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/Encryption.qll b/java/ql/lib/semmle/code/java/security/Encryption.qll index 73c91433bdc5..b0a0fc72df77 100644 --- a/java/ql/lib/semmle/code/java/security/Encryption.qll +++ b/java/ql/lib/semmle/code/java/security/Encryption.qll @@ -9,58 +9,57 @@ import java class SslClass extends RefType { SslClass() { exists(Class c | this.getAnAncestor() = c | - c.hasQualifiedName(javaxOrJakarta() + ".net.ssl", _) or - c.hasQualifiedName(javaxOrJakarta() + ".rmi.ssl", _) + // Note there are no jakarta equivalents of these classes. + c.hasQualifiedName("javax.net.ssl", _) or + c.hasQualifiedName("javax.rmi.ssl", _) ) } } class X509TrustManager extends RefType { - X509TrustManager() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "X509TrustManager") } + X509TrustManager() { this.hasQualifiedName("javax.net.ssl", "X509TrustManager") } } /** The `javax.net.ssl.HttpsURLConnection` class. */ class HttpsUrlConnection extends RefType { - HttpsUrlConnection() { - this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "HttpsURLConnection") - } + HttpsUrlConnection() { this.hasQualifiedName("javax.net.ssl", "HttpsURLConnection") } } class SslSocketFactory extends RefType { - SslSocketFactory() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLSocketFactory") } + SslSocketFactory() { this.hasQualifiedName("javax.net.ssl", "SSLSocketFactory") } } class SslContext extends RefType { - SslContext() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLContext") } + SslContext() { this.hasQualifiedName("javax.net.ssl", "SSLContext") } } /** The `javax.net.ssl.SslSession` class. */ class SslSession extends RefType { - SslSession() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLSession") } + SslSession() { this.hasQualifiedName("javax.net.ssl", "SSLSession") } } /** The `javax.net.ssl.SslEngine` class. */ class SslEngine extends RefType { - SslEngine() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLEngine") } + SslEngine() { this.hasQualifiedName("javax.net.ssl", "SSLEngine") } } /** The `javax.net.ssl.SslSocket` class. */ class SslSocket extends RefType { - SslSocket() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLSocket") } + SslSocket() { this.hasQualifiedName("javax.net.ssl", "SSLSocket") } } /** The `javax.net.ssl.SslParameters` class. */ class SslParameters extends RefType { - SslParameters() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "SSLParameters") } + SslParameters() { this.hasQualifiedName("javax.net.ssl", "SSLParameters") } } class HostnameVerifier extends RefType { - HostnameVerifier() { this.hasQualifiedName(javaxOrJakarta() + ".net.ssl", "HostnameVerifier") } + HostnameVerifier() { this.hasQualifiedName("javax.net.ssl", "HostnameVerifier") } } /** The Java class `javax.crypto.KeyGenerator`. */ class KeyGenerator extends RefType { - KeyGenerator() { this.hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyGenerator") } + KeyGenerator() { this.hasQualifiedName("javax.crypto", "KeyGenerator") } } /** The Java class `java.security.KeyPairGenerator`. */ @@ -294,7 +293,7 @@ abstract class JavaxCryptoAlgoSpec extends CryptoAlgoSpec { } class JavaxCryptoCipher extends JavaxCryptoAlgoSpec { JavaxCryptoCipher() { exists(Method m | m.getAReference() = this | - m.hasQualifiedName(javaxOrJakarta() + ".crypto", "Cipher", "getInstance") + m.hasQualifiedName("javax.crypto", "Cipher", "getInstance") ) } @@ -304,7 +303,7 @@ class JavaxCryptoCipher extends JavaxCryptoAlgoSpec { class JavaxCryptoSecretKey extends JavaxCryptoAlgoSpec { JavaxCryptoSecretKey() { exists(Constructor c | c.getAReference() = this | - c.getDeclaringType().hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "SecretKeySpec") + c.getDeclaringType().hasQualifiedName("javax.crypto.spec", "SecretKeySpec") ) } @@ -329,7 +328,7 @@ class JavaxCryptoKeyGenerator extends JavaxCryptoAlgoSpec { class JavaxCryptoKeyAgreement extends JavaxCryptoAlgoSpec { JavaxCryptoKeyAgreement() { exists(Method m | m.getAReference() = this | - m.hasQualifiedName(javaxOrJakarta() + ".crypto", "KeyAgreement", "getInstance") + m.hasQualifiedName("javax.crypto", "KeyAgreement", "getInstance") ) } @@ -339,7 +338,7 @@ class JavaxCryptoKeyAgreement extends JavaxCryptoAlgoSpec { class JavaxCryptoKeyFactory extends JavaxCryptoAlgoSpec { JavaxCryptoKeyFactory() { exists(Method m | m.getAReference() = this | - m.hasQualifiedName(javaxOrJakarta() + ".crypto", "SecretKeyFactory", "getInstance") + m.hasQualifiedName("javax.crypto", "SecretKeyFactory", "getInstance") ) } @@ -431,7 +430,5 @@ class DsaGenParameterSpec extends AlgorithmParameterSpec { /** The Java class `javax.crypto.spec.DHGenParameterSpec`. */ class DhGenParameterSpec extends AlgorithmParameterSpec { - DhGenParameterSpec() { - this.hasQualifiedName(javaxOrJakarta() + ".crypto.spec", "DHGenParameterSpec") - } + DhGenParameterSpec() { this.hasQualifiedName("javax.crypto.spec", "DHGenParameterSpec") } } diff --git a/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql b/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql index 4bc0b99c3f5e..9eddcb64a14e 100644 --- a/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql +++ b/java/ql/src/Compatibility/JDK9/JdkInternalAccess.ql @@ -115,8 +115,8 @@ predicate jdkPackage(Package p) { | pkgName = [ - "com.sun", "sun", "java", javaxOrJakarta() + "", "com.oracle.net", "genstubs", "jdk", - "build.tools", "org.omg.CORBA", "org.ietf.jgss" + "com.sun", "sun", "java", "javax", "com.oracle.net", "genstubs", "jdk", "build.tools", + "org.omg.CORBA", "org.ietf.jgss" ] ) } From c4192b670ba9b9dccc602b36cb0f84ad34fe2135 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Thu, 12 Feb 2026 14:32:24 +0000 Subject: [PATCH 072/243] More copilot suggestions --- java/ql/lib/semmle/code/java/frameworks/JaxWS.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll index 46feac077c5e..38bac53485bf 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll @@ -13,7 +13,7 @@ private import semmle.code.java.security.XSS /** * Gets a name for the root package of JAX-RS. */ -string getAJaxRsPackage() { result in [javaxOrJakarta() + ".ws.rs"] } +string getAJaxRsPackage() { result = javaxOrJakarta() + ".ws.rs" } /** * Gets a name for package `subpackage` within the JAX-RS hierarchy. @@ -114,7 +114,7 @@ private class JaxAcceptableStandardClass extends RefType { this.hasQualifiedName("java.util", "Calendar") or this.hasQualifiedName("java.math", "BigInteger") or this.hasQualifiedName("java.math", "BigDecimal") or - this.hasQualifiedName(javaxOrJakarta() + ".xml.namespace", "QName") or + this.hasQualifiedName("javax.xml.namespace", "QName") or this instanceof TypeUri } } From 91c731f68d5e2414cdd121a90e3bd2d41332a0cb Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Mon, 16 Feb 2026 11:03:27 +0000 Subject: [PATCH 073/243] Fix new usage that was introduced --- java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll index feb7381e4962..3b70c42fbec9 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JavaxAnnotations.qll @@ -195,9 +195,7 @@ class WebServiceRefAnnotation extends Annotation { */ class PatternAnnotation extends Annotation, RegexMatch::Range { PatternAnnotation() { - this.getType() - .hasQualifiedName(["javax.validation.constraints", "jakarta.validation.constraints"], - "Pattern") + this.getType().hasQualifiedName(javaxOrJakarta() + ".validation.constraints", "Pattern") } override Expr getRegex() { result = this.getValue("regexp") } From da527ffc1979d93e939517f0cca25227e027a238 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 16 Feb 2026 13:48:05 +0100 Subject: [PATCH 074/243] C++: Add simple range analysis test with repeated if-else statements --- .../SimpleRangeAnalysis/lowerBound.expected | 1042 +-- .../SimpleRangeAnalysis/nrOfBounds.expected | 6104 +++++++++-------- .../SimpleRangeAnalysis/ternaryLower.expected | 144 +- .../SimpleRangeAnalysis/ternaryUpper.expected | 144 +- .../rangeanalysis/SimpleRangeAnalysis/test.c | 17 + .../SimpleRangeAnalysis/upperBound.expected | 1044 +-- 6 files changed, 4346 insertions(+), 4149 deletions(-) diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected index 6bb1f192e1df..231b0b22e320 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/lowerBound.expected @@ -513,519 +513,553 @@ | test.c:445:7:445:9 | rhs | 0 | | test.c:445:19:445:21 | rhs | 0 | | test.c:446:10:446:12 | rhs | 0 | -| test.c:450:7:450:7 | a | -2147483648 | -| test.c:451:9:451:9 | b | -2147483648 | -| test.c:452:7:452:7 | a | 17 | -| test.c:452:12:452:12 | b | 23 | -| test.c:454:9:454:9 | a | 17 | -| test.c:455:7:455:7 | b | -2147483648 | -| test.c:460:11:460:11 | a | -2147483648 | -| test.c:460:15:460:15 | b | -2147483648 | -| test.c:461:10:461:10 | a | -2147483648 | -| test.c:461:14:461:14 | b | -2147483648 | -| test.c:468:10:468:11 | ip | 0 | -| test.c:468:20:468:21 | ip | 0 | -| test.c:468:40:468:41 | ip | 0 | -| test.c:469:14:469:15 | ip | 1 | -| test.c:470:14:470:15 | ip | 0 | -| test.c:470:34:470:35 | ip | 0 | -| test.c:471:11:471:12 | ip | 0 | -| test.c:472:13:472:14 | ip | 0 | -| test.c:473:14:473:15 | ip | 0 | -| test.c:474:14:474:15 | ip | 0 | -| test.c:475:15:475:16 | ip | 0 | -| test.c:475:41:475:42 | ip | 0 | -| test.c:475:52:475:53 | ip | 0 | -| test.c:475:67:475:68 | ip | 0 | -| test.c:475:78:475:79 | ip | 0 | -| test.c:476:18:476:19 | ip | 0 | -| test.c:477:23:477:24 | ip | 0 | -| test.c:477:34:477:35 | ip | 0 | -| test.c:478:25:478:26 | ip | 0 | -| test.c:479:20:479:21 | ip | 0 | -| test.c:480:11:480:12 | ip | 0 | -| test.c:480:26:480:27 | ip | 0 | -| test.c:481:16:481:17 | ip | 0 | -| test.c:482:16:482:17 | ip | 0 | -| test.c:483:16:483:17 | ip | 0 | -| test.c:484:17:484:18 | ip | 0 | -| test.c:485:22:485:23 | ip | 0 | -| test.c:485:33:485:34 | ip | 0 | -| test.c:485:48:485:49 | ip | 0 | -| test.c:485:59:485:60 | ip | 0 | -| test.c:486:20:486:21 | ip | 0 | -| test.c:487:25:487:26 | ip | 0 | -| test.c:487:36:487:37 | ip | 0 | -| test.c:488:27:488:28 | ip | 0 | -| test.c:489:22:489:23 | ip | 0 | -| test.c:490:15:490:16 | ip | 0 | -| test.c:490:30:490:31 | ip | 0 | -| test.c:491:11:491:12 | ip | 0 | -| test.c:492:12:492:13 | ip | 0 | -| test.c:493:12:493:13 | ip | 0 | -| test.c:494:13:494:14 | ip | 0 | -| test.c:494:39:494:40 | ip | 0 | -| test.c:494:50:494:51 | ip | 0 | -| test.c:494:65:494:66 | ip | 0 | -| test.c:494:76:494:77 | ip | 0 | -| test.c:495:16:495:17 | ip | 0 | -| test.c:496:21:496:22 | ip | 0 | -| test.c:496:32:496:33 | ip | 0 | -| test.c:497:23:497:24 | ip | 0 | -| test.c:498:18:498:19 | ip | 0 | -| test.c:499:11:499:12 | ip | 0 | -| test.c:499:17:499:18 | ip | 0 | -| test.c:499:37:499:38 | ip | 0 | -| test.c:499:43:499:44 | ip | 0 | -| test.c:500:14:500:15 | ip | 0 | -| test.c:501:14:501:15 | ip | 0 | -| test.c:502:14:502:15 | ip | 0 | -| test.c:503:15:503:16 | ip | 0 | -| test.c:503:41:503:42 | ip | 0 | -| test.c:503:52:503:53 | ip | 0 | -| test.c:503:67:503:68 | ip | 0 | -| test.c:503:78:503:79 | ip | 0 | -| test.c:504:18:504:19 | ip | 0 | -| test.c:505:23:505:24 | ip | 0 | -| test.c:505:34:505:35 | ip | 0 | -| test.c:506:25:506:26 | ip | 0 | -| test.c:507:20:507:21 | ip | 0 | -| test.c:508:14:508:15 | ip | 0 | -| test.c:508:20:508:21 | ip | 0 | -| test.c:509:16:509:17 | ip | 0 | +| test.c:452:7:452:9 | rhs | 0 | +| test.c:452:19:452:21 | rhs | 0 | +| test.c:452:38:452:40 | rhs | 10 | +| test.c:453:7:453:9 | rhs | 0 | +| test.c:453:19:453:21 | rhs | 0 | +| test.c:453:38:453:40 | rhs | 11 | +| test.c:454:7:454:9 | rhs | 0 | +| test.c:454:19:454:21 | rhs | 0 | +| test.c:454:38:454:40 | rhs | 12 | +| test.c:455:7:455:9 | rhs | 0 | +| test.c:455:19:455:21 | rhs | 0 | +| test.c:455:38:455:40 | rhs | 13 | +| test.c:456:7:456:9 | rhs | 0 | +| test.c:456:19:456:21 | rhs | 0 | +| test.c:456:38:456:40 | rhs | 14 | +| test.c:457:7:457:9 | rhs | 0 | +| test.c:457:19:457:21 | rhs | 0 | +| test.c:457:38:457:40 | rhs | 15 | +| test.c:458:7:458:9 | rhs | 0 | +| test.c:458:19:458:21 | rhs | 0 | +| test.c:458:38:458:40 | rhs | 16 | +| test.c:459:7:459:9 | rhs | 0 | +| test.c:459:19:459:21 | rhs | 0 | +| test.c:459:38:459:40 | rhs | 17 | +| test.c:460:7:460:9 | rhs | 0 | +| test.c:460:19:460:21 | rhs | 0 | +| test.c:460:38:460:40 | rhs | 18 | +| test.c:461:7:461:9 | rhs | 0 | +| test.c:461:19:461:21 | rhs | 0 | +| test.c:461:38:461:40 | rhs | 19 | +| test.c:462:7:462:9 | rhs | 0 | +| test.c:462:19:462:21 | rhs | 0 | +| test.c:462:38:462:40 | rhs | 20 | +| test.c:463:10:463:12 | rhs | 0 | +| test.c:467:7:467:7 | a | -2147483648 | +| test.c:468:9:468:9 | b | -2147483648 | +| test.c:469:7:469:7 | a | 17 | +| test.c:469:12:469:12 | b | 23 | +| test.c:471:9:471:9 | a | 17 | +| test.c:472:7:472:7 | b | -2147483648 | +| test.c:477:11:477:11 | a | -2147483648 | +| test.c:477:15:477:15 | b | -2147483648 | +| test.c:478:10:478:10 | a | -2147483648 | +| test.c:478:14:478:14 | b | -2147483648 | +| test.c:485:10:485:11 | ip | 0 | +| test.c:485:20:485:21 | ip | 0 | +| test.c:485:40:485:41 | ip | 0 | +| test.c:486:14:486:15 | ip | 1 | +| test.c:487:14:487:15 | ip | 0 | +| test.c:487:34:487:35 | ip | 0 | +| test.c:488:11:488:12 | ip | 0 | +| test.c:489:13:489:14 | ip | 0 | +| test.c:490:14:490:15 | ip | 0 | +| test.c:491:14:491:15 | ip | 0 | +| test.c:492:15:492:16 | ip | 0 | +| test.c:492:41:492:42 | ip | 0 | +| test.c:492:52:492:53 | ip | 0 | +| test.c:492:67:492:68 | ip | 0 | +| test.c:492:78:492:79 | ip | 0 | +| test.c:493:18:493:19 | ip | 0 | +| test.c:494:23:494:24 | ip | 0 | +| test.c:494:34:494:35 | ip | 0 | +| test.c:495:25:495:26 | ip | 0 | +| test.c:496:20:496:21 | ip | 0 | +| test.c:497:11:497:12 | ip | 0 | +| test.c:497:26:497:27 | ip | 0 | +| test.c:498:16:498:17 | ip | 0 | +| test.c:499:16:499:17 | ip | 0 | +| test.c:500:16:500:17 | ip | 0 | +| test.c:501:17:501:18 | ip | 0 | +| test.c:502:22:502:23 | ip | 0 | +| test.c:502:33:502:34 | ip | 0 | +| test.c:502:48:502:49 | ip | 0 | +| test.c:502:59:502:60 | ip | 0 | +| test.c:503:20:503:21 | ip | 0 | +| test.c:504:25:504:26 | ip | 0 | +| test.c:504:36:504:37 | ip | 0 | +| test.c:505:27:505:28 | ip | 0 | +| test.c:506:22:506:23 | ip | 0 | +| test.c:507:15:507:16 | ip | 0 | +| test.c:507:30:507:31 | ip | 0 | +| test.c:508:11:508:12 | ip | 0 | +| test.c:509:12:509:13 | ip | 0 | | test.c:510:12:510:13 | ip | 0 | -| test.c:511:14:511:15 | ip | 0 | -| test.c:512:15:512:16 | ip | 0 | -| test.c:513:16:513:17 | ip | 0 | -| test.c:514:16:514:17 | ip | 0 | -| test.c:515:17:515:18 | ip | 0 | -| test.c:516:22:516:23 | ip | 0 | -| test.c:516:33:516:34 | ip | 0 | -| test.c:516:48:516:49 | ip | 0 | -| test.c:516:59:516:60 | ip | 0 | -| test.c:517:20:517:21 | ip | 0 | -| test.c:518:25:518:26 | ip | 0 | -| test.c:518:36:518:37 | ip | 0 | -| test.c:519:27:519:28 | ip | 0 | -| test.c:520:22:520:23 | ip | 0 | -| test.c:521:13:521:14 | ip | 0 | -| test.c:521:28:521:29 | ip | 0 | -| test.c:522:18:522:19 | ip | 0 | -| test.c:523:18:523:19 | ip | 0 | -| test.c:524:18:524:19 | ip | 0 | -| test.c:525:19:525:20 | ip | 0 | -| test.c:526:24:526:25 | ip | 0 | -| test.c:526:35:526:36 | ip | 0 | -| test.c:526:50:526:51 | ip | 0 | -| test.c:526:61:526:62 | ip | 0 | -| test.c:527:22:527:23 | ip | 0 | -| test.c:528:27:528:28 | ip | 0 | -| test.c:528:38:528:39 | ip | 0 | -| test.c:529:29:529:30 | ip | 0 | -| test.c:530:24:530:25 | ip | 0 | -| test.c:531:17:531:18 | ip | 0 | -| test.c:531:32:531:33 | ip | 0 | -| test.c:532:14:532:15 | ip | 0 | -| test.c:533:18:533:19 | ip | 0 | -| test.c:534:18:534:19 | ip | 0 | -| test.c:535:19:535:20 | ip | 0 | -| test.c:536:24:536:25 | ip | 0 | -| test.c:536:35:536:36 | ip | 0 | -| test.c:536:50:536:51 | ip | 0 | -| test.c:536:61:536:62 | ip | 0 | +| test.c:511:13:511:14 | ip | 0 | +| test.c:511:39:511:40 | ip | 0 | +| test.c:511:50:511:51 | ip | 0 | +| test.c:511:65:511:66 | ip | 0 | +| test.c:511:76:511:77 | ip | 0 | +| test.c:512:16:512:17 | ip | 0 | +| test.c:513:21:513:22 | ip | 0 | +| test.c:513:32:513:33 | ip | 0 | +| test.c:514:23:514:24 | ip | 0 | +| test.c:515:18:515:19 | ip | 0 | +| test.c:516:11:516:12 | ip | 0 | +| test.c:516:17:516:18 | ip | 0 | +| test.c:516:37:516:38 | ip | 0 | +| test.c:516:43:516:44 | ip | 0 | +| test.c:517:14:517:15 | ip | 0 | +| test.c:518:14:518:15 | ip | 0 | +| test.c:519:14:519:15 | ip | 0 | +| test.c:520:15:520:16 | ip | 0 | +| test.c:520:41:520:42 | ip | 0 | +| test.c:520:52:520:53 | ip | 0 | +| test.c:520:67:520:68 | ip | 0 | +| test.c:520:78:520:79 | ip | 0 | +| test.c:521:18:521:19 | ip | 0 | +| test.c:522:23:522:24 | ip | 0 | +| test.c:522:34:522:35 | ip | 0 | +| test.c:523:25:523:26 | ip | 0 | +| test.c:524:20:524:21 | ip | 0 | +| test.c:525:14:525:15 | ip | 0 | +| test.c:525:20:525:21 | ip | 0 | +| test.c:526:16:526:17 | ip | 0 | +| test.c:527:12:527:13 | ip | 0 | +| test.c:528:14:528:15 | ip | 0 | +| test.c:529:15:529:16 | ip | 0 | +| test.c:530:16:530:17 | ip | 0 | +| test.c:531:16:531:17 | ip | 0 | +| test.c:532:17:532:18 | ip | 0 | +| test.c:533:22:533:23 | ip | 0 | +| test.c:533:33:533:34 | ip | 0 | +| test.c:533:48:533:49 | ip | 0 | +| test.c:533:59:533:60 | ip | 0 | +| test.c:534:20:534:21 | ip | 0 | +| test.c:535:25:535:26 | ip | 0 | +| test.c:535:36:535:37 | ip | 0 | +| test.c:536:27:536:28 | ip | 0 | | test.c:537:22:537:23 | ip | 0 | -| test.c:538:27:538:28 | ip | 0 | -| test.c:538:38:538:39 | ip | 0 | -| test.c:539:29:539:30 | ip | 0 | -| test.c:540:24:540:25 | ip | 0 | -| test.c:541:17:541:18 | ip | 0 | -| test.c:541:23:541:24 | ip | 0 | -| test.c:541:43:541:44 | ip | 0 | -| test.c:541:49:541:50 | ip | 0 | -| test.c:542:16:542:17 | ip | 0 | -| test.c:543:16:543:17 | ip | 0 | -| test.c:544:16:544:17 | ip | 0 | -| test.c:545:17:545:18 | ip | 0 | -| test.c:546:22:546:23 | ip | 0 | -| test.c:546:33:546:34 | ip | 0 | -| test.c:546:48:546:49 | ip | 0 | -| test.c:546:59:546:60 | ip | 0 | -| test.c:547:20:547:21 | ip | 0 | -| test.c:548:25:548:26 | ip | 0 | -| test.c:548:36:548:37 | ip | 0 | -| test.c:549:27:549:28 | ip | 0 | -| test.c:550:22:550:23 | ip | 0 | -| test.c:551:16:551:17 | ip | 0 | -| test.c:551:22:551:23 | ip | 0 | -| test.c:552:18:552:19 | ip | 0 | -| test.c:553:14:553:15 | ip | 0 | -| test.c:554:14:554:15 | ip | 0 | -| test.c:554:24:554:25 | ip | 0 | -| test.c:554:44:554:45 | ip | 0 | -| test.c:555:16:555:17 | ip | 1 | -| test.c:556:16:556:17 | ip | 0 | -| test.c:556:36:556:37 | ip | 0 | -| test.c:557:14:557:15 | ip | 0 | -| test.c:558:19:558:20 | ip | 0 | -| test.c:559:20:559:21 | ip | 0 | -| test.c:560:20:560:21 | ip | 0 | -| test.c:561:21:561:22 | ip | 0 | -| test.c:562:26:562:27 | ip | 0 | -| test.c:562:37:562:38 | ip | 0 | -| test.c:562:52:562:53 | ip | 0 | -| test.c:562:63:562:64 | ip | 0 | -| test.c:563:24:563:25 | ip | 0 | -| test.c:564:29:564:30 | ip | 0 | -| test.c:564:40:564:41 | ip | 0 | -| test.c:565:31:565:32 | ip | 0 | -| test.c:566:26:566:27 | ip | 0 | -| test.c:567:17:567:18 | ip | 0 | -| test.c:567:32:567:33 | ip | 0 | +| test.c:538:13:538:14 | ip | 0 | +| test.c:538:28:538:29 | ip | 0 | +| test.c:539:18:539:19 | ip | 0 | +| test.c:540:18:540:19 | ip | 0 | +| test.c:541:18:541:19 | ip | 0 | +| test.c:542:19:542:20 | ip | 0 | +| test.c:543:24:543:25 | ip | 0 | +| test.c:543:35:543:36 | ip | 0 | +| test.c:543:50:543:51 | ip | 0 | +| test.c:543:61:543:62 | ip | 0 | +| test.c:544:22:544:23 | ip | 0 | +| test.c:545:27:545:28 | ip | 0 | +| test.c:545:38:545:39 | ip | 0 | +| test.c:546:29:546:30 | ip | 0 | +| test.c:547:24:547:25 | ip | 0 | +| test.c:548:17:548:18 | ip | 0 | +| test.c:548:32:548:33 | ip | 0 | +| test.c:549:14:549:15 | ip | 0 | +| test.c:550:18:550:19 | ip | 0 | +| test.c:551:18:551:19 | ip | 0 | +| test.c:552:19:552:20 | ip | 0 | +| test.c:553:24:553:25 | ip | 0 | +| test.c:553:35:553:36 | ip | 0 | +| test.c:553:50:553:51 | ip | 0 | +| test.c:553:61:553:62 | ip | 0 | +| test.c:554:22:554:23 | ip | 0 | +| test.c:555:27:555:28 | ip | 0 | +| test.c:555:38:555:39 | ip | 0 | +| test.c:556:29:556:30 | ip | 0 | +| test.c:557:24:557:25 | ip | 0 | +| test.c:558:17:558:18 | ip | 0 | +| test.c:558:23:558:24 | ip | 0 | +| test.c:558:43:558:44 | ip | 0 | +| test.c:558:49:558:50 | ip | 0 | +| test.c:559:16:559:17 | ip | 0 | +| test.c:560:16:560:17 | ip | 0 | +| test.c:561:16:561:17 | ip | 0 | +| test.c:562:17:562:18 | ip | 0 | +| test.c:563:22:563:23 | ip | 0 | +| test.c:563:33:563:34 | ip | 0 | +| test.c:563:48:563:49 | ip | 0 | +| test.c:563:59:563:60 | ip | 0 | +| test.c:564:20:564:21 | ip | 0 | +| test.c:565:25:565:26 | ip | 0 | +| test.c:565:36:565:37 | ip | 0 | +| test.c:566:27:566:28 | ip | 0 | +| test.c:567:22:567:23 | ip | 0 | +| test.c:568:16:568:17 | ip | 0 | | test.c:568:22:568:23 | ip | 0 | -| test.c:569:22:569:23 | ip | 0 | -| test.c:570:22:570:23 | ip | 0 | -| test.c:571:23:571:24 | ip | 0 | -| test.c:572:28:572:29 | ip | 0 | -| test.c:572:39:572:40 | ip | 0 | -| test.c:572:54:572:55 | ip | 0 | -| test.c:572:65:572:66 | ip | 0 | -| test.c:573:26:573:27 | ip | 0 | -| test.c:574:31:574:32 | ip | 0 | -| test.c:574:42:574:43 | ip | 0 | -| test.c:575:33:575:34 | ip | 0 | -| test.c:576:28:576:29 | ip | 0 | -| test.c:577:21:577:22 | ip | 0 | -| test.c:577:36:577:37 | ip | 0 | -| test.c:578:17:578:18 | ip | 0 | -| test.c:579:18:579:19 | ip | 0 | -| test.c:580:18:580:19 | ip | 0 | -| test.c:581:19:581:20 | ip | 0 | -| test.c:582:24:582:25 | ip | 0 | -| test.c:582:35:582:36 | ip | 0 | -| test.c:582:50:582:51 | ip | 0 | -| test.c:582:61:582:62 | ip | 0 | -| test.c:583:22:583:23 | ip | 0 | -| test.c:584:27:584:28 | ip | 0 | -| test.c:584:38:584:39 | ip | 0 | -| test.c:585:29:585:30 | ip | 0 | -| test.c:586:24:586:25 | ip | 0 | -| test.c:587:17:587:18 | ip | 0 | -| test.c:587:23:587:24 | ip | 0 | -| test.c:587:43:587:44 | ip | 0 | -| test.c:587:49:587:50 | ip | 0 | -| test.c:588:20:588:21 | ip | 0 | -| test.c:589:20:589:21 | ip | 0 | -| test.c:590:20:590:21 | ip | 0 | -| test.c:591:21:591:22 | ip | 0 | -| test.c:592:26:592:27 | ip | 0 | -| test.c:592:37:592:38 | ip | 0 | -| test.c:592:52:592:53 | ip | 0 | -| test.c:592:63:592:64 | ip | 0 | -| test.c:593:24:593:25 | ip | 0 | -| test.c:594:29:594:30 | ip | 0 | -| test.c:594:40:594:41 | ip | 0 | -| test.c:595:31:595:32 | ip | 0 | -| test.c:596:26:596:27 | ip | 0 | -| test.c:597:20:597:21 | ip | 0 | -| test.c:597:26:597:27 | ip | 0 | -| test.c:598:22:598:23 | ip | 0 | -| test.c:599:18:599:19 | ip | 0 | -| test.c:600:16:600:17 | ip | 0 | -| test.c:601:17:601:18 | ip | 0 | -| test.c:602:18:602:19 | ip | 0 | -| test.c:603:18:603:19 | ip | 0 | -| test.c:604:19:604:20 | ip | 0 | -| test.c:605:24:605:25 | ip | 0 | -| test.c:605:35:605:36 | ip | 0 | -| test.c:605:50:605:51 | ip | 0 | -| test.c:605:61:605:62 | ip | 0 | -| test.c:606:22:606:23 | ip | 0 | -| test.c:607:27:607:28 | ip | 0 | -| test.c:607:38:607:39 | ip | 0 | -| test.c:608:29:608:30 | ip | 0 | -| test.c:609:24:609:25 | ip | 0 | -| test.c:610:15:610:16 | ip | 0 | -| test.c:610:30:610:31 | ip | 0 | -| test.c:611:20:611:21 | ip | 0 | -| test.c:612:20:612:21 | ip | 0 | -| test.c:613:20:613:21 | ip | 0 | -| test.c:614:21:614:22 | ip | 0 | -| test.c:615:26:615:27 | ip | 0 | -| test.c:615:37:615:38 | ip | 0 | -| test.c:615:52:615:53 | ip | 0 | -| test.c:615:63:615:64 | ip | 0 | -| test.c:616:24:616:25 | ip | 0 | -| test.c:617:29:617:30 | ip | 0 | -| test.c:617:40:617:41 | ip | 0 | -| test.c:618:31:618:32 | ip | 0 | -| test.c:619:26:619:27 | ip | 0 | -| test.c:620:19:620:20 | ip | 0 | -| test.c:620:34:620:35 | ip | 0 | -| test.c:621:16:621:17 | ip | 0 | -| test.c:622:20:622:21 | ip | 0 | -| test.c:623:20:623:21 | ip | 0 | -| test.c:624:21:624:22 | ip | 0 | -| test.c:625:26:625:27 | ip | 0 | -| test.c:625:37:625:38 | ip | 0 | -| test.c:625:52:625:53 | ip | 0 | -| test.c:625:63:625:64 | ip | 0 | +| test.c:569:18:569:19 | ip | 0 | +| test.c:570:14:570:15 | ip | 0 | +| test.c:571:14:571:15 | ip | 0 | +| test.c:571:24:571:25 | ip | 0 | +| test.c:571:44:571:45 | ip | 0 | +| test.c:572:16:572:17 | ip | 1 | +| test.c:573:16:573:17 | ip | 0 | +| test.c:573:36:573:37 | ip | 0 | +| test.c:574:14:574:15 | ip | 0 | +| test.c:575:19:575:20 | ip | 0 | +| test.c:576:20:576:21 | ip | 0 | +| test.c:577:20:577:21 | ip | 0 | +| test.c:578:21:578:22 | ip | 0 | +| test.c:579:26:579:27 | ip | 0 | +| test.c:579:37:579:38 | ip | 0 | +| test.c:579:52:579:53 | ip | 0 | +| test.c:579:63:579:64 | ip | 0 | +| test.c:580:24:580:25 | ip | 0 | +| test.c:581:29:581:30 | ip | 0 | +| test.c:581:40:581:41 | ip | 0 | +| test.c:582:31:582:32 | ip | 0 | +| test.c:583:26:583:27 | ip | 0 | +| test.c:584:17:584:18 | ip | 0 | +| test.c:584:32:584:33 | ip | 0 | +| test.c:585:22:585:23 | ip | 0 | +| test.c:586:22:586:23 | ip | 0 | +| test.c:587:22:587:23 | ip | 0 | +| test.c:588:23:588:24 | ip | 0 | +| test.c:589:28:589:29 | ip | 0 | +| test.c:589:39:589:40 | ip | 0 | +| test.c:589:54:589:55 | ip | 0 | +| test.c:589:65:589:66 | ip | 0 | +| test.c:590:26:590:27 | ip | 0 | +| test.c:591:31:591:32 | ip | 0 | +| test.c:591:42:591:43 | ip | 0 | +| test.c:592:33:592:34 | ip | 0 | +| test.c:593:28:593:29 | ip | 0 | +| test.c:594:21:594:22 | ip | 0 | +| test.c:594:36:594:37 | ip | 0 | +| test.c:595:17:595:18 | ip | 0 | +| test.c:596:18:596:19 | ip | 0 | +| test.c:597:18:597:19 | ip | 0 | +| test.c:598:19:598:20 | ip | 0 | +| test.c:599:24:599:25 | ip | 0 | +| test.c:599:35:599:36 | ip | 0 | +| test.c:599:50:599:51 | ip | 0 | +| test.c:599:61:599:62 | ip | 0 | +| test.c:600:22:600:23 | ip | 0 | +| test.c:601:27:601:28 | ip | 0 | +| test.c:601:38:601:39 | ip | 0 | +| test.c:602:29:602:30 | ip | 0 | +| test.c:603:24:603:25 | ip | 0 | +| test.c:604:17:604:18 | ip | 0 | +| test.c:604:23:604:24 | ip | 0 | +| test.c:604:43:604:44 | ip | 0 | +| test.c:604:49:604:50 | ip | 0 | +| test.c:605:20:605:21 | ip | 0 | +| test.c:606:20:606:21 | ip | 0 | +| test.c:607:20:607:21 | ip | 0 | +| test.c:608:21:608:22 | ip | 0 | +| test.c:609:26:609:27 | ip | 0 | +| test.c:609:37:609:38 | ip | 0 | +| test.c:609:52:609:53 | ip | 0 | +| test.c:609:63:609:64 | ip | 0 | +| test.c:610:24:610:25 | ip | 0 | +| test.c:611:29:611:30 | ip | 0 | +| test.c:611:40:611:41 | ip | 0 | +| test.c:612:31:612:32 | ip | 0 | +| test.c:613:26:613:27 | ip | 0 | +| test.c:614:20:614:21 | ip | 0 | +| test.c:614:26:614:27 | ip | 0 | +| test.c:615:22:615:23 | ip | 0 | +| test.c:616:18:616:19 | ip | 0 | +| test.c:617:16:617:17 | ip | 0 | +| test.c:618:17:618:18 | ip | 0 | +| test.c:619:18:619:19 | ip | 0 | +| test.c:620:18:620:19 | ip | 0 | +| test.c:621:19:621:20 | ip | 0 | +| test.c:622:24:622:25 | ip | 0 | +| test.c:622:35:622:36 | ip | 0 | +| test.c:622:50:622:51 | ip | 0 | +| test.c:622:61:622:62 | ip | 0 | +| test.c:623:22:623:23 | ip | 0 | +| test.c:624:27:624:28 | ip | 0 | +| test.c:624:38:624:39 | ip | 0 | +| test.c:625:29:625:30 | ip | 0 | | test.c:626:24:626:25 | ip | 0 | -| test.c:627:29:627:30 | ip | 0 | -| test.c:627:40:627:41 | ip | 0 | -| test.c:628:31:628:32 | ip | 0 | -| test.c:629:26:629:27 | ip | 0 | -| test.c:630:19:630:20 | ip | 0 | -| test.c:630:25:630:26 | ip | 0 | -| test.c:630:45:630:46 | ip | 0 | -| test.c:630:51:630:52 | ip | 0 | -| test.c:631:18:631:19 | ip | 0 | -| test.c:632:18:632:19 | ip | 0 | -| test.c:633:18:633:19 | ip | 0 | -| test.c:634:19:634:20 | ip | 0 | -| test.c:635:24:635:25 | ip | 0 | -| test.c:635:35:635:36 | ip | 0 | -| test.c:635:50:635:51 | ip | 0 | -| test.c:635:61:635:62 | ip | 0 | -| test.c:636:22:636:23 | ip | 0 | -| test.c:637:27:637:28 | ip | 0 | -| test.c:637:38:637:39 | ip | 0 | -| test.c:638:29:638:30 | ip | 0 | -| test.c:639:24:639:25 | ip | 0 | -| test.c:640:18:640:19 | ip | 0 | -| test.c:640:24:640:25 | ip | 0 | -| test.c:641:20:641:21 | ip | 0 | -| test.c:642:16:642:17 | ip | 0 | -| test.c:643:10:643:23 | special_number | 0 | -| test.c:651:7:651:8 | c1 | -2147483648 | -| test.c:651:13:651:13 | x | 0 | -| test.c:652:7:652:8 | c2 | -2147483648 | -| test.c:652:13:652:13 | x | 0 | -| test.c:653:7:653:8 | c3 | -2147483648 | -| test.c:653:13:653:13 | x | 0 | -| test.c:654:7:654:8 | c4 | -2147483648 | -| test.c:654:13:654:13 | x | 0 | -| test.c:655:7:655:8 | c5 | -2147483648 | -| test.c:655:13:655:13 | x | 0 | -| test.c:656:7:656:8 | c1 | -2147483648 | -| test.c:656:13:656:14 | c2 | -2147483648 | -| test.c:656:19:656:19 | x | 0 | -| test.c:657:7:657:8 | c1 | -2147483648 | -| test.c:657:13:657:14 | c3 | -2147483648 | -| test.c:657:19:657:19 | x | 0 | -| test.c:658:7:658:8 | c1 | -2147483648 | -| test.c:658:13:658:14 | c4 | -2147483648 | -| test.c:658:19:658:19 | x | 0 | -| test.c:659:7:659:8 | c1 | -2147483648 | -| test.c:659:13:659:14 | c5 | -2147483648 | -| test.c:659:19:659:19 | x | 0 | -| test.c:660:7:660:8 | c2 | -2147483648 | -| test.c:660:13:660:14 | c3 | -2147483648 | -| test.c:660:19:660:19 | x | 0 | -| test.c:662:11:662:11 | x | 0 | -| test.c:662:15:662:15 | x | 0 | -| test.c:662:19:662:19 | x | 0 | -| test.c:662:23:662:23 | x | 0 | -| test.c:662:27:662:27 | x | 0 | -| test.c:662:31:662:31 | x | 0 | -| test.c:662:35:662:35 | x | 0 | -| test.c:662:39:662:39 | x | 0 | -| test.c:662:43:662:43 | x | 0 | -| test.c:662:47:662:47 | x | 0 | -| test.c:662:51:662:51 | x | 0 | -| test.c:662:55:662:55 | x | 0 | -| test.c:663:10:663:10 | y | -2147483648 | -| test.c:668:20:668:20 | x | 0 | -| test.c:668:30:668:30 | x | 0 | -| test.c:671:3:671:4 | y1 | 0 | -| test.c:671:11:671:11 | y | 0 | -| test.c:671:14:671:14 | y | 1 | -| test.c:672:3:672:4 | y2 | 0 | -| test.c:672:9:672:9 | y | 1 | -| test.c:672:14:672:14 | y | 2 | -| test.c:672:22:672:22 | y | 5 | -| test.c:673:10:673:11 | y1 | 1 | -| test.c:673:15:673:16 | y2 | 5 | -| test.c:681:3:681:3 | i | -2147483648 | -| test.c:682:7:682:7 | i | 10 | -| test.c:684:3:684:3 | i | -2147483648 | -| test.c:685:3:685:3 | i | 10 | -| test.c:686:7:686:7 | i | 20 | -| test.c:688:3:688:3 | i | -2147483648 | -| test.c:689:3:689:3 | i | 40 | -| test.c:690:7:690:7 | i | 30 | -| test.c:692:3:692:3 | i | -2147483648 | -| test.c:692:7:692:7 | j | -2147483648 | -| test.c:693:7:693:7 | i | 40 | -| test.c:695:3:695:3 | i | -2147483648 | -| test.c:695:8:695:8 | j | 40 | -| test.c:696:7:696:7 | i | 50 | +| test.c:627:15:627:16 | ip | 0 | +| test.c:627:30:627:31 | ip | 0 | +| test.c:628:20:628:21 | ip | 0 | +| test.c:629:20:629:21 | ip | 0 | +| test.c:630:20:630:21 | ip | 0 | +| test.c:631:21:631:22 | ip | 0 | +| test.c:632:26:632:27 | ip | 0 | +| test.c:632:37:632:38 | ip | 0 | +| test.c:632:52:632:53 | ip | 0 | +| test.c:632:63:632:64 | ip | 0 | +| test.c:633:24:633:25 | ip | 0 | +| test.c:634:29:634:30 | ip | 0 | +| test.c:634:40:634:41 | ip | 0 | +| test.c:635:31:635:32 | ip | 0 | +| test.c:636:26:636:27 | ip | 0 | +| test.c:637:19:637:20 | ip | 0 | +| test.c:637:34:637:35 | ip | 0 | +| test.c:638:16:638:17 | ip | 0 | +| test.c:639:20:639:21 | ip | 0 | +| test.c:640:20:640:21 | ip | 0 | +| test.c:641:21:641:22 | ip | 0 | +| test.c:642:26:642:27 | ip | 0 | +| test.c:642:37:642:38 | ip | 0 | +| test.c:642:52:642:53 | ip | 0 | +| test.c:642:63:642:64 | ip | 0 | +| test.c:643:24:643:25 | ip | 0 | +| test.c:644:29:644:30 | ip | 0 | +| test.c:644:40:644:41 | ip | 0 | +| test.c:645:31:645:32 | ip | 0 | +| test.c:646:26:646:27 | ip | 0 | +| test.c:647:19:647:20 | ip | 0 | +| test.c:647:25:647:26 | ip | 0 | +| test.c:647:45:647:46 | ip | 0 | +| test.c:647:51:647:52 | ip | 0 | +| test.c:648:18:648:19 | ip | 0 | +| test.c:649:18:649:19 | ip | 0 | +| test.c:650:18:650:19 | ip | 0 | +| test.c:651:19:651:20 | ip | 0 | +| test.c:652:24:652:25 | ip | 0 | +| test.c:652:35:652:36 | ip | 0 | +| test.c:652:50:652:51 | ip | 0 | +| test.c:652:61:652:62 | ip | 0 | +| test.c:653:22:653:23 | ip | 0 | +| test.c:654:27:654:28 | ip | 0 | +| test.c:654:38:654:39 | ip | 0 | +| test.c:655:29:655:30 | ip | 0 | +| test.c:656:24:656:25 | ip | 0 | +| test.c:657:18:657:19 | ip | 0 | +| test.c:657:24:657:25 | ip | 0 | +| test.c:658:20:658:21 | ip | 0 | +| test.c:659:16:659:17 | ip | 0 | +| test.c:660:10:660:23 | special_number | 0 | +| test.c:668:7:668:8 | c1 | -2147483648 | +| test.c:668:13:668:13 | x | 0 | +| test.c:669:7:669:8 | c2 | -2147483648 | +| test.c:669:13:669:13 | x | 0 | +| test.c:670:7:670:8 | c3 | -2147483648 | +| test.c:670:13:670:13 | x | 0 | +| test.c:671:7:671:8 | c4 | -2147483648 | +| test.c:671:13:671:13 | x | 0 | +| test.c:672:7:672:8 | c5 | -2147483648 | +| test.c:672:13:672:13 | x | 0 | +| test.c:673:7:673:8 | c1 | -2147483648 | +| test.c:673:13:673:14 | c2 | -2147483648 | +| test.c:673:19:673:19 | x | 0 | +| test.c:674:7:674:8 | c1 | -2147483648 | +| test.c:674:13:674:14 | c3 | -2147483648 | +| test.c:674:19:674:19 | x | 0 | +| test.c:675:7:675:8 | c1 | -2147483648 | +| test.c:675:13:675:14 | c4 | -2147483648 | +| test.c:675:19:675:19 | x | 0 | +| test.c:676:7:676:8 | c1 | -2147483648 | +| test.c:676:13:676:14 | c5 | -2147483648 | +| test.c:676:19:676:19 | x | 0 | +| test.c:677:7:677:8 | c2 | -2147483648 | +| test.c:677:13:677:14 | c3 | -2147483648 | +| test.c:677:19:677:19 | x | 0 | +| test.c:679:11:679:11 | x | 0 | +| test.c:679:15:679:15 | x | 0 | +| test.c:679:19:679:19 | x | 0 | +| test.c:679:23:679:23 | x | 0 | +| test.c:679:27:679:27 | x | 0 | +| test.c:679:31:679:31 | x | 0 | +| test.c:679:35:679:35 | x | 0 | +| test.c:679:39:679:39 | x | 0 | +| test.c:679:43:679:43 | x | 0 | +| test.c:679:47:679:47 | x | 0 | +| test.c:679:51:679:51 | x | 0 | +| test.c:679:55:679:55 | x | 0 | +| test.c:680:10:680:10 | y | -2147483648 | +| test.c:685:20:685:20 | x | 0 | +| test.c:685:30:685:30 | x | 0 | +| test.c:688:3:688:4 | y1 | 0 | +| test.c:688:11:688:11 | y | 0 | +| test.c:688:14:688:14 | y | 1 | +| test.c:689:3:689:4 | y2 | 0 | +| test.c:689:9:689:9 | y | 1 | +| test.c:689:14:689:14 | y | 2 | +| test.c:689:22:689:22 | y | 5 | +| test.c:690:10:690:11 | y1 | 1 | +| test.c:690:15:690:16 | y2 | 5 | | test.c:698:3:698:3 | i | -2147483648 | -| test.c:698:13:698:13 | j | 50 | -| test.c:699:7:699:7 | i | 60 | -| test.c:706:12:706:12 | a | 0 | -| test.c:706:17:706:17 | a | 3 | -| test.c:706:33:706:33 | b | 0 | -| test.c:706:38:706:38 | b | 5 | -| test.c:707:13:707:13 | a | 3 | -| test.c:707:15:707:15 | b | 5 | -| test.c:708:5:708:9 | total | 0 | -| test.c:708:14:708:14 | r | 15 | -| test.c:710:12:710:12 | a | 0 | -| test.c:710:17:710:17 | a | 3 | -| test.c:710:33:710:33 | b | 0 | -| test.c:710:38:710:38 | b | 0 | -| test.c:711:13:711:13 | a | 3 | -| test.c:711:15:711:15 | b | 0 | -| test.c:712:5:712:9 | total | 0 | -| test.c:712:14:712:14 | r | 0 | -| test.c:714:12:714:12 | a | 0 | -| test.c:714:17:714:17 | a | 3 | -| test.c:714:34:714:34 | b | 0 | -| test.c:714:39:714:39 | b | 13 | -| test.c:715:13:715:13 | a | 3 | -| test.c:715:15:715:15 | b | 13 | -| test.c:716:5:716:9 | total | 0 | -| test.c:716:14:716:14 | r | 39 | -| test.c:719:10:719:14 | total | 0 | -| test.c:725:12:725:12 | b | 0 | -| test.c:725:17:725:17 | b | 5 | -| test.c:726:16:726:16 | b | 5 | -| test.c:727:5:727:9 | total | 0 | -| test.c:727:14:727:14 | r | 55 | -| test.c:729:12:729:12 | b | 0 | -| test.c:729:17:729:17 | b | 0 | -| test.c:730:16:730:16 | b | 0 | -| test.c:731:5:731:9 | total | 0 | -| test.c:731:14:731:14 | r | 0 | -| test.c:733:13:733:13 | b | 0 | -| test.c:733:18:733:18 | b | 13 | -| test.c:734:16:734:16 | b | 13 | -| test.c:735:5:735:9 | total | 0 | -| test.c:735:14:735:14 | r | 143 | -| test.c:738:10:738:14 | total | 0 | -| test.c:743:3:743:3 | x | 0 | -| test.c:743:7:743:7 | y | 0 | -| test.c:744:3:744:4 | xy | 0 | -| test.c:744:8:744:8 | x | 1000000003 | -| test.c:744:12:744:12 | y | 1000000003 | -| test.c:745:10:745:11 | xy | 1000000006000000000 | -| test.c:750:3:750:3 | x | 0 | -| test.c:751:3:751:3 | y | 0 | -| test.c:752:3:752:4 | xy | 0 | -| test.c:752:8:752:8 | x | 274177 | -| test.c:752:12:752:12 | y | 67280421310721 | -| test.c:753:10:753:11 | xy | 18446744073709551616 | -| test.c:757:7:757:8 | ui | 0 | -| test.c:758:43:758:44 | ui | 10 | -| test.c:758:48:758:49 | ui | 10 | -| test.c:759:12:759:17 | result | 100 | -| test.c:761:7:761:8 | ul | 0 | -| test.c:762:28:762:29 | ul | 10 | -| test.c:762:33:762:34 | ul | 10 | -| test.c:763:12:763:17 | result | 0 | -| test.c:769:7:769:8 | ui | 0 | -| test.c:769:19:769:20 | ui | 0 | -| test.c:770:5:770:6 | ui | 2 | -| test.c:770:11:770:12 | ui | 2 | -| test.c:771:12:771:13 | ui | 4 | -| test.c:775:3:775:9 | uiconst | 10 | -| test.c:778:3:778:9 | ulconst | 10 | -| test.c:779:10:779:16 | uiconst | 40 | -| test.c:779:20:779:26 | ulconst | 40 | -| test.c:783:7:783:7 | i | -2147483648 | -| test.c:783:18:783:18 | i | -1 | -| test.c:784:5:784:5 | i | -2147483648 | -| test.c:784:13:784:13 | i | -1 | -| test.c:785:9:785:9 | i | -5 | -| test.c:787:5:787:5 | i | -2147483648 | -| test.c:787:9:787:9 | i | -5 | -| test.c:788:9:788:9 | i | -30 | -| test.c:790:5:790:5 | i | -30 | -| test.c:791:9:791:9 | i | -210 | -| test.c:793:5:793:5 | i | -210 | -| test.c:794:9:794:9 | i | -1155 | -| test.c:796:7:796:7 | i | -2147483648 | -| test.c:797:5:797:5 | i | -2147483648 | -| test.c:797:9:797:9 | i | -1 | -| test.c:798:9:798:9 | i | 1 | -| test.c:800:3:800:3 | i | -2147483648 | +| test.c:699:7:699:7 | i | 10 | +| test.c:701:3:701:3 | i | -2147483648 | +| test.c:702:3:702:3 | i | 10 | +| test.c:703:7:703:7 | i | 20 | +| test.c:705:3:705:3 | i | -2147483648 | +| test.c:706:3:706:3 | i | 40 | +| test.c:707:7:707:7 | i | 30 | +| test.c:709:3:709:3 | i | -2147483648 | +| test.c:709:7:709:7 | j | -2147483648 | +| test.c:710:7:710:7 | i | 40 | +| test.c:712:3:712:3 | i | -2147483648 | +| test.c:712:8:712:8 | j | 40 | +| test.c:713:7:713:7 | i | 50 | +| test.c:715:3:715:3 | i | -2147483648 | +| test.c:715:13:715:13 | j | 50 | +| test.c:716:7:716:7 | i | 60 | +| test.c:723:12:723:12 | a | 0 | +| test.c:723:17:723:17 | a | 3 | +| test.c:723:33:723:33 | b | 0 | +| test.c:723:38:723:38 | b | 5 | +| test.c:724:13:724:13 | a | 3 | +| test.c:724:15:724:15 | b | 5 | +| test.c:725:5:725:9 | total | 0 | +| test.c:725:14:725:14 | r | 15 | +| test.c:727:12:727:12 | a | 0 | +| test.c:727:17:727:17 | a | 3 | +| test.c:727:33:727:33 | b | 0 | +| test.c:727:38:727:38 | b | 0 | +| test.c:728:13:728:13 | a | 3 | +| test.c:728:15:728:15 | b | 0 | +| test.c:729:5:729:9 | total | 0 | +| test.c:729:14:729:14 | r | 0 | +| test.c:731:12:731:12 | a | 0 | +| test.c:731:17:731:17 | a | 3 | +| test.c:731:34:731:34 | b | 0 | +| test.c:731:39:731:39 | b | 13 | +| test.c:732:13:732:13 | a | 3 | +| test.c:732:15:732:15 | b | 13 | +| test.c:733:5:733:9 | total | 0 | +| test.c:733:14:733:14 | r | 39 | +| test.c:736:10:736:14 | total | 0 | +| test.c:742:12:742:12 | b | 0 | +| test.c:742:17:742:17 | b | 5 | +| test.c:743:16:743:16 | b | 5 | +| test.c:744:5:744:9 | total | 0 | +| test.c:744:14:744:14 | r | 55 | +| test.c:746:12:746:12 | b | 0 | +| test.c:746:17:746:17 | b | 0 | +| test.c:747:16:747:16 | b | 0 | +| test.c:748:5:748:9 | total | 0 | +| test.c:748:14:748:14 | r | 0 | +| test.c:750:13:750:13 | b | 0 | +| test.c:750:18:750:18 | b | 13 | +| test.c:751:16:751:16 | b | 13 | +| test.c:752:5:752:9 | total | 0 | +| test.c:752:14:752:14 | r | 143 | +| test.c:755:10:755:14 | total | 0 | +| test.c:760:3:760:3 | x | 0 | +| test.c:760:7:760:7 | y | 0 | +| test.c:761:3:761:4 | xy | 0 | +| test.c:761:8:761:8 | x | 1000000003 | +| test.c:761:12:761:12 | y | 1000000003 | +| test.c:762:10:762:11 | xy | 1000000006000000000 | +| test.c:767:3:767:3 | x | 0 | +| test.c:768:3:768:3 | y | 0 | +| test.c:769:3:769:4 | xy | 0 | +| test.c:769:8:769:8 | x | 274177 | +| test.c:769:12:769:12 | y | 67280421310721 | +| test.c:770:10:770:11 | xy | 18446744073709551616 | +| test.c:774:7:774:8 | ui | 0 | +| test.c:775:43:775:44 | ui | 10 | +| test.c:775:48:775:49 | ui | 10 | +| test.c:776:12:776:17 | result | 100 | +| test.c:778:7:778:8 | ul | 0 | +| test.c:779:28:779:29 | ul | 10 | +| test.c:779:33:779:34 | ul | 10 | +| test.c:780:12:780:17 | result | 0 | +| test.c:786:7:786:8 | ui | 0 | +| test.c:786:19:786:20 | ui | 0 | +| test.c:787:5:787:6 | ui | 2 | +| test.c:787:11:787:12 | ui | 2 | +| test.c:788:12:788:13 | ui | 4 | +| test.c:792:3:792:9 | uiconst | 10 | +| test.c:795:3:795:9 | ulconst | 10 | +| test.c:796:10:796:16 | uiconst | 40 | +| test.c:796:20:796:26 | ulconst | 40 | | test.c:800:7:800:7 | i | -2147483648 | -| test.c:801:10:801:10 | i | -2147483648 | -| test.c:804:3:804:3 | i | -2147483648 | -| test.c:804:10:804:11 | sc | 1 | -| test.c:806:7:806:7 | i | -128 | -| test.c:813:7:813:7 | n | 0 | -| test.c:815:7:815:7 | n | 0 | -| test.c:816:9:816:9 | n | 1 | -| test.c:819:7:819:7 | n | 0 | -| test.c:820:9:820:9 | n | 1 | -| test.c:822:9:822:9 | n | 0 | -| test.c:825:8:825:8 | n | 0 | -| test.c:826:9:826:9 | n | 0 | -| test.c:828:9:828:9 | n | 1 | -| test.c:831:10:831:10 | n | 0 | -| test.c:832:5:832:5 | n | 1 | -| test.c:835:7:835:7 | n | 0 | -| test.c:839:7:839:7 | n | -32768 | -| test.c:842:7:842:7 | n | 0 | +| test.c:800:18:800:18 | i | -1 | +| test.c:801:5:801:5 | i | -2147483648 | +| test.c:801:13:801:13 | i | -1 | +| test.c:802:9:802:9 | i | -5 | +| test.c:804:5:804:5 | i | -2147483648 | +| test.c:804:9:804:9 | i | -5 | +| test.c:805:9:805:9 | i | -30 | +| test.c:807:5:807:5 | i | -30 | +| test.c:808:9:808:9 | i | -210 | +| test.c:810:5:810:5 | i | -210 | +| test.c:811:9:811:9 | i | -1155 | +| test.c:813:7:813:7 | i | -2147483648 | +| test.c:814:5:814:5 | i | -2147483648 | +| test.c:814:9:814:9 | i | -1 | +| test.c:815:9:815:9 | i | 1 | +| test.c:817:3:817:3 | i | -2147483648 | +| test.c:817:7:817:7 | i | -2147483648 | +| test.c:818:10:818:10 | i | -2147483648 | +| test.c:821:3:821:3 | i | -2147483648 | +| test.c:821:10:821:11 | sc | 1 | +| test.c:823:7:823:7 | i | -128 | +| test.c:830:7:830:7 | n | 0 | +| test.c:832:7:832:7 | n | 0 | +| test.c:833:9:833:9 | n | 1 | +| test.c:836:7:836:7 | n | 0 | +| test.c:837:9:837:9 | n | 1 | +| test.c:839:9:839:9 | n | 0 | +| test.c:842:8:842:8 | n | 0 | | test.c:843:9:843:9 | n | 0 | | test.c:845:9:845:9 | n | 1 | -| test.c:848:7:848:7 | n | 0 | -| test.c:849:9:849:9 | n | 1 | -| test.c:851:9:851:9 | n | 0 | -| test.c:854:10:854:10 | n | 0 | -| test.c:855:5:855:5 | n | 1 | -| test.c:858:7:858:7 | n | 0 | -| test.c:862:7:862:7 | n | -32768 | -| test.c:863:9:863:9 | n | -32768 | -| test.c:864:11:864:11 | n | 0 | -| test.c:868:7:868:7 | n | -32768 | -| test.c:869:13:869:13 | n | 5 | -| test.c:872:9:872:9 | n | 6 | -| test.c:875:7:875:7 | n | -32768 | -| test.c:875:22:875:22 | n | -32767 | -| test.c:876:9:876:9 | n | -32766 | +| test.c:848:10:848:10 | n | 0 | +| test.c:849:5:849:5 | n | 1 | +| test.c:852:7:852:7 | n | 0 | +| test.c:856:7:856:7 | n | -32768 | +| test.c:859:7:859:7 | n | 0 | +| test.c:860:9:860:9 | n | 0 | +| test.c:862:9:862:9 | n | 1 | +| test.c:865:7:865:7 | n | 0 | +| test.c:866:9:866:9 | n | 1 | +| test.c:868:9:868:9 | n | 0 | +| test.c:871:10:871:10 | n | 0 | +| test.c:872:5:872:5 | n | 1 | +| test.c:875:7:875:7 | n | 0 | | test.c:879:7:879:7 | n | -32768 | -| test.c:880:5:880:5 | n | 0 | -| test.c:880:10:880:10 | n | 1 | -| test.c:880:14:880:14 | n | 0 | -| test.c:881:6:881:6 | n | 0 | -| test.c:881:10:881:10 | n | 0 | -| test.c:881:14:881:14 | n | 1 | -| test.c:892:7:892:8 | ss | -32768 | -| test.c:893:9:893:10 | ss | 0 | -| test.c:896:7:896:8 | ss | -32768 | -| test.c:897:9:897:10 | ss | -32768 | -| test.c:900:14:900:15 | us | 0 | -| test.c:901:9:901:10 | us | 0 | -| test.c:904:14:904:15 | us | 0 | -| test.c:905:9:905:10 | us | 0 | -| test.c:908:7:908:8 | ss | -32768 | -| test.c:909:9:909:10 | ss | -32768 | -| test.c:912:7:912:8 | ss | -32768 | -| test.c:913:9:913:10 | ss | -1 | -| test.c:919:8:919:8 | s | -2147483648 | -| test.c:919:15:919:15 | s | 0 | -| test.c:919:23:919:23 | s | 0 | -| test.c:920:18:920:18 | s | 0 | -| test.c:920:22:920:22 | s | 0 | -| test.c:921:9:921:14 | result | 0 | -| test.c:927:7:927:7 | i | 0 | -| test.c:928:9:928:9 | i | -2147483648 | -| test.c:932:7:932:7 | u | 0 | -| test.c:933:9:933:9 | u | 0 | -| test.c:938:12:938:12 | s | -2147483648 | -| test.c:939:7:939:8 | s2 | -4 | -| test.c:944:7:944:7 | x | -2147483648 | -| test.c:945:9:945:9 | y | -2147483648 | -| test.c:949:7:949:7 | y | -2147483648 | -| test.c:958:7:958:7 | x | -2147483648 | -| test.c:963:7:963:7 | x | -2147483648 | -| test.c:970:8:970:8 | x | 2147483647 | -| test.c:970:12:970:12 | y | 256 | -| test.c:971:9:971:9 | x | 2147483647 | -| test.c:972:9:972:9 | y | 256 | -| test.c:985:7:985:7 | e | -2147483648 | +| test.c:880:9:880:9 | n | -32768 | +| test.c:881:11:881:11 | n | 0 | +| test.c:885:7:885:7 | n | -32768 | +| test.c:886:13:886:13 | n | 5 | +| test.c:889:9:889:9 | n | 6 | +| test.c:892:7:892:7 | n | -32768 | +| test.c:892:22:892:22 | n | -32767 | +| test.c:893:9:893:9 | n | -32766 | +| test.c:896:7:896:7 | n | -32768 | +| test.c:897:5:897:5 | n | 0 | +| test.c:897:10:897:10 | n | 1 | +| test.c:897:14:897:14 | n | 0 | +| test.c:898:6:898:6 | n | 0 | +| test.c:898:10:898:10 | n | 0 | +| test.c:898:14:898:14 | n | 1 | +| test.c:909:7:909:8 | ss | -32768 | +| test.c:910:9:910:10 | ss | 0 | +| test.c:913:7:913:8 | ss | -32768 | +| test.c:914:9:914:10 | ss | -32768 | +| test.c:917:14:917:15 | us | 0 | +| test.c:918:9:918:10 | us | 0 | +| test.c:921:14:921:15 | us | 0 | +| test.c:922:9:922:10 | us | 0 | +| test.c:925:7:925:8 | ss | -32768 | +| test.c:926:9:926:10 | ss | -32768 | +| test.c:929:7:929:8 | ss | -32768 | +| test.c:930:9:930:10 | ss | -1 | +| test.c:936:8:936:8 | s | -2147483648 | +| test.c:936:15:936:15 | s | 0 | +| test.c:936:23:936:23 | s | 0 | +| test.c:937:18:937:18 | s | 0 | +| test.c:937:22:937:22 | s | 0 | +| test.c:938:9:938:14 | result | 0 | +| test.c:944:7:944:7 | i | 0 | +| test.c:945:9:945:9 | i | -2147483648 | +| test.c:949:7:949:7 | u | 0 | +| test.c:950:9:950:9 | u | 0 | +| test.c:955:12:955:12 | s | -2147483648 | +| test.c:956:7:956:8 | s2 | -4 | +| test.c:961:7:961:7 | x | -2147483648 | +| test.c:962:9:962:9 | y | -2147483648 | +| test.c:966:7:966:7 | y | -2147483648 | +| test.c:975:7:975:7 | x | -2147483648 | +| test.c:980:7:980:7 | x | -2147483648 | +| test.c:987:8:987:8 | x | 2147483647 | +| test.c:987:12:987:12 | y | 256 | +| test.c:988:9:988:9 | x | 2147483647 | +| test.c:989:9:989:9 | y | 256 | +| test.c:1002:7:1002:7 | e | -2147483648 | | test.cpp:10:7:10:7 | b | -2147483648 | | test.cpp:11:5:11:5 | x | -2147483648 | | test.cpp:13:10:13:10 | x | -2147483648 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected index b46aebbbf646..b94384f038c1 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected @@ -1536,3023 +1536,3135 @@ estimateNrOfBounds | test.c:445:26:445:26 | 1 | 1.0 | | test.c:446:10:446:12 | (int)... | 6.0 | | test.c:446:10:446:12 | rhs | 6.0 | -| test.c:450:7:450:7 | a | 1.0 | -| test.c:450:7:450:13 | ... == ... | 1.0 | -| test.c:450:12:450:13 | 17 | 1.0 | -| test.c:451:9:451:9 | b | 1.0 | -| test.c:451:9:451:15 | ... == ... | 1.0 | -| test.c:451:14:451:15 | 23 | 1.0 | -| test.c:452:7:452:7 | a | 1.0 | -| test.c:452:7:452:12 | ... += ... | 1.0 | -| test.c:452:12:452:12 | b | 1.0 | -| test.c:454:9:454:9 | a | 2.0 | -| test.c:454:9:454:15 | ... == ... | 1.0 | -| test.c:454:14:454:15 | 18 | 1.0 | -| test.c:455:7:455:7 | b | 1.0 | -| test.c:455:7:455:12 | ... = ... | 1.0 | -| test.c:455:11:455:12 | 10 | 1.0 | -| test.c:460:11:460:11 | a | 4.0 | -| test.c:460:11:460:15 | ... + ... | 16.0 | -| test.c:460:15:460:15 | b | 4.0 | -| test.c:461:10:461:10 | a | 4.0 | -| test.c:461:10:461:14 | ... + ... | 16.0 | -| test.c:461:14:461:14 | b | 4.0 | -| test.c:468:4:470:50 | (...) | 1.0 | -| test.c:468:4:553:26 | ... > ... | 1.0 | -| test.c:468:4:642:27 | ... ? ... : ... | 1.297918419127476E201 | -| test.c:468:5:468:6 | 14 | 1.0 | -| test.c:468:5:468:6 | (unsigned int)... | 1.0 | -| test.c:468:5:468:11 | ... * ... | 1.0 | -| test.c:468:5:468:55 | ... > ... | 1.0 | -| test.c:468:5:470:49 | ... ? ... : ... | 1.0 | -| test.c:468:10:468:11 | ip | 1.0 | -| test.c:468:15:468:26 | (...) | 1.0 | -| test.c:468:15:468:31 | ... * ... | 1.0 | -| test.c:468:15:468:55 | ... + ... | 1.0 | -| test.c:468:16:468:16 | 2 | 1.0 | -| test.c:468:16:468:16 | (unsigned int)... | 1.0 | -| test.c:468:16:468:21 | ... * ... | 1.0 | -| test.c:468:16:468:25 | ... + ... | 1.0 | -| test.c:468:20:468:21 | ip | 1.0 | -| test.c:468:25:468:25 | 1 | 1.0 | -| test.c:468:25:468:25 | (unsigned int)... | 1.0 | -| test.c:468:30:468:31 | 17 | 1.0 | -| test.c:468:30:468:31 | (unsigned int)... | 1.0 | -| test.c:468:35:468:50 | (...) | 1.0 | -| test.c:468:35:468:55 | ... * ... | 1.0 | -| test.c:468:36:468:36 | 2 | 1.0 | -| test.c:468:36:468:36 | (unsigned int)... | 1.0 | -| test.c:468:36:468:41 | ... * ... | 1.0 | -| test.c:468:36:468:45 | ... + ... | 1.0 | -| test.c:468:36:468:49 | ... + ... | 1.0 | -| test.c:468:40:468:41 | ip | 1.0 | -| test.c:468:45:468:45 | 1 | 1.0 | -| test.c:468:45:468:45 | (unsigned int)... | 1.0 | -| test.c:468:49:468:49 | 1 | 1.0 | -| test.c:468:49:468:49 | (unsigned int)... | 1.0 | -| test.c:468:54:468:55 | 17 | 1.0 | -| test.c:468:54:468:55 | (unsigned int)... | 1.0 | -| test.c:469:9:469:10 | 14 | 1.0 | -| test.c:469:9:469:10 | (unsigned int)... | 1.0 | -| test.c:469:9:469:15 | ... * ... | 1.0 | -| test.c:469:14:469:15 | ip | 1.0 | -| test.c:470:9:470:20 | (...) | 1.0 | -| test.c:470:9:470:25 | ... * ... | 1.0 | -| test.c:470:9:470:49 | ... + ... | 1.0 | -| test.c:470:10:470:10 | 2 | 1.0 | -| test.c:470:10:470:10 | (unsigned int)... | 1.0 | -| test.c:470:10:470:15 | ... * ... | 1.0 | -| test.c:470:10:470:19 | ... + ... | 1.0 | -| test.c:470:14:470:15 | ip | 1.0 | -| test.c:470:19:470:19 | 1 | 1.0 | -| test.c:470:19:470:19 | (unsigned int)... | 1.0 | -| test.c:470:24:470:25 | 14 | 1.0 | -| test.c:470:24:470:25 | (unsigned int)... | 1.0 | -| test.c:470:29:470:44 | (...) | 1.0 | -| test.c:470:29:470:49 | ... * ... | 1.0 | -| test.c:470:30:470:30 | 2 | 1.0 | -| test.c:470:30:470:30 | (unsigned int)... | 1.0 | -| test.c:470:30:470:35 | ... * ... | 1.0 | -| test.c:470:30:470:39 | ... + ... | 1.0 | -| test.c:470:30:470:43 | ... + ... | 1.0 | -| test.c:470:34:470:35 | ip | 1.0 | -| test.c:470:39:470:39 | 1 | 1.0 | -| test.c:470:39:470:39 | (unsigned int)... | 1.0 | -| test.c:470:43:470:43 | 1 | 1.0 | -| test.c:470:43:470:43 | (unsigned int)... | 1.0 | -| test.c:470:48:470:49 | 17 | 1.0 | -| test.c:470:48:470:49 | (unsigned int)... | 1.0 | -| test.c:471:5:553:26 | (...) | 9.29462083211502E84 | -| test.c:471:6:471:6 | 2 | 1.0 | -| test.c:471:6:471:6 | (unsigned int)... | 1.0 | -| test.c:471:6:471:23 | ... * ... | 2.0 | -| test.c:471:6:490:42 | ... + ... | 4.524508125E10 | -| test.c:471:6:510:24 | ... > ... | 1.0 | -| test.c:471:6:553:25 | ... ? ... : ... | 9.29462083211502E84 | -| test.c:471:10:471:23 | (...) | 2.0 | -| test.c:471:11:471:12 | ip | 2.0 | -| test.c:471:11:471:17 | ... * ... | 2.0 | -| test.c:471:11:471:22 | ... + ... | 2.0 | -| test.c:471:16:471:17 | 14 | 1.0 | -| test.c:471:16:471:17 | (unsigned int)... | 1.0 | -| test.c:471:21:471:22 | 32 | 1.0 | -| test.c:471:21:471:22 | (unsigned int)... | 1.0 | -| test.c:472:7:490:42 | (...) | 2.2622540625E10 | -| test.c:472:8:472:8 | 4 | 1.0 | -| test.c:472:8:472:8 | (unsigned int)... | 1.0 | -| test.c:472:8:472:25 | ... * ... | 2.0 | -| test.c:472:8:473:26 | ... + ... | 4.0 | -| test.c:472:8:474:26 | ... + ... | 8.0 | -| test.c:472:8:479:22 | ... + ... | 1000.0 | -| test.c:472:8:480:37 | ... > ... | 1.0 | -| test.c:472:8:490:41 | ... ? ... : ... | 2.2622540625E10 | -| test.c:472:12:472:25 | (...) | 2.0 | -| test.c:472:13:472:14 | ip | 2.0 | -| test.c:472:13:472:19 | ... * ... | 2.0 | -| test.c:472:13:472:24 | ... + ... | 2.0 | -| test.c:472:18:472:19 | 14 | 1.0 | -| test.c:472:18:472:19 | (unsigned int)... | 1.0 | -| test.c:472:23:472:24 | 32 | 1.0 | -| test.c:472:23:472:24 | (unsigned int)... | 1.0 | -| test.c:473:9:473:26 | (...) | 2.0 | -| test.c:473:10:473:10 | 2 | 1.0 | -| test.c:473:10:473:10 | (unsigned int)... | 1.0 | -| test.c:473:10:473:15 | ... * ... | 2.0 | -| test.c:473:10:473:20 | ... * ... | 2.0 | -| test.c:473:10:473:25 | ... + ... | 2.0 | -| test.c:473:14:473:15 | ip | 2.0 | -| test.c:473:19:473:20 | 14 | 1.0 | -| test.c:473:19:473:20 | (unsigned int)... | 1.0 | -| test.c:473:24:473:25 | 32 | 1.0 | -| test.c:473:24:473:25 | (unsigned int)... | 1.0 | -| test.c:474:9:474:9 | 2 | 1.0 | -| test.c:474:9:474:9 | (unsigned int)... | 1.0 | -| test.c:474:9:474:26 | ... * ... | 2.0 | -| test.c:474:13:474:26 | (...) | 2.0 | -| test.c:474:14:474:15 | ip | 2.0 | -| test.c:474:14:474:20 | ... * ... | 2.0 | -| test.c:474:14:474:25 | ... + ... | 2.0 | -| test.c:474:19:474:20 | 14 | 1.0 | -| test.c:474:19:474:20 | (unsigned int)... | 1.0 | -| test.c:474:24:474:25 | 64 | 1.0 | -| test.c:474:24:474:25 | (unsigned int)... | 1.0 | -| test.c:475:9:479:22 | (...) | 125.0 | -| test.c:475:10:475:21 | (...) | 2.0 | -| test.c:475:10:475:26 | ... * ... | 2.0 | -| test.c:475:10:475:80 | ... > ... | 1.0 | -| test.c:475:10:479:21 | ... ? ... : ... | 125.0 | -| test.c:475:11:475:11 | 2 | 1.0 | -| test.c:475:11:475:11 | (unsigned int)... | 1.0 | -| test.c:475:11:475:16 | ... * ... | 2.0 | -| test.c:475:11:475:20 | ... + ... | 2.0 | -| test.c:475:15:475:16 | ip | 2.0 | -| test.c:475:20:475:20 | 1 | 1.0 | -| test.c:475:20:475:20 | (unsigned int)... | 1.0 | -| test.c:475:25:475:26 | 14 | 1.0 | -| test.c:475:25:475:26 | (unsigned int)... | 1.0 | -| test.c:475:30:475:80 | (...) | 4.0 | -| test.c:475:31:475:32 | 17 | 1.0 | -| test.c:475:31:475:32 | (unsigned int)... | 1.0 | -| test.c:475:31:475:43 | ... * ... | 2.0 | -| test.c:475:31:475:53 | ... > ... | 1.0 | -| test.c:475:31:475:79 | ... ? ... : ... | 4.0 | -| test.c:475:36:475:43 | (...) | 2.0 | -| test.c:475:37:475:37 | 2 | 1.0 | -| test.c:475:37:475:37 | (unsigned int)... | 1.0 | -| test.c:475:37:475:42 | ... * ... | 2.0 | -| test.c:475:41:475:42 | ip | 2.0 | -| test.c:475:47:475:48 | 17 | 1.0 | -| test.c:475:47:475:48 | (unsigned int)... | 1.0 | -| test.c:475:47:475:53 | ... * ... | 2.0 | -| test.c:475:52:475:53 | ip | 2.0 | -| test.c:475:57:475:58 | 17 | 1.0 | -| test.c:475:57:475:58 | (unsigned int)... | 1.0 | -| test.c:475:57:475:69 | ... * ... | 2.0 | -| test.c:475:62:475:69 | (...) | 2.0 | -| test.c:475:63:475:63 | 2 | 1.0 | -| test.c:475:63:475:63 | (unsigned int)... | 1.0 | -| test.c:475:63:475:68 | ... * ... | 2.0 | -| test.c:475:67:475:68 | ip | 2.0 | -| test.c:475:73:475:74 | 17 | 1.0 | -| test.c:475:73:475:74 | (unsigned int)... | 1.0 | -| test.c:475:73:475:79 | ... * ... | 2.0 | -| test.c:475:78:475:79 | ip | 2.0 | -| test.c:476:13:476:24 | (...) | 5.0 | -| test.c:476:13:476:29 | ... * ... | 5.0 | -| test.c:476:14:476:14 | 2 | 1.0 | -| test.c:476:14:476:14 | (unsigned int)... | 1.0 | -| test.c:476:14:476:19 | ... * ... | 5.0 | -| test.c:476:14:476:23 | ... + ... | 5.0 | -| test.c:476:18:476:19 | ip | 5.0 | -| test.c:476:23:476:23 | 1 | 1.0 | -| test.c:476:23:476:23 | (unsigned int)... | 1.0 | -| test.c:476:28:476:29 | 14 | 1.0 | -| test.c:476:28:476:29 | (unsigned int)... | 1.0 | -| test.c:477:13:477:14 | 14 | 1.0 | -| test.c:477:13:477:14 | (unsigned int)... | 1.0 | -| test.c:477:13:477:25 | ... * ... | 5.0 | -| test.c:477:13:477:35 | ... > ... | 1.0 | -| test.c:477:13:479:21 | ... ? ... : ... | 25.0 | -| test.c:477:18:477:25 | (...) | 5.0 | -| test.c:477:19:477:19 | 2 | 1.0 | -| test.c:477:19:477:19 | (unsigned int)... | 1.0 | -| test.c:477:19:477:24 | ... * ... | 5.0 | -| test.c:477:23:477:24 | ip | 5.0 | -| test.c:477:29:477:30 | 17 | 1.0 | -| test.c:477:29:477:30 | (unsigned int)... | 1.0 | -| test.c:477:29:477:35 | ... * ... | 5.0 | -| test.c:477:34:477:35 | ip | 5.0 | -| test.c:478:15:478:16 | 14 | 1.0 | -| test.c:478:15:478:16 | (unsigned int)... | 1.0 | -| test.c:478:15:478:27 | ... * ... | 5.0 | -| test.c:478:20:478:27 | (...) | 5.0 | -| test.c:478:21:478:21 | 2 | 1.0 | -| test.c:478:21:478:21 | (unsigned int)... | 1.0 | -| test.c:478:21:478:26 | ... * ... | 5.0 | -| test.c:478:25:478:26 | ip | 5.0 | -| test.c:479:15:479:16 | 14 | 1.0 | -| test.c:479:15:479:16 | (unsigned int)... | 1.0 | -| test.c:479:15:479:21 | ... * ... | 5.0 | -| test.c:479:20:479:21 | ip | 5.0 | -| test.c:480:7:480:7 | 2 | 1.0 | -| test.c:480:7:480:7 | (unsigned int)... | 1.0 | -| test.c:480:7:480:12 | ... * ... | 15.0 | -| test.c:480:7:480:17 | ... * ... | 15.0 | -| test.c:480:7:480:37 | ... + ... | 225.0 | -| test.c:480:11:480:12 | ip | 15.0 | -| test.c:480:16:480:17 | 14 | 1.0 | -| test.c:480:16:480:17 | (unsigned int)... | 1.0 | -| test.c:480:21:480:32 | (...) | 15.0 | -| test.c:480:21:480:37 | ... * ... | 15.0 | -| test.c:480:22:480:22 | 2 | 1.0 | -| test.c:480:22:480:22 | (unsigned int)... | 1.0 | -| test.c:480:22:480:27 | ... * ... | 15.0 | -| test.c:480:22:480:31 | ... + ... | 15.0 | -| test.c:480:26:480:27 | ip | 15.0 | -| test.c:480:31:480:31 | 1 | 1.0 | -| test.c:480:31:480:31 | (unsigned int)... | 1.0 | -| test.c:480:36:480:37 | 17 | 1.0 | -| test.c:480:36:480:37 | (unsigned int)... | 1.0 | -| test.c:481:11:481:11 | 4 | 1.0 | -| test.c:481:11:481:11 | (unsigned int)... | 1.0 | -| test.c:481:11:481:28 | ... * ... | 15.0 | -| test.c:481:11:482:28 | ... + ... | 225.0 | -| test.c:481:11:483:28 | ... + ... | 3375.0 | -| test.c:481:11:489:24 | ... + ... | 1.00544625E8 | -| test.c:481:15:481:28 | (...) | 15.0 | -| test.c:481:16:481:17 | ip | 15.0 | -| test.c:481:16:481:22 | ... * ... | 15.0 | -| test.c:481:16:481:27 | ... + ... | 15.0 | -| test.c:481:21:481:22 | 14 | 1.0 | -| test.c:481:21:481:22 | (unsigned int)... | 1.0 | -| test.c:481:26:481:27 | 32 | 1.0 | -| test.c:481:26:481:27 | (unsigned int)... | 1.0 | -| test.c:482:11:482:28 | (...) | 15.0 | -| test.c:482:12:482:12 | 2 | 1.0 | -| test.c:482:12:482:12 | (unsigned int)... | 1.0 | -| test.c:482:12:482:17 | ... * ... | 15.0 | -| test.c:482:12:482:22 | ... * ... | 15.0 | -| test.c:482:12:482:27 | ... + ... | 15.0 | -| test.c:482:16:482:17 | ip | 15.0 | -| test.c:482:21:482:22 | 14 | 1.0 | -| test.c:482:21:482:22 | (unsigned int)... | 1.0 | -| test.c:482:26:482:27 | 32 | 1.0 | -| test.c:482:26:482:27 | (unsigned int)... | 1.0 | -| test.c:483:11:483:11 | 2 | 1.0 | -| test.c:483:11:483:11 | (unsigned int)... | 1.0 | -| test.c:483:11:483:28 | ... * ... | 15.0 | -| test.c:483:15:483:28 | (...) | 15.0 | -| test.c:483:16:483:17 | ip | 15.0 | -| test.c:483:16:483:22 | ... * ... | 15.0 | -| test.c:483:16:483:27 | ... + ... | 15.0 | -| test.c:483:21:483:22 | 14 | 1.0 | -| test.c:483:21:483:22 | (unsigned int)... | 1.0 | -| test.c:483:26:483:27 | 64 | 1.0 | -| test.c:483:26:483:27 | (unsigned int)... | 1.0 | -| test.c:484:11:489:24 | (...) | 29791.0 | -| test.c:484:12:484:23 | (...) | 15.0 | -| test.c:484:12:484:28 | ... * ... | 15.0 | -| test.c:484:12:485:61 | ... > ... | 1.0 | -| test.c:484:12:489:23 | ... ? ... : ... | 29791.0 | -| test.c:484:13:484:13 | 2 | 1.0 | -| test.c:484:13:484:13 | (unsigned int)... | 1.0 | -| test.c:484:13:484:18 | ... * ... | 15.0 | -| test.c:484:13:484:22 | ... + ... | 15.0 | -| test.c:484:17:484:18 | ip | 15.0 | -| test.c:484:22:484:22 | 1 | 1.0 | -| test.c:484:22:484:22 | (unsigned int)... | 1.0 | -| test.c:484:27:484:28 | 14 | 1.0 | -| test.c:484:27:484:28 | (unsigned int)... | 1.0 | -| test.c:485:11:485:61 | (...) | 225.0 | -| test.c:485:12:485:13 | 14 | 1.0 | -| test.c:485:12:485:13 | (unsigned int)... | 1.0 | -| test.c:485:12:485:24 | ... * ... | 15.0 | -| test.c:485:12:485:34 | ... > ... | 1.0 | -| test.c:485:12:485:60 | ... ? ... : ... | 225.0 | -| test.c:485:17:485:24 | (...) | 15.0 | -| test.c:485:18:485:18 | 2 | 1.0 | -| test.c:485:18:485:18 | (unsigned int)... | 1.0 | -| test.c:485:18:485:23 | ... * ... | 15.0 | -| test.c:485:22:485:23 | ip | 15.0 | -| test.c:485:28:485:29 | 17 | 1.0 | -| test.c:485:28:485:29 | (unsigned int)... | 1.0 | -| test.c:485:28:485:34 | ... * ... | 15.0 | -| test.c:485:33:485:34 | ip | 15.0 | -| test.c:485:38:485:39 | 17 | 1.0 | -| test.c:485:38:485:39 | (unsigned int)... | 1.0 | -| test.c:485:38:485:50 | ... * ... | 15.0 | -| test.c:485:43:485:50 | (...) | 15.0 | -| test.c:485:44:485:44 | 2 | 1.0 | -| test.c:485:44:485:44 | (unsigned int)... | 1.0 | -| test.c:485:44:485:49 | ... * ... | 15.0 | -| test.c:485:48:485:49 | ip | 15.0 | +| test.c:452:7:452:9 | rhs | 1.0 | +| test.c:452:7:452:14 | ... < ... | 1.0 | +| test.c:452:13:452:14 | 10 | 1.0 | +| test.c:452:13:452:14 | (unsigned int)... | 1.0 | +| test.c:452:19:452:21 | rhs | 1.0 | +| test.c:452:19:452:26 | ... << ... | 1.0 | +| test.c:452:26:452:26 | 1 | 1.0 | +| test.c:452:38:452:40 | rhs | 1.0 | +| test.c:452:38:452:45 | ... << ... | 1.0 | +| test.c:452:45:452:45 | 2 | 1.0 | +| test.c:453:7:453:9 | rhs | 2.0 | +| test.c:453:7:453:14 | ... < ... | 1.0 | +| test.c:453:13:453:14 | 11 | 1.0 | +| test.c:453:13:453:14 | (unsigned int)... | 1.0 | +| test.c:453:19:453:21 | rhs | 2.0 | +| test.c:453:19:453:26 | ... << ... | 1.0 | +| test.c:453:26:453:26 | 1 | 1.0 | +| test.c:453:38:453:40 | rhs | 2.0 | +| test.c:453:38:453:45 | ... << ... | 1.0 | +| test.c:453:45:453:45 | 2 | 1.0 | +| test.c:454:7:454:9 | rhs | 4.0 | +| test.c:454:7:454:14 | ... < ... | 1.0 | +| test.c:454:13:454:14 | 12 | 1.0 | +| test.c:454:13:454:14 | (unsigned int)... | 1.0 | +| test.c:454:19:454:21 | rhs | 4.0 | +| test.c:454:19:454:26 | ... << ... | 1.0 | +| test.c:454:26:454:26 | 1 | 1.0 | +| test.c:454:38:454:40 | rhs | 4.0 | +| test.c:454:38:454:45 | ... << ... | 1.0 | +| test.c:454:45:454:45 | 2 | 1.0 | +| test.c:455:7:455:9 | rhs | 8.0 | +| test.c:455:7:455:14 | ... < ... | 1.0 | +| test.c:455:13:455:14 | 13 | 1.0 | +| test.c:455:13:455:14 | (unsigned int)... | 1.0 | +| test.c:455:19:455:21 | rhs | 8.0 | +| test.c:455:19:455:26 | ... << ... | 1.0 | +| test.c:455:26:455:26 | 1 | 1.0 | +| test.c:455:38:455:40 | rhs | 8.0 | +| test.c:455:38:455:45 | ... << ... | 1.0 | +| test.c:455:45:455:45 | 2 | 1.0 | +| test.c:456:7:456:9 | rhs | 16.0 | +| test.c:456:7:456:14 | ... < ... | 1.0 | +| test.c:456:13:456:14 | 14 | 1.0 | +| test.c:456:13:456:14 | (unsigned int)... | 1.0 | +| test.c:456:19:456:21 | rhs | 16.0 | +| test.c:456:19:456:26 | ... << ... | 1.0 | +| test.c:456:26:456:26 | 1 | 1.0 | +| test.c:456:38:456:40 | rhs | 16.0 | +| test.c:456:38:456:45 | ... << ... | 1.0 | +| test.c:456:45:456:45 | 2 | 1.0 | +| test.c:457:7:457:9 | rhs | 32.0 | +| test.c:457:7:457:14 | ... < ... | 1.0 | +| test.c:457:13:457:14 | 15 | 1.0 | +| test.c:457:13:457:14 | (unsigned int)... | 1.0 | +| test.c:457:19:457:21 | rhs | 32.0 | +| test.c:457:19:457:26 | ... << ... | 1.0 | +| test.c:457:26:457:26 | 1 | 1.0 | +| test.c:457:38:457:40 | rhs | 32.0 | +| test.c:457:38:457:45 | ... << ... | 1.0 | +| test.c:457:45:457:45 | 2 | 1.0 | +| test.c:458:7:458:9 | rhs | 64.0 | +| test.c:458:7:458:14 | ... < ... | 1.0 | +| test.c:458:13:458:14 | 16 | 1.0 | +| test.c:458:13:458:14 | (unsigned int)... | 1.0 | +| test.c:458:19:458:21 | rhs | 64.0 | +| test.c:458:19:458:26 | ... << ... | 1.0 | +| test.c:458:26:458:26 | 1 | 1.0 | +| test.c:458:38:458:40 | rhs | 64.0 | +| test.c:458:38:458:45 | ... << ... | 1.0 | +| test.c:458:45:458:45 | 2 | 1.0 | +| test.c:459:7:459:9 | rhs | 128.0 | +| test.c:459:7:459:14 | ... < ... | 1.0 | +| test.c:459:13:459:14 | 17 | 1.0 | +| test.c:459:13:459:14 | (unsigned int)... | 1.0 | +| test.c:459:19:459:21 | rhs | 128.0 | +| test.c:459:19:459:26 | ... << ... | 1.0 | +| test.c:459:26:459:26 | 1 | 1.0 | +| test.c:459:38:459:40 | rhs | 128.0 | +| test.c:459:38:459:45 | ... << ... | 1.0 | +| test.c:459:45:459:45 | 2 | 1.0 | +| test.c:460:7:460:9 | rhs | 256.0 | +| test.c:460:7:460:14 | ... < ... | 1.0 | +| test.c:460:13:460:14 | 18 | 1.0 | +| test.c:460:13:460:14 | (unsigned int)... | 1.0 | +| test.c:460:19:460:21 | rhs | 256.0 | +| test.c:460:19:460:26 | ... << ... | 1.0 | +| test.c:460:26:460:26 | 1 | 1.0 | +| test.c:460:38:460:40 | rhs | 256.0 | +| test.c:460:38:460:45 | ... << ... | 1.0 | +| test.c:460:45:460:45 | 2 | 1.0 | +| test.c:461:7:461:9 | rhs | 512.0 | +| test.c:461:7:461:14 | ... < ... | 1.0 | +| test.c:461:13:461:14 | 19 | 1.0 | +| test.c:461:13:461:14 | (unsigned int)... | 1.0 | +| test.c:461:19:461:21 | rhs | 512.0 | +| test.c:461:19:461:26 | ... << ... | 1.0 | +| test.c:461:26:461:26 | 1 | 1.0 | +| test.c:461:38:461:40 | rhs | 512.0 | +| test.c:461:38:461:45 | ... << ... | 1.0 | +| test.c:461:45:461:45 | 2 | 1.0 | +| test.c:462:7:462:9 | rhs | 1024.0 | +| test.c:462:7:462:14 | ... < ... | 1.0 | +| test.c:462:13:462:14 | 20 | 1.0 | +| test.c:462:13:462:14 | (unsigned int)... | 1.0 | +| test.c:462:19:462:21 | rhs | 1024.0 | +| test.c:462:19:462:26 | ... << ... | 1.0 | +| test.c:462:26:462:26 | 1 | 1.0 | +| test.c:462:38:462:40 | rhs | 1024.0 | +| test.c:462:38:462:45 | ... << ... | 1.0 | +| test.c:462:45:462:45 | 2 | 1.0 | +| test.c:463:10:463:12 | (int)... | 2048.0 | +| test.c:463:10:463:12 | rhs | 2048.0 | +| test.c:467:7:467:7 | a | 1.0 | +| test.c:467:7:467:13 | ... == ... | 1.0 | +| test.c:467:12:467:13 | 17 | 1.0 | +| test.c:468:9:468:9 | b | 1.0 | +| test.c:468:9:468:15 | ... == ... | 1.0 | +| test.c:468:14:468:15 | 23 | 1.0 | +| test.c:469:7:469:7 | a | 1.0 | +| test.c:469:7:469:12 | ... += ... | 1.0 | +| test.c:469:12:469:12 | b | 1.0 | +| test.c:471:9:471:9 | a | 2.0 | +| test.c:471:9:471:15 | ... == ... | 1.0 | +| test.c:471:14:471:15 | 18 | 1.0 | +| test.c:472:7:472:7 | b | 1.0 | +| test.c:472:7:472:12 | ... = ... | 1.0 | +| test.c:472:11:472:12 | 10 | 1.0 | +| test.c:477:11:477:11 | a | 4.0 | +| test.c:477:11:477:15 | ... + ... | 16.0 | +| test.c:477:15:477:15 | b | 4.0 | +| test.c:478:10:478:10 | a | 4.0 | +| test.c:478:10:478:14 | ... + ... | 16.0 | +| test.c:478:14:478:14 | b | 4.0 | +| test.c:485:4:487:50 | (...) | 1.0 | +| test.c:485:4:570:26 | ... > ... | 1.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 1.297918419127476E201 | +| test.c:485:5:485:6 | 14 | 1.0 | +| test.c:485:5:485:6 | (unsigned int)... | 1.0 | +| test.c:485:5:485:11 | ... * ... | 1.0 | +| test.c:485:5:485:55 | ... > ... | 1.0 | +| test.c:485:5:487:49 | ... ? ... : ... | 1.0 | +| test.c:485:10:485:11 | ip | 1.0 | +| test.c:485:15:485:26 | (...) | 1.0 | +| test.c:485:15:485:31 | ... * ... | 1.0 | +| test.c:485:15:485:55 | ... + ... | 1.0 | +| test.c:485:16:485:16 | 2 | 1.0 | +| test.c:485:16:485:16 | (unsigned int)... | 1.0 | +| test.c:485:16:485:21 | ... * ... | 1.0 | +| test.c:485:16:485:25 | ... + ... | 1.0 | +| test.c:485:20:485:21 | ip | 1.0 | +| test.c:485:25:485:25 | 1 | 1.0 | +| test.c:485:25:485:25 | (unsigned int)... | 1.0 | +| test.c:485:30:485:31 | 17 | 1.0 | +| test.c:485:30:485:31 | (unsigned int)... | 1.0 | +| test.c:485:35:485:50 | (...) | 1.0 | +| test.c:485:35:485:55 | ... * ... | 1.0 | +| test.c:485:36:485:36 | 2 | 1.0 | +| test.c:485:36:485:36 | (unsigned int)... | 1.0 | +| test.c:485:36:485:41 | ... * ... | 1.0 | +| test.c:485:36:485:45 | ... + ... | 1.0 | +| test.c:485:36:485:49 | ... + ... | 1.0 | +| test.c:485:40:485:41 | ip | 1.0 | +| test.c:485:45:485:45 | 1 | 1.0 | +| test.c:485:45:485:45 | (unsigned int)... | 1.0 | +| test.c:485:49:485:49 | 1 | 1.0 | +| test.c:485:49:485:49 | (unsigned int)... | 1.0 | | test.c:485:54:485:55 | 17 | 1.0 | | test.c:485:54:485:55 | (unsigned int)... | 1.0 | -| test.c:485:54:485:60 | ... * ... | 15.0 | -| test.c:485:59:485:60 | ip | 15.0 | -| test.c:486:15:486:26 | (...) | 31.0 | -| test.c:486:15:486:31 | ... * ... | 31.0 | -| test.c:486:16:486:16 | 2 | 1.0 | -| test.c:486:16:486:16 | (unsigned int)... | 1.0 | -| test.c:486:16:486:21 | ... * ... | 31.0 | -| test.c:486:16:486:25 | ... + ... | 31.0 | -| test.c:486:20:486:21 | ip | 31.0 | -| test.c:486:25:486:25 | 1 | 1.0 | -| test.c:486:25:486:25 | (unsigned int)... | 1.0 | -| test.c:486:30:486:31 | 14 | 1.0 | -| test.c:486:30:486:31 | (unsigned int)... | 1.0 | -| test.c:487:15:487:16 | 14 | 1.0 | -| test.c:487:15:487:16 | (unsigned int)... | 1.0 | -| test.c:487:15:487:27 | ... * ... | 31.0 | -| test.c:487:15:487:37 | ... > ... | 1.0 | -| test.c:487:15:489:23 | ... ? ... : ... | 961.0 | -| test.c:487:20:487:27 | (...) | 31.0 | -| test.c:487:21:487:21 | 2 | 1.0 | -| test.c:487:21:487:21 | (unsigned int)... | 1.0 | -| test.c:487:21:487:26 | ... * ... | 31.0 | -| test.c:487:25:487:26 | ip | 31.0 | -| test.c:487:31:487:32 | 17 | 1.0 | -| test.c:487:31:487:32 | (unsigned int)... | 1.0 | -| test.c:487:31:487:37 | ... * ... | 31.0 | -| test.c:487:36:487:37 | ip | 31.0 | -| test.c:488:17:488:18 | 14 | 1.0 | -| test.c:488:17:488:18 | (unsigned int)... | 1.0 | -| test.c:488:17:488:29 | ... * ... | 31.0 | -| test.c:488:22:488:29 | (...) | 31.0 | -| test.c:488:23:488:23 | 2 | 1.0 | -| test.c:488:23:488:23 | (unsigned int)... | 1.0 | -| test.c:488:23:488:28 | ... * ... | 31.0 | -| test.c:488:27:488:28 | ip | 31.0 | -| test.c:489:17:489:18 | 14 | 1.0 | -| test.c:489:17:489:18 | (unsigned int)... | 1.0 | -| test.c:489:17:489:23 | ... * ... | 31.0 | -| test.c:489:22:489:23 | ip | 31.0 | -| test.c:490:11:490:11 | 2 | 1.0 | -| test.c:490:11:490:11 | (unsigned int)... | 1.0 | -| test.c:490:11:490:16 | ... * ... | 15.0 | -| test.c:490:11:490:21 | ... * ... | 15.0 | -| test.c:490:11:490:41 | ... + ... | 225.0 | -| test.c:490:15:490:16 | ip | 15.0 | -| test.c:490:20:490:21 | 14 | 1.0 | -| test.c:490:20:490:21 | (unsigned int)... | 1.0 | -| test.c:490:25:490:36 | (...) | 15.0 | -| test.c:490:25:490:41 | ... * ... | 15.0 | -| test.c:490:26:490:26 | 2 | 1.0 | -| test.c:490:26:490:26 | (unsigned int)... | 1.0 | -| test.c:490:26:490:31 | ... * ... | 15.0 | -| test.c:490:26:490:35 | ... + ... | 15.0 | -| test.c:490:30:490:31 | ip | 15.0 | -| test.c:490:35:490:35 | 1 | 1.0 | -| test.c:490:35:490:35 | (unsigned int)... | 1.0 | -| test.c:490:40:490:41 | 17 | 1.0 | -| test.c:490:40:490:41 | (unsigned int)... | 1.0 | -| test.c:491:5:510:24 | (...) | 6.6142118960740864E25 | -| test.c:491:6:491:6 | 4 | 1.0 | -| test.c:491:6:491:6 | (unsigned int)... | 1.0 | -| test.c:491:6:491:23 | ... * ... | 108.0 | -| test.c:491:6:492:24 | ... + ... | 11664.0 | -| test.c:491:6:493:24 | ... + ... | 1259712.0 | -| test.c:491:6:498:20 | ... + ... | 1.2872131505856E13 | -| test.c:491:6:499:55 | ... > ... | 1.0 | -| test.c:491:6:510:23 | ... ? ... : ... | 6.6142118960740864E25 | -| test.c:491:10:491:23 | (...) | 108.0 | -| test.c:491:11:491:12 | ip | 108.0 | -| test.c:491:11:491:17 | ... * ... | 108.0 | -| test.c:491:11:491:22 | ... + ... | 108.0 | -| test.c:491:16:491:17 | 14 | 1.0 | -| test.c:491:16:491:17 | (unsigned int)... | 1.0 | -| test.c:491:21:491:22 | 32 | 1.0 | -| test.c:491:21:491:22 | (unsigned int)... | 1.0 | -| test.c:492:7:492:24 | (...) | 108.0 | -| test.c:492:8:492:8 | 2 | 1.0 | -| test.c:492:8:492:8 | (unsigned int)... | 1.0 | -| test.c:492:8:492:13 | ... * ... | 108.0 | -| test.c:492:8:492:18 | ... * ... | 108.0 | -| test.c:492:8:492:23 | ... + ... | 108.0 | -| test.c:492:12:492:13 | ip | 108.0 | -| test.c:492:17:492:18 | 14 | 1.0 | -| test.c:492:17:492:18 | (unsigned int)... | 1.0 | -| test.c:492:22:492:23 | 32 | 1.0 | -| test.c:492:22:492:23 | (unsigned int)... | 1.0 | -| test.c:493:7:493:7 | 2 | 1.0 | -| test.c:493:7:493:7 | (unsigned int)... | 1.0 | -| test.c:493:7:493:24 | ... * ... | 108.0 | -| test.c:493:11:493:24 | (...) | 108.0 | -| test.c:493:12:493:13 | ip | 108.0 | -| test.c:493:12:493:18 | ... * ... | 108.0 | -| test.c:493:12:493:23 | ... + ... | 108.0 | -| test.c:493:17:493:18 | 14 | 1.0 | -| test.c:493:17:493:18 | (unsigned int)... | 1.0 | -| test.c:493:22:493:23 | 64 | 1.0 | -| test.c:493:22:493:23 | (unsigned int)... | 1.0 | -| test.c:494:7:498:20 | (...) | 1.0218313E7 | -| test.c:494:8:494:19 | (...) | 108.0 | -| test.c:494:8:494:24 | ... * ... | 108.0 | -| test.c:494:8:494:78 | ... > ... | 1.0 | -| test.c:494:8:498:19 | ... ? ... : ... | 1.0218313E7 | -| test.c:494:9:494:9 | 2 | 1.0 | -| test.c:494:9:494:9 | (unsigned int)... | 1.0 | -| test.c:494:9:494:14 | ... * ... | 108.0 | -| test.c:494:9:494:18 | ... + ... | 108.0 | -| test.c:494:13:494:14 | ip | 108.0 | -| test.c:494:18:494:18 | 1 | 1.0 | -| test.c:494:18:494:18 | (unsigned int)... | 1.0 | -| test.c:494:23:494:24 | 14 | 1.0 | -| test.c:494:23:494:24 | (unsigned int)... | 1.0 | -| test.c:494:28:494:78 | (...) | 11664.0 | +| test.c:486:9:486:10 | 14 | 1.0 | +| test.c:486:9:486:10 | (unsigned int)... | 1.0 | +| test.c:486:9:486:15 | ... * ... | 1.0 | +| test.c:486:14:486:15 | ip | 1.0 | +| test.c:487:9:487:20 | (...) | 1.0 | +| test.c:487:9:487:25 | ... * ... | 1.0 | +| test.c:487:9:487:49 | ... + ... | 1.0 | +| test.c:487:10:487:10 | 2 | 1.0 | +| test.c:487:10:487:10 | (unsigned int)... | 1.0 | +| test.c:487:10:487:15 | ... * ... | 1.0 | +| test.c:487:10:487:19 | ... + ... | 1.0 | +| test.c:487:14:487:15 | ip | 1.0 | +| test.c:487:19:487:19 | 1 | 1.0 | +| test.c:487:19:487:19 | (unsigned int)... | 1.0 | +| test.c:487:24:487:25 | 14 | 1.0 | +| test.c:487:24:487:25 | (unsigned int)... | 1.0 | +| test.c:487:29:487:44 | (...) | 1.0 | +| test.c:487:29:487:49 | ... * ... | 1.0 | +| test.c:487:30:487:30 | 2 | 1.0 | +| test.c:487:30:487:30 | (unsigned int)... | 1.0 | +| test.c:487:30:487:35 | ... * ... | 1.0 | +| test.c:487:30:487:39 | ... + ... | 1.0 | +| test.c:487:30:487:43 | ... + ... | 1.0 | +| test.c:487:34:487:35 | ip | 1.0 | +| test.c:487:39:487:39 | 1 | 1.0 | +| test.c:487:39:487:39 | (unsigned int)... | 1.0 | +| test.c:487:43:487:43 | 1 | 1.0 | +| test.c:487:43:487:43 | (unsigned int)... | 1.0 | +| test.c:487:48:487:49 | 17 | 1.0 | +| test.c:487:48:487:49 | (unsigned int)... | 1.0 | +| test.c:488:5:570:26 | (...) | 9.29462083211502E84 | +| test.c:488:6:488:6 | 2 | 1.0 | +| test.c:488:6:488:6 | (unsigned int)... | 1.0 | +| test.c:488:6:488:23 | ... * ... | 2.0 | +| test.c:488:6:507:42 | ... + ... | 4.524508125E10 | +| test.c:488:6:527:24 | ... > ... | 1.0 | +| test.c:488:6:570:25 | ... ? ... : ... | 9.29462083211502E84 | +| test.c:488:10:488:23 | (...) | 2.0 | +| test.c:488:11:488:12 | ip | 2.0 | +| test.c:488:11:488:17 | ... * ... | 2.0 | +| test.c:488:11:488:22 | ... + ... | 2.0 | +| test.c:488:16:488:17 | 14 | 1.0 | +| test.c:488:16:488:17 | (unsigned int)... | 1.0 | +| test.c:488:21:488:22 | 32 | 1.0 | +| test.c:488:21:488:22 | (unsigned int)... | 1.0 | +| test.c:489:7:507:42 | (...) | 2.2622540625E10 | +| test.c:489:8:489:8 | 4 | 1.0 | +| test.c:489:8:489:8 | (unsigned int)... | 1.0 | +| test.c:489:8:489:25 | ... * ... | 2.0 | +| test.c:489:8:490:26 | ... + ... | 4.0 | +| test.c:489:8:491:26 | ... + ... | 8.0 | +| test.c:489:8:496:22 | ... + ... | 1000.0 | +| test.c:489:8:497:37 | ... > ... | 1.0 | +| test.c:489:8:507:41 | ... ? ... : ... | 2.2622540625E10 | +| test.c:489:12:489:25 | (...) | 2.0 | +| test.c:489:13:489:14 | ip | 2.0 | +| test.c:489:13:489:19 | ... * ... | 2.0 | +| test.c:489:13:489:24 | ... + ... | 2.0 | +| test.c:489:18:489:19 | 14 | 1.0 | +| test.c:489:18:489:19 | (unsigned int)... | 1.0 | +| test.c:489:23:489:24 | 32 | 1.0 | +| test.c:489:23:489:24 | (unsigned int)... | 1.0 | +| test.c:490:9:490:26 | (...) | 2.0 | +| test.c:490:10:490:10 | 2 | 1.0 | +| test.c:490:10:490:10 | (unsigned int)... | 1.0 | +| test.c:490:10:490:15 | ... * ... | 2.0 | +| test.c:490:10:490:20 | ... * ... | 2.0 | +| test.c:490:10:490:25 | ... + ... | 2.0 | +| test.c:490:14:490:15 | ip | 2.0 | +| test.c:490:19:490:20 | 14 | 1.0 | +| test.c:490:19:490:20 | (unsigned int)... | 1.0 | +| test.c:490:24:490:25 | 32 | 1.0 | +| test.c:490:24:490:25 | (unsigned int)... | 1.0 | +| test.c:491:9:491:9 | 2 | 1.0 | +| test.c:491:9:491:9 | (unsigned int)... | 1.0 | +| test.c:491:9:491:26 | ... * ... | 2.0 | +| test.c:491:13:491:26 | (...) | 2.0 | +| test.c:491:14:491:15 | ip | 2.0 | +| test.c:491:14:491:20 | ... * ... | 2.0 | +| test.c:491:14:491:25 | ... + ... | 2.0 | +| test.c:491:19:491:20 | 14 | 1.0 | +| test.c:491:19:491:20 | (unsigned int)... | 1.0 | +| test.c:491:24:491:25 | 64 | 1.0 | +| test.c:491:24:491:25 | (unsigned int)... | 1.0 | +| test.c:492:9:496:22 | (...) | 125.0 | +| test.c:492:10:492:21 | (...) | 2.0 | +| test.c:492:10:492:26 | ... * ... | 2.0 | +| test.c:492:10:492:80 | ... > ... | 1.0 | +| test.c:492:10:496:21 | ... ? ... : ... | 125.0 | +| test.c:492:11:492:11 | 2 | 1.0 | +| test.c:492:11:492:11 | (unsigned int)... | 1.0 | +| test.c:492:11:492:16 | ... * ... | 2.0 | +| test.c:492:11:492:20 | ... + ... | 2.0 | +| test.c:492:15:492:16 | ip | 2.0 | +| test.c:492:20:492:20 | 1 | 1.0 | +| test.c:492:20:492:20 | (unsigned int)... | 1.0 | +| test.c:492:25:492:26 | 14 | 1.0 | +| test.c:492:25:492:26 | (unsigned int)... | 1.0 | +| test.c:492:30:492:80 | (...) | 4.0 | +| test.c:492:31:492:32 | 17 | 1.0 | +| test.c:492:31:492:32 | (unsigned int)... | 1.0 | +| test.c:492:31:492:43 | ... * ... | 2.0 | +| test.c:492:31:492:53 | ... > ... | 1.0 | +| test.c:492:31:492:79 | ... ? ... : ... | 4.0 | +| test.c:492:36:492:43 | (...) | 2.0 | +| test.c:492:37:492:37 | 2 | 1.0 | +| test.c:492:37:492:37 | (unsigned int)... | 1.0 | +| test.c:492:37:492:42 | ... * ... | 2.0 | +| test.c:492:41:492:42 | ip | 2.0 | +| test.c:492:47:492:48 | 17 | 1.0 | +| test.c:492:47:492:48 | (unsigned int)... | 1.0 | +| test.c:492:47:492:53 | ... * ... | 2.0 | +| test.c:492:52:492:53 | ip | 2.0 | +| test.c:492:57:492:58 | 17 | 1.0 | +| test.c:492:57:492:58 | (unsigned int)... | 1.0 | +| test.c:492:57:492:69 | ... * ... | 2.0 | +| test.c:492:62:492:69 | (...) | 2.0 | +| test.c:492:63:492:63 | 2 | 1.0 | +| test.c:492:63:492:63 | (unsigned int)... | 1.0 | +| test.c:492:63:492:68 | ... * ... | 2.0 | +| test.c:492:67:492:68 | ip | 2.0 | +| test.c:492:73:492:74 | 17 | 1.0 | +| test.c:492:73:492:74 | (unsigned int)... | 1.0 | +| test.c:492:73:492:79 | ... * ... | 2.0 | +| test.c:492:78:492:79 | ip | 2.0 | +| test.c:493:13:493:24 | (...) | 5.0 | +| test.c:493:13:493:29 | ... * ... | 5.0 | +| test.c:493:14:493:14 | 2 | 1.0 | +| test.c:493:14:493:14 | (unsigned int)... | 1.0 | +| test.c:493:14:493:19 | ... * ... | 5.0 | +| test.c:493:14:493:23 | ... + ... | 5.0 | +| test.c:493:18:493:19 | ip | 5.0 | +| test.c:493:23:493:23 | 1 | 1.0 | +| test.c:493:23:493:23 | (unsigned int)... | 1.0 | +| test.c:493:28:493:29 | 14 | 1.0 | +| test.c:493:28:493:29 | (unsigned int)... | 1.0 | +| test.c:494:13:494:14 | 14 | 1.0 | +| test.c:494:13:494:14 | (unsigned int)... | 1.0 | +| test.c:494:13:494:25 | ... * ... | 5.0 | +| test.c:494:13:494:35 | ... > ... | 1.0 | +| test.c:494:13:496:21 | ... ? ... : ... | 25.0 | +| test.c:494:18:494:25 | (...) | 5.0 | +| test.c:494:19:494:19 | 2 | 1.0 | +| test.c:494:19:494:19 | (unsigned int)... | 1.0 | +| test.c:494:19:494:24 | ... * ... | 5.0 | +| test.c:494:23:494:24 | ip | 5.0 | | test.c:494:29:494:30 | 17 | 1.0 | | test.c:494:29:494:30 | (unsigned int)... | 1.0 | -| test.c:494:29:494:41 | ... * ... | 108.0 | -| test.c:494:29:494:51 | ... > ... | 1.0 | -| test.c:494:29:494:77 | ... ? ... : ... | 11664.0 | -| test.c:494:34:494:41 | (...) | 108.0 | -| test.c:494:35:494:35 | 2 | 1.0 | -| test.c:494:35:494:35 | (unsigned int)... | 1.0 | -| test.c:494:35:494:40 | ... * ... | 108.0 | -| test.c:494:39:494:40 | ip | 108.0 | -| test.c:494:45:494:46 | 17 | 1.0 | -| test.c:494:45:494:46 | (unsigned int)... | 1.0 | -| test.c:494:45:494:51 | ... * ... | 108.0 | -| test.c:494:50:494:51 | ip | 108.0 | -| test.c:494:55:494:56 | 17 | 1.0 | -| test.c:494:55:494:56 | (unsigned int)... | 1.0 | -| test.c:494:55:494:67 | ... * ... | 108.0 | -| test.c:494:60:494:67 | (...) | 108.0 | -| test.c:494:61:494:61 | 2 | 1.0 | -| test.c:494:61:494:61 | (unsigned int)... | 1.0 | -| test.c:494:61:494:66 | ... * ... | 108.0 | -| test.c:494:65:494:66 | ip | 108.0 | -| test.c:494:71:494:72 | 17 | 1.0 | -| test.c:494:71:494:72 | (unsigned int)... | 1.0 | -| test.c:494:71:494:77 | ... * ... | 108.0 | -| test.c:494:76:494:77 | ip | 108.0 | -| test.c:495:11:495:22 | (...) | 217.0 | -| test.c:495:11:495:27 | ... * ... | 217.0 | -| test.c:495:12:495:12 | 2 | 1.0 | -| test.c:495:12:495:12 | (unsigned int)... | 1.0 | -| test.c:495:12:495:17 | ... * ... | 217.0 | -| test.c:495:12:495:21 | ... + ... | 217.0 | -| test.c:495:16:495:17 | ip | 217.0 | -| test.c:495:21:495:21 | 1 | 1.0 | +| test.c:494:29:494:35 | ... * ... | 5.0 | +| test.c:494:34:494:35 | ip | 5.0 | +| test.c:495:15:495:16 | 14 | 1.0 | +| test.c:495:15:495:16 | (unsigned int)... | 1.0 | +| test.c:495:15:495:27 | ... * ... | 5.0 | +| test.c:495:20:495:27 | (...) | 5.0 | +| test.c:495:21:495:21 | 2 | 1.0 | | test.c:495:21:495:21 | (unsigned int)... | 1.0 | -| test.c:495:26:495:27 | 14 | 1.0 | -| test.c:495:26:495:27 | (unsigned int)... | 1.0 | -| test.c:496:11:496:12 | 14 | 1.0 | -| test.c:496:11:496:12 | (unsigned int)... | 1.0 | -| test.c:496:11:496:23 | ... * ... | 217.0 | -| test.c:496:11:496:33 | ... > ... | 1.0 | -| test.c:496:11:498:19 | ... ? ... : ... | 47089.0 | -| test.c:496:16:496:23 | (...) | 217.0 | -| test.c:496:17:496:17 | 2 | 1.0 | -| test.c:496:17:496:17 | (unsigned int)... | 1.0 | -| test.c:496:17:496:22 | ... * ... | 217.0 | -| test.c:496:21:496:22 | ip | 217.0 | -| test.c:496:27:496:28 | 17 | 1.0 | -| test.c:496:27:496:28 | (unsigned int)... | 1.0 | -| test.c:496:27:496:33 | ... * ... | 217.0 | -| test.c:496:32:496:33 | ip | 217.0 | -| test.c:497:13:497:14 | 14 | 1.0 | -| test.c:497:13:497:14 | (unsigned int)... | 1.0 | -| test.c:497:13:497:25 | ... * ... | 217.0 | -| test.c:497:18:497:25 | (...) | 217.0 | -| test.c:497:19:497:19 | 2 | 1.0 | -| test.c:497:19:497:19 | (unsigned int)... | 1.0 | -| test.c:497:19:497:24 | ... * ... | 217.0 | -| test.c:497:23:497:24 | ip | 217.0 | -| test.c:498:13:498:14 | 14 | 1.0 | -| test.c:498:13:498:14 | (unsigned int)... | 1.0 | -| test.c:498:13:498:19 | ... * ... | 217.0 | -| test.c:498:18:498:19 | ip | 217.0 | -| test.c:499:5:499:55 | (...) | 423801.0 | -| test.c:499:6:499:7 | 14 | 1.0 | -| test.c:499:6:499:7 | (unsigned int)... | 1.0 | -| test.c:499:6:499:12 | ... * ... | 651.0 | -| test.c:499:6:499:28 | ... > ... | 1.0 | -| test.c:499:6:499:54 | ... ? ... : ... | 423801.0 | -| test.c:499:11:499:12 | ip | 651.0 | -| test.c:499:16:499:23 | (...) | 651.0 | -| test.c:499:16:499:28 | ... * ... | 651.0 | -| test.c:499:17:499:18 | ip | 651.0 | -| test.c:499:17:499:22 | ... + ... | 651.0 | -| test.c:499:22:499:22 | 1 | 1.0 | -| test.c:499:22:499:22 | (unsigned int)... | 1.0 | -| test.c:499:27:499:28 | 17 | 1.0 | -| test.c:499:27:499:28 | (unsigned int)... | 1.0 | -| test.c:499:32:499:33 | 17 | 1.0 | -| test.c:499:32:499:33 | (unsigned int)... | 1.0 | -| test.c:499:32:499:38 | ... * ... | 651.0 | -| test.c:499:37:499:38 | ip | 651.0 | -| test.c:499:42:499:49 | (...) | 651.0 | -| test.c:499:42:499:54 | ... * ... | 651.0 | -| test.c:499:43:499:44 | ip | 651.0 | -| test.c:499:43:499:48 | ... + ... | 651.0 | -| test.c:499:48:499:48 | 1 | 1.0 | -| test.c:499:48:499:48 | (unsigned int)... | 1.0 | -| test.c:499:53:499:54 | 17 | 1.0 | -| test.c:499:53:499:54 | (unsigned int)... | 1.0 | -| test.c:500:9:500:9 | 4 | 1.0 | -| test.c:500:9:500:9 | (unsigned int)... | 1.0 | -| test.c:500:9:500:26 | ... * ... | 1302.0 | -| test.c:500:9:501:26 | ... + ... | 1695204.0 | -| test.c:500:9:502:26 | ... + ... | 2.207155608E9 | -| test.c:500:9:507:22 | ... + ... | 3.9017203216097214E19 | -| test.c:500:13:500:26 | (...) | 1302.0 | -| test.c:500:14:500:15 | ip | 1302.0 | -| test.c:500:14:500:20 | ... * ... | 1302.0 | -| test.c:500:14:500:25 | ... + ... | 1302.0 | -| test.c:500:19:500:20 | 14 | 1.0 | -| test.c:500:19:500:20 | (unsigned int)... | 1.0 | -| test.c:500:24:500:25 | 32 | 1.0 | -| test.c:500:24:500:25 | (unsigned int)... | 1.0 | -| test.c:501:9:501:26 | (...) | 1302.0 | -| test.c:501:10:501:10 | 2 | 1.0 | -| test.c:501:10:501:10 | (unsigned int)... | 1.0 | -| test.c:501:10:501:15 | ... * ... | 1302.0 | -| test.c:501:10:501:20 | ... * ... | 1302.0 | -| test.c:501:10:501:25 | ... + ... | 1302.0 | -| test.c:501:14:501:15 | ip | 1302.0 | -| test.c:501:19:501:20 | 14 | 1.0 | -| test.c:501:19:501:20 | (unsigned int)... | 1.0 | -| test.c:501:24:501:25 | 32 | 1.0 | -| test.c:501:24:501:25 | (unsigned int)... | 1.0 | -| test.c:502:9:502:9 | 2 | 1.0 | -| test.c:502:9:502:9 | (unsigned int)... | 1.0 | -| test.c:502:9:502:26 | ... * ... | 1302.0 | -| test.c:502:13:502:26 | (...) | 1302.0 | -| test.c:502:14:502:15 | ip | 1302.0 | -| test.c:502:14:502:20 | ... * ... | 1302.0 | -| test.c:502:14:502:25 | ... + ... | 1302.0 | -| test.c:502:19:502:20 | 14 | 1.0 | -| test.c:502:19:502:20 | (unsigned int)... | 1.0 | -| test.c:502:24:502:25 | 64 | 1.0 | -| test.c:502:24:502:25 | (unsigned int)... | 1.0 | -| test.c:503:9:507:22 | (...) | 1.7677595125E10 | -| test.c:503:10:503:21 | (...) | 1302.0 | -| test.c:503:10:503:26 | ... * ... | 1302.0 | -| test.c:503:10:503:80 | ... > ... | 1.0 | -| test.c:503:10:507:21 | ... ? ... : ... | 1.7677595125E10 | -| test.c:503:11:503:11 | 2 | 1.0 | -| test.c:503:11:503:11 | (unsigned int)... | 1.0 | -| test.c:503:11:503:16 | ... * ... | 1302.0 | -| test.c:503:11:503:20 | ... + ... | 1302.0 | -| test.c:503:15:503:16 | ip | 1302.0 | -| test.c:503:20:503:20 | 1 | 1.0 | -| test.c:503:20:503:20 | (unsigned int)... | 1.0 | -| test.c:503:25:503:26 | 14 | 1.0 | -| test.c:503:25:503:26 | (unsigned int)... | 1.0 | -| test.c:503:30:503:80 | (...) | 1695204.0 | -| test.c:503:31:503:32 | 17 | 1.0 | -| test.c:503:31:503:32 | (unsigned int)... | 1.0 | -| test.c:503:31:503:43 | ... * ... | 1302.0 | -| test.c:503:31:503:53 | ... > ... | 1.0 | -| test.c:503:31:503:79 | ... ? ... : ... | 1695204.0 | -| test.c:503:36:503:43 | (...) | 1302.0 | -| test.c:503:37:503:37 | 2 | 1.0 | -| test.c:503:37:503:37 | (unsigned int)... | 1.0 | -| test.c:503:37:503:42 | ... * ... | 1302.0 | -| test.c:503:41:503:42 | ip | 1302.0 | -| test.c:503:47:503:48 | 17 | 1.0 | -| test.c:503:47:503:48 | (unsigned int)... | 1.0 | -| test.c:503:47:503:53 | ... * ... | 1302.0 | -| test.c:503:52:503:53 | ip | 1302.0 | -| test.c:503:57:503:58 | 17 | 1.0 | -| test.c:503:57:503:58 | (unsigned int)... | 1.0 | -| test.c:503:57:503:69 | ... * ... | 1302.0 | -| test.c:503:62:503:69 | (...) | 1302.0 | -| test.c:503:63:503:63 | 2 | 1.0 | -| test.c:503:63:503:63 | (unsigned int)... | 1.0 | -| test.c:503:63:503:68 | ... * ... | 1302.0 | -| test.c:503:67:503:68 | ip | 1302.0 | -| test.c:503:73:503:74 | 17 | 1.0 | -| test.c:503:73:503:74 | (unsigned int)... | 1.0 | -| test.c:503:73:503:79 | ... * ... | 1302.0 | -| test.c:503:78:503:79 | ip | 1302.0 | -| test.c:504:13:504:24 | (...) | 2605.0 | -| test.c:504:13:504:29 | ... * ... | 2605.0 | -| test.c:504:14:504:14 | 2 | 1.0 | -| test.c:504:14:504:14 | (unsigned int)... | 1.0 | -| test.c:504:14:504:19 | ... * ... | 2605.0 | -| test.c:504:14:504:23 | ... + ... | 2605.0 | -| test.c:504:18:504:19 | ip | 2605.0 | -| test.c:504:23:504:23 | 1 | 1.0 | -| test.c:504:23:504:23 | (unsigned int)... | 1.0 | -| test.c:504:28:504:29 | 14 | 1.0 | -| test.c:504:28:504:29 | (unsigned int)... | 1.0 | -| test.c:505:13:505:14 | 14 | 1.0 | -| test.c:505:13:505:14 | (unsigned int)... | 1.0 | -| test.c:505:13:505:25 | ... * ... | 2605.0 | -| test.c:505:13:505:35 | ... > ... | 1.0 | -| test.c:505:13:507:21 | ... ? ... : ... | 6786025.0 | -| test.c:505:18:505:25 | (...) | 2605.0 | -| test.c:505:19:505:19 | 2 | 1.0 | -| test.c:505:19:505:19 | (unsigned int)... | 1.0 | -| test.c:505:19:505:24 | ... * ... | 2605.0 | -| test.c:505:23:505:24 | ip | 2605.0 | -| test.c:505:29:505:30 | 17 | 1.0 | -| test.c:505:29:505:30 | (unsigned int)... | 1.0 | -| test.c:505:29:505:35 | ... * ... | 2605.0 | -| test.c:505:34:505:35 | ip | 2605.0 | -| test.c:506:15:506:16 | 14 | 1.0 | -| test.c:506:15:506:16 | (unsigned int)... | 1.0 | -| test.c:506:15:506:27 | ... * ... | 2605.0 | -| test.c:506:20:506:27 | (...) | 2605.0 | -| test.c:506:21:506:21 | 2 | 1.0 | -| test.c:506:21:506:21 | (unsigned int)... | 1.0 | -| test.c:506:21:506:26 | ... * ... | 2605.0 | -| test.c:506:25:506:26 | ip | 2605.0 | -| test.c:507:15:507:16 | 14 | 1.0 | -| test.c:507:15:507:16 | (unsigned int)... | 1.0 | -| test.c:507:15:507:21 | ... * ... | 2605.0 | -| test.c:507:20:507:21 | ip | 2605.0 | -| test.c:508:9:508:10 | 14 | 1.0 | -| test.c:508:9:508:10 | (unsigned int)... | 1.0 | -| test.c:508:9:508:15 | ... * ... | 1302.0 | -| test.c:508:9:508:31 | ... > ... | 1.0 | -| test.c:508:9:510:23 | ... ? ... : ... | 1695204.0 | -| test.c:508:14:508:15 | ip | 1302.0 | -| test.c:508:19:508:26 | (...) | 1302.0 | -| test.c:508:19:508:31 | ... * ... | 1302.0 | -| test.c:508:20:508:21 | ip | 1302.0 | -| test.c:508:20:508:25 | ... + ... | 1302.0 | -| test.c:508:25:508:25 | 1 | 1.0 | -| test.c:508:25:508:25 | (unsigned int)... | 1.0 | -| test.c:508:30:508:31 | 17 | 1.0 | -| test.c:508:30:508:31 | (unsigned int)... | 1.0 | -| test.c:509:11:509:12 | 14 | 1.0 | -| test.c:509:11:509:12 | (unsigned int)... | 1.0 | -| test.c:509:11:509:17 | ... * ... | 1302.0 | -| test.c:509:16:509:17 | ip | 1302.0 | -| test.c:510:11:510:18 | (...) | 1302.0 | -| test.c:510:11:510:23 | ... * ... | 1302.0 | -| test.c:510:12:510:13 | ip | 1302.0 | -| test.c:510:12:510:17 | ... + ... | 1302.0 | -| test.c:510:17:510:17 | 1 | 1.0 | -| test.c:510:17:510:17 | (unsigned int)... | 1.0 | -| test.c:510:22:510:23 | 14 | 1.0 | +| test.c:495:21:495:26 | ... * ... | 5.0 | +| test.c:495:25:495:26 | ip | 5.0 | +| test.c:496:15:496:16 | 14 | 1.0 | +| test.c:496:15:496:16 | (unsigned int)... | 1.0 | +| test.c:496:15:496:21 | ... * ... | 5.0 | +| test.c:496:20:496:21 | ip | 5.0 | +| test.c:497:7:497:7 | 2 | 1.0 | +| test.c:497:7:497:7 | (unsigned int)... | 1.0 | +| test.c:497:7:497:12 | ... * ... | 15.0 | +| test.c:497:7:497:17 | ... * ... | 15.0 | +| test.c:497:7:497:37 | ... + ... | 225.0 | +| test.c:497:11:497:12 | ip | 15.0 | +| test.c:497:16:497:17 | 14 | 1.0 | +| test.c:497:16:497:17 | (unsigned int)... | 1.0 | +| test.c:497:21:497:32 | (...) | 15.0 | +| test.c:497:21:497:37 | ... * ... | 15.0 | +| test.c:497:22:497:22 | 2 | 1.0 | +| test.c:497:22:497:22 | (unsigned int)... | 1.0 | +| test.c:497:22:497:27 | ... * ... | 15.0 | +| test.c:497:22:497:31 | ... + ... | 15.0 | +| test.c:497:26:497:27 | ip | 15.0 | +| test.c:497:31:497:31 | 1 | 1.0 | +| test.c:497:31:497:31 | (unsigned int)... | 1.0 | +| test.c:497:36:497:37 | 17 | 1.0 | +| test.c:497:36:497:37 | (unsigned int)... | 1.0 | +| test.c:498:11:498:11 | 4 | 1.0 | +| test.c:498:11:498:11 | (unsigned int)... | 1.0 | +| test.c:498:11:498:28 | ... * ... | 15.0 | +| test.c:498:11:499:28 | ... + ... | 225.0 | +| test.c:498:11:500:28 | ... + ... | 3375.0 | +| test.c:498:11:506:24 | ... + ... | 1.00544625E8 | +| test.c:498:15:498:28 | (...) | 15.0 | +| test.c:498:16:498:17 | ip | 15.0 | +| test.c:498:16:498:22 | ... * ... | 15.0 | +| test.c:498:16:498:27 | ... + ... | 15.0 | +| test.c:498:21:498:22 | 14 | 1.0 | +| test.c:498:21:498:22 | (unsigned int)... | 1.0 | +| test.c:498:26:498:27 | 32 | 1.0 | +| test.c:498:26:498:27 | (unsigned int)... | 1.0 | +| test.c:499:11:499:28 | (...) | 15.0 | +| test.c:499:12:499:12 | 2 | 1.0 | +| test.c:499:12:499:12 | (unsigned int)... | 1.0 | +| test.c:499:12:499:17 | ... * ... | 15.0 | +| test.c:499:12:499:22 | ... * ... | 15.0 | +| test.c:499:12:499:27 | ... + ... | 15.0 | +| test.c:499:16:499:17 | ip | 15.0 | +| test.c:499:21:499:22 | 14 | 1.0 | +| test.c:499:21:499:22 | (unsigned int)... | 1.0 | +| test.c:499:26:499:27 | 32 | 1.0 | +| test.c:499:26:499:27 | (unsigned int)... | 1.0 | +| test.c:500:11:500:11 | 2 | 1.0 | +| test.c:500:11:500:11 | (unsigned int)... | 1.0 | +| test.c:500:11:500:28 | ... * ... | 15.0 | +| test.c:500:15:500:28 | (...) | 15.0 | +| test.c:500:16:500:17 | ip | 15.0 | +| test.c:500:16:500:22 | ... * ... | 15.0 | +| test.c:500:16:500:27 | ... + ... | 15.0 | +| test.c:500:21:500:22 | 14 | 1.0 | +| test.c:500:21:500:22 | (unsigned int)... | 1.0 | +| test.c:500:26:500:27 | 64 | 1.0 | +| test.c:500:26:500:27 | (unsigned int)... | 1.0 | +| test.c:501:11:506:24 | (...) | 29791.0 | +| test.c:501:12:501:23 | (...) | 15.0 | +| test.c:501:12:501:28 | ... * ... | 15.0 | +| test.c:501:12:502:61 | ... > ... | 1.0 | +| test.c:501:12:506:23 | ... ? ... : ... | 29791.0 | +| test.c:501:13:501:13 | 2 | 1.0 | +| test.c:501:13:501:13 | (unsigned int)... | 1.0 | +| test.c:501:13:501:18 | ... * ... | 15.0 | +| test.c:501:13:501:22 | ... + ... | 15.0 | +| test.c:501:17:501:18 | ip | 15.0 | +| test.c:501:22:501:22 | 1 | 1.0 | +| test.c:501:22:501:22 | (unsigned int)... | 1.0 | +| test.c:501:27:501:28 | 14 | 1.0 | +| test.c:501:27:501:28 | (unsigned int)... | 1.0 | +| test.c:502:11:502:61 | (...) | 225.0 | +| test.c:502:12:502:13 | 14 | 1.0 | +| test.c:502:12:502:13 | (unsigned int)... | 1.0 | +| test.c:502:12:502:24 | ... * ... | 15.0 | +| test.c:502:12:502:34 | ... > ... | 1.0 | +| test.c:502:12:502:60 | ... ? ... : ... | 225.0 | +| test.c:502:17:502:24 | (...) | 15.0 | +| test.c:502:18:502:18 | 2 | 1.0 | +| test.c:502:18:502:18 | (unsigned int)... | 1.0 | +| test.c:502:18:502:23 | ... * ... | 15.0 | +| test.c:502:22:502:23 | ip | 15.0 | +| test.c:502:28:502:29 | 17 | 1.0 | +| test.c:502:28:502:29 | (unsigned int)... | 1.0 | +| test.c:502:28:502:34 | ... * ... | 15.0 | +| test.c:502:33:502:34 | ip | 15.0 | +| test.c:502:38:502:39 | 17 | 1.0 | +| test.c:502:38:502:39 | (unsigned int)... | 1.0 | +| test.c:502:38:502:50 | ... * ... | 15.0 | +| test.c:502:43:502:50 | (...) | 15.0 | +| test.c:502:44:502:44 | 2 | 1.0 | +| test.c:502:44:502:44 | (unsigned int)... | 1.0 | +| test.c:502:44:502:49 | ... * ... | 15.0 | +| test.c:502:48:502:49 | ip | 15.0 | +| test.c:502:54:502:55 | 17 | 1.0 | +| test.c:502:54:502:55 | (unsigned int)... | 1.0 | +| test.c:502:54:502:60 | ... * ... | 15.0 | +| test.c:502:59:502:60 | ip | 15.0 | +| test.c:503:15:503:26 | (...) | 31.0 | +| test.c:503:15:503:31 | ... * ... | 31.0 | +| test.c:503:16:503:16 | 2 | 1.0 | +| test.c:503:16:503:16 | (unsigned int)... | 1.0 | +| test.c:503:16:503:21 | ... * ... | 31.0 | +| test.c:503:16:503:25 | ... + ... | 31.0 | +| test.c:503:20:503:21 | ip | 31.0 | +| test.c:503:25:503:25 | 1 | 1.0 | +| test.c:503:25:503:25 | (unsigned int)... | 1.0 | +| test.c:503:30:503:31 | 14 | 1.0 | +| test.c:503:30:503:31 | (unsigned int)... | 1.0 | +| test.c:504:15:504:16 | 14 | 1.0 | +| test.c:504:15:504:16 | (unsigned int)... | 1.0 | +| test.c:504:15:504:27 | ... * ... | 31.0 | +| test.c:504:15:504:37 | ... > ... | 1.0 | +| test.c:504:15:506:23 | ... ? ... : ... | 961.0 | +| test.c:504:20:504:27 | (...) | 31.0 | +| test.c:504:21:504:21 | 2 | 1.0 | +| test.c:504:21:504:21 | (unsigned int)... | 1.0 | +| test.c:504:21:504:26 | ... * ... | 31.0 | +| test.c:504:25:504:26 | ip | 31.0 | +| test.c:504:31:504:32 | 17 | 1.0 | +| test.c:504:31:504:32 | (unsigned int)... | 1.0 | +| test.c:504:31:504:37 | ... * ... | 31.0 | +| test.c:504:36:504:37 | ip | 31.0 | +| test.c:505:17:505:18 | 14 | 1.0 | +| test.c:505:17:505:18 | (unsigned int)... | 1.0 | +| test.c:505:17:505:29 | ... * ... | 31.0 | +| test.c:505:22:505:29 | (...) | 31.0 | +| test.c:505:23:505:23 | 2 | 1.0 | +| test.c:505:23:505:23 | (unsigned int)... | 1.0 | +| test.c:505:23:505:28 | ... * ... | 31.0 | +| test.c:505:27:505:28 | ip | 31.0 | +| test.c:506:17:506:18 | 14 | 1.0 | +| test.c:506:17:506:18 | (unsigned int)... | 1.0 | +| test.c:506:17:506:23 | ... * ... | 31.0 | +| test.c:506:22:506:23 | ip | 31.0 | +| test.c:507:11:507:11 | 2 | 1.0 | +| test.c:507:11:507:11 | (unsigned int)... | 1.0 | +| test.c:507:11:507:16 | ... * ... | 15.0 | +| test.c:507:11:507:21 | ... * ... | 15.0 | +| test.c:507:11:507:41 | ... + ... | 225.0 | +| test.c:507:15:507:16 | ip | 15.0 | +| test.c:507:20:507:21 | 14 | 1.0 | +| test.c:507:20:507:21 | (unsigned int)... | 1.0 | +| test.c:507:25:507:36 | (...) | 15.0 | +| test.c:507:25:507:41 | ... * ... | 15.0 | +| test.c:507:26:507:26 | 2 | 1.0 | +| test.c:507:26:507:26 | (unsigned int)... | 1.0 | +| test.c:507:26:507:31 | ... * ... | 15.0 | +| test.c:507:26:507:35 | ... + ... | 15.0 | +| test.c:507:30:507:31 | ip | 15.0 | +| test.c:507:35:507:35 | 1 | 1.0 | +| test.c:507:35:507:35 | (unsigned int)... | 1.0 | +| test.c:507:40:507:41 | 17 | 1.0 | +| test.c:507:40:507:41 | (unsigned int)... | 1.0 | +| test.c:508:5:527:24 | (...) | 6.6142118960740864E25 | +| test.c:508:6:508:6 | 4 | 1.0 | +| test.c:508:6:508:6 | (unsigned int)... | 1.0 | +| test.c:508:6:508:23 | ... * ... | 108.0 | +| test.c:508:6:509:24 | ... + ... | 11664.0 | +| test.c:508:6:510:24 | ... + ... | 1259712.0 | +| test.c:508:6:515:20 | ... + ... | 1.2872131505856E13 | +| test.c:508:6:516:55 | ... > ... | 1.0 | +| test.c:508:6:527:23 | ... ? ... : ... | 6.6142118960740864E25 | +| test.c:508:10:508:23 | (...) | 108.0 | +| test.c:508:11:508:12 | ip | 108.0 | +| test.c:508:11:508:17 | ... * ... | 108.0 | +| test.c:508:11:508:22 | ... + ... | 108.0 | +| test.c:508:16:508:17 | 14 | 1.0 | +| test.c:508:16:508:17 | (unsigned int)... | 1.0 | +| test.c:508:21:508:22 | 32 | 1.0 | +| test.c:508:21:508:22 | (unsigned int)... | 1.0 | +| test.c:509:7:509:24 | (...) | 108.0 | +| test.c:509:8:509:8 | 2 | 1.0 | +| test.c:509:8:509:8 | (unsigned int)... | 1.0 | +| test.c:509:8:509:13 | ... * ... | 108.0 | +| test.c:509:8:509:18 | ... * ... | 108.0 | +| test.c:509:8:509:23 | ... + ... | 108.0 | +| test.c:509:12:509:13 | ip | 108.0 | +| test.c:509:17:509:18 | 14 | 1.0 | +| test.c:509:17:509:18 | (unsigned int)... | 1.0 | +| test.c:509:22:509:23 | 32 | 1.0 | +| test.c:509:22:509:23 | (unsigned int)... | 1.0 | +| test.c:510:7:510:7 | 2 | 1.0 | +| test.c:510:7:510:7 | (unsigned int)... | 1.0 | +| test.c:510:7:510:24 | ... * ... | 108.0 | +| test.c:510:11:510:24 | (...) | 108.0 | +| test.c:510:12:510:13 | ip | 108.0 | +| test.c:510:12:510:18 | ... * ... | 108.0 | +| test.c:510:12:510:23 | ... + ... | 108.0 | +| test.c:510:17:510:18 | 14 | 1.0 | +| test.c:510:17:510:18 | (unsigned int)... | 1.0 | +| test.c:510:22:510:23 | 64 | 1.0 | | test.c:510:22:510:23 | (unsigned int)... | 1.0 | +| test.c:511:7:515:20 | (...) | 1.0218313E7 | +| test.c:511:8:511:19 | (...) | 108.0 | +| test.c:511:8:511:24 | ... * ... | 108.0 | +| test.c:511:8:511:78 | ... > ... | 1.0 | +| test.c:511:8:515:19 | ... ? ... : ... | 1.0218313E7 | | test.c:511:9:511:9 | 2 | 1.0 | | test.c:511:9:511:9 | (unsigned int)... | 1.0 | -| test.c:511:9:511:26 | ... * ... | 10419.0 | -| test.c:511:9:531:44 | ... + ... | 1.9449636104972528E43 | -| test.c:511:13:511:26 | (...) | 10419.0 | -| test.c:511:14:511:15 | ip | 10419.0 | -| test.c:511:14:511:20 | ... * ... | 10419.0 | -| test.c:511:14:511:25 | ... + ... | 10419.0 | -| test.c:511:19:511:20 | 14 | 1.0 | -| test.c:511:19:511:20 | (unsigned int)... | 1.0 | -| test.c:511:24:511:25 | 32 | 1.0 | -| test.c:511:24:511:25 | (unsigned int)... | 1.0 | -| test.c:512:9:531:44 | (...) | 1.8667469147684545E39 | -| test.c:512:10:512:10 | 4 | 1.0 | -| test.c:512:10:512:10 | (unsigned int)... | 1.0 | -| test.c:512:10:512:27 | ... * ... | 10419.0 | -| test.c:512:10:513:28 | ... + ... | 1.08555561E8 | -| test.c:512:10:514:28 | ... + ... | 1.131040390059E12 | -| test.c:512:10:520:24 | ... + ... | 1.0235492350954187E25 | -| test.c:512:10:521:39 | ... > ... | 1.0 | -| test.c:512:10:531:43 | ... ? ... : ... | 1.8667469147684545E39 | -| test.c:512:14:512:27 | (...) | 10419.0 | -| test.c:512:15:512:16 | ip | 10419.0 | -| test.c:512:15:512:21 | ... * ... | 10419.0 | -| test.c:512:15:512:26 | ... + ... | 10419.0 | -| test.c:512:20:512:21 | 14 | 1.0 | -| test.c:512:20:512:21 | (unsigned int)... | 1.0 | -| test.c:512:25:512:26 | 32 | 1.0 | -| test.c:512:25:512:26 | (unsigned int)... | 1.0 | -| test.c:513:11:513:28 | (...) | 10419.0 | -| test.c:513:12:513:12 | 2 | 1.0 | -| test.c:513:12:513:12 | (unsigned int)... | 1.0 | -| test.c:513:12:513:17 | ... * ... | 10419.0 | -| test.c:513:12:513:22 | ... * ... | 10419.0 | -| test.c:513:12:513:27 | ... + ... | 10419.0 | -| test.c:513:16:513:17 | ip | 10419.0 | -| test.c:513:21:513:22 | 14 | 1.0 | -| test.c:513:21:513:22 | (unsigned int)... | 1.0 | -| test.c:513:26:513:27 | 32 | 1.0 | -| test.c:513:26:513:27 | (unsigned int)... | 1.0 | -| test.c:514:11:514:11 | 2 | 1.0 | -| test.c:514:11:514:11 | (unsigned int)... | 1.0 | -| test.c:514:11:514:28 | ... * ... | 10419.0 | -| test.c:514:15:514:28 | (...) | 10419.0 | -| test.c:514:16:514:17 | ip | 10419.0 | -| test.c:514:16:514:22 | ... * ... | 10419.0 | -| test.c:514:16:514:27 | ... + ... | 10419.0 | -| test.c:514:21:514:22 | 14 | 1.0 | -| test.c:514:21:514:22 | (unsigned int)... | 1.0 | -| test.c:514:26:514:27 | 64 | 1.0 | -| test.c:514:26:514:27 | (unsigned int)... | 1.0 | -| test.c:515:11:520:24 | (...) | 9.049625849719E12 | -| test.c:515:12:515:23 | (...) | 10419.0 | -| test.c:515:12:515:28 | ... * ... | 10419.0 | -| test.c:515:12:516:61 | ... > ... | 1.0 | -| test.c:515:12:520:23 | ... ? ... : ... | 9.049625849719E12 | -| test.c:515:13:515:13 | 2 | 1.0 | -| test.c:515:13:515:13 | (unsigned int)... | 1.0 | -| test.c:515:13:515:18 | ... * ... | 10419.0 | -| test.c:515:13:515:22 | ... + ... | 10419.0 | -| test.c:515:17:515:18 | ip | 10419.0 | -| test.c:515:22:515:22 | 1 | 1.0 | -| test.c:515:22:515:22 | (unsigned int)... | 1.0 | -| test.c:515:27:515:28 | 14 | 1.0 | -| test.c:515:27:515:28 | (unsigned int)... | 1.0 | -| test.c:516:11:516:61 | (...) | 1.08555561E8 | -| test.c:516:12:516:13 | 14 | 1.0 | -| test.c:516:12:516:13 | (unsigned int)... | 1.0 | -| test.c:516:12:516:24 | ... * ... | 10419.0 | -| test.c:516:12:516:34 | ... > ... | 1.0 | -| test.c:516:12:516:60 | ... ? ... : ... | 1.08555561E8 | -| test.c:516:17:516:24 | (...) | 10419.0 | -| test.c:516:18:516:18 | 2 | 1.0 | -| test.c:516:18:516:18 | (unsigned int)... | 1.0 | -| test.c:516:18:516:23 | ... * ... | 10419.0 | -| test.c:516:22:516:23 | ip | 10419.0 | -| test.c:516:28:516:29 | 17 | 1.0 | -| test.c:516:28:516:29 | (unsigned int)... | 1.0 | -| test.c:516:28:516:34 | ... * ... | 10419.0 | -| test.c:516:33:516:34 | ip | 10419.0 | -| test.c:516:38:516:39 | 17 | 1.0 | -| test.c:516:38:516:39 | (unsigned int)... | 1.0 | -| test.c:516:38:516:50 | ... * ... | 10419.0 | -| test.c:516:43:516:50 | (...) | 10419.0 | -| test.c:516:44:516:44 | 2 | 1.0 | -| test.c:516:44:516:44 | (unsigned int)... | 1.0 | -| test.c:516:44:516:49 | ... * ... | 10419.0 | -| test.c:516:48:516:49 | ip | 10419.0 | -| test.c:516:54:516:55 | 17 | 1.0 | -| test.c:516:54:516:55 | (unsigned int)... | 1.0 | -| test.c:516:54:516:60 | ... * ... | 10419.0 | -| test.c:516:59:516:60 | ip | 10419.0 | -| test.c:517:15:517:26 | (...) | 20839.0 | -| test.c:517:15:517:31 | ... * ... | 20839.0 | -| test.c:517:16:517:16 | 2 | 1.0 | -| test.c:517:16:517:16 | (unsigned int)... | 1.0 | -| test.c:517:16:517:21 | ... * ... | 20839.0 | -| test.c:517:16:517:25 | ... + ... | 20839.0 | -| test.c:517:20:517:21 | ip | 20839.0 | -| test.c:517:25:517:25 | 1 | 1.0 | -| test.c:517:25:517:25 | (unsigned int)... | 1.0 | -| test.c:517:30:517:31 | 14 | 1.0 | -| test.c:517:30:517:31 | (unsigned int)... | 1.0 | -| test.c:518:15:518:16 | 14 | 1.0 | -| test.c:518:15:518:16 | (unsigned int)... | 1.0 | -| test.c:518:15:518:27 | ... * ... | 20839.0 | -| test.c:518:15:518:37 | ... > ... | 1.0 | -| test.c:518:15:520:23 | ... ? ... : ... | 4.34263921E8 | -| test.c:518:20:518:27 | (...) | 20839.0 | -| test.c:518:21:518:21 | 2 | 1.0 | -| test.c:518:21:518:21 | (unsigned int)... | 1.0 | -| test.c:518:21:518:26 | ... * ... | 20839.0 | -| test.c:518:25:518:26 | ip | 20839.0 | -| test.c:518:31:518:32 | 17 | 1.0 | -| test.c:518:31:518:32 | (unsigned int)... | 1.0 | -| test.c:518:31:518:37 | ... * ... | 20839.0 | -| test.c:518:36:518:37 | ip | 20839.0 | -| test.c:519:17:519:18 | 14 | 1.0 | -| test.c:519:17:519:18 | (unsigned int)... | 1.0 | -| test.c:519:17:519:29 | ... * ... | 20839.0 | -| test.c:519:22:519:29 | (...) | 20839.0 | -| test.c:519:23:519:23 | 2 | 1.0 | -| test.c:519:23:519:23 | (unsigned int)... | 1.0 | -| test.c:519:23:519:28 | ... * ... | 20839.0 | -| test.c:519:27:519:28 | ip | 20839.0 | -| test.c:520:17:520:18 | 14 | 1.0 | -| test.c:520:17:520:18 | (unsigned int)... | 1.0 | -| test.c:520:17:520:23 | ... * ... | 20839.0 | -| test.c:520:22:520:23 | ip | 20839.0 | -| test.c:521:9:521:9 | 2 | 1.0 | -| test.c:521:9:521:9 | (unsigned int)... | 1.0 | -| test.c:521:9:521:14 | ... * ... | 62517.0 | -| test.c:521:9:521:19 | ... * ... | 62517.0 | -| test.c:521:9:521:39 | ... + ... | 3.908375289E9 | -| test.c:521:13:521:14 | ip | 62517.0 | -| test.c:521:18:521:19 | 14 | 1.0 | -| test.c:521:18:521:19 | (unsigned int)... | 1.0 | -| test.c:521:23:521:34 | (...) | 62517.0 | -| test.c:521:23:521:39 | ... * ... | 62517.0 | -| test.c:521:24:521:24 | 2 | 1.0 | -| test.c:521:24:521:24 | (unsigned int)... | 1.0 | -| test.c:521:24:521:29 | ... * ... | 62517.0 | -| test.c:521:24:521:33 | ... + ... | 62517.0 | -| test.c:521:28:521:29 | ip | 62517.0 | -| test.c:521:33:521:33 | 1 | 1.0 | -| test.c:521:33:521:33 | (unsigned int)... | 1.0 | -| test.c:521:38:521:39 | 17 | 1.0 | -| test.c:521:38:521:39 | (unsigned int)... | 1.0 | -| test.c:522:13:522:13 | 4 | 1.0 | -| test.c:522:13:522:13 | (unsigned int)... | 1.0 | -| test.c:522:13:522:30 | ... * ... | 62517.0 | -| test.c:522:13:523:30 | ... + ... | 3.908375289E9 | -| test.c:522:13:524:30 | ... + ... | 2.44339897942413E14 | -| test.c:522:13:530:26 | ... + ... | 4.7762734556795386E29 | -| test.c:522:17:522:30 | (...) | 62517.0 | -| test.c:522:18:522:19 | ip | 62517.0 | -| test.c:522:18:522:24 | ... * ... | 62517.0 | -| test.c:522:18:522:29 | ... + ... | 62517.0 | -| test.c:522:23:522:24 | 14 | 1.0 | -| test.c:522:23:522:24 | (unsigned int)... | 1.0 | -| test.c:522:28:522:29 | 32 | 1.0 | -| test.c:522:28:522:29 | (unsigned int)... | 1.0 | -| test.c:523:13:523:30 | (...) | 62517.0 | -| test.c:523:14:523:14 | 2 | 1.0 | -| test.c:523:14:523:14 | (unsigned int)... | 1.0 | -| test.c:523:14:523:19 | ... * ... | 62517.0 | -| test.c:523:14:523:24 | ... * ... | 62517.0 | -| test.c:523:14:523:29 | ... + ... | 62517.0 | -| test.c:523:18:523:19 | ip | 62517.0 | -| test.c:523:23:523:24 | 14 | 1.0 | -| test.c:523:23:523:24 | (unsigned int)... | 1.0 | -| test.c:523:28:523:29 | 32 | 1.0 | -| test.c:523:28:523:29 | (unsigned int)... | 1.0 | -| test.c:524:13:524:13 | 2 | 1.0 | -| test.c:524:13:524:13 | (unsigned int)... | 1.0 | -| test.c:524:13:524:30 | ... * ... | 62517.0 | -| test.c:524:17:524:30 | (...) | 62517.0 | -| test.c:524:18:524:19 | ip | 62517.0 | -| test.c:524:18:524:24 | ... * ... | 62517.0 | -| test.c:524:18:524:29 | ... + ... | 62517.0 | -| test.c:524:23:524:24 | 14 | 1.0 | -| test.c:524:23:524:24 | (unsigned int)... | 1.0 | -| test.c:524:28:524:29 | 64 | 1.0 | -| test.c:524:28:524:29 | (unsigned int)... | 1.0 | -| test.c:525:13:530:26 | (...) | 1.954766084417875E15 | -| test.c:525:14:525:25 | (...) | 62517.0 | -| test.c:525:14:525:30 | ... * ... | 62517.0 | -| test.c:525:14:526:63 | ... > ... | 1.0 | -| test.c:525:14:530:25 | ... ? ... : ... | 1.954766084417875E15 | -| test.c:525:15:525:15 | 2 | 1.0 | -| test.c:525:15:525:15 | (unsigned int)... | 1.0 | -| test.c:525:15:525:20 | ... * ... | 62517.0 | -| test.c:525:15:525:24 | ... + ... | 62517.0 | -| test.c:525:19:525:20 | ip | 62517.0 | -| test.c:525:24:525:24 | 1 | 1.0 | -| test.c:525:24:525:24 | (unsigned int)... | 1.0 | -| test.c:525:29:525:30 | 14 | 1.0 | -| test.c:525:29:525:30 | (unsigned int)... | 1.0 | -| test.c:526:13:526:63 | (...) | 3.908375289E9 | -| test.c:526:14:526:15 | 14 | 1.0 | -| test.c:526:14:526:15 | (unsigned int)... | 1.0 | -| test.c:526:14:526:26 | ... * ... | 62517.0 | -| test.c:526:14:526:36 | ... > ... | 1.0 | -| test.c:526:14:526:62 | ... ? ... : ... | 3.908375289E9 | -| test.c:526:19:526:26 | (...) | 62517.0 | -| test.c:526:20:526:20 | 2 | 1.0 | -| test.c:526:20:526:20 | (unsigned int)... | 1.0 | -| test.c:526:20:526:25 | ... * ... | 62517.0 | -| test.c:526:24:526:25 | ip | 62517.0 | -| test.c:526:30:526:31 | 17 | 1.0 | -| test.c:526:30:526:31 | (unsigned int)... | 1.0 | -| test.c:526:30:526:36 | ... * ... | 62517.0 | -| test.c:526:35:526:36 | ip | 62517.0 | -| test.c:526:40:526:41 | 17 | 1.0 | -| test.c:526:40:526:41 | (unsigned int)... | 1.0 | -| test.c:526:40:526:52 | ... * ... | 62517.0 | -| test.c:526:45:526:52 | (...) | 62517.0 | -| test.c:526:46:526:46 | 2 | 1.0 | -| test.c:526:46:526:46 | (unsigned int)... | 1.0 | -| test.c:526:46:526:51 | ... * ... | 62517.0 | -| test.c:526:50:526:51 | ip | 62517.0 | -| test.c:526:56:526:57 | 17 | 1.0 | -| test.c:526:56:526:57 | (unsigned int)... | 1.0 | -| test.c:526:56:526:62 | ... * ... | 62517.0 | -| test.c:526:61:526:62 | ip | 62517.0 | -| test.c:527:17:527:28 | (...) | 125035.0 | -| test.c:527:17:527:33 | ... * ... | 125035.0 | -| test.c:527:18:527:18 | 2 | 1.0 | -| test.c:527:18:527:18 | (unsigned int)... | 1.0 | -| test.c:527:18:527:23 | ... * ... | 125035.0 | -| test.c:527:18:527:27 | ... + ... | 125035.0 | -| test.c:527:22:527:23 | ip | 125035.0 | -| test.c:527:27:527:27 | 1 | 1.0 | -| test.c:527:27:527:27 | (unsigned int)... | 1.0 | -| test.c:527:32:527:33 | 14 | 1.0 | -| test.c:527:32:527:33 | (unsigned int)... | 1.0 | -| test.c:528:17:528:18 | 14 | 1.0 | -| test.c:528:17:528:18 | (unsigned int)... | 1.0 | -| test.c:528:17:528:29 | ... * ... | 125035.0 | -| test.c:528:17:528:39 | ... > ... | 1.0 | -| test.c:528:17:530:25 | ... ? ... : ... | 1.5633751225E10 | -| test.c:528:22:528:29 | (...) | 125035.0 | -| test.c:528:23:528:23 | 2 | 1.0 | -| test.c:528:23:528:23 | (unsigned int)... | 1.0 | -| test.c:528:23:528:28 | ... * ... | 125035.0 | -| test.c:528:27:528:28 | ip | 125035.0 | -| test.c:528:33:528:34 | 17 | 1.0 | -| test.c:528:33:528:34 | (unsigned int)... | 1.0 | -| test.c:528:33:528:39 | ... * ... | 125035.0 | -| test.c:528:38:528:39 | ip | 125035.0 | -| test.c:529:19:529:20 | 14 | 1.0 | -| test.c:529:19:529:20 | (unsigned int)... | 1.0 | -| test.c:529:19:529:31 | ... * ... | 125035.0 | -| test.c:529:24:529:31 | (...) | 125035.0 | -| test.c:529:25:529:25 | 2 | 1.0 | -| test.c:529:25:529:25 | (unsigned int)... | 1.0 | -| test.c:529:25:529:30 | ... * ... | 125035.0 | -| test.c:529:29:529:30 | ip | 125035.0 | -| test.c:530:19:530:20 | 14 | 1.0 | -| test.c:530:19:530:20 | (unsigned int)... | 1.0 | -| test.c:530:19:530:25 | ... * ... | 125035.0 | -| test.c:530:24:530:25 | ip | 125035.0 | -| test.c:531:13:531:13 | 2 | 1.0 | -| test.c:531:13:531:13 | (unsigned int)... | 1.0 | -| test.c:531:13:531:18 | ... * ... | 62517.0 | -| test.c:531:13:531:23 | ... * ... | 62517.0 | -| test.c:531:13:531:43 | ... + ... | 3.908375289E9 | -| test.c:531:17:531:18 | ip | 62517.0 | -| test.c:531:22:531:23 | 14 | 1.0 | -| test.c:531:22:531:23 | (unsigned int)... | 1.0 | -| test.c:531:27:531:38 | (...) | 62517.0 | -| test.c:531:27:531:43 | ... * ... | 62517.0 | -| test.c:531:28:531:28 | 2 | 1.0 | -| test.c:531:28:531:28 | (unsigned int)... | 1.0 | -| test.c:531:28:531:33 | ... * ... | 62517.0 | -| test.c:531:28:531:37 | ... + ... | 62517.0 | -| test.c:531:32:531:33 | ip | 62517.0 | -| test.c:531:37:531:37 | 1 | 1.0 | -| test.c:531:37:531:37 | (unsigned int)... | 1.0 | -| test.c:531:42:531:43 | 17 | 1.0 | -| test.c:531:42:531:43 | (unsigned int)... | 1.0 | -| test.c:532:9:532:9 | 4 | 1.0 | -| test.c:532:9:532:9 | (unsigned int)... | 1.0 | -| test.c:532:9:532:26 | ... * ... | 10419.0 | -| test.c:532:9:533:30 | ... + ... | 1.08555561E8 | -| test.c:532:9:534:30 | ... + ... | 1.131040390059E12 | -| test.c:532:9:540:26 | ... + ... | 1.0235492350954187E25 | -| test.c:532:9:541:61 | ... > ... | 1.0 | -| test.c:532:9:553:25 | ... ? ... : ... | 4.778814771623795E41 | -| test.c:532:13:532:26 | (...) | 10419.0 | -| test.c:532:14:532:15 | ip | 10419.0 | -| test.c:532:14:532:20 | ... * ... | 10419.0 | -| test.c:532:14:532:25 | ... + ... | 10419.0 | -| test.c:532:19:532:20 | 14 | 1.0 | -| test.c:532:19:532:20 | (unsigned int)... | 1.0 | -| test.c:532:24:532:25 | 32 | 1.0 | -| test.c:532:24:532:25 | (unsigned int)... | 1.0 | -| test.c:533:13:533:30 | (...) | 10419.0 | -| test.c:533:14:533:14 | 2 | 1.0 | -| test.c:533:14:533:14 | (unsigned int)... | 1.0 | -| test.c:533:14:533:19 | ... * ... | 10419.0 | -| test.c:533:14:533:24 | ... * ... | 10419.0 | -| test.c:533:14:533:29 | ... + ... | 10419.0 | -| test.c:533:18:533:19 | ip | 10419.0 | -| test.c:533:23:533:24 | 14 | 1.0 | -| test.c:533:23:533:24 | (unsigned int)... | 1.0 | -| test.c:533:28:533:29 | 32 | 1.0 | +| test.c:511:9:511:14 | ... * ... | 108.0 | +| test.c:511:9:511:18 | ... + ... | 108.0 | +| test.c:511:13:511:14 | ip | 108.0 | +| test.c:511:18:511:18 | 1 | 1.0 | +| test.c:511:18:511:18 | (unsigned int)... | 1.0 | +| test.c:511:23:511:24 | 14 | 1.0 | +| test.c:511:23:511:24 | (unsigned int)... | 1.0 | +| test.c:511:28:511:78 | (...) | 11664.0 | +| test.c:511:29:511:30 | 17 | 1.0 | +| test.c:511:29:511:30 | (unsigned int)... | 1.0 | +| test.c:511:29:511:41 | ... * ... | 108.0 | +| test.c:511:29:511:51 | ... > ... | 1.0 | +| test.c:511:29:511:77 | ... ? ... : ... | 11664.0 | +| test.c:511:34:511:41 | (...) | 108.0 | +| test.c:511:35:511:35 | 2 | 1.0 | +| test.c:511:35:511:35 | (unsigned int)... | 1.0 | +| test.c:511:35:511:40 | ... * ... | 108.0 | +| test.c:511:39:511:40 | ip | 108.0 | +| test.c:511:45:511:46 | 17 | 1.0 | +| test.c:511:45:511:46 | (unsigned int)... | 1.0 | +| test.c:511:45:511:51 | ... * ... | 108.0 | +| test.c:511:50:511:51 | ip | 108.0 | +| test.c:511:55:511:56 | 17 | 1.0 | +| test.c:511:55:511:56 | (unsigned int)... | 1.0 | +| test.c:511:55:511:67 | ... * ... | 108.0 | +| test.c:511:60:511:67 | (...) | 108.0 | +| test.c:511:61:511:61 | 2 | 1.0 | +| test.c:511:61:511:61 | (unsigned int)... | 1.0 | +| test.c:511:61:511:66 | ... * ... | 108.0 | +| test.c:511:65:511:66 | ip | 108.0 | +| test.c:511:71:511:72 | 17 | 1.0 | +| test.c:511:71:511:72 | (unsigned int)... | 1.0 | +| test.c:511:71:511:77 | ... * ... | 108.0 | +| test.c:511:76:511:77 | ip | 108.0 | +| test.c:512:11:512:22 | (...) | 217.0 | +| test.c:512:11:512:27 | ... * ... | 217.0 | +| test.c:512:12:512:12 | 2 | 1.0 | +| test.c:512:12:512:12 | (unsigned int)... | 1.0 | +| test.c:512:12:512:17 | ... * ... | 217.0 | +| test.c:512:12:512:21 | ... + ... | 217.0 | +| test.c:512:16:512:17 | ip | 217.0 | +| test.c:512:21:512:21 | 1 | 1.0 | +| test.c:512:21:512:21 | (unsigned int)... | 1.0 | +| test.c:512:26:512:27 | 14 | 1.0 | +| test.c:512:26:512:27 | (unsigned int)... | 1.0 | +| test.c:513:11:513:12 | 14 | 1.0 | +| test.c:513:11:513:12 | (unsigned int)... | 1.0 | +| test.c:513:11:513:23 | ... * ... | 217.0 | +| test.c:513:11:513:33 | ... > ... | 1.0 | +| test.c:513:11:515:19 | ... ? ... : ... | 47089.0 | +| test.c:513:16:513:23 | (...) | 217.0 | +| test.c:513:17:513:17 | 2 | 1.0 | +| test.c:513:17:513:17 | (unsigned int)... | 1.0 | +| test.c:513:17:513:22 | ... * ... | 217.0 | +| test.c:513:21:513:22 | ip | 217.0 | +| test.c:513:27:513:28 | 17 | 1.0 | +| test.c:513:27:513:28 | (unsigned int)... | 1.0 | +| test.c:513:27:513:33 | ... * ... | 217.0 | +| test.c:513:32:513:33 | ip | 217.0 | +| test.c:514:13:514:14 | 14 | 1.0 | +| test.c:514:13:514:14 | (unsigned int)... | 1.0 | +| test.c:514:13:514:25 | ... * ... | 217.0 | +| test.c:514:18:514:25 | (...) | 217.0 | +| test.c:514:19:514:19 | 2 | 1.0 | +| test.c:514:19:514:19 | (unsigned int)... | 1.0 | +| test.c:514:19:514:24 | ... * ... | 217.0 | +| test.c:514:23:514:24 | ip | 217.0 | +| test.c:515:13:515:14 | 14 | 1.0 | +| test.c:515:13:515:14 | (unsigned int)... | 1.0 | +| test.c:515:13:515:19 | ... * ... | 217.0 | +| test.c:515:18:515:19 | ip | 217.0 | +| test.c:516:5:516:55 | (...) | 423801.0 | +| test.c:516:6:516:7 | 14 | 1.0 | +| test.c:516:6:516:7 | (unsigned int)... | 1.0 | +| test.c:516:6:516:12 | ... * ... | 651.0 | +| test.c:516:6:516:28 | ... > ... | 1.0 | +| test.c:516:6:516:54 | ... ? ... : ... | 423801.0 | +| test.c:516:11:516:12 | ip | 651.0 | +| test.c:516:16:516:23 | (...) | 651.0 | +| test.c:516:16:516:28 | ... * ... | 651.0 | +| test.c:516:17:516:18 | ip | 651.0 | +| test.c:516:17:516:22 | ... + ... | 651.0 | +| test.c:516:22:516:22 | 1 | 1.0 | +| test.c:516:22:516:22 | (unsigned int)... | 1.0 | +| test.c:516:27:516:28 | 17 | 1.0 | +| test.c:516:27:516:28 | (unsigned int)... | 1.0 | +| test.c:516:32:516:33 | 17 | 1.0 | +| test.c:516:32:516:33 | (unsigned int)... | 1.0 | +| test.c:516:32:516:38 | ... * ... | 651.0 | +| test.c:516:37:516:38 | ip | 651.0 | +| test.c:516:42:516:49 | (...) | 651.0 | +| test.c:516:42:516:54 | ... * ... | 651.0 | +| test.c:516:43:516:44 | ip | 651.0 | +| test.c:516:43:516:48 | ... + ... | 651.0 | +| test.c:516:48:516:48 | 1 | 1.0 | +| test.c:516:48:516:48 | (unsigned int)... | 1.0 | +| test.c:516:53:516:54 | 17 | 1.0 | +| test.c:516:53:516:54 | (unsigned int)... | 1.0 | +| test.c:517:9:517:9 | 4 | 1.0 | +| test.c:517:9:517:9 | (unsigned int)... | 1.0 | +| test.c:517:9:517:26 | ... * ... | 1302.0 | +| test.c:517:9:518:26 | ... + ... | 1695204.0 | +| test.c:517:9:519:26 | ... + ... | 2.207155608E9 | +| test.c:517:9:524:22 | ... + ... | 3.9017203216097214E19 | +| test.c:517:13:517:26 | (...) | 1302.0 | +| test.c:517:14:517:15 | ip | 1302.0 | +| test.c:517:14:517:20 | ... * ... | 1302.0 | +| test.c:517:14:517:25 | ... + ... | 1302.0 | +| test.c:517:19:517:20 | 14 | 1.0 | +| test.c:517:19:517:20 | (unsigned int)... | 1.0 | +| test.c:517:24:517:25 | 32 | 1.0 | +| test.c:517:24:517:25 | (unsigned int)... | 1.0 | +| test.c:518:9:518:26 | (...) | 1302.0 | +| test.c:518:10:518:10 | 2 | 1.0 | +| test.c:518:10:518:10 | (unsigned int)... | 1.0 | +| test.c:518:10:518:15 | ... * ... | 1302.0 | +| test.c:518:10:518:20 | ... * ... | 1302.0 | +| test.c:518:10:518:25 | ... + ... | 1302.0 | +| test.c:518:14:518:15 | ip | 1302.0 | +| test.c:518:19:518:20 | 14 | 1.0 | +| test.c:518:19:518:20 | (unsigned int)... | 1.0 | +| test.c:518:24:518:25 | 32 | 1.0 | +| test.c:518:24:518:25 | (unsigned int)... | 1.0 | +| test.c:519:9:519:9 | 2 | 1.0 | +| test.c:519:9:519:9 | (unsigned int)... | 1.0 | +| test.c:519:9:519:26 | ... * ... | 1302.0 | +| test.c:519:13:519:26 | (...) | 1302.0 | +| test.c:519:14:519:15 | ip | 1302.0 | +| test.c:519:14:519:20 | ... * ... | 1302.0 | +| test.c:519:14:519:25 | ... + ... | 1302.0 | +| test.c:519:19:519:20 | 14 | 1.0 | +| test.c:519:19:519:20 | (unsigned int)... | 1.0 | +| test.c:519:24:519:25 | 64 | 1.0 | +| test.c:519:24:519:25 | (unsigned int)... | 1.0 | +| test.c:520:9:524:22 | (...) | 1.7677595125E10 | +| test.c:520:10:520:21 | (...) | 1302.0 | +| test.c:520:10:520:26 | ... * ... | 1302.0 | +| test.c:520:10:520:80 | ... > ... | 1.0 | +| test.c:520:10:524:21 | ... ? ... : ... | 1.7677595125E10 | +| test.c:520:11:520:11 | 2 | 1.0 | +| test.c:520:11:520:11 | (unsigned int)... | 1.0 | +| test.c:520:11:520:16 | ... * ... | 1302.0 | +| test.c:520:11:520:20 | ... + ... | 1302.0 | +| test.c:520:15:520:16 | ip | 1302.0 | +| test.c:520:20:520:20 | 1 | 1.0 | +| test.c:520:20:520:20 | (unsigned int)... | 1.0 | +| test.c:520:25:520:26 | 14 | 1.0 | +| test.c:520:25:520:26 | (unsigned int)... | 1.0 | +| test.c:520:30:520:80 | (...) | 1695204.0 | +| test.c:520:31:520:32 | 17 | 1.0 | +| test.c:520:31:520:32 | (unsigned int)... | 1.0 | +| test.c:520:31:520:43 | ... * ... | 1302.0 | +| test.c:520:31:520:53 | ... > ... | 1.0 | +| test.c:520:31:520:79 | ... ? ... : ... | 1695204.0 | +| test.c:520:36:520:43 | (...) | 1302.0 | +| test.c:520:37:520:37 | 2 | 1.0 | +| test.c:520:37:520:37 | (unsigned int)... | 1.0 | +| test.c:520:37:520:42 | ... * ... | 1302.0 | +| test.c:520:41:520:42 | ip | 1302.0 | +| test.c:520:47:520:48 | 17 | 1.0 | +| test.c:520:47:520:48 | (unsigned int)... | 1.0 | +| test.c:520:47:520:53 | ... * ... | 1302.0 | +| test.c:520:52:520:53 | ip | 1302.0 | +| test.c:520:57:520:58 | 17 | 1.0 | +| test.c:520:57:520:58 | (unsigned int)... | 1.0 | +| test.c:520:57:520:69 | ... * ... | 1302.0 | +| test.c:520:62:520:69 | (...) | 1302.0 | +| test.c:520:63:520:63 | 2 | 1.0 | +| test.c:520:63:520:63 | (unsigned int)... | 1.0 | +| test.c:520:63:520:68 | ... * ... | 1302.0 | +| test.c:520:67:520:68 | ip | 1302.0 | +| test.c:520:73:520:74 | 17 | 1.0 | +| test.c:520:73:520:74 | (unsigned int)... | 1.0 | +| test.c:520:73:520:79 | ... * ... | 1302.0 | +| test.c:520:78:520:79 | ip | 1302.0 | +| test.c:521:13:521:24 | (...) | 2605.0 | +| test.c:521:13:521:29 | ... * ... | 2605.0 | +| test.c:521:14:521:14 | 2 | 1.0 | +| test.c:521:14:521:14 | (unsigned int)... | 1.0 | +| test.c:521:14:521:19 | ... * ... | 2605.0 | +| test.c:521:14:521:23 | ... + ... | 2605.0 | +| test.c:521:18:521:19 | ip | 2605.0 | +| test.c:521:23:521:23 | 1 | 1.0 | +| test.c:521:23:521:23 | (unsigned int)... | 1.0 | +| test.c:521:28:521:29 | 14 | 1.0 | +| test.c:521:28:521:29 | (unsigned int)... | 1.0 | +| test.c:522:13:522:14 | 14 | 1.0 | +| test.c:522:13:522:14 | (unsigned int)... | 1.0 | +| test.c:522:13:522:25 | ... * ... | 2605.0 | +| test.c:522:13:522:35 | ... > ... | 1.0 | +| test.c:522:13:524:21 | ... ? ... : ... | 6786025.0 | +| test.c:522:18:522:25 | (...) | 2605.0 | +| test.c:522:19:522:19 | 2 | 1.0 | +| test.c:522:19:522:19 | (unsigned int)... | 1.0 | +| test.c:522:19:522:24 | ... * ... | 2605.0 | +| test.c:522:23:522:24 | ip | 2605.0 | +| test.c:522:29:522:30 | 17 | 1.0 | +| test.c:522:29:522:30 | (unsigned int)... | 1.0 | +| test.c:522:29:522:35 | ... * ... | 2605.0 | +| test.c:522:34:522:35 | ip | 2605.0 | +| test.c:523:15:523:16 | 14 | 1.0 | +| test.c:523:15:523:16 | (unsigned int)... | 1.0 | +| test.c:523:15:523:27 | ... * ... | 2605.0 | +| test.c:523:20:523:27 | (...) | 2605.0 | +| test.c:523:21:523:21 | 2 | 1.0 | +| test.c:523:21:523:21 | (unsigned int)... | 1.0 | +| test.c:523:21:523:26 | ... * ... | 2605.0 | +| test.c:523:25:523:26 | ip | 2605.0 | +| test.c:524:15:524:16 | 14 | 1.0 | +| test.c:524:15:524:16 | (unsigned int)... | 1.0 | +| test.c:524:15:524:21 | ... * ... | 2605.0 | +| test.c:524:20:524:21 | ip | 2605.0 | +| test.c:525:9:525:10 | 14 | 1.0 | +| test.c:525:9:525:10 | (unsigned int)... | 1.0 | +| test.c:525:9:525:15 | ... * ... | 1302.0 | +| test.c:525:9:525:31 | ... > ... | 1.0 | +| test.c:525:9:527:23 | ... ? ... : ... | 1695204.0 | +| test.c:525:14:525:15 | ip | 1302.0 | +| test.c:525:19:525:26 | (...) | 1302.0 | +| test.c:525:19:525:31 | ... * ... | 1302.0 | +| test.c:525:20:525:21 | ip | 1302.0 | +| test.c:525:20:525:25 | ... + ... | 1302.0 | +| test.c:525:25:525:25 | 1 | 1.0 | +| test.c:525:25:525:25 | (unsigned int)... | 1.0 | +| test.c:525:30:525:31 | 17 | 1.0 | +| test.c:525:30:525:31 | (unsigned int)... | 1.0 | +| test.c:526:11:526:12 | 14 | 1.0 | +| test.c:526:11:526:12 | (unsigned int)... | 1.0 | +| test.c:526:11:526:17 | ... * ... | 1302.0 | +| test.c:526:16:526:17 | ip | 1302.0 | +| test.c:527:11:527:18 | (...) | 1302.0 | +| test.c:527:11:527:23 | ... * ... | 1302.0 | +| test.c:527:12:527:13 | ip | 1302.0 | +| test.c:527:12:527:17 | ... + ... | 1302.0 | +| test.c:527:17:527:17 | 1 | 1.0 | +| test.c:527:17:527:17 | (unsigned int)... | 1.0 | +| test.c:527:22:527:23 | 14 | 1.0 | +| test.c:527:22:527:23 | (unsigned int)... | 1.0 | +| test.c:528:9:528:9 | 2 | 1.0 | +| test.c:528:9:528:9 | (unsigned int)... | 1.0 | +| test.c:528:9:528:26 | ... * ... | 10419.0 | +| test.c:528:9:548:44 | ... + ... | 1.9449636104972528E43 | +| test.c:528:13:528:26 | (...) | 10419.0 | +| test.c:528:14:528:15 | ip | 10419.0 | +| test.c:528:14:528:20 | ... * ... | 10419.0 | +| test.c:528:14:528:25 | ... + ... | 10419.0 | +| test.c:528:19:528:20 | 14 | 1.0 | +| test.c:528:19:528:20 | (unsigned int)... | 1.0 | +| test.c:528:24:528:25 | 32 | 1.0 | +| test.c:528:24:528:25 | (unsigned int)... | 1.0 | +| test.c:529:9:548:44 | (...) | 1.8667469147684545E39 | +| test.c:529:10:529:10 | 4 | 1.0 | +| test.c:529:10:529:10 | (unsigned int)... | 1.0 | +| test.c:529:10:529:27 | ... * ... | 10419.0 | +| test.c:529:10:530:28 | ... + ... | 1.08555561E8 | +| test.c:529:10:531:28 | ... + ... | 1.131040390059E12 | +| test.c:529:10:537:24 | ... + ... | 1.0235492350954187E25 | +| test.c:529:10:538:39 | ... > ... | 1.0 | +| test.c:529:10:548:43 | ... ? ... : ... | 1.8667469147684545E39 | +| test.c:529:14:529:27 | (...) | 10419.0 | +| test.c:529:15:529:16 | ip | 10419.0 | +| test.c:529:15:529:21 | ... * ... | 10419.0 | +| test.c:529:15:529:26 | ... + ... | 10419.0 | +| test.c:529:20:529:21 | 14 | 1.0 | +| test.c:529:20:529:21 | (unsigned int)... | 1.0 | +| test.c:529:25:529:26 | 32 | 1.0 | +| test.c:529:25:529:26 | (unsigned int)... | 1.0 | +| test.c:530:11:530:28 | (...) | 10419.0 | +| test.c:530:12:530:12 | 2 | 1.0 | +| test.c:530:12:530:12 | (unsigned int)... | 1.0 | +| test.c:530:12:530:17 | ... * ... | 10419.0 | +| test.c:530:12:530:22 | ... * ... | 10419.0 | +| test.c:530:12:530:27 | ... + ... | 10419.0 | +| test.c:530:16:530:17 | ip | 10419.0 | +| test.c:530:21:530:22 | 14 | 1.0 | +| test.c:530:21:530:22 | (unsigned int)... | 1.0 | +| test.c:530:26:530:27 | 32 | 1.0 | +| test.c:530:26:530:27 | (unsigned int)... | 1.0 | +| test.c:531:11:531:11 | 2 | 1.0 | +| test.c:531:11:531:11 | (unsigned int)... | 1.0 | +| test.c:531:11:531:28 | ... * ... | 10419.0 | +| test.c:531:15:531:28 | (...) | 10419.0 | +| test.c:531:16:531:17 | ip | 10419.0 | +| test.c:531:16:531:22 | ... * ... | 10419.0 | +| test.c:531:16:531:27 | ... + ... | 10419.0 | +| test.c:531:21:531:22 | 14 | 1.0 | +| test.c:531:21:531:22 | (unsigned int)... | 1.0 | +| test.c:531:26:531:27 | 64 | 1.0 | +| test.c:531:26:531:27 | (unsigned int)... | 1.0 | +| test.c:532:11:537:24 | (...) | 9.049625849719E12 | +| test.c:532:12:532:23 | (...) | 10419.0 | +| test.c:532:12:532:28 | ... * ... | 10419.0 | +| test.c:532:12:533:61 | ... > ... | 1.0 | +| test.c:532:12:537:23 | ... ? ... : ... | 9.049625849719E12 | +| test.c:532:13:532:13 | 2 | 1.0 | +| test.c:532:13:532:13 | (unsigned int)... | 1.0 | +| test.c:532:13:532:18 | ... * ... | 10419.0 | +| test.c:532:13:532:22 | ... + ... | 10419.0 | +| test.c:532:17:532:18 | ip | 10419.0 | +| test.c:532:22:532:22 | 1 | 1.0 | +| test.c:532:22:532:22 | (unsigned int)... | 1.0 | +| test.c:532:27:532:28 | 14 | 1.0 | +| test.c:532:27:532:28 | (unsigned int)... | 1.0 | +| test.c:533:11:533:61 | (...) | 1.08555561E8 | +| test.c:533:12:533:13 | 14 | 1.0 | +| test.c:533:12:533:13 | (unsigned int)... | 1.0 | +| test.c:533:12:533:24 | ... * ... | 10419.0 | +| test.c:533:12:533:34 | ... > ... | 1.0 | +| test.c:533:12:533:60 | ... ? ... : ... | 1.08555561E8 | +| test.c:533:17:533:24 | (...) | 10419.0 | +| test.c:533:18:533:18 | 2 | 1.0 | +| test.c:533:18:533:18 | (unsigned int)... | 1.0 | +| test.c:533:18:533:23 | ... * ... | 10419.0 | +| test.c:533:22:533:23 | ip | 10419.0 | +| test.c:533:28:533:29 | 17 | 1.0 | | test.c:533:28:533:29 | (unsigned int)... | 1.0 | -| test.c:534:13:534:13 | 2 | 1.0 | -| test.c:534:13:534:13 | (unsigned int)... | 1.0 | -| test.c:534:13:534:30 | ... * ... | 10419.0 | -| test.c:534:17:534:30 | (...) | 10419.0 | -| test.c:534:18:534:19 | ip | 10419.0 | -| test.c:534:18:534:24 | ... * ... | 10419.0 | -| test.c:534:18:534:29 | ... + ... | 10419.0 | -| test.c:534:23:534:24 | 14 | 1.0 | -| test.c:534:23:534:24 | (unsigned int)... | 1.0 | -| test.c:534:28:534:29 | 64 | 1.0 | -| test.c:534:28:534:29 | (unsigned int)... | 1.0 | -| test.c:535:13:540:26 | (...) | 9.049625849719E12 | -| test.c:535:14:535:25 | (...) | 10419.0 | -| test.c:535:14:535:30 | ... * ... | 10419.0 | -| test.c:535:14:536:63 | ... > ... | 1.0 | -| test.c:535:14:540:25 | ... ? ... : ... | 9.049625849719E12 | -| test.c:535:15:535:15 | 2 | 1.0 | -| test.c:535:15:535:15 | (unsigned int)... | 1.0 | -| test.c:535:15:535:20 | ... * ... | 10419.0 | -| test.c:535:15:535:24 | ... + ... | 10419.0 | -| test.c:535:19:535:20 | ip | 10419.0 | -| test.c:535:24:535:24 | 1 | 1.0 | -| test.c:535:24:535:24 | (unsigned int)... | 1.0 | -| test.c:535:29:535:30 | 14 | 1.0 | -| test.c:535:29:535:30 | (unsigned int)... | 1.0 | -| test.c:536:13:536:63 | (...) | 1.08555561E8 | -| test.c:536:14:536:15 | 14 | 1.0 | -| test.c:536:14:536:15 | (unsigned int)... | 1.0 | -| test.c:536:14:536:26 | ... * ... | 10419.0 | -| test.c:536:14:536:36 | ... > ... | 1.0 | -| test.c:536:14:536:62 | ... ? ... : ... | 1.08555561E8 | -| test.c:536:19:536:26 | (...) | 10419.0 | -| test.c:536:20:536:20 | 2 | 1.0 | -| test.c:536:20:536:20 | (unsigned int)... | 1.0 | -| test.c:536:20:536:25 | ... * ... | 10419.0 | -| test.c:536:24:536:25 | ip | 10419.0 | -| test.c:536:30:536:31 | 17 | 1.0 | -| test.c:536:30:536:31 | (unsigned int)... | 1.0 | -| test.c:536:30:536:36 | ... * ... | 10419.0 | -| test.c:536:35:536:36 | ip | 10419.0 | -| test.c:536:40:536:41 | 17 | 1.0 | -| test.c:536:40:536:41 | (unsigned int)... | 1.0 | -| test.c:536:40:536:52 | ... * ... | 10419.0 | -| test.c:536:45:536:52 | (...) | 10419.0 | -| test.c:536:46:536:46 | 2 | 1.0 | -| test.c:536:46:536:46 | (unsigned int)... | 1.0 | -| test.c:536:46:536:51 | ... * ... | 10419.0 | -| test.c:536:50:536:51 | ip | 10419.0 | -| test.c:536:56:536:57 | 17 | 1.0 | -| test.c:536:56:536:57 | (unsigned int)... | 1.0 | -| test.c:536:56:536:62 | ... * ... | 10419.0 | -| test.c:536:61:536:62 | ip | 10419.0 | -| test.c:537:17:537:28 | (...) | 20839.0 | -| test.c:537:17:537:33 | ... * ... | 20839.0 | -| test.c:537:18:537:18 | 2 | 1.0 | -| test.c:537:18:537:18 | (unsigned int)... | 1.0 | -| test.c:537:18:537:23 | ... * ... | 20839.0 | -| test.c:537:18:537:27 | ... + ... | 20839.0 | +| test.c:533:28:533:34 | ... * ... | 10419.0 | +| test.c:533:33:533:34 | ip | 10419.0 | +| test.c:533:38:533:39 | 17 | 1.0 | +| test.c:533:38:533:39 | (unsigned int)... | 1.0 | +| test.c:533:38:533:50 | ... * ... | 10419.0 | +| test.c:533:43:533:50 | (...) | 10419.0 | +| test.c:533:44:533:44 | 2 | 1.0 | +| test.c:533:44:533:44 | (unsigned int)... | 1.0 | +| test.c:533:44:533:49 | ... * ... | 10419.0 | +| test.c:533:48:533:49 | ip | 10419.0 | +| test.c:533:54:533:55 | 17 | 1.0 | +| test.c:533:54:533:55 | (unsigned int)... | 1.0 | +| test.c:533:54:533:60 | ... * ... | 10419.0 | +| test.c:533:59:533:60 | ip | 10419.0 | +| test.c:534:15:534:26 | (...) | 20839.0 | +| test.c:534:15:534:31 | ... * ... | 20839.0 | +| test.c:534:16:534:16 | 2 | 1.0 | +| test.c:534:16:534:16 | (unsigned int)... | 1.0 | +| test.c:534:16:534:21 | ... * ... | 20839.0 | +| test.c:534:16:534:25 | ... + ... | 20839.0 | +| test.c:534:20:534:21 | ip | 20839.0 | +| test.c:534:25:534:25 | 1 | 1.0 | +| test.c:534:25:534:25 | (unsigned int)... | 1.0 | +| test.c:534:30:534:31 | 14 | 1.0 | +| test.c:534:30:534:31 | (unsigned int)... | 1.0 | +| test.c:535:15:535:16 | 14 | 1.0 | +| test.c:535:15:535:16 | (unsigned int)... | 1.0 | +| test.c:535:15:535:27 | ... * ... | 20839.0 | +| test.c:535:15:535:37 | ... > ... | 1.0 | +| test.c:535:15:537:23 | ... ? ... : ... | 4.34263921E8 | +| test.c:535:20:535:27 | (...) | 20839.0 | +| test.c:535:21:535:21 | 2 | 1.0 | +| test.c:535:21:535:21 | (unsigned int)... | 1.0 | +| test.c:535:21:535:26 | ... * ... | 20839.0 | +| test.c:535:25:535:26 | ip | 20839.0 | +| test.c:535:31:535:32 | 17 | 1.0 | +| test.c:535:31:535:32 | (unsigned int)... | 1.0 | +| test.c:535:31:535:37 | ... * ... | 20839.0 | +| test.c:535:36:535:37 | ip | 20839.0 | +| test.c:536:17:536:18 | 14 | 1.0 | +| test.c:536:17:536:18 | (unsigned int)... | 1.0 | +| test.c:536:17:536:29 | ... * ... | 20839.0 | +| test.c:536:22:536:29 | (...) | 20839.0 | +| test.c:536:23:536:23 | 2 | 1.0 | +| test.c:536:23:536:23 | (unsigned int)... | 1.0 | +| test.c:536:23:536:28 | ... * ... | 20839.0 | +| test.c:536:27:536:28 | ip | 20839.0 | +| test.c:537:17:537:18 | 14 | 1.0 | +| test.c:537:17:537:18 | (unsigned int)... | 1.0 | +| test.c:537:17:537:23 | ... * ... | 20839.0 | | test.c:537:22:537:23 | ip | 20839.0 | -| test.c:537:27:537:27 | 1 | 1.0 | -| test.c:537:27:537:27 | (unsigned int)... | 1.0 | -| test.c:537:32:537:33 | 14 | 1.0 | -| test.c:537:32:537:33 | (unsigned int)... | 1.0 | -| test.c:538:17:538:18 | 14 | 1.0 | -| test.c:538:17:538:18 | (unsigned int)... | 1.0 | -| test.c:538:17:538:29 | ... * ... | 20839.0 | -| test.c:538:17:538:39 | ... > ... | 1.0 | -| test.c:538:17:540:25 | ... ? ... : ... | 4.34263921E8 | -| test.c:538:22:538:29 | (...) | 20839.0 | -| test.c:538:23:538:23 | 2 | 1.0 | -| test.c:538:23:538:23 | (unsigned int)... | 1.0 | -| test.c:538:23:538:28 | ... * ... | 20839.0 | -| test.c:538:27:538:28 | ip | 20839.0 | -| test.c:538:33:538:34 | 17 | 1.0 | -| test.c:538:33:538:34 | (unsigned int)... | 1.0 | -| test.c:538:33:538:39 | ... * ... | 20839.0 | -| test.c:538:38:538:39 | ip | 20839.0 | -| test.c:539:19:539:20 | 14 | 1.0 | -| test.c:539:19:539:20 | (unsigned int)... | 1.0 | -| test.c:539:19:539:31 | ... * ... | 20839.0 | -| test.c:539:24:539:31 | (...) | 20839.0 | -| test.c:539:25:539:25 | 2 | 1.0 | -| test.c:539:25:539:25 | (unsigned int)... | 1.0 | -| test.c:539:25:539:30 | ... * ... | 20839.0 | -| test.c:539:29:539:30 | ip | 20839.0 | -| test.c:540:19:540:20 | 14 | 1.0 | -| test.c:540:19:540:20 | (unsigned int)... | 1.0 | -| test.c:540:19:540:25 | ... * ... | 20839.0 | -| test.c:540:24:540:25 | ip | 20839.0 | -| test.c:541:11:541:61 | (...) | 3.908375289E9 | -| test.c:541:12:541:13 | 14 | 1.0 | -| test.c:541:12:541:13 | (unsigned int)... | 1.0 | -| test.c:541:12:541:18 | ... * ... | 62517.0 | -| test.c:541:12:541:34 | ... > ... | 1.0 | -| test.c:541:12:541:60 | ... ? ... : ... | 3.908375289E9 | -| test.c:541:17:541:18 | ip | 62517.0 | -| test.c:541:22:541:29 | (...) | 62517.0 | -| test.c:541:22:541:34 | ... * ... | 62517.0 | -| test.c:541:23:541:24 | ip | 62517.0 | -| test.c:541:23:541:28 | ... + ... | 62517.0 | -| test.c:541:28:541:28 | 1 | 1.0 | -| test.c:541:28:541:28 | (unsigned int)... | 1.0 | -| test.c:541:33:541:34 | 17 | 1.0 | -| test.c:541:33:541:34 | (unsigned int)... | 1.0 | -| test.c:541:38:541:39 | 17 | 1.0 | -| test.c:541:38:541:39 | (unsigned int)... | 1.0 | -| test.c:541:38:541:44 | ... * ... | 62517.0 | -| test.c:541:43:541:44 | ip | 62517.0 | -| test.c:541:48:541:55 | (...) | 62517.0 | -| test.c:541:48:541:60 | ... * ... | 62517.0 | -| test.c:541:49:541:50 | ip | 62517.0 | -| test.c:541:49:541:54 | ... + ... | 62517.0 | -| test.c:541:54:541:54 | 1 | 1.0 | -| test.c:541:54:541:54 | (unsigned int)... | 1.0 | -| test.c:541:59:541:60 | 17 | 1.0 | -| test.c:541:59:541:60 | (unsigned int)... | 1.0 | -| test.c:542:11:542:11 | 4 | 1.0 | -| test.c:542:11:542:11 | (unsigned int)... | 1.0 | -| test.c:542:11:542:28 | ... * ... | 125034.0 | -| test.c:542:11:543:28 | ... + ... | 1.5633501156E10 | -| test.c:542:11:544:28 | ... + ... | 1.954719183539304E15 | -| test.c:542:11:550:24 | ... + ... | 3.056778340269433E31 | -| test.c:542:15:542:28 | (...) | 125034.0 | -| test.c:542:16:542:17 | ip | 125034.0 | -| test.c:542:16:542:22 | ... * ... | 125034.0 | -| test.c:542:16:542:27 | ... + ... | 125034.0 | -| test.c:542:21:542:22 | 14 | 1.0 | -| test.c:542:21:542:22 | (unsigned int)... | 1.0 | -| test.c:542:26:542:27 | 32 | 1.0 | -| test.c:542:26:542:27 | (unsigned int)... | 1.0 | -| test.c:543:11:543:28 | (...) | 125034.0 | -| test.c:543:12:543:12 | 2 | 1.0 | -| test.c:543:12:543:12 | (unsigned int)... | 1.0 | -| test.c:543:12:543:17 | ... * ... | 125034.0 | -| test.c:543:12:543:22 | ... * ... | 125034.0 | -| test.c:543:12:543:27 | ... + ... | 125034.0 | -| test.c:543:16:543:17 | ip | 125034.0 | -| test.c:543:21:543:22 | 14 | 1.0 | -| test.c:543:21:543:22 | (unsigned int)... | 1.0 | -| test.c:543:26:543:27 | 32 | 1.0 | -| test.c:543:26:543:27 | (unsigned int)... | 1.0 | -| test.c:544:11:544:11 | 2 | 1.0 | -| test.c:544:11:544:11 | (unsigned int)... | 1.0 | -| test.c:544:11:544:28 | ... * ... | 125034.0 | -| test.c:544:15:544:28 | (...) | 125034.0 | -| test.c:544:16:544:17 | ip | 125034.0 | -| test.c:544:16:544:22 | ... * ... | 125034.0 | -| test.c:544:16:544:27 | ... + ... | 125034.0 | -| test.c:544:21:544:22 | 14 | 1.0 | -| test.c:544:21:544:22 | (unsigned int)... | 1.0 | -| test.c:544:26:544:27 | 64 | 1.0 | -| test.c:544:26:544:27 | (unsigned int)... | 1.0 | -| test.c:545:11:550:24 | (...) | 1.5637941071078508E16 | -| test.c:545:12:545:23 | (...) | 125034.0 | -| test.c:545:12:545:28 | ... * ... | 125034.0 | -| test.c:545:12:546:61 | ... > ... | 1.0 | -| test.c:545:12:550:23 | ... ? ... : ... | 1.5637941071078508E16 | -| test.c:545:13:545:13 | 2 | 1.0 | -| test.c:545:13:545:13 | (unsigned int)... | 1.0 | -| test.c:545:13:545:18 | ... * ... | 125034.0 | -| test.c:545:13:545:22 | ... + ... | 125034.0 | -| test.c:545:17:545:18 | ip | 125034.0 | -| test.c:545:22:545:22 | 1 | 1.0 | -| test.c:545:22:545:22 | (unsigned int)... | 1.0 | -| test.c:545:27:545:28 | 14 | 1.0 | -| test.c:545:27:545:28 | (unsigned int)... | 1.0 | -| test.c:546:11:546:61 | (...) | 1.5633501156E10 | -| test.c:546:12:546:13 | 14 | 1.0 | -| test.c:546:12:546:13 | (unsigned int)... | 1.0 | -| test.c:546:12:546:24 | ... * ... | 125034.0 | -| test.c:546:12:546:34 | ... > ... | 1.0 | -| test.c:546:12:546:60 | ... ? ... : ... | 1.5633501156E10 | -| test.c:546:17:546:24 | (...) | 125034.0 | -| test.c:546:18:546:18 | 2 | 1.0 | -| test.c:546:18:546:18 | (unsigned int)... | 1.0 | -| test.c:546:18:546:23 | ... * ... | 125034.0 | -| test.c:546:22:546:23 | ip | 125034.0 | -| test.c:546:28:546:29 | 17 | 1.0 | -| test.c:546:28:546:29 | (unsigned int)... | 1.0 | -| test.c:546:28:546:34 | ... * ... | 125034.0 | -| test.c:546:33:546:34 | ip | 125034.0 | -| test.c:546:38:546:39 | 17 | 1.0 | -| test.c:546:38:546:39 | (unsigned int)... | 1.0 | -| test.c:546:38:546:50 | ... * ... | 125034.0 | -| test.c:546:43:546:50 | (...) | 125034.0 | -| test.c:546:44:546:44 | 2 | 1.0 | -| test.c:546:44:546:44 | (unsigned int)... | 1.0 | -| test.c:546:44:546:49 | ... * ... | 125034.0 | -| test.c:546:48:546:49 | ip | 125034.0 | -| test.c:546:54:546:55 | 17 | 1.0 | -| test.c:546:54:546:55 | (unsigned int)... | 1.0 | -| test.c:546:54:546:60 | ... * ... | 125034.0 | -| test.c:546:59:546:60 | ip | 125034.0 | -| test.c:547:15:547:26 | (...) | 250069.0 | -| test.c:547:15:547:31 | ... * ... | 250069.0 | -| test.c:547:16:547:16 | 2 | 1.0 | -| test.c:547:16:547:16 | (unsigned int)... | 1.0 | -| test.c:547:16:547:21 | ... * ... | 250069.0 | -| test.c:547:16:547:25 | ... + ... | 250069.0 | -| test.c:547:20:547:21 | ip | 250069.0 | -| test.c:547:25:547:25 | 1 | 1.0 | -| test.c:547:25:547:25 | (unsigned int)... | 1.0 | -| test.c:547:30:547:31 | 14 | 1.0 | -| test.c:547:30:547:31 | (unsigned int)... | 1.0 | -| test.c:548:15:548:16 | 14 | 1.0 | -| test.c:548:15:548:16 | (unsigned int)... | 1.0 | -| test.c:548:15:548:27 | ... * ... | 250069.0 | -| test.c:548:15:548:37 | ... > ... | 1.0 | -| test.c:548:15:550:23 | ... ? ... : ... | 6.2534504761E10 | -| test.c:548:20:548:27 | (...) | 250069.0 | -| test.c:548:21:548:21 | 2 | 1.0 | -| test.c:548:21:548:21 | (unsigned int)... | 1.0 | -| test.c:548:21:548:26 | ... * ... | 250069.0 | -| test.c:548:25:548:26 | ip | 250069.0 | -| test.c:548:31:548:32 | 17 | 1.0 | -| test.c:548:31:548:32 | (unsigned int)... | 1.0 | -| test.c:548:31:548:37 | ... * ... | 250069.0 | -| test.c:548:36:548:37 | ip | 250069.0 | -| test.c:549:17:549:18 | 14 | 1.0 | -| test.c:549:17:549:18 | (unsigned int)... | 1.0 | -| test.c:549:17:549:29 | ... * ... | 250069.0 | -| test.c:549:22:549:29 | (...) | 250069.0 | -| test.c:549:23:549:23 | 2 | 1.0 | -| test.c:549:23:549:23 | (unsigned int)... | 1.0 | -| test.c:549:23:549:28 | ... * ... | 250069.0 | -| test.c:549:27:549:28 | ip | 250069.0 | -| test.c:550:17:550:18 | 14 | 1.0 | -| test.c:550:17:550:18 | (unsigned int)... | 1.0 | -| test.c:550:17:550:23 | ... * ... | 250069.0 | -| test.c:550:22:550:23 | ip | 250069.0 | -| test.c:551:11:551:12 | 14 | 1.0 | -| test.c:551:11:551:12 | (unsigned int)... | 1.0 | -| test.c:551:11:551:17 | ... * ... | 125034.0 | -| test.c:551:11:551:33 | ... > ... | 1.0 | -| test.c:551:11:553:25 | ... ? ... : ... | 1.5633501156E10 | -| test.c:551:16:551:17 | ip | 125034.0 | -| test.c:551:21:551:28 | (...) | 125034.0 | -| test.c:551:21:551:33 | ... * ... | 125034.0 | -| test.c:551:22:551:23 | ip | 125034.0 | -| test.c:551:22:551:27 | ... + ... | 125034.0 | -| test.c:551:27:551:27 | 1 | 1.0 | -| test.c:551:27:551:27 | (unsigned int)... | 1.0 | -| test.c:551:32:551:33 | 17 | 1.0 | -| test.c:551:32:551:33 | (unsigned int)... | 1.0 | -| test.c:552:13:552:14 | 14 | 1.0 | -| test.c:552:13:552:14 | (unsigned int)... | 1.0 | -| test.c:552:13:552:19 | ... * ... | 125034.0 | -| test.c:552:18:552:19 | ip | 125034.0 | -| test.c:553:13:553:20 | (...) | 125034.0 | -| test.c:553:13:553:25 | ... * ... | 125034.0 | -| test.c:553:14:553:15 | ip | 125034.0 | -| test.c:553:14:553:19 | ... + ... | 125034.0 | -| test.c:553:19:553:19 | 1 | 1.0 | -| test.c:553:19:553:19 | (unsigned int)... | 1.0 | -| test.c:553:24:553:25 | 14 | 1.0 | -| test.c:553:24:553:25 | (unsigned int)... | 1.0 | -| test.c:554:9:554:10 | 14 | 1.0 | -| test.c:554:9:554:10 | (unsigned int)... | 1.0 | -| test.c:554:9:554:15 | ... * ... | 1437897.0 | -| test.c:554:9:554:59 | ... > ... | 1.0 | -| test.c:554:9:556:51 | ... ? ... : ... | 2.9729207539701335E18 | -| test.c:554:14:554:15 | ip | 1437897.0 | -| test.c:554:19:554:30 | (...) | 1437897.0 | -| test.c:554:19:554:35 | ... * ... | 1437897.0 | -| test.c:554:19:554:59 | ... + ... | 2.067547782609E12 | -| test.c:554:20:554:20 | 2 | 1.0 | -| test.c:554:20:554:20 | (unsigned int)... | 1.0 | -| test.c:554:20:554:25 | ... * ... | 1437897.0 | -| test.c:554:20:554:29 | ... + ... | 1437897.0 | -| test.c:554:24:554:25 | ip | 1437897.0 | -| test.c:554:29:554:29 | 1 | 1.0 | -| test.c:554:29:554:29 | (unsigned int)... | 1.0 | -| test.c:554:34:554:35 | 17 | 1.0 | -| test.c:554:34:554:35 | (unsigned int)... | 1.0 | -| test.c:554:39:554:54 | (...) | 1437897.0 | -| test.c:554:39:554:59 | ... * ... | 1437897.0 | -| test.c:554:40:554:40 | 2 | 1.0 | -| test.c:554:40:554:40 | (unsigned int)... | 1.0 | -| test.c:554:40:554:45 | ... * ... | 1437897.0 | -| test.c:554:40:554:49 | ... + ... | 1437897.0 | -| test.c:554:40:554:53 | ... + ... | 1437897.0 | -| test.c:554:44:554:45 | ip | 1437897.0 | -| test.c:554:49:554:49 | 1 | 1.0 | -| test.c:554:49:554:49 | (unsigned int)... | 1.0 | -| test.c:554:53:554:53 | 1 | 1.0 | -| test.c:554:53:554:53 | (unsigned int)... | 1.0 | -| test.c:554:58:554:59 | 17 | 1.0 | -| test.c:554:58:554:59 | (unsigned int)... | 1.0 | -| test.c:555:11:555:12 | 14 | 1.0 | -| test.c:555:11:555:12 | (unsigned int)... | 1.0 | -| test.c:555:11:555:17 | ... * ... | 1437897.0 | -| test.c:555:16:555:17 | ip | 1437897.0 | -| test.c:556:11:556:22 | (...) | 1437897.0 | -| test.c:556:11:556:27 | ... * ... | 1437897.0 | -| test.c:556:11:556:51 | ... + ... | 2.067547782609E12 | -| test.c:556:12:556:12 | 2 | 1.0 | -| test.c:556:12:556:12 | (unsigned int)... | 1.0 | -| test.c:556:12:556:17 | ... * ... | 1437897.0 | -| test.c:556:12:556:21 | ... + ... | 1437897.0 | -| test.c:556:16:556:17 | ip | 1437897.0 | -| test.c:556:21:556:21 | 1 | 1.0 | -| test.c:556:21:556:21 | (unsigned int)... | 1.0 | -| test.c:556:26:556:27 | 14 | 1.0 | -| test.c:556:26:556:27 | (unsigned int)... | 1.0 | -| test.c:556:31:556:46 | (...) | 1437897.0 | -| test.c:556:31:556:51 | ... * ... | 1437897.0 | -| test.c:556:32:556:32 | 2 | 1.0 | -| test.c:556:32:556:32 | (unsigned int)... | 1.0 | -| test.c:556:32:556:37 | ... * ... | 1437897.0 | -| test.c:556:32:556:41 | ... + ... | 1437897.0 | -| test.c:556:32:556:45 | ... + ... | 1437897.0 | -| test.c:556:36:556:37 | ip | 1437897.0 | -| test.c:556:41:556:41 | 1 | 1.0 | -| test.c:556:41:556:41 | (unsigned int)... | 1.0 | -| test.c:556:45:556:45 | 1 | 1.0 | -| test.c:556:45:556:45 | (unsigned int)... | 1.0 | -| test.c:556:50:556:51 | 17 | 1.0 | -| test.c:556:50:556:51 | (unsigned int)... | 1.0 | -| test.c:557:9:557:9 | 2 | 1.0 | -| test.c:557:9:557:9 | (unsigned int)... | 1.0 | -| test.c:557:9:557:26 | ... * ... | 1437897.0 | -| test.c:557:9:577:48 | ... + ... | 3.5306223994138077E62 | -| test.c:557:9:599:30 | ... > ... | 1.0 | -| test.c:557:9:642:27 | ... ? ... : ... | 4.3658022750663434E182 | -| test.c:557:13:557:26 | (...) | 1437897.0 | -| test.c:557:14:557:15 | ip | 1437897.0 | -| test.c:557:14:557:20 | ... * ... | 1437897.0 | -| test.c:557:14:557:25 | ... + ... | 1437897.0 | +| test.c:538:9:538:9 | 2 | 1.0 | +| test.c:538:9:538:9 | (unsigned int)... | 1.0 | +| test.c:538:9:538:14 | ... * ... | 62517.0 | +| test.c:538:9:538:19 | ... * ... | 62517.0 | +| test.c:538:9:538:39 | ... + ... | 3.908375289E9 | +| test.c:538:13:538:14 | ip | 62517.0 | +| test.c:538:18:538:19 | 14 | 1.0 | +| test.c:538:18:538:19 | (unsigned int)... | 1.0 | +| test.c:538:23:538:34 | (...) | 62517.0 | +| test.c:538:23:538:39 | ... * ... | 62517.0 | +| test.c:538:24:538:24 | 2 | 1.0 | +| test.c:538:24:538:24 | (unsigned int)... | 1.0 | +| test.c:538:24:538:29 | ... * ... | 62517.0 | +| test.c:538:24:538:33 | ... + ... | 62517.0 | +| test.c:538:28:538:29 | ip | 62517.0 | +| test.c:538:33:538:33 | 1 | 1.0 | +| test.c:538:33:538:33 | (unsigned int)... | 1.0 | +| test.c:538:38:538:39 | 17 | 1.0 | +| test.c:538:38:538:39 | (unsigned int)... | 1.0 | +| test.c:539:13:539:13 | 4 | 1.0 | +| test.c:539:13:539:13 | (unsigned int)... | 1.0 | +| test.c:539:13:539:30 | ... * ... | 62517.0 | +| test.c:539:13:540:30 | ... + ... | 3.908375289E9 | +| test.c:539:13:541:30 | ... + ... | 2.44339897942413E14 | +| test.c:539:13:547:26 | ... + ... | 4.7762734556795386E29 | +| test.c:539:17:539:30 | (...) | 62517.0 | +| test.c:539:18:539:19 | ip | 62517.0 | +| test.c:539:18:539:24 | ... * ... | 62517.0 | +| test.c:539:18:539:29 | ... + ... | 62517.0 | +| test.c:539:23:539:24 | 14 | 1.0 | +| test.c:539:23:539:24 | (unsigned int)... | 1.0 | +| test.c:539:28:539:29 | 32 | 1.0 | +| test.c:539:28:539:29 | (unsigned int)... | 1.0 | +| test.c:540:13:540:30 | (...) | 62517.0 | +| test.c:540:14:540:14 | 2 | 1.0 | +| test.c:540:14:540:14 | (unsigned int)... | 1.0 | +| test.c:540:14:540:19 | ... * ... | 62517.0 | +| test.c:540:14:540:24 | ... * ... | 62517.0 | +| test.c:540:14:540:29 | ... + ... | 62517.0 | +| test.c:540:18:540:19 | ip | 62517.0 | +| test.c:540:23:540:24 | 14 | 1.0 | +| test.c:540:23:540:24 | (unsigned int)... | 1.0 | +| test.c:540:28:540:29 | 32 | 1.0 | +| test.c:540:28:540:29 | (unsigned int)... | 1.0 | +| test.c:541:13:541:13 | 2 | 1.0 | +| test.c:541:13:541:13 | (unsigned int)... | 1.0 | +| test.c:541:13:541:30 | ... * ... | 62517.0 | +| test.c:541:17:541:30 | (...) | 62517.0 | +| test.c:541:18:541:19 | ip | 62517.0 | +| test.c:541:18:541:24 | ... * ... | 62517.0 | +| test.c:541:18:541:29 | ... + ... | 62517.0 | +| test.c:541:23:541:24 | 14 | 1.0 | +| test.c:541:23:541:24 | (unsigned int)... | 1.0 | +| test.c:541:28:541:29 | 64 | 1.0 | +| test.c:541:28:541:29 | (unsigned int)... | 1.0 | +| test.c:542:13:547:26 | (...) | 1.954766084417875E15 | +| test.c:542:14:542:25 | (...) | 62517.0 | +| test.c:542:14:542:30 | ... * ... | 62517.0 | +| test.c:542:14:543:63 | ... > ... | 1.0 | +| test.c:542:14:547:25 | ... ? ... : ... | 1.954766084417875E15 | +| test.c:542:15:542:15 | 2 | 1.0 | +| test.c:542:15:542:15 | (unsigned int)... | 1.0 | +| test.c:542:15:542:20 | ... * ... | 62517.0 | +| test.c:542:15:542:24 | ... + ... | 62517.0 | +| test.c:542:19:542:20 | ip | 62517.0 | +| test.c:542:24:542:24 | 1 | 1.0 | +| test.c:542:24:542:24 | (unsigned int)... | 1.0 | +| test.c:542:29:542:30 | 14 | 1.0 | +| test.c:542:29:542:30 | (unsigned int)... | 1.0 | +| test.c:543:13:543:63 | (...) | 3.908375289E9 | +| test.c:543:14:543:15 | 14 | 1.0 | +| test.c:543:14:543:15 | (unsigned int)... | 1.0 | +| test.c:543:14:543:26 | ... * ... | 62517.0 | +| test.c:543:14:543:36 | ... > ... | 1.0 | +| test.c:543:14:543:62 | ... ? ... : ... | 3.908375289E9 | +| test.c:543:19:543:26 | (...) | 62517.0 | +| test.c:543:20:543:20 | 2 | 1.0 | +| test.c:543:20:543:20 | (unsigned int)... | 1.0 | +| test.c:543:20:543:25 | ... * ... | 62517.0 | +| test.c:543:24:543:25 | ip | 62517.0 | +| test.c:543:30:543:31 | 17 | 1.0 | +| test.c:543:30:543:31 | (unsigned int)... | 1.0 | +| test.c:543:30:543:36 | ... * ... | 62517.0 | +| test.c:543:35:543:36 | ip | 62517.0 | +| test.c:543:40:543:41 | 17 | 1.0 | +| test.c:543:40:543:41 | (unsigned int)... | 1.0 | +| test.c:543:40:543:52 | ... * ... | 62517.0 | +| test.c:543:45:543:52 | (...) | 62517.0 | +| test.c:543:46:543:46 | 2 | 1.0 | +| test.c:543:46:543:46 | (unsigned int)... | 1.0 | +| test.c:543:46:543:51 | ... * ... | 62517.0 | +| test.c:543:50:543:51 | ip | 62517.0 | +| test.c:543:56:543:57 | 17 | 1.0 | +| test.c:543:56:543:57 | (unsigned int)... | 1.0 | +| test.c:543:56:543:62 | ... * ... | 62517.0 | +| test.c:543:61:543:62 | ip | 62517.0 | +| test.c:544:17:544:28 | (...) | 125035.0 | +| test.c:544:17:544:33 | ... * ... | 125035.0 | +| test.c:544:18:544:18 | 2 | 1.0 | +| test.c:544:18:544:18 | (unsigned int)... | 1.0 | +| test.c:544:18:544:23 | ... * ... | 125035.0 | +| test.c:544:18:544:27 | ... + ... | 125035.0 | +| test.c:544:22:544:23 | ip | 125035.0 | +| test.c:544:27:544:27 | 1 | 1.0 | +| test.c:544:27:544:27 | (unsigned int)... | 1.0 | +| test.c:544:32:544:33 | 14 | 1.0 | +| test.c:544:32:544:33 | (unsigned int)... | 1.0 | +| test.c:545:17:545:18 | 14 | 1.0 | +| test.c:545:17:545:18 | (unsigned int)... | 1.0 | +| test.c:545:17:545:29 | ... * ... | 125035.0 | +| test.c:545:17:545:39 | ... > ... | 1.0 | +| test.c:545:17:547:25 | ... ? ... : ... | 1.5633751225E10 | +| test.c:545:22:545:29 | (...) | 125035.0 | +| test.c:545:23:545:23 | 2 | 1.0 | +| test.c:545:23:545:23 | (unsigned int)... | 1.0 | +| test.c:545:23:545:28 | ... * ... | 125035.0 | +| test.c:545:27:545:28 | ip | 125035.0 | +| test.c:545:33:545:34 | 17 | 1.0 | +| test.c:545:33:545:34 | (unsigned int)... | 1.0 | +| test.c:545:33:545:39 | ... * ... | 125035.0 | +| test.c:545:38:545:39 | ip | 125035.0 | +| test.c:546:19:546:20 | 14 | 1.0 | +| test.c:546:19:546:20 | (unsigned int)... | 1.0 | +| test.c:546:19:546:31 | ... * ... | 125035.0 | +| test.c:546:24:546:31 | (...) | 125035.0 | +| test.c:546:25:546:25 | 2 | 1.0 | +| test.c:546:25:546:25 | (unsigned int)... | 1.0 | +| test.c:546:25:546:30 | ... * ... | 125035.0 | +| test.c:546:29:546:30 | ip | 125035.0 | +| test.c:547:19:547:20 | 14 | 1.0 | +| test.c:547:19:547:20 | (unsigned int)... | 1.0 | +| test.c:547:19:547:25 | ... * ... | 125035.0 | +| test.c:547:24:547:25 | ip | 125035.0 | +| test.c:548:13:548:13 | 2 | 1.0 | +| test.c:548:13:548:13 | (unsigned int)... | 1.0 | +| test.c:548:13:548:18 | ... * ... | 62517.0 | +| test.c:548:13:548:23 | ... * ... | 62517.0 | +| test.c:548:13:548:43 | ... + ... | 3.908375289E9 | +| test.c:548:17:548:18 | ip | 62517.0 | +| test.c:548:22:548:23 | 14 | 1.0 | +| test.c:548:22:548:23 | (unsigned int)... | 1.0 | +| test.c:548:27:548:38 | (...) | 62517.0 | +| test.c:548:27:548:43 | ... * ... | 62517.0 | +| test.c:548:28:548:28 | 2 | 1.0 | +| test.c:548:28:548:28 | (unsigned int)... | 1.0 | +| test.c:548:28:548:33 | ... * ... | 62517.0 | +| test.c:548:28:548:37 | ... + ... | 62517.0 | +| test.c:548:32:548:33 | ip | 62517.0 | +| test.c:548:37:548:37 | 1 | 1.0 | +| test.c:548:37:548:37 | (unsigned int)... | 1.0 | +| test.c:548:42:548:43 | 17 | 1.0 | +| test.c:548:42:548:43 | (unsigned int)... | 1.0 | +| test.c:549:9:549:9 | 4 | 1.0 | +| test.c:549:9:549:9 | (unsigned int)... | 1.0 | +| test.c:549:9:549:26 | ... * ... | 10419.0 | +| test.c:549:9:550:30 | ... + ... | 1.08555561E8 | +| test.c:549:9:551:30 | ... + ... | 1.131040390059E12 | +| test.c:549:9:557:26 | ... + ... | 1.0235492350954187E25 | +| test.c:549:9:558:61 | ... > ... | 1.0 | +| test.c:549:9:570:25 | ... ? ... : ... | 4.778814771623795E41 | +| test.c:549:13:549:26 | (...) | 10419.0 | +| test.c:549:14:549:15 | ip | 10419.0 | +| test.c:549:14:549:20 | ... * ... | 10419.0 | +| test.c:549:14:549:25 | ... + ... | 10419.0 | +| test.c:549:19:549:20 | 14 | 1.0 | +| test.c:549:19:549:20 | (unsigned int)... | 1.0 | +| test.c:549:24:549:25 | 32 | 1.0 | +| test.c:549:24:549:25 | (unsigned int)... | 1.0 | +| test.c:550:13:550:30 | (...) | 10419.0 | +| test.c:550:14:550:14 | 2 | 1.0 | +| test.c:550:14:550:14 | (unsigned int)... | 1.0 | +| test.c:550:14:550:19 | ... * ... | 10419.0 | +| test.c:550:14:550:24 | ... * ... | 10419.0 | +| test.c:550:14:550:29 | ... + ... | 10419.0 | +| test.c:550:18:550:19 | ip | 10419.0 | +| test.c:550:23:550:24 | 14 | 1.0 | +| test.c:550:23:550:24 | (unsigned int)... | 1.0 | +| test.c:550:28:550:29 | 32 | 1.0 | +| test.c:550:28:550:29 | (unsigned int)... | 1.0 | +| test.c:551:13:551:13 | 2 | 1.0 | +| test.c:551:13:551:13 | (unsigned int)... | 1.0 | +| test.c:551:13:551:30 | ... * ... | 10419.0 | +| test.c:551:17:551:30 | (...) | 10419.0 | +| test.c:551:18:551:19 | ip | 10419.0 | +| test.c:551:18:551:24 | ... * ... | 10419.0 | +| test.c:551:18:551:29 | ... + ... | 10419.0 | +| test.c:551:23:551:24 | 14 | 1.0 | +| test.c:551:23:551:24 | (unsigned int)... | 1.0 | +| test.c:551:28:551:29 | 64 | 1.0 | +| test.c:551:28:551:29 | (unsigned int)... | 1.0 | +| test.c:552:13:557:26 | (...) | 9.049625849719E12 | +| test.c:552:14:552:25 | (...) | 10419.0 | +| test.c:552:14:552:30 | ... * ... | 10419.0 | +| test.c:552:14:553:63 | ... > ... | 1.0 | +| test.c:552:14:557:25 | ... ? ... : ... | 9.049625849719E12 | +| test.c:552:15:552:15 | 2 | 1.0 | +| test.c:552:15:552:15 | (unsigned int)... | 1.0 | +| test.c:552:15:552:20 | ... * ... | 10419.0 | +| test.c:552:15:552:24 | ... + ... | 10419.0 | +| test.c:552:19:552:20 | ip | 10419.0 | +| test.c:552:24:552:24 | 1 | 1.0 | +| test.c:552:24:552:24 | (unsigned int)... | 1.0 | +| test.c:552:29:552:30 | 14 | 1.0 | +| test.c:552:29:552:30 | (unsigned int)... | 1.0 | +| test.c:553:13:553:63 | (...) | 1.08555561E8 | +| test.c:553:14:553:15 | 14 | 1.0 | +| test.c:553:14:553:15 | (unsigned int)... | 1.0 | +| test.c:553:14:553:26 | ... * ... | 10419.0 | +| test.c:553:14:553:36 | ... > ... | 1.0 | +| test.c:553:14:553:62 | ... ? ... : ... | 1.08555561E8 | +| test.c:553:19:553:26 | (...) | 10419.0 | +| test.c:553:20:553:20 | 2 | 1.0 | +| test.c:553:20:553:20 | (unsigned int)... | 1.0 | +| test.c:553:20:553:25 | ... * ... | 10419.0 | +| test.c:553:24:553:25 | ip | 10419.0 | +| test.c:553:30:553:31 | 17 | 1.0 | +| test.c:553:30:553:31 | (unsigned int)... | 1.0 | +| test.c:553:30:553:36 | ... * ... | 10419.0 | +| test.c:553:35:553:36 | ip | 10419.0 | +| test.c:553:40:553:41 | 17 | 1.0 | +| test.c:553:40:553:41 | (unsigned int)... | 1.0 | +| test.c:553:40:553:52 | ... * ... | 10419.0 | +| test.c:553:45:553:52 | (...) | 10419.0 | +| test.c:553:46:553:46 | 2 | 1.0 | +| test.c:553:46:553:46 | (unsigned int)... | 1.0 | +| test.c:553:46:553:51 | ... * ... | 10419.0 | +| test.c:553:50:553:51 | ip | 10419.0 | +| test.c:553:56:553:57 | 17 | 1.0 | +| test.c:553:56:553:57 | (unsigned int)... | 1.0 | +| test.c:553:56:553:62 | ... * ... | 10419.0 | +| test.c:553:61:553:62 | ip | 10419.0 | +| test.c:554:17:554:28 | (...) | 20839.0 | +| test.c:554:17:554:33 | ... * ... | 20839.0 | +| test.c:554:18:554:18 | 2 | 1.0 | +| test.c:554:18:554:18 | (unsigned int)... | 1.0 | +| test.c:554:18:554:23 | ... * ... | 20839.0 | +| test.c:554:18:554:27 | ... + ... | 20839.0 | +| test.c:554:22:554:23 | ip | 20839.0 | +| test.c:554:27:554:27 | 1 | 1.0 | +| test.c:554:27:554:27 | (unsigned int)... | 1.0 | +| test.c:554:32:554:33 | 14 | 1.0 | +| test.c:554:32:554:33 | (unsigned int)... | 1.0 | +| test.c:555:17:555:18 | 14 | 1.0 | +| test.c:555:17:555:18 | (unsigned int)... | 1.0 | +| test.c:555:17:555:29 | ... * ... | 20839.0 | +| test.c:555:17:555:39 | ... > ... | 1.0 | +| test.c:555:17:557:25 | ... ? ... : ... | 4.34263921E8 | +| test.c:555:22:555:29 | (...) | 20839.0 | +| test.c:555:23:555:23 | 2 | 1.0 | +| test.c:555:23:555:23 | (unsigned int)... | 1.0 | +| test.c:555:23:555:28 | ... * ... | 20839.0 | +| test.c:555:27:555:28 | ip | 20839.0 | +| test.c:555:33:555:34 | 17 | 1.0 | +| test.c:555:33:555:34 | (unsigned int)... | 1.0 | +| test.c:555:33:555:39 | ... * ... | 20839.0 | +| test.c:555:38:555:39 | ip | 20839.0 | +| test.c:556:19:556:20 | 14 | 1.0 | +| test.c:556:19:556:20 | (unsigned int)... | 1.0 | +| test.c:556:19:556:31 | ... * ... | 20839.0 | +| test.c:556:24:556:31 | (...) | 20839.0 | +| test.c:556:25:556:25 | 2 | 1.0 | +| test.c:556:25:556:25 | (unsigned int)... | 1.0 | +| test.c:556:25:556:30 | ... * ... | 20839.0 | +| test.c:556:29:556:30 | ip | 20839.0 | | test.c:557:19:557:20 | 14 | 1.0 | | test.c:557:19:557:20 | (unsigned int)... | 1.0 | -| test.c:557:24:557:25 | 32 | 1.0 | -| test.c:557:24:557:25 | (unsigned int)... | 1.0 | -| test.c:558:13:577:48 | (...) | 2.4554070280512497E56 | -| test.c:558:14:558:14 | 4 | 1.0 | -| test.c:558:14:558:14 | (unsigned int)... | 1.0 | -| test.c:558:14:558:31 | ... * ... | 1437897.0 | -| test.c:558:14:559:32 | ... + ... | 2.067547782609E12 | -| test.c:558:14:560:32 | ... + ... | 2.9729207539701335E18 | -| test.c:558:14:566:28 | ... + ... | 7.070613623498497E37 | -| test.c:558:14:567:43 | ... > ... | 1.0 | -| test.c:558:14:577:47 | ... ? ... : ... | 2.4554070280512497E56 | -| test.c:558:18:558:31 | (...) | 1437897.0 | -| test.c:558:19:558:20 | ip | 1437897.0 | -| test.c:558:19:558:25 | ... * ... | 1437897.0 | -| test.c:558:19:558:30 | ... + ... | 1437897.0 | -| test.c:558:24:558:25 | 14 | 1.0 | -| test.c:558:24:558:25 | (unsigned int)... | 1.0 | -| test.c:558:29:558:30 | 32 | 1.0 | -| test.c:558:29:558:30 | (unsigned int)... | 1.0 | -| test.c:559:15:559:32 | (...) | 1437897.0 | -| test.c:559:16:559:16 | 2 | 1.0 | -| test.c:559:16:559:16 | (unsigned int)... | 1.0 | -| test.c:559:16:559:21 | ... * ... | 1437897.0 | -| test.c:559:16:559:26 | ... * ... | 1437897.0 | -| test.c:559:16:559:31 | ... + ... | 1437897.0 | -| test.c:559:20:559:21 | ip | 1437897.0 | -| test.c:559:25:559:26 | 14 | 1.0 | -| test.c:559:25:559:26 | (unsigned int)... | 1.0 | -| test.c:559:30:559:31 | 32 | 1.0 | -| test.c:559:30:559:31 | (unsigned int)... | 1.0 | -| test.c:560:15:560:15 | 2 | 1.0 | -| test.c:560:15:560:15 | (unsigned int)... | 1.0 | -| test.c:560:15:560:32 | ... * ... | 1437897.0 | -| test.c:560:19:560:32 | (...) | 1437897.0 | -| test.c:560:20:560:21 | ip | 1437897.0 | -| test.c:560:20:560:26 | ... * ... | 1437897.0 | -| test.c:560:20:560:31 | ... + ... | 1437897.0 | -| test.c:560:25:560:26 | 14 | 1.0 | -| test.c:560:25:560:26 | (unsigned int)... | 1.0 | -| test.c:560:30:560:31 | 64 | 1.0 | -| test.c:560:30:560:31 | (unsigned int)... | 1.0 | -| test.c:561:15:566:28 | (...) | 2.3783390842343084E19 | -| test.c:561:16:561:27 | (...) | 1437897.0 | -| test.c:561:16:561:32 | ... * ... | 1437897.0 | -| test.c:561:16:562:65 | ... > ... | 1.0 | -| test.c:561:16:566:27 | ... ? ... : ... | 2.3783390842343084E19 | -| test.c:561:17:561:17 | 2 | 1.0 | -| test.c:561:17:561:17 | (unsigned int)... | 1.0 | -| test.c:561:17:561:22 | ... * ... | 1437897.0 | -| test.c:561:17:561:26 | ... + ... | 1437897.0 | -| test.c:561:21:561:22 | ip | 1437897.0 | -| test.c:561:26:561:26 | 1 | 1.0 | -| test.c:561:26:561:26 | (unsigned int)... | 1.0 | -| test.c:561:31:561:32 | 14 | 1.0 | -| test.c:561:31:561:32 | (unsigned int)... | 1.0 | -| test.c:562:15:562:65 | (...) | 2.067547782609E12 | -| test.c:562:16:562:17 | 14 | 1.0 | -| test.c:562:16:562:17 | (unsigned int)... | 1.0 | -| test.c:562:16:562:28 | ... * ... | 1437897.0 | -| test.c:562:16:562:38 | ... > ... | 1.0 | -| test.c:562:16:562:64 | ... ? ... : ... | 2.067547782609E12 | -| test.c:562:21:562:28 | (...) | 1437897.0 | -| test.c:562:22:562:22 | 2 | 1.0 | +| test.c:557:19:557:25 | ... * ... | 20839.0 | +| test.c:557:24:557:25 | ip | 20839.0 | +| test.c:558:11:558:61 | (...) | 3.908375289E9 | +| test.c:558:12:558:13 | 14 | 1.0 | +| test.c:558:12:558:13 | (unsigned int)... | 1.0 | +| test.c:558:12:558:18 | ... * ... | 62517.0 | +| test.c:558:12:558:34 | ... > ... | 1.0 | +| test.c:558:12:558:60 | ... ? ... : ... | 3.908375289E9 | +| test.c:558:17:558:18 | ip | 62517.0 | +| test.c:558:22:558:29 | (...) | 62517.0 | +| test.c:558:22:558:34 | ... * ... | 62517.0 | +| test.c:558:23:558:24 | ip | 62517.0 | +| test.c:558:23:558:28 | ... + ... | 62517.0 | +| test.c:558:28:558:28 | 1 | 1.0 | +| test.c:558:28:558:28 | (unsigned int)... | 1.0 | +| test.c:558:33:558:34 | 17 | 1.0 | +| test.c:558:33:558:34 | (unsigned int)... | 1.0 | +| test.c:558:38:558:39 | 17 | 1.0 | +| test.c:558:38:558:39 | (unsigned int)... | 1.0 | +| test.c:558:38:558:44 | ... * ... | 62517.0 | +| test.c:558:43:558:44 | ip | 62517.0 | +| test.c:558:48:558:55 | (...) | 62517.0 | +| test.c:558:48:558:60 | ... * ... | 62517.0 | +| test.c:558:49:558:50 | ip | 62517.0 | +| test.c:558:49:558:54 | ... + ... | 62517.0 | +| test.c:558:54:558:54 | 1 | 1.0 | +| test.c:558:54:558:54 | (unsigned int)... | 1.0 | +| test.c:558:59:558:60 | 17 | 1.0 | +| test.c:558:59:558:60 | (unsigned int)... | 1.0 | +| test.c:559:11:559:11 | 4 | 1.0 | +| test.c:559:11:559:11 | (unsigned int)... | 1.0 | +| test.c:559:11:559:28 | ... * ... | 125034.0 | +| test.c:559:11:560:28 | ... + ... | 1.5633501156E10 | +| test.c:559:11:561:28 | ... + ... | 1.954719183539304E15 | +| test.c:559:11:567:24 | ... + ... | 3.056778340269433E31 | +| test.c:559:15:559:28 | (...) | 125034.0 | +| test.c:559:16:559:17 | ip | 125034.0 | +| test.c:559:16:559:22 | ... * ... | 125034.0 | +| test.c:559:16:559:27 | ... + ... | 125034.0 | +| test.c:559:21:559:22 | 14 | 1.0 | +| test.c:559:21:559:22 | (unsigned int)... | 1.0 | +| test.c:559:26:559:27 | 32 | 1.0 | +| test.c:559:26:559:27 | (unsigned int)... | 1.0 | +| test.c:560:11:560:28 | (...) | 125034.0 | +| test.c:560:12:560:12 | 2 | 1.0 | +| test.c:560:12:560:12 | (unsigned int)... | 1.0 | +| test.c:560:12:560:17 | ... * ... | 125034.0 | +| test.c:560:12:560:22 | ... * ... | 125034.0 | +| test.c:560:12:560:27 | ... + ... | 125034.0 | +| test.c:560:16:560:17 | ip | 125034.0 | +| test.c:560:21:560:22 | 14 | 1.0 | +| test.c:560:21:560:22 | (unsigned int)... | 1.0 | +| test.c:560:26:560:27 | 32 | 1.0 | +| test.c:560:26:560:27 | (unsigned int)... | 1.0 | +| test.c:561:11:561:11 | 2 | 1.0 | +| test.c:561:11:561:11 | (unsigned int)... | 1.0 | +| test.c:561:11:561:28 | ... * ... | 125034.0 | +| test.c:561:15:561:28 | (...) | 125034.0 | +| test.c:561:16:561:17 | ip | 125034.0 | +| test.c:561:16:561:22 | ... * ... | 125034.0 | +| test.c:561:16:561:27 | ... + ... | 125034.0 | +| test.c:561:21:561:22 | 14 | 1.0 | +| test.c:561:21:561:22 | (unsigned int)... | 1.0 | +| test.c:561:26:561:27 | 64 | 1.0 | +| test.c:561:26:561:27 | (unsigned int)... | 1.0 | +| test.c:562:11:567:24 | (...) | 1.5637941071078508E16 | +| test.c:562:12:562:23 | (...) | 125034.0 | +| test.c:562:12:562:28 | ... * ... | 125034.0 | +| test.c:562:12:563:61 | ... > ... | 1.0 | +| test.c:562:12:567:23 | ... ? ... : ... | 1.5637941071078508E16 | +| test.c:562:13:562:13 | 2 | 1.0 | +| test.c:562:13:562:13 | (unsigned int)... | 1.0 | +| test.c:562:13:562:18 | ... * ... | 125034.0 | +| test.c:562:13:562:22 | ... + ... | 125034.0 | +| test.c:562:17:562:18 | ip | 125034.0 | +| test.c:562:22:562:22 | 1 | 1.0 | | test.c:562:22:562:22 | (unsigned int)... | 1.0 | -| test.c:562:22:562:27 | ... * ... | 1437897.0 | -| test.c:562:26:562:27 | ip | 1437897.0 | -| test.c:562:32:562:33 | 17 | 1.0 | -| test.c:562:32:562:33 | (unsigned int)... | 1.0 | -| test.c:562:32:562:38 | ... * ... | 1437897.0 | -| test.c:562:37:562:38 | ip | 1437897.0 | -| test.c:562:42:562:43 | 17 | 1.0 | -| test.c:562:42:562:43 | (unsigned int)... | 1.0 | -| test.c:562:42:562:54 | ... * ... | 1437897.0 | -| test.c:562:47:562:54 | (...) | 1437897.0 | -| test.c:562:48:562:48 | 2 | 1.0 | -| test.c:562:48:562:48 | (unsigned int)... | 1.0 | -| test.c:562:48:562:53 | ... * ... | 1437897.0 | -| test.c:562:52:562:53 | ip | 1437897.0 | -| test.c:562:58:562:59 | 17 | 1.0 | -| test.c:562:58:562:59 | (unsigned int)... | 1.0 | -| test.c:562:58:562:64 | ... * ... | 1437897.0 | -| test.c:562:63:562:64 | ip | 1437897.0 | -| test.c:563:19:563:30 | (...) | 2875795.0 | -| test.c:563:19:563:35 | ... * ... | 2875795.0 | -| test.c:563:20:563:20 | 2 | 1.0 | -| test.c:563:20:563:20 | (unsigned int)... | 1.0 | -| test.c:563:20:563:25 | ... * ... | 2875795.0 | -| test.c:563:20:563:29 | ... + ... | 2875795.0 | -| test.c:563:24:563:25 | ip | 2875795.0 | -| test.c:563:29:563:29 | 1 | 1.0 | -| test.c:563:29:563:29 | (unsigned int)... | 1.0 | -| test.c:563:34:563:35 | 14 | 1.0 | -| test.c:563:34:563:35 | (unsigned int)... | 1.0 | -| test.c:564:19:564:20 | 14 | 1.0 | -| test.c:564:19:564:20 | (unsigned int)... | 1.0 | -| test.c:564:19:564:31 | ... * ... | 2875795.0 | -| test.c:564:19:564:41 | ... > ... | 1.0 | -| test.c:564:19:566:27 | ... ? ... : ... | 8.270196882025E12 | -| test.c:564:24:564:31 | (...) | 2875795.0 | -| test.c:564:25:564:25 | 2 | 1.0 | +| test.c:562:27:562:28 | 14 | 1.0 | +| test.c:562:27:562:28 | (unsigned int)... | 1.0 | +| test.c:563:11:563:61 | (...) | 1.5633501156E10 | +| test.c:563:12:563:13 | 14 | 1.0 | +| test.c:563:12:563:13 | (unsigned int)... | 1.0 | +| test.c:563:12:563:24 | ... * ... | 125034.0 | +| test.c:563:12:563:34 | ... > ... | 1.0 | +| test.c:563:12:563:60 | ... ? ... : ... | 1.5633501156E10 | +| test.c:563:17:563:24 | (...) | 125034.0 | +| test.c:563:18:563:18 | 2 | 1.0 | +| test.c:563:18:563:18 | (unsigned int)... | 1.0 | +| test.c:563:18:563:23 | ... * ... | 125034.0 | +| test.c:563:22:563:23 | ip | 125034.0 | +| test.c:563:28:563:29 | 17 | 1.0 | +| test.c:563:28:563:29 | (unsigned int)... | 1.0 | +| test.c:563:28:563:34 | ... * ... | 125034.0 | +| test.c:563:33:563:34 | ip | 125034.0 | +| test.c:563:38:563:39 | 17 | 1.0 | +| test.c:563:38:563:39 | (unsigned int)... | 1.0 | +| test.c:563:38:563:50 | ... * ... | 125034.0 | +| test.c:563:43:563:50 | (...) | 125034.0 | +| test.c:563:44:563:44 | 2 | 1.0 | +| test.c:563:44:563:44 | (unsigned int)... | 1.0 | +| test.c:563:44:563:49 | ... * ... | 125034.0 | +| test.c:563:48:563:49 | ip | 125034.0 | +| test.c:563:54:563:55 | 17 | 1.0 | +| test.c:563:54:563:55 | (unsigned int)... | 1.0 | +| test.c:563:54:563:60 | ... * ... | 125034.0 | +| test.c:563:59:563:60 | ip | 125034.0 | +| test.c:564:15:564:26 | (...) | 250069.0 | +| test.c:564:15:564:31 | ... * ... | 250069.0 | +| test.c:564:16:564:16 | 2 | 1.0 | +| test.c:564:16:564:16 | (unsigned int)... | 1.0 | +| test.c:564:16:564:21 | ... * ... | 250069.0 | +| test.c:564:16:564:25 | ... + ... | 250069.0 | +| test.c:564:20:564:21 | ip | 250069.0 | +| test.c:564:25:564:25 | 1 | 1.0 | | test.c:564:25:564:25 | (unsigned int)... | 1.0 | -| test.c:564:25:564:30 | ... * ... | 2875795.0 | -| test.c:564:29:564:30 | ip | 2875795.0 | -| test.c:564:35:564:36 | 17 | 1.0 | -| test.c:564:35:564:36 | (unsigned int)... | 1.0 | -| test.c:564:35:564:41 | ... * ... | 2875795.0 | -| test.c:564:40:564:41 | ip | 2875795.0 | -| test.c:565:21:565:22 | 14 | 1.0 | -| test.c:565:21:565:22 | (unsigned int)... | 1.0 | -| test.c:565:21:565:33 | ... * ... | 2875795.0 | -| test.c:565:26:565:33 | (...) | 2875795.0 | -| test.c:565:27:565:27 | 2 | 1.0 | -| test.c:565:27:565:27 | (unsigned int)... | 1.0 | -| test.c:565:27:565:32 | ... * ... | 2875795.0 | -| test.c:565:31:565:32 | ip | 2875795.0 | -| test.c:566:21:566:22 | 14 | 1.0 | -| test.c:566:21:566:22 | (unsigned int)... | 1.0 | -| test.c:566:21:566:27 | ... * ... | 2875795.0 | -| test.c:566:26:566:27 | ip | 2875795.0 | -| test.c:567:13:567:13 | 2 | 1.0 | -| test.c:567:13:567:13 | (unsigned int)... | 1.0 | -| test.c:567:13:567:18 | ... * ... | 8627385.0 | -| test.c:567:13:567:23 | ... * ... | 8627385.0 | -| test.c:567:13:567:43 | ... + ... | 7.4431771938225E13 | -| test.c:567:17:567:18 | ip | 8627385.0 | -| test.c:567:22:567:23 | 14 | 1.0 | -| test.c:567:22:567:23 | (unsigned int)... | 1.0 | -| test.c:567:27:567:38 | (...) | 8627385.0 | -| test.c:567:27:567:43 | ... * ... | 8627385.0 | -| test.c:567:28:567:28 | 2 | 1.0 | -| test.c:567:28:567:28 | (unsigned int)... | 1.0 | -| test.c:567:28:567:33 | ... * ... | 8627385.0 | -| test.c:567:28:567:37 | ... + ... | 8627385.0 | -| test.c:567:32:567:33 | ip | 8627385.0 | -| test.c:567:37:567:37 | 1 | 1.0 | -| test.c:567:37:567:37 | (unsigned int)... | 1.0 | -| test.c:567:42:567:43 | 17 | 1.0 | -| test.c:567:42:567:43 | (unsigned int)... | 1.0 | -| test.c:568:17:568:17 | 4 | 1.0 | -| test.c:568:17:568:17 | (unsigned int)... | 1.0 | -| test.c:568:17:568:34 | ... * ... | 8627385.0 | -| test.c:568:17:569:34 | ... + ... | 7.4431771938225E13 | -| test.c:568:17:570:34 | ... + ... | 6.421515527432633E20 | -| test.c:568:17:576:30 | ... + ... | 3.298869507082441E42 | -| test.c:568:21:568:34 | (...) | 8627385.0 | -| test.c:568:22:568:23 | ip | 8627385.0 | -| test.c:568:22:568:28 | ... * ... | 8627385.0 | -| test.c:568:22:568:33 | ... + ... | 8627385.0 | -| test.c:568:27:568:28 | 14 | 1.0 | -| test.c:568:27:568:28 | (unsigned int)... | 1.0 | -| test.c:568:32:568:33 | 32 | 1.0 | +| test.c:564:30:564:31 | 14 | 1.0 | +| test.c:564:30:564:31 | (unsigned int)... | 1.0 | +| test.c:565:15:565:16 | 14 | 1.0 | +| test.c:565:15:565:16 | (unsigned int)... | 1.0 | +| test.c:565:15:565:27 | ... * ... | 250069.0 | +| test.c:565:15:565:37 | ... > ... | 1.0 | +| test.c:565:15:567:23 | ... ? ... : ... | 6.2534504761E10 | +| test.c:565:20:565:27 | (...) | 250069.0 | +| test.c:565:21:565:21 | 2 | 1.0 | +| test.c:565:21:565:21 | (unsigned int)... | 1.0 | +| test.c:565:21:565:26 | ... * ... | 250069.0 | +| test.c:565:25:565:26 | ip | 250069.0 | +| test.c:565:31:565:32 | 17 | 1.0 | +| test.c:565:31:565:32 | (unsigned int)... | 1.0 | +| test.c:565:31:565:37 | ... * ... | 250069.0 | +| test.c:565:36:565:37 | ip | 250069.0 | +| test.c:566:17:566:18 | 14 | 1.0 | +| test.c:566:17:566:18 | (unsigned int)... | 1.0 | +| test.c:566:17:566:29 | ... * ... | 250069.0 | +| test.c:566:22:566:29 | (...) | 250069.0 | +| test.c:566:23:566:23 | 2 | 1.0 | +| test.c:566:23:566:23 | (unsigned int)... | 1.0 | +| test.c:566:23:566:28 | ... * ... | 250069.0 | +| test.c:566:27:566:28 | ip | 250069.0 | +| test.c:567:17:567:18 | 14 | 1.0 | +| test.c:567:17:567:18 | (unsigned int)... | 1.0 | +| test.c:567:17:567:23 | ... * ... | 250069.0 | +| test.c:567:22:567:23 | ip | 250069.0 | +| test.c:568:11:568:12 | 14 | 1.0 | +| test.c:568:11:568:12 | (unsigned int)... | 1.0 | +| test.c:568:11:568:17 | ... * ... | 125034.0 | +| test.c:568:11:568:33 | ... > ... | 1.0 | +| test.c:568:11:570:25 | ... ? ... : ... | 1.5633501156E10 | +| test.c:568:16:568:17 | ip | 125034.0 | +| test.c:568:21:568:28 | (...) | 125034.0 | +| test.c:568:21:568:33 | ... * ... | 125034.0 | +| test.c:568:22:568:23 | ip | 125034.0 | +| test.c:568:22:568:27 | ... + ... | 125034.0 | +| test.c:568:27:568:27 | 1 | 1.0 | +| test.c:568:27:568:27 | (unsigned int)... | 1.0 | +| test.c:568:32:568:33 | 17 | 1.0 | | test.c:568:32:568:33 | (unsigned int)... | 1.0 | -| test.c:569:17:569:34 | (...) | 8627385.0 | -| test.c:569:18:569:18 | 2 | 1.0 | -| test.c:569:18:569:18 | (unsigned int)... | 1.0 | -| test.c:569:18:569:23 | ... * ... | 8627385.0 | -| test.c:569:18:569:28 | ... * ... | 8627385.0 | -| test.c:569:18:569:33 | ... + ... | 8627385.0 | -| test.c:569:22:569:23 | ip | 8627385.0 | -| test.c:569:27:569:28 | 14 | 1.0 | -| test.c:569:27:569:28 | (unsigned int)... | 1.0 | -| test.c:569:32:569:33 | 32 | 1.0 | -| test.c:569:32:569:33 | (unsigned int)... | 1.0 | -| test.c:570:17:570:17 | 2 | 1.0 | -| test.c:570:17:570:17 | (unsigned int)... | 1.0 | -| test.c:570:17:570:34 | ... * ... | 8627385.0 | -| test.c:570:21:570:34 | (...) | 8627385.0 | -| test.c:570:22:570:23 | ip | 8627385.0 | -| test.c:570:22:570:28 | ... * ... | 8627385.0 | -| test.c:570:22:570:33 | ... + ... | 8627385.0 | -| test.c:570:27:570:28 | 14 | 1.0 | -| test.c:570:27:570:28 | (unsigned int)... | 1.0 | -| test.c:570:32:570:33 | 64 | 1.0 | -| test.c:570:32:570:33 | (unsigned int)... | 1.0 | -| test.c:571:17:576:30 | (...) | 5.137213315127421E21 | -| test.c:571:18:571:29 | (...) | 8627385.0 | -| test.c:571:18:571:34 | ... * ... | 8627385.0 | -| test.c:571:18:572:67 | ... > ... | 1.0 | -| test.c:571:18:576:29 | ... ? ... : ... | 5.137213315127421E21 | -| test.c:571:19:571:19 | 2 | 1.0 | -| test.c:571:19:571:19 | (unsigned int)... | 1.0 | -| test.c:571:19:571:24 | ... * ... | 8627385.0 | -| test.c:571:19:571:28 | ... + ... | 8627385.0 | -| test.c:571:23:571:24 | ip | 8627385.0 | -| test.c:571:28:571:28 | 1 | 1.0 | -| test.c:571:28:571:28 | (unsigned int)... | 1.0 | -| test.c:571:33:571:34 | 14 | 1.0 | -| test.c:571:33:571:34 | (unsigned int)... | 1.0 | -| test.c:572:17:572:67 | (...) | 7.4431771938225E13 | -| test.c:572:18:572:19 | 14 | 1.0 | -| test.c:572:18:572:19 | (unsigned int)... | 1.0 | -| test.c:572:18:572:30 | ... * ... | 8627385.0 | -| test.c:572:18:572:40 | ... > ... | 1.0 | -| test.c:572:18:572:66 | ... ? ... : ... | 7.4431771938225E13 | -| test.c:572:23:572:30 | (...) | 8627385.0 | -| test.c:572:24:572:24 | 2 | 1.0 | -| test.c:572:24:572:24 | (unsigned int)... | 1.0 | -| test.c:572:24:572:29 | ... * ... | 8627385.0 | -| test.c:572:28:572:29 | ip | 8627385.0 | -| test.c:572:34:572:35 | 17 | 1.0 | -| test.c:572:34:572:35 | (unsigned int)... | 1.0 | -| test.c:572:34:572:40 | ... * ... | 8627385.0 | -| test.c:572:39:572:40 | ip | 8627385.0 | -| test.c:572:44:572:45 | 17 | 1.0 | -| test.c:572:44:572:45 | (unsigned int)... | 1.0 | -| test.c:572:44:572:56 | ... * ... | 8627385.0 | -| test.c:572:49:572:56 | (...) | 8627385.0 | -| test.c:572:50:572:50 | 2 | 1.0 | -| test.c:572:50:572:50 | (unsigned int)... | 1.0 | -| test.c:572:50:572:55 | ... * ... | 8627385.0 | -| test.c:572:54:572:55 | ip | 8627385.0 | -| test.c:572:60:572:61 | 17 | 1.0 | -| test.c:572:60:572:61 | (unsigned int)... | 1.0 | -| test.c:572:60:572:66 | ... * ... | 8627385.0 | -| test.c:572:65:572:66 | ip | 8627385.0 | -| test.c:573:21:573:32 | (...) | 1.7254771E7 | -| test.c:573:21:573:37 | ... * ... | 1.7254771E7 | -| test.c:573:22:573:22 | 2 | 1.0 | -| test.c:573:22:573:22 | (unsigned int)... | 1.0 | -| test.c:573:22:573:27 | ... * ... | 1.7254771E7 | -| test.c:573:22:573:31 | ... + ... | 1.7254771E7 | -| test.c:573:26:573:27 | ip | 1.7254771E7 | -| test.c:573:31:573:31 | 1 | 1.0 | -| test.c:573:31:573:31 | (unsigned int)... | 1.0 | -| test.c:573:36:573:37 | 14 | 1.0 | -| test.c:573:36:573:37 | (unsigned int)... | 1.0 | -| test.c:574:21:574:22 | 14 | 1.0 | -| test.c:574:21:574:22 | (unsigned int)... | 1.0 | -| test.c:574:21:574:33 | ... * ... | 1.7254771E7 | -| test.c:574:21:574:43 | ... > ... | 1.0 | -| test.c:574:21:576:29 | ... ? ... : ... | 2.97727122262441E14 | -| test.c:574:26:574:33 | (...) | 1.7254771E7 | -| test.c:574:27:574:27 | 2 | 1.0 | -| test.c:574:27:574:27 | (unsigned int)... | 1.0 | -| test.c:574:27:574:32 | ... * ... | 1.7254771E7 | -| test.c:574:31:574:32 | ip | 1.7254771E7 | -| test.c:574:37:574:38 | 17 | 1.0 | -| test.c:574:37:574:38 | (unsigned int)... | 1.0 | -| test.c:574:37:574:43 | ... * ... | 1.7254771E7 | -| test.c:574:42:574:43 | ip | 1.7254771E7 | -| test.c:575:23:575:24 | 14 | 1.0 | -| test.c:575:23:575:24 | (unsigned int)... | 1.0 | -| test.c:575:23:575:35 | ... * ... | 1.7254771E7 | -| test.c:575:28:575:35 | (...) | 1.7254771E7 | -| test.c:575:29:575:29 | 2 | 1.0 | -| test.c:575:29:575:29 | (unsigned int)... | 1.0 | -| test.c:575:29:575:34 | ... * ... | 1.7254771E7 | -| test.c:575:33:575:34 | ip | 1.7254771E7 | -| test.c:576:23:576:24 | 14 | 1.0 | -| test.c:576:23:576:24 | (unsigned int)... | 1.0 | -| test.c:576:23:576:29 | ... * ... | 1.7254771E7 | -| test.c:576:28:576:29 | ip | 1.7254771E7 | -| test.c:577:17:577:17 | 2 | 1.0 | -| test.c:577:17:577:17 | (unsigned int)... | 1.0 | -| test.c:577:17:577:22 | ... * ... | 8627385.0 | -| test.c:577:17:577:27 | ... * ... | 8627385.0 | -| test.c:577:17:577:47 | ... + ... | 7.4431771938225E13 | -| test.c:577:21:577:22 | ip | 8627385.0 | -| test.c:577:26:577:27 | 14 | 1.0 | -| test.c:577:26:577:27 | (unsigned int)... | 1.0 | -| test.c:577:31:577:42 | (...) | 8627385.0 | -| test.c:577:31:577:47 | ... * ... | 8627385.0 | -| test.c:577:32:577:32 | 2 | 1.0 | -| test.c:577:32:577:32 | (unsigned int)... | 1.0 | -| test.c:577:32:577:37 | ... * ... | 8627385.0 | -| test.c:577:32:577:41 | ... + ... | 8627385.0 | -| test.c:577:36:577:37 | ip | 8627385.0 | -| test.c:577:41:577:41 | 1 | 1.0 | -| test.c:577:41:577:41 | (unsigned int)... | 1.0 | -| test.c:577:46:577:47 | 17 | 1.0 | -| test.c:577:46:577:47 | (unsigned int)... | 1.0 | -| test.c:578:11:599:30 | (...) | 6.08636382738973E71 | -| test.c:578:12:578:12 | 4 | 1.0 | -| test.c:578:12:578:12 | (unsigned int)... | 1.0 | -| test.c:578:12:578:29 | ... * ... | 6.0391698E7 | -| test.c:578:12:579:30 | ... + ... | 3.647157187323204E15 | -| test.c:578:12:580:30 | ... + ... | 2.2025801541535236E23 | -| test.c:578:12:586:26 | ... + ... | 3.881087564774641E47 | -| test.c:578:12:587:61 | ... > ... | 1.0 | -| test.c:578:12:599:29 | ... ? ... : ... | 6.08636382738973E71 | -| test.c:578:16:578:29 | (...) | 6.0391698E7 | -| test.c:578:17:578:18 | ip | 6.0391698E7 | -| test.c:578:17:578:23 | ... * ... | 6.0391698E7 | -| test.c:578:17:578:28 | ... + ... | 6.0391698E7 | -| test.c:578:22:578:23 | 14 | 1.0 | -| test.c:578:22:578:23 | (unsigned int)... | 1.0 | -| test.c:578:27:578:28 | 32 | 1.0 | -| test.c:578:27:578:28 | (unsigned int)... | 1.0 | -| test.c:579:13:579:30 | (...) | 6.0391698E7 | -| test.c:579:14:579:14 | 2 | 1.0 | -| test.c:579:14:579:14 | (unsigned int)... | 1.0 | -| test.c:579:14:579:19 | ... * ... | 6.0391698E7 | -| test.c:579:14:579:24 | ... * ... | 6.0391698E7 | -| test.c:579:14:579:29 | ... + ... | 6.0391698E7 | -| test.c:579:18:579:19 | ip | 6.0391698E7 | -| test.c:579:23:579:24 | 14 | 1.0 | -| test.c:579:23:579:24 | (unsigned int)... | 1.0 | -| test.c:579:28:579:29 | 32 | 1.0 | -| test.c:579:28:579:29 | (unsigned int)... | 1.0 | -| test.c:580:13:580:13 | 2 | 1.0 | -| test.c:580:13:580:13 | (unsigned int)... | 1.0 | -| test.c:580:13:580:30 | ... * ... | 6.0391698E7 | -| test.c:580:17:580:30 | (...) | 6.0391698E7 | -| test.c:580:18:580:19 | ip | 6.0391698E7 | -| test.c:580:18:580:24 | ... * ... | 6.0391698E7 | -| test.c:580:18:580:29 | ... + ... | 6.0391698E7 | -| test.c:580:23:580:24 | 14 | 1.0 | -| test.c:580:23:580:24 | (unsigned int)... | 1.0 | -| test.c:580:28:580:29 | 64 | 1.0 | -| test.c:580:28:580:29 | (unsigned int)... | 1.0 | -| test.c:581:13:586:26 | (...) | 1.7620641670887053E24 | -| test.c:581:14:581:25 | (...) | 6.0391698E7 | -| test.c:581:14:581:30 | ... * ... | 6.0391698E7 | -| test.c:581:14:582:63 | ... > ... | 1.0 | -| test.c:581:14:586:25 | ... ? ... : ... | 1.7620641670887053E24 | -| test.c:581:15:581:15 | 2 | 1.0 | -| test.c:581:15:581:15 | (unsigned int)... | 1.0 | -| test.c:581:15:581:20 | ... * ... | 6.0391698E7 | -| test.c:581:15:581:24 | ... + ... | 6.0391698E7 | -| test.c:581:19:581:20 | ip | 6.0391698E7 | -| test.c:581:24:581:24 | 1 | 1.0 | -| test.c:581:24:581:24 | (unsigned int)... | 1.0 | -| test.c:581:29:581:30 | 14 | 1.0 | -| test.c:581:29:581:30 | (unsigned int)... | 1.0 | -| test.c:582:13:582:63 | (...) | 3.647157187323204E15 | -| test.c:582:14:582:15 | 14 | 1.0 | -| test.c:582:14:582:15 | (unsigned int)... | 1.0 | -| test.c:582:14:582:26 | ... * ... | 6.0391698E7 | -| test.c:582:14:582:36 | ... > ... | 1.0 | -| test.c:582:14:582:62 | ... ? ... : ... | 3.647157187323204E15 | -| test.c:582:19:582:26 | (...) | 6.0391698E7 | -| test.c:582:20:582:20 | 2 | 1.0 | -| test.c:582:20:582:20 | (unsigned int)... | 1.0 | -| test.c:582:20:582:25 | ... * ... | 6.0391698E7 | -| test.c:582:24:582:25 | ip | 6.0391698E7 | -| test.c:582:30:582:31 | 17 | 1.0 | -| test.c:582:30:582:31 | (unsigned int)... | 1.0 | -| test.c:582:30:582:36 | ... * ... | 6.0391698E7 | -| test.c:582:35:582:36 | ip | 6.0391698E7 | -| test.c:582:40:582:41 | 17 | 1.0 | -| test.c:582:40:582:41 | (unsigned int)... | 1.0 | -| test.c:582:40:582:52 | ... * ... | 6.0391698E7 | -| test.c:582:45:582:52 | (...) | 6.0391698E7 | -| test.c:582:46:582:46 | 2 | 1.0 | -| test.c:582:46:582:46 | (unsigned int)... | 1.0 | -| test.c:582:46:582:51 | ... * ... | 6.0391698E7 | -| test.c:582:50:582:51 | ip | 6.0391698E7 | -| test.c:582:56:582:57 | 17 | 1.0 | -| test.c:582:56:582:57 | (unsigned int)... | 1.0 | -| test.c:582:56:582:62 | ... * ... | 6.0391698E7 | -| test.c:582:61:582:62 | ip | 6.0391698E7 | -| test.c:583:17:583:28 | (...) | 1.20783397E8 | -| test.c:583:17:583:33 | ... * ... | 1.20783397E8 | -| test.c:583:18:583:18 | 2 | 1.0 | -| test.c:583:18:583:18 | (unsigned int)... | 1.0 | -| test.c:583:18:583:23 | ... * ... | 1.20783397E8 | -| test.c:583:18:583:27 | ... + ... | 1.20783397E8 | -| test.c:583:22:583:23 | ip | 1.20783397E8 | -| test.c:583:27:583:27 | 1 | 1.0 | -| test.c:583:27:583:27 | (unsigned int)... | 1.0 | -| test.c:583:32:583:33 | 14 | 1.0 | -| test.c:583:32:583:33 | (unsigned int)... | 1.0 | -| test.c:584:17:584:18 | 14 | 1.0 | -| test.c:584:17:584:18 | (unsigned int)... | 1.0 | -| test.c:584:17:584:29 | ... * ... | 1.20783397E8 | -| test.c:584:17:584:39 | ... > ... | 1.0 | -| test.c:584:17:586:25 | ... ? ... : ... | 1.4588628990859608E16 | -| test.c:584:22:584:29 | (...) | 1.20783397E8 | -| test.c:584:23:584:23 | 2 | 1.0 | -| test.c:584:23:584:23 | (unsigned int)... | 1.0 | -| test.c:584:23:584:28 | ... * ... | 1.20783397E8 | -| test.c:584:27:584:28 | ip | 1.20783397E8 | -| test.c:584:33:584:34 | 17 | 1.0 | -| test.c:584:33:584:34 | (unsigned int)... | 1.0 | -| test.c:584:33:584:39 | ... * ... | 1.20783397E8 | -| test.c:584:38:584:39 | ip | 1.20783397E8 | -| test.c:585:19:585:20 | 14 | 1.0 | -| test.c:585:19:585:20 | (unsigned int)... | 1.0 | -| test.c:585:19:585:31 | ... * ... | 1.20783397E8 | -| test.c:585:24:585:31 | (...) | 1.20783397E8 | -| test.c:585:25:585:25 | 2 | 1.0 | -| test.c:585:25:585:25 | (unsigned int)... | 1.0 | -| test.c:585:25:585:30 | ... * ... | 1.20783397E8 | -| test.c:585:29:585:30 | ip | 1.20783397E8 | -| test.c:586:19:586:20 | 14 | 1.0 | -| test.c:586:19:586:20 | (unsigned int)... | 1.0 | -| test.c:586:19:586:25 | ... * ... | 1.20783397E8 | -| test.c:586:24:586:25 | ip | 1.20783397E8 | -| test.c:587:11:587:61 | (...) | 1.3129766091773648E17 | -| test.c:587:12:587:13 | 14 | 1.0 | -| test.c:587:12:587:13 | (unsigned int)... | 1.0 | -| test.c:587:12:587:18 | ... * ... | 3.62350191E8 | -| test.c:587:12:587:34 | ... > ... | 1.0 | -| test.c:587:12:587:60 | ... ? ... : ... | 1.3129766091773648E17 | -| test.c:587:17:587:18 | ip | 3.62350191E8 | -| test.c:587:22:587:29 | (...) | 3.62350191E8 | -| test.c:587:22:587:34 | ... * ... | 3.62350191E8 | -| test.c:587:23:587:24 | ip | 3.62350191E8 | -| test.c:587:23:587:28 | ... + ... | 3.62350191E8 | -| test.c:587:28:587:28 | 1 | 1.0 | -| test.c:587:28:587:28 | (unsigned int)... | 1.0 | -| test.c:587:33:587:34 | 17 | 1.0 | -| test.c:587:33:587:34 | (unsigned int)... | 1.0 | -| test.c:587:38:587:39 | 17 | 1.0 | -| test.c:587:38:587:39 | (unsigned int)... | 1.0 | -| test.c:587:38:587:44 | ... * ... | 3.62350191E8 | -| test.c:587:43:587:44 | ip | 3.62350191E8 | -| test.c:587:48:587:55 | (...) | 3.62350191E8 | -| test.c:587:48:587:60 | ... * ... | 3.62350191E8 | -| test.c:587:49:587:50 | ip | 3.62350191E8 | -| test.c:587:49:587:54 | ... + ... | 3.62350191E8 | -| test.c:587:54:587:54 | 1 | 1.0 | -| test.c:587:54:587:54 | (unsigned int)... | 1.0 | -| test.c:587:59:587:60 | 17 | 1.0 | -| test.c:587:59:587:60 | (unsigned int)... | 1.0 | -| test.c:588:15:588:15 | 4 | 1.0 | -| test.c:588:15:588:15 | (unsigned int)... | 1.0 | -| test.c:588:15:588:32 | ... * ... | 7.24700382E8 | -| test.c:588:15:589:32 | ... + ... | 5.251906436709459E17 | -| test.c:588:15:590:32 | ... + ... | 3.806058600911604E26 | -| test.c:588:15:596:28 | ... + ... | 1.1588865682845433E54 | -| test.c:588:19:588:32 | (...) | 7.24700382E8 | -| test.c:588:20:588:21 | ip | 7.24700382E8 | -| test.c:588:20:588:26 | ... * ... | 7.24700382E8 | -| test.c:588:20:588:31 | ... + ... | 7.24700382E8 | -| test.c:588:25:588:26 | 14 | 1.0 | -| test.c:588:25:588:26 | (unsigned int)... | 1.0 | -| test.c:588:30:588:31 | 32 | 1.0 | -| test.c:588:30:588:31 | (unsigned int)... | 1.0 | -| test.c:589:15:589:32 | (...) | 7.24700382E8 | -| test.c:589:16:589:16 | 2 | 1.0 | -| test.c:589:16:589:16 | (unsigned int)... | 1.0 | -| test.c:589:16:589:21 | ... * ... | 7.24700382E8 | -| test.c:589:16:589:26 | ... * ... | 7.24700382E8 | -| test.c:589:16:589:31 | ... + ... | 7.24700382E8 | -| test.c:589:20:589:21 | ip | 7.24700382E8 | -| test.c:589:25:589:26 | 14 | 1.0 | -| test.c:589:25:589:26 | (unsigned int)... | 1.0 | -| test.c:589:30:589:31 | 32 | 1.0 | -| test.c:589:30:589:31 | (unsigned int)... | 1.0 | -| test.c:590:15:590:15 | 2 | 1.0 | -| test.c:590:15:590:15 | (unsigned int)... | 1.0 | -| test.c:590:15:590:32 | ... * ... | 7.24700382E8 | -| test.c:590:19:590:32 | (...) | 7.24700382E8 | -| test.c:590:20:590:21 | ip | 7.24700382E8 | -| test.c:590:20:590:26 | ... * ... | 7.24700382E8 | -| test.c:590:20:590:31 | ... + ... | 7.24700382E8 | -| test.c:590:25:590:26 | 14 | 1.0 | -| test.c:590:25:590:26 | (unsigned int)... | 1.0 | -| test.c:590:30:590:31 | 64 | 1.0 | -| test.c:590:30:590:31 | (unsigned int)... | 1.0 | -| test.c:591:15:596:28 | (...) | 3.044846887031571E27 | -| test.c:591:16:591:27 | (...) | 7.24700382E8 | -| test.c:591:16:591:32 | ... * ... | 7.24700382E8 | -| test.c:591:16:592:65 | ... > ... | 1.0 | -| test.c:591:16:596:27 | ... ? ... : ... | 3.044846887031571E27 | -| test.c:591:17:591:17 | 2 | 1.0 | -| test.c:591:17:591:17 | (unsigned int)... | 1.0 | -| test.c:591:17:591:22 | ... * ... | 7.24700382E8 | -| test.c:591:17:591:26 | ... + ... | 7.24700382E8 | -| test.c:591:21:591:22 | ip | 7.24700382E8 | -| test.c:591:26:591:26 | 1 | 1.0 | -| test.c:591:26:591:26 | (unsigned int)... | 1.0 | -| test.c:591:31:591:32 | 14 | 1.0 | -| test.c:591:31:591:32 | (unsigned int)... | 1.0 | -| test.c:592:15:592:65 | (...) | 5.251906436709459E17 | -| test.c:592:16:592:17 | 14 | 1.0 | -| test.c:592:16:592:17 | (unsigned int)... | 1.0 | -| test.c:592:16:592:28 | ... * ... | 7.24700382E8 | -| test.c:592:16:592:38 | ... > ... | 1.0 | -| test.c:592:16:592:64 | ... ? ... : ... | 5.251906436709459E17 | -| test.c:592:21:592:28 | (...) | 7.24700382E8 | -| test.c:592:22:592:22 | 2 | 1.0 | -| test.c:592:22:592:22 | (unsigned int)... | 1.0 | -| test.c:592:22:592:27 | ... * ... | 7.24700382E8 | -| test.c:592:26:592:27 | ip | 7.24700382E8 | -| test.c:592:32:592:33 | 17 | 1.0 | -| test.c:592:32:592:33 | (unsigned int)... | 1.0 | -| test.c:592:32:592:38 | ... * ... | 7.24700382E8 | -| test.c:592:37:592:38 | ip | 7.24700382E8 | -| test.c:592:42:592:43 | 17 | 1.0 | -| test.c:592:42:592:43 | (unsigned int)... | 1.0 | -| test.c:592:42:592:54 | ... * ... | 7.24700382E8 | -| test.c:592:47:592:54 | (...) | 7.24700382E8 | -| test.c:592:48:592:48 | 2 | 1.0 | -| test.c:592:48:592:48 | (unsigned int)... | 1.0 | -| test.c:592:48:592:53 | ... * ... | 7.24700382E8 | -| test.c:592:52:592:53 | ip | 7.24700382E8 | -| test.c:592:58:592:59 | 17 | 1.0 | -| test.c:592:58:592:59 | (unsigned int)... | 1.0 | -| test.c:592:58:592:64 | ... * ... | 7.24700382E8 | -| test.c:592:63:592:64 | ip | 7.24700382E8 | -| test.c:593:19:593:30 | (...) | 1.449400765E9 | -| test.c:593:19:593:35 | ... * ... | 1.449400765E9 | -| test.c:593:20:593:20 | 2 | 1.0 | -| test.c:593:20:593:20 | (unsigned int)... | 1.0 | -| test.c:593:20:593:25 | ... * ... | 1.449400765E9 | -| test.c:593:20:593:29 | ... + ... | 1.449400765E9 | -| test.c:593:24:593:25 | ip | 1.449400765E9 | -| test.c:593:29:593:29 | 1 | 1.0 | -| test.c:593:29:593:29 | (unsigned int)... | 1.0 | -| test.c:593:34:593:35 | 14 | 1.0 | -| test.c:593:34:593:35 | (unsigned int)... | 1.0 | -| test.c:594:19:594:20 | 14 | 1.0 | -| test.c:594:19:594:20 | (unsigned int)... | 1.0 | -| test.c:594:19:594:31 | ... * ... | 1.449400765E9 | -| test.c:594:19:594:41 | ... > ... | 1.0 | -| test.c:594:19:596:27 | ... ? ... : ... | 2.1007625775825853E18 | -| test.c:594:24:594:31 | (...) | 1.449400765E9 | -| test.c:594:25:594:25 | 2 | 1.0 | -| test.c:594:25:594:25 | (unsigned int)... | 1.0 | -| test.c:594:25:594:30 | ... * ... | 1.449400765E9 | -| test.c:594:29:594:30 | ip | 1.449400765E9 | -| test.c:594:35:594:36 | 17 | 1.0 | -| test.c:594:35:594:36 | (unsigned int)... | 1.0 | -| test.c:594:35:594:41 | ... * ... | 1.449400765E9 | -| test.c:594:40:594:41 | ip | 1.449400765E9 | -| test.c:595:21:595:22 | 14 | 1.0 | -| test.c:595:21:595:22 | (unsigned int)... | 1.0 | -| test.c:595:21:595:33 | ... * ... | 1.449400765E9 | -| test.c:595:26:595:33 | (...) | 1.449400765E9 | -| test.c:595:27:595:27 | 2 | 1.0 | -| test.c:595:27:595:27 | (unsigned int)... | 1.0 | -| test.c:595:27:595:32 | ... * ... | 1.449400765E9 | -| test.c:595:31:595:32 | ip | 1.449400765E9 | -| test.c:596:21:596:22 | 14 | 1.0 | -| test.c:596:21:596:22 | (unsigned int)... | 1.0 | -| test.c:596:21:596:27 | ... * ... | 1.449400765E9 | -| test.c:596:26:596:27 | ip | 1.449400765E9 | -| test.c:597:15:597:16 | 14 | 1.0 | -| test.c:597:15:597:16 | (unsigned int)... | 1.0 | -| test.c:597:15:597:21 | ... * ... | 7.24700382E8 | -| test.c:597:15:597:37 | ... > ... | 1.0 | -| test.c:597:15:599:29 | ... ? ... : ... | 5.251906436709459E17 | -| test.c:597:20:597:21 | ip | 7.24700382E8 | -| test.c:597:25:597:32 | (...) | 7.24700382E8 | -| test.c:597:25:597:37 | ... * ... | 7.24700382E8 | -| test.c:597:26:597:27 | ip | 7.24700382E8 | -| test.c:597:26:597:31 | ... + ... | 7.24700382E8 | -| test.c:597:31:597:31 | 1 | 1.0 | -| test.c:597:31:597:31 | (unsigned int)... | 1.0 | -| test.c:597:36:597:37 | 17 | 1.0 | -| test.c:597:36:597:37 | (unsigned int)... | 1.0 | -| test.c:598:17:598:18 | 14 | 1.0 | -| test.c:598:17:598:18 | (unsigned int)... | 1.0 | -| test.c:598:17:598:23 | ... * ... | 7.24700382E8 | -| test.c:598:22:598:23 | ip | 7.24700382E8 | -| test.c:599:17:599:24 | (...) | 7.24700382E8 | -| test.c:599:17:599:29 | ... * ... | 7.24700382E8 | -| test.c:599:18:599:19 | ip | 7.24700382E8 | -| test.c:599:18:599:23 | ... + ... | 7.24700382E8 | -| test.c:599:23:599:23 | 1 | 1.0 | -| test.c:599:23:599:23 | (unsigned int)... | 1.0 | -| test.c:599:28:599:29 | 14 | 1.0 | -| test.c:599:28:599:29 | (unsigned int)... | 1.0 | -| test.c:600:11:600:11 | 2 | 1.0 | -| test.c:600:11:600:11 | (unsigned int)... | 1.0 | -| test.c:600:11:600:28 | ... * ... | 5.797603059E9 | -| test.c:600:11:620:46 | ... + ... | 9.943431528813442E94 | -| test.c:600:15:600:28 | (...) | 5.797603059E9 | -| test.c:600:16:600:17 | ip | 5.797603059E9 | -| test.c:600:16:600:22 | ... * ... | 5.797603059E9 | -| test.c:600:16:600:27 | ... + ... | 5.797603059E9 | -| test.c:600:21:600:22 | 14 | 1.0 | -| test.c:600:21:600:22 | (unsigned int)... | 1.0 | -| test.c:600:26:600:27 | 32 | 1.0 | -| test.c:600:26:600:27 | (unsigned int)... | 1.0 | -| test.c:601:11:620:46 | (...) | 1.715093535659983E85 | -| test.c:601:12:601:12 | 4 | 1.0 | -| test.c:601:12:601:12 | (unsigned int)... | 1.0 | -| test.c:601:12:601:29 | ... * ... | 5.797603059E9 | -| test.c:601:12:602:30 | ... + ... | 3.361220122972616E19 | -| test.c:601:12:603:30 | ... + ... | 1.9487020066918396E29 | -| test.c:601:12:609:26 | ... + ... | 3.0379516094938436E59 | -| test.c:601:12:610:41 | ... > ... | 1.0 | -| test.c:601:12:620:45 | ... ? ... : ... | 1.715093535659983E85 | -| test.c:601:16:601:29 | (...) | 5.797603059E9 | -| test.c:601:17:601:18 | ip | 5.797603059E9 | -| test.c:601:17:601:23 | ... * ... | 5.797603059E9 | -| test.c:601:17:601:28 | ... + ... | 5.797603059E9 | -| test.c:601:22:601:23 | 14 | 1.0 | -| test.c:601:22:601:23 | (unsigned int)... | 1.0 | -| test.c:601:27:601:28 | 32 | 1.0 | -| test.c:601:27:601:28 | (unsigned int)... | 1.0 | -| test.c:602:13:602:30 | (...) | 5.797603059E9 | -| test.c:602:14:602:14 | 2 | 1.0 | -| test.c:602:14:602:14 | (unsigned int)... | 1.0 | -| test.c:602:14:602:19 | ... * ... | 5.797603059E9 | -| test.c:602:14:602:24 | ... * ... | 5.797603059E9 | -| test.c:602:14:602:29 | ... + ... | 5.797603059E9 | -| test.c:602:18:602:19 | ip | 5.797603059E9 | -| test.c:602:23:602:24 | 14 | 1.0 | -| test.c:602:23:602:24 | (unsigned int)... | 1.0 | -| test.c:602:28:602:29 | 32 | 1.0 | -| test.c:602:28:602:29 | (unsigned int)... | 1.0 | -| test.c:603:13:603:13 | 2 | 1.0 | -| test.c:603:13:603:13 | (unsigned int)... | 1.0 | -| test.c:603:13:603:30 | ... * ... | 5.797603059E9 | -| test.c:603:17:603:30 | (...) | 5.797603059E9 | -| test.c:603:18:603:19 | ip | 5.797603059E9 | -| test.c:603:18:603:24 | ... * ... | 5.797603059E9 | -| test.c:603:18:603:29 | ... + ... | 5.797603059E9 | -| test.c:603:23:603:24 | 14 | 1.0 | -| test.c:603:23:603:24 | (unsigned int)... | 1.0 | -| test.c:603:28:603:29 | 64 | 1.0 | -| test.c:603:28:603:29 | (unsigned int)... | 1.0 | -| test.c:604:13:609:26 | (...) | 1.558961605756818E30 | -| test.c:604:14:604:25 | (...) | 5.797603059E9 | -| test.c:604:14:604:30 | ... * ... | 5.797603059E9 | -| test.c:604:14:605:63 | ... > ... | 1.0 | -| test.c:604:14:609:25 | ... ? ... : ... | 1.558961605756818E30 | -| test.c:604:15:604:15 | 2 | 1.0 | -| test.c:604:15:604:15 | (unsigned int)... | 1.0 | -| test.c:604:15:604:20 | ... * ... | 5.797603059E9 | -| test.c:604:15:604:24 | ... + ... | 5.797603059E9 | -| test.c:604:19:604:20 | ip | 5.797603059E9 | -| test.c:604:24:604:24 | 1 | 1.0 | -| test.c:604:24:604:24 | (unsigned int)... | 1.0 | -| test.c:604:29:604:30 | 14 | 1.0 | -| test.c:604:29:604:30 | (unsigned int)... | 1.0 | -| test.c:605:13:605:63 | (...) | 3.361220122972616E19 | -| test.c:605:14:605:15 | 14 | 1.0 | -| test.c:605:14:605:15 | (unsigned int)... | 1.0 | -| test.c:605:14:605:26 | ... * ... | 5.797603059E9 | -| test.c:605:14:605:36 | ... > ... | 1.0 | -| test.c:605:14:605:62 | ... ? ... : ... | 3.361220122972616E19 | -| test.c:605:19:605:26 | (...) | 5.797603059E9 | -| test.c:605:20:605:20 | 2 | 1.0 | -| test.c:605:20:605:20 | (unsigned int)... | 1.0 | -| test.c:605:20:605:25 | ... * ... | 5.797603059E9 | -| test.c:605:24:605:25 | ip | 5.797603059E9 | -| test.c:605:30:605:31 | 17 | 1.0 | +| test.c:569:13:569:14 | 14 | 1.0 | +| test.c:569:13:569:14 | (unsigned int)... | 1.0 | +| test.c:569:13:569:19 | ... * ... | 125034.0 | +| test.c:569:18:569:19 | ip | 125034.0 | +| test.c:570:13:570:20 | (...) | 125034.0 | +| test.c:570:13:570:25 | ... * ... | 125034.0 | +| test.c:570:14:570:15 | ip | 125034.0 | +| test.c:570:14:570:19 | ... + ... | 125034.0 | +| test.c:570:19:570:19 | 1 | 1.0 | +| test.c:570:19:570:19 | (unsigned int)... | 1.0 | +| test.c:570:24:570:25 | 14 | 1.0 | +| test.c:570:24:570:25 | (unsigned int)... | 1.0 | +| test.c:571:9:571:10 | 14 | 1.0 | +| test.c:571:9:571:10 | (unsigned int)... | 1.0 | +| test.c:571:9:571:15 | ... * ... | 1437897.0 | +| test.c:571:9:571:59 | ... > ... | 1.0 | +| test.c:571:9:573:51 | ... ? ... : ... | 2.9729207539701335E18 | +| test.c:571:14:571:15 | ip | 1437897.0 | +| test.c:571:19:571:30 | (...) | 1437897.0 | +| test.c:571:19:571:35 | ... * ... | 1437897.0 | +| test.c:571:19:571:59 | ... + ... | 2.067547782609E12 | +| test.c:571:20:571:20 | 2 | 1.0 | +| test.c:571:20:571:20 | (unsigned int)... | 1.0 | +| test.c:571:20:571:25 | ... * ... | 1437897.0 | +| test.c:571:20:571:29 | ... + ... | 1437897.0 | +| test.c:571:24:571:25 | ip | 1437897.0 | +| test.c:571:29:571:29 | 1 | 1.0 | +| test.c:571:29:571:29 | (unsigned int)... | 1.0 | +| test.c:571:34:571:35 | 17 | 1.0 | +| test.c:571:34:571:35 | (unsigned int)... | 1.0 | +| test.c:571:39:571:54 | (...) | 1437897.0 | +| test.c:571:39:571:59 | ... * ... | 1437897.0 | +| test.c:571:40:571:40 | 2 | 1.0 | +| test.c:571:40:571:40 | (unsigned int)... | 1.0 | +| test.c:571:40:571:45 | ... * ... | 1437897.0 | +| test.c:571:40:571:49 | ... + ... | 1437897.0 | +| test.c:571:40:571:53 | ... + ... | 1437897.0 | +| test.c:571:44:571:45 | ip | 1437897.0 | +| test.c:571:49:571:49 | 1 | 1.0 | +| test.c:571:49:571:49 | (unsigned int)... | 1.0 | +| test.c:571:53:571:53 | 1 | 1.0 | +| test.c:571:53:571:53 | (unsigned int)... | 1.0 | +| test.c:571:58:571:59 | 17 | 1.0 | +| test.c:571:58:571:59 | (unsigned int)... | 1.0 | +| test.c:572:11:572:12 | 14 | 1.0 | +| test.c:572:11:572:12 | (unsigned int)... | 1.0 | +| test.c:572:11:572:17 | ... * ... | 1437897.0 | +| test.c:572:16:572:17 | ip | 1437897.0 | +| test.c:573:11:573:22 | (...) | 1437897.0 | +| test.c:573:11:573:27 | ... * ... | 1437897.0 | +| test.c:573:11:573:51 | ... + ... | 2.067547782609E12 | +| test.c:573:12:573:12 | 2 | 1.0 | +| test.c:573:12:573:12 | (unsigned int)... | 1.0 | +| test.c:573:12:573:17 | ... * ... | 1437897.0 | +| test.c:573:12:573:21 | ... + ... | 1437897.0 | +| test.c:573:16:573:17 | ip | 1437897.0 | +| test.c:573:21:573:21 | 1 | 1.0 | +| test.c:573:21:573:21 | (unsigned int)... | 1.0 | +| test.c:573:26:573:27 | 14 | 1.0 | +| test.c:573:26:573:27 | (unsigned int)... | 1.0 | +| test.c:573:31:573:46 | (...) | 1437897.0 | +| test.c:573:31:573:51 | ... * ... | 1437897.0 | +| test.c:573:32:573:32 | 2 | 1.0 | +| test.c:573:32:573:32 | (unsigned int)... | 1.0 | +| test.c:573:32:573:37 | ... * ... | 1437897.0 | +| test.c:573:32:573:41 | ... + ... | 1437897.0 | +| test.c:573:32:573:45 | ... + ... | 1437897.0 | +| test.c:573:36:573:37 | ip | 1437897.0 | +| test.c:573:41:573:41 | 1 | 1.0 | +| test.c:573:41:573:41 | (unsigned int)... | 1.0 | +| test.c:573:45:573:45 | 1 | 1.0 | +| test.c:573:45:573:45 | (unsigned int)... | 1.0 | +| test.c:573:50:573:51 | 17 | 1.0 | +| test.c:573:50:573:51 | (unsigned int)... | 1.0 | +| test.c:574:9:574:9 | 2 | 1.0 | +| test.c:574:9:574:9 | (unsigned int)... | 1.0 | +| test.c:574:9:574:26 | ... * ... | 1437897.0 | +| test.c:574:9:594:48 | ... + ... | 3.5306223994138077E62 | +| test.c:574:9:616:30 | ... > ... | 1.0 | +| test.c:574:9:659:27 | ... ? ... : ... | 4.3658022750663434E182 | +| test.c:574:13:574:26 | (...) | 1437897.0 | +| test.c:574:14:574:15 | ip | 1437897.0 | +| test.c:574:14:574:20 | ... * ... | 1437897.0 | +| test.c:574:14:574:25 | ... + ... | 1437897.0 | +| test.c:574:19:574:20 | 14 | 1.0 | +| test.c:574:19:574:20 | (unsigned int)... | 1.0 | +| test.c:574:24:574:25 | 32 | 1.0 | +| test.c:574:24:574:25 | (unsigned int)... | 1.0 | +| test.c:575:13:594:48 | (...) | 2.4554070280512497E56 | +| test.c:575:14:575:14 | 4 | 1.0 | +| test.c:575:14:575:14 | (unsigned int)... | 1.0 | +| test.c:575:14:575:31 | ... * ... | 1437897.0 | +| test.c:575:14:576:32 | ... + ... | 2.067547782609E12 | +| test.c:575:14:577:32 | ... + ... | 2.9729207539701335E18 | +| test.c:575:14:583:28 | ... + ... | 7.070613623498497E37 | +| test.c:575:14:584:43 | ... > ... | 1.0 | +| test.c:575:14:594:47 | ... ? ... : ... | 2.4554070280512497E56 | +| test.c:575:18:575:31 | (...) | 1437897.0 | +| test.c:575:19:575:20 | ip | 1437897.0 | +| test.c:575:19:575:25 | ... * ... | 1437897.0 | +| test.c:575:19:575:30 | ... + ... | 1437897.0 | +| test.c:575:24:575:25 | 14 | 1.0 | +| test.c:575:24:575:25 | (unsigned int)... | 1.0 | +| test.c:575:29:575:30 | 32 | 1.0 | +| test.c:575:29:575:30 | (unsigned int)... | 1.0 | +| test.c:576:15:576:32 | (...) | 1437897.0 | +| test.c:576:16:576:16 | 2 | 1.0 | +| test.c:576:16:576:16 | (unsigned int)... | 1.0 | +| test.c:576:16:576:21 | ... * ... | 1437897.0 | +| test.c:576:16:576:26 | ... * ... | 1437897.0 | +| test.c:576:16:576:31 | ... + ... | 1437897.0 | +| test.c:576:20:576:21 | ip | 1437897.0 | +| test.c:576:25:576:26 | 14 | 1.0 | +| test.c:576:25:576:26 | (unsigned int)... | 1.0 | +| test.c:576:30:576:31 | 32 | 1.0 | +| test.c:576:30:576:31 | (unsigned int)... | 1.0 | +| test.c:577:15:577:15 | 2 | 1.0 | +| test.c:577:15:577:15 | (unsigned int)... | 1.0 | +| test.c:577:15:577:32 | ... * ... | 1437897.0 | +| test.c:577:19:577:32 | (...) | 1437897.0 | +| test.c:577:20:577:21 | ip | 1437897.0 | +| test.c:577:20:577:26 | ... * ... | 1437897.0 | +| test.c:577:20:577:31 | ... + ... | 1437897.0 | +| test.c:577:25:577:26 | 14 | 1.0 | +| test.c:577:25:577:26 | (unsigned int)... | 1.0 | +| test.c:577:30:577:31 | 64 | 1.0 | +| test.c:577:30:577:31 | (unsigned int)... | 1.0 | +| test.c:578:15:583:28 | (...) | 2.3783390842343084E19 | +| test.c:578:16:578:27 | (...) | 1437897.0 | +| test.c:578:16:578:32 | ... * ... | 1437897.0 | +| test.c:578:16:579:65 | ... > ... | 1.0 | +| test.c:578:16:583:27 | ... ? ... : ... | 2.3783390842343084E19 | +| test.c:578:17:578:17 | 2 | 1.0 | +| test.c:578:17:578:17 | (unsigned int)... | 1.0 | +| test.c:578:17:578:22 | ... * ... | 1437897.0 | +| test.c:578:17:578:26 | ... + ... | 1437897.0 | +| test.c:578:21:578:22 | ip | 1437897.0 | +| test.c:578:26:578:26 | 1 | 1.0 | +| test.c:578:26:578:26 | (unsigned int)... | 1.0 | +| test.c:578:31:578:32 | 14 | 1.0 | +| test.c:578:31:578:32 | (unsigned int)... | 1.0 | +| test.c:579:15:579:65 | (...) | 2.067547782609E12 | +| test.c:579:16:579:17 | 14 | 1.0 | +| test.c:579:16:579:17 | (unsigned int)... | 1.0 | +| test.c:579:16:579:28 | ... * ... | 1437897.0 | +| test.c:579:16:579:38 | ... > ... | 1.0 | +| test.c:579:16:579:64 | ... ? ... : ... | 2.067547782609E12 | +| test.c:579:21:579:28 | (...) | 1437897.0 | +| test.c:579:22:579:22 | 2 | 1.0 | +| test.c:579:22:579:22 | (unsigned int)... | 1.0 | +| test.c:579:22:579:27 | ... * ... | 1437897.0 | +| test.c:579:26:579:27 | ip | 1437897.0 | +| test.c:579:32:579:33 | 17 | 1.0 | +| test.c:579:32:579:33 | (unsigned int)... | 1.0 | +| test.c:579:32:579:38 | ... * ... | 1437897.0 | +| test.c:579:37:579:38 | ip | 1437897.0 | +| test.c:579:42:579:43 | 17 | 1.0 | +| test.c:579:42:579:43 | (unsigned int)... | 1.0 | +| test.c:579:42:579:54 | ... * ... | 1437897.0 | +| test.c:579:47:579:54 | (...) | 1437897.0 | +| test.c:579:48:579:48 | 2 | 1.0 | +| test.c:579:48:579:48 | (unsigned int)... | 1.0 | +| test.c:579:48:579:53 | ... * ... | 1437897.0 | +| test.c:579:52:579:53 | ip | 1437897.0 | +| test.c:579:58:579:59 | 17 | 1.0 | +| test.c:579:58:579:59 | (unsigned int)... | 1.0 | +| test.c:579:58:579:64 | ... * ... | 1437897.0 | +| test.c:579:63:579:64 | ip | 1437897.0 | +| test.c:580:19:580:30 | (...) | 2875795.0 | +| test.c:580:19:580:35 | ... * ... | 2875795.0 | +| test.c:580:20:580:20 | 2 | 1.0 | +| test.c:580:20:580:20 | (unsigned int)... | 1.0 | +| test.c:580:20:580:25 | ... * ... | 2875795.0 | +| test.c:580:20:580:29 | ... + ... | 2875795.0 | +| test.c:580:24:580:25 | ip | 2875795.0 | +| test.c:580:29:580:29 | 1 | 1.0 | +| test.c:580:29:580:29 | (unsigned int)... | 1.0 | +| test.c:580:34:580:35 | 14 | 1.0 | +| test.c:580:34:580:35 | (unsigned int)... | 1.0 | +| test.c:581:19:581:20 | 14 | 1.0 | +| test.c:581:19:581:20 | (unsigned int)... | 1.0 | +| test.c:581:19:581:31 | ... * ... | 2875795.0 | +| test.c:581:19:581:41 | ... > ... | 1.0 | +| test.c:581:19:583:27 | ... ? ... : ... | 8.270196882025E12 | +| test.c:581:24:581:31 | (...) | 2875795.0 | +| test.c:581:25:581:25 | 2 | 1.0 | +| test.c:581:25:581:25 | (unsigned int)... | 1.0 | +| test.c:581:25:581:30 | ... * ... | 2875795.0 | +| test.c:581:29:581:30 | ip | 2875795.0 | +| test.c:581:35:581:36 | 17 | 1.0 | +| test.c:581:35:581:36 | (unsigned int)... | 1.0 | +| test.c:581:35:581:41 | ... * ... | 2875795.0 | +| test.c:581:40:581:41 | ip | 2875795.0 | +| test.c:582:21:582:22 | 14 | 1.0 | +| test.c:582:21:582:22 | (unsigned int)... | 1.0 | +| test.c:582:21:582:33 | ... * ... | 2875795.0 | +| test.c:582:26:582:33 | (...) | 2875795.0 | +| test.c:582:27:582:27 | 2 | 1.0 | +| test.c:582:27:582:27 | (unsigned int)... | 1.0 | +| test.c:582:27:582:32 | ... * ... | 2875795.0 | +| test.c:582:31:582:32 | ip | 2875795.0 | +| test.c:583:21:583:22 | 14 | 1.0 | +| test.c:583:21:583:22 | (unsigned int)... | 1.0 | +| test.c:583:21:583:27 | ... * ... | 2875795.0 | +| test.c:583:26:583:27 | ip | 2875795.0 | +| test.c:584:13:584:13 | 2 | 1.0 | +| test.c:584:13:584:13 | (unsigned int)... | 1.0 | +| test.c:584:13:584:18 | ... * ... | 8627385.0 | +| test.c:584:13:584:23 | ... * ... | 8627385.0 | +| test.c:584:13:584:43 | ... + ... | 7.4431771938225E13 | +| test.c:584:17:584:18 | ip | 8627385.0 | +| test.c:584:22:584:23 | 14 | 1.0 | +| test.c:584:22:584:23 | (unsigned int)... | 1.0 | +| test.c:584:27:584:38 | (...) | 8627385.0 | +| test.c:584:27:584:43 | ... * ... | 8627385.0 | +| test.c:584:28:584:28 | 2 | 1.0 | +| test.c:584:28:584:28 | (unsigned int)... | 1.0 | +| test.c:584:28:584:33 | ... * ... | 8627385.0 | +| test.c:584:28:584:37 | ... + ... | 8627385.0 | +| test.c:584:32:584:33 | ip | 8627385.0 | +| test.c:584:37:584:37 | 1 | 1.0 | +| test.c:584:37:584:37 | (unsigned int)... | 1.0 | +| test.c:584:42:584:43 | 17 | 1.0 | +| test.c:584:42:584:43 | (unsigned int)... | 1.0 | +| test.c:585:17:585:17 | 4 | 1.0 | +| test.c:585:17:585:17 | (unsigned int)... | 1.0 | +| test.c:585:17:585:34 | ... * ... | 8627385.0 | +| test.c:585:17:586:34 | ... + ... | 7.4431771938225E13 | +| test.c:585:17:587:34 | ... + ... | 6.421515527432633E20 | +| test.c:585:17:593:30 | ... + ... | 3.298869507082441E42 | +| test.c:585:21:585:34 | (...) | 8627385.0 | +| test.c:585:22:585:23 | ip | 8627385.0 | +| test.c:585:22:585:28 | ... * ... | 8627385.0 | +| test.c:585:22:585:33 | ... + ... | 8627385.0 | +| test.c:585:27:585:28 | 14 | 1.0 | +| test.c:585:27:585:28 | (unsigned int)... | 1.0 | +| test.c:585:32:585:33 | 32 | 1.0 | +| test.c:585:32:585:33 | (unsigned int)... | 1.0 | +| test.c:586:17:586:34 | (...) | 8627385.0 | +| test.c:586:18:586:18 | 2 | 1.0 | +| test.c:586:18:586:18 | (unsigned int)... | 1.0 | +| test.c:586:18:586:23 | ... * ... | 8627385.0 | +| test.c:586:18:586:28 | ... * ... | 8627385.0 | +| test.c:586:18:586:33 | ... + ... | 8627385.0 | +| test.c:586:22:586:23 | ip | 8627385.0 | +| test.c:586:27:586:28 | 14 | 1.0 | +| test.c:586:27:586:28 | (unsigned int)... | 1.0 | +| test.c:586:32:586:33 | 32 | 1.0 | +| test.c:586:32:586:33 | (unsigned int)... | 1.0 | +| test.c:587:17:587:17 | 2 | 1.0 | +| test.c:587:17:587:17 | (unsigned int)... | 1.0 | +| test.c:587:17:587:34 | ... * ... | 8627385.0 | +| test.c:587:21:587:34 | (...) | 8627385.0 | +| test.c:587:22:587:23 | ip | 8627385.0 | +| test.c:587:22:587:28 | ... * ... | 8627385.0 | +| test.c:587:22:587:33 | ... + ... | 8627385.0 | +| test.c:587:27:587:28 | 14 | 1.0 | +| test.c:587:27:587:28 | (unsigned int)... | 1.0 | +| test.c:587:32:587:33 | 64 | 1.0 | +| test.c:587:32:587:33 | (unsigned int)... | 1.0 | +| test.c:588:17:593:30 | (...) | 5.137213315127421E21 | +| test.c:588:18:588:29 | (...) | 8627385.0 | +| test.c:588:18:588:34 | ... * ... | 8627385.0 | +| test.c:588:18:589:67 | ... > ... | 1.0 | +| test.c:588:18:593:29 | ... ? ... : ... | 5.137213315127421E21 | +| test.c:588:19:588:19 | 2 | 1.0 | +| test.c:588:19:588:19 | (unsigned int)... | 1.0 | +| test.c:588:19:588:24 | ... * ... | 8627385.0 | +| test.c:588:19:588:28 | ... + ... | 8627385.0 | +| test.c:588:23:588:24 | ip | 8627385.0 | +| test.c:588:28:588:28 | 1 | 1.0 | +| test.c:588:28:588:28 | (unsigned int)... | 1.0 | +| test.c:588:33:588:34 | 14 | 1.0 | +| test.c:588:33:588:34 | (unsigned int)... | 1.0 | +| test.c:589:17:589:67 | (...) | 7.4431771938225E13 | +| test.c:589:18:589:19 | 14 | 1.0 | +| test.c:589:18:589:19 | (unsigned int)... | 1.0 | +| test.c:589:18:589:30 | ... * ... | 8627385.0 | +| test.c:589:18:589:40 | ... > ... | 1.0 | +| test.c:589:18:589:66 | ... ? ... : ... | 7.4431771938225E13 | +| test.c:589:23:589:30 | (...) | 8627385.0 | +| test.c:589:24:589:24 | 2 | 1.0 | +| test.c:589:24:589:24 | (unsigned int)... | 1.0 | +| test.c:589:24:589:29 | ... * ... | 8627385.0 | +| test.c:589:28:589:29 | ip | 8627385.0 | +| test.c:589:34:589:35 | 17 | 1.0 | +| test.c:589:34:589:35 | (unsigned int)... | 1.0 | +| test.c:589:34:589:40 | ... * ... | 8627385.0 | +| test.c:589:39:589:40 | ip | 8627385.0 | +| test.c:589:44:589:45 | 17 | 1.0 | +| test.c:589:44:589:45 | (unsigned int)... | 1.0 | +| test.c:589:44:589:56 | ... * ... | 8627385.0 | +| test.c:589:49:589:56 | (...) | 8627385.0 | +| test.c:589:50:589:50 | 2 | 1.0 | +| test.c:589:50:589:50 | (unsigned int)... | 1.0 | +| test.c:589:50:589:55 | ... * ... | 8627385.0 | +| test.c:589:54:589:55 | ip | 8627385.0 | +| test.c:589:60:589:61 | 17 | 1.0 | +| test.c:589:60:589:61 | (unsigned int)... | 1.0 | +| test.c:589:60:589:66 | ... * ... | 8627385.0 | +| test.c:589:65:589:66 | ip | 8627385.0 | +| test.c:590:21:590:32 | (...) | 1.7254771E7 | +| test.c:590:21:590:37 | ... * ... | 1.7254771E7 | +| test.c:590:22:590:22 | 2 | 1.0 | +| test.c:590:22:590:22 | (unsigned int)... | 1.0 | +| test.c:590:22:590:27 | ... * ... | 1.7254771E7 | +| test.c:590:22:590:31 | ... + ... | 1.7254771E7 | +| test.c:590:26:590:27 | ip | 1.7254771E7 | +| test.c:590:31:590:31 | 1 | 1.0 | +| test.c:590:31:590:31 | (unsigned int)... | 1.0 | +| test.c:590:36:590:37 | 14 | 1.0 | +| test.c:590:36:590:37 | (unsigned int)... | 1.0 | +| test.c:591:21:591:22 | 14 | 1.0 | +| test.c:591:21:591:22 | (unsigned int)... | 1.0 | +| test.c:591:21:591:33 | ... * ... | 1.7254771E7 | +| test.c:591:21:591:43 | ... > ... | 1.0 | +| test.c:591:21:593:29 | ... ? ... : ... | 2.97727122262441E14 | +| test.c:591:26:591:33 | (...) | 1.7254771E7 | +| test.c:591:27:591:27 | 2 | 1.0 | +| test.c:591:27:591:27 | (unsigned int)... | 1.0 | +| test.c:591:27:591:32 | ... * ... | 1.7254771E7 | +| test.c:591:31:591:32 | ip | 1.7254771E7 | +| test.c:591:37:591:38 | 17 | 1.0 | +| test.c:591:37:591:38 | (unsigned int)... | 1.0 | +| test.c:591:37:591:43 | ... * ... | 1.7254771E7 | +| test.c:591:42:591:43 | ip | 1.7254771E7 | +| test.c:592:23:592:24 | 14 | 1.0 | +| test.c:592:23:592:24 | (unsigned int)... | 1.0 | +| test.c:592:23:592:35 | ... * ... | 1.7254771E7 | +| test.c:592:28:592:35 | (...) | 1.7254771E7 | +| test.c:592:29:592:29 | 2 | 1.0 | +| test.c:592:29:592:29 | (unsigned int)... | 1.0 | +| test.c:592:29:592:34 | ... * ... | 1.7254771E7 | +| test.c:592:33:592:34 | ip | 1.7254771E7 | +| test.c:593:23:593:24 | 14 | 1.0 | +| test.c:593:23:593:24 | (unsigned int)... | 1.0 | +| test.c:593:23:593:29 | ... * ... | 1.7254771E7 | +| test.c:593:28:593:29 | ip | 1.7254771E7 | +| test.c:594:17:594:17 | 2 | 1.0 | +| test.c:594:17:594:17 | (unsigned int)... | 1.0 | +| test.c:594:17:594:22 | ... * ... | 8627385.0 | +| test.c:594:17:594:27 | ... * ... | 8627385.0 | +| test.c:594:17:594:47 | ... + ... | 7.4431771938225E13 | +| test.c:594:21:594:22 | ip | 8627385.0 | +| test.c:594:26:594:27 | 14 | 1.0 | +| test.c:594:26:594:27 | (unsigned int)... | 1.0 | +| test.c:594:31:594:42 | (...) | 8627385.0 | +| test.c:594:31:594:47 | ... * ... | 8627385.0 | +| test.c:594:32:594:32 | 2 | 1.0 | +| test.c:594:32:594:32 | (unsigned int)... | 1.0 | +| test.c:594:32:594:37 | ... * ... | 8627385.0 | +| test.c:594:32:594:41 | ... + ... | 8627385.0 | +| test.c:594:36:594:37 | ip | 8627385.0 | +| test.c:594:41:594:41 | 1 | 1.0 | +| test.c:594:41:594:41 | (unsigned int)... | 1.0 | +| test.c:594:46:594:47 | 17 | 1.0 | +| test.c:594:46:594:47 | (unsigned int)... | 1.0 | +| test.c:595:11:616:30 | (...) | 6.08636382738973E71 | +| test.c:595:12:595:12 | 4 | 1.0 | +| test.c:595:12:595:12 | (unsigned int)... | 1.0 | +| test.c:595:12:595:29 | ... * ... | 6.0391698E7 | +| test.c:595:12:596:30 | ... + ... | 3.647157187323204E15 | +| test.c:595:12:597:30 | ... + ... | 2.2025801541535236E23 | +| test.c:595:12:603:26 | ... + ... | 3.881087564774641E47 | +| test.c:595:12:604:61 | ... > ... | 1.0 | +| test.c:595:12:616:29 | ... ? ... : ... | 6.08636382738973E71 | +| test.c:595:16:595:29 | (...) | 6.0391698E7 | +| test.c:595:17:595:18 | ip | 6.0391698E7 | +| test.c:595:17:595:23 | ... * ... | 6.0391698E7 | +| test.c:595:17:595:28 | ... + ... | 6.0391698E7 | +| test.c:595:22:595:23 | 14 | 1.0 | +| test.c:595:22:595:23 | (unsigned int)... | 1.0 | +| test.c:595:27:595:28 | 32 | 1.0 | +| test.c:595:27:595:28 | (unsigned int)... | 1.0 | +| test.c:596:13:596:30 | (...) | 6.0391698E7 | +| test.c:596:14:596:14 | 2 | 1.0 | +| test.c:596:14:596:14 | (unsigned int)... | 1.0 | +| test.c:596:14:596:19 | ... * ... | 6.0391698E7 | +| test.c:596:14:596:24 | ... * ... | 6.0391698E7 | +| test.c:596:14:596:29 | ... + ... | 6.0391698E7 | +| test.c:596:18:596:19 | ip | 6.0391698E7 | +| test.c:596:23:596:24 | 14 | 1.0 | +| test.c:596:23:596:24 | (unsigned int)... | 1.0 | +| test.c:596:28:596:29 | 32 | 1.0 | +| test.c:596:28:596:29 | (unsigned int)... | 1.0 | +| test.c:597:13:597:13 | 2 | 1.0 | +| test.c:597:13:597:13 | (unsigned int)... | 1.0 | +| test.c:597:13:597:30 | ... * ... | 6.0391698E7 | +| test.c:597:17:597:30 | (...) | 6.0391698E7 | +| test.c:597:18:597:19 | ip | 6.0391698E7 | +| test.c:597:18:597:24 | ... * ... | 6.0391698E7 | +| test.c:597:18:597:29 | ... + ... | 6.0391698E7 | +| test.c:597:23:597:24 | 14 | 1.0 | +| test.c:597:23:597:24 | (unsigned int)... | 1.0 | +| test.c:597:28:597:29 | 64 | 1.0 | +| test.c:597:28:597:29 | (unsigned int)... | 1.0 | +| test.c:598:13:603:26 | (...) | 1.7620641670887053E24 | +| test.c:598:14:598:25 | (...) | 6.0391698E7 | +| test.c:598:14:598:30 | ... * ... | 6.0391698E7 | +| test.c:598:14:599:63 | ... > ... | 1.0 | +| test.c:598:14:603:25 | ... ? ... : ... | 1.7620641670887053E24 | +| test.c:598:15:598:15 | 2 | 1.0 | +| test.c:598:15:598:15 | (unsigned int)... | 1.0 | +| test.c:598:15:598:20 | ... * ... | 6.0391698E7 | +| test.c:598:15:598:24 | ... + ... | 6.0391698E7 | +| test.c:598:19:598:20 | ip | 6.0391698E7 | +| test.c:598:24:598:24 | 1 | 1.0 | +| test.c:598:24:598:24 | (unsigned int)... | 1.0 | +| test.c:598:29:598:30 | 14 | 1.0 | +| test.c:598:29:598:30 | (unsigned int)... | 1.0 | +| test.c:599:13:599:63 | (...) | 3.647157187323204E15 | +| test.c:599:14:599:15 | 14 | 1.0 | +| test.c:599:14:599:15 | (unsigned int)... | 1.0 | +| test.c:599:14:599:26 | ... * ... | 6.0391698E7 | +| test.c:599:14:599:36 | ... > ... | 1.0 | +| test.c:599:14:599:62 | ... ? ... : ... | 3.647157187323204E15 | +| test.c:599:19:599:26 | (...) | 6.0391698E7 | +| test.c:599:20:599:20 | 2 | 1.0 | +| test.c:599:20:599:20 | (unsigned int)... | 1.0 | +| test.c:599:20:599:25 | ... * ... | 6.0391698E7 | +| test.c:599:24:599:25 | ip | 6.0391698E7 | +| test.c:599:30:599:31 | 17 | 1.0 | +| test.c:599:30:599:31 | (unsigned int)... | 1.0 | +| test.c:599:30:599:36 | ... * ... | 6.0391698E7 | +| test.c:599:35:599:36 | ip | 6.0391698E7 | +| test.c:599:40:599:41 | 17 | 1.0 | +| test.c:599:40:599:41 | (unsigned int)... | 1.0 | +| test.c:599:40:599:52 | ... * ... | 6.0391698E7 | +| test.c:599:45:599:52 | (...) | 6.0391698E7 | +| test.c:599:46:599:46 | 2 | 1.0 | +| test.c:599:46:599:46 | (unsigned int)... | 1.0 | +| test.c:599:46:599:51 | ... * ... | 6.0391698E7 | +| test.c:599:50:599:51 | ip | 6.0391698E7 | +| test.c:599:56:599:57 | 17 | 1.0 | +| test.c:599:56:599:57 | (unsigned int)... | 1.0 | +| test.c:599:56:599:62 | ... * ... | 6.0391698E7 | +| test.c:599:61:599:62 | ip | 6.0391698E7 | +| test.c:600:17:600:28 | (...) | 1.20783397E8 | +| test.c:600:17:600:33 | ... * ... | 1.20783397E8 | +| test.c:600:18:600:18 | 2 | 1.0 | +| test.c:600:18:600:18 | (unsigned int)... | 1.0 | +| test.c:600:18:600:23 | ... * ... | 1.20783397E8 | +| test.c:600:18:600:27 | ... + ... | 1.20783397E8 | +| test.c:600:22:600:23 | ip | 1.20783397E8 | +| test.c:600:27:600:27 | 1 | 1.0 | +| test.c:600:27:600:27 | (unsigned int)... | 1.0 | +| test.c:600:32:600:33 | 14 | 1.0 | +| test.c:600:32:600:33 | (unsigned int)... | 1.0 | +| test.c:601:17:601:18 | 14 | 1.0 | +| test.c:601:17:601:18 | (unsigned int)... | 1.0 | +| test.c:601:17:601:29 | ... * ... | 1.20783397E8 | +| test.c:601:17:601:39 | ... > ... | 1.0 | +| test.c:601:17:603:25 | ... ? ... : ... | 1.4588628990859608E16 | +| test.c:601:22:601:29 | (...) | 1.20783397E8 | +| test.c:601:23:601:23 | 2 | 1.0 | +| test.c:601:23:601:23 | (unsigned int)... | 1.0 | +| test.c:601:23:601:28 | ... * ... | 1.20783397E8 | +| test.c:601:27:601:28 | ip | 1.20783397E8 | +| test.c:601:33:601:34 | 17 | 1.0 | +| test.c:601:33:601:34 | (unsigned int)... | 1.0 | +| test.c:601:33:601:39 | ... * ... | 1.20783397E8 | +| test.c:601:38:601:39 | ip | 1.20783397E8 | +| test.c:602:19:602:20 | 14 | 1.0 | +| test.c:602:19:602:20 | (unsigned int)... | 1.0 | +| test.c:602:19:602:31 | ... * ... | 1.20783397E8 | +| test.c:602:24:602:31 | (...) | 1.20783397E8 | +| test.c:602:25:602:25 | 2 | 1.0 | +| test.c:602:25:602:25 | (unsigned int)... | 1.0 | +| test.c:602:25:602:30 | ... * ... | 1.20783397E8 | +| test.c:602:29:602:30 | ip | 1.20783397E8 | +| test.c:603:19:603:20 | 14 | 1.0 | +| test.c:603:19:603:20 | (unsigned int)... | 1.0 | +| test.c:603:19:603:25 | ... * ... | 1.20783397E8 | +| test.c:603:24:603:25 | ip | 1.20783397E8 | +| test.c:604:11:604:61 | (...) | 1.3129766091773648E17 | +| test.c:604:12:604:13 | 14 | 1.0 | +| test.c:604:12:604:13 | (unsigned int)... | 1.0 | +| test.c:604:12:604:18 | ... * ... | 3.62350191E8 | +| test.c:604:12:604:34 | ... > ... | 1.0 | +| test.c:604:12:604:60 | ... ? ... : ... | 1.3129766091773648E17 | +| test.c:604:17:604:18 | ip | 3.62350191E8 | +| test.c:604:22:604:29 | (...) | 3.62350191E8 | +| test.c:604:22:604:34 | ... * ... | 3.62350191E8 | +| test.c:604:23:604:24 | ip | 3.62350191E8 | +| test.c:604:23:604:28 | ... + ... | 3.62350191E8 | +| test.c:604:28:604:28 | 1 | 1.0 | +| test.c:604:28:604:28 | (unsigned int)... | 1.0 | +| test.c:604:33:604:34 | 17 | 1.0 | +| test.c:604:33:604:34 | (unsigned int)... | 1.0 | +| test.c:604:38:604:39 | 17 | 1.0 | +| test.c:604:38:604:39 | (unsigned int)... | 1.0 | +| test.c:604:38:604:44 | ... * ... | 3.62350191E8 | +| test.c:604:43:604:44 | ip | 3.62350191E8 | +| test.c:604:48:604:55 | (...) | 3.62350191E8 | +| test.c:604:48:604:60 | ... * ... | 3.62350191E8 | +| test.c:604:49:604:50 | ip | 3.62350191E8 | +| test.c:604:49:604:54 | ... + ... | 3.62350191E8 | +| test.c:604:54:604:54 | 1 | 1.0 | +| test.c:604:54:604:54 | (unsigned int)... | 1.0 | +| test.c:604:59:604:60 | 17 | 1.0 | +| test.c:604:59:604:60 | (unsigned int)... | 1.0 | +| test.c:605:15:605:15 | 4 | 1.0 | +| test.c:605:15:605:15 | (unsigned int)... | 1.0 | +| test.c:605:15:605:32 | ... * ... | 7.24700382E8 | +| test.c:605:15:606:32 | ... + ... | 5.251906436709459E17 | +| test.c:605:15:607:32 | ... + ... | 3.806058600911604E26 | +| test.c:605:15:613:28 | ... + ... | 1.1588865682845433E54 | +| test.c:605:19:605:32 | (...) | 7.24700382E8 | +| test.c:605:20:605:21 | ip | 7.24700382E8 | +| test.c:605:20:605:26 | ... * ... | 7.24700382E8 | +| test.c:605:20:605:31 | ... + ... | 7.24700382E8 | +| test.c:605:25:605:26 | 14 | 1.0 | +| test.c:605:25:605:26 | (unsigned int)... | 1.0 | +| test.c:605:30:605:31 | 32 | 1.0 | | test.c:605:30:605:31 | (unsigned int)... | 1.0 | -| test.c:605:30:605:36 | ... * ... | 5.797603059E9 | -| test.c:605:35:605:36 | ip | 5.797603059E9 | -| test.c:605:40:605:41 | 17 | 1.0 | -| test.c:605:40:605:41 | (unsigned int)... | 1.0 | -| test.c:605:40:605:52 | ... * ... | 5.797603059E9 | -| test.c:605:45:605:52 | (...) | 5.797603059E9 | -| test.c:605:46:605:46 | 2 | 1.0 | -| test.c:605:46:605:46 | (unsigned int)... | 1.0 | -| test.c:605:46:605:51 | ... * ... | 5.797603059E9 | -| test.c:605:50:605:51 | ip | 5.797603059E9 | -| test.c:605:56:605:57 | 17 | 1.0 | -| test.c:605:56:605:57 | (unsigned int)... | 1.0 | -| test.c:605:56:605:62 | ... * ... | 5.797603059E9 | -| test.c:605:61:605:62 | ip | 5.797603059E9 | -| test.c:606:17:606:28 | (...) | 1.1595206119E10 | -| test.c:606:17:606:33 | ... * ... | 1.1595206119E10 | -| test.c:606:18:606:18 | 2 | 1.0 | -| test.c:606:18:606:18 | (unsigned int)... | 1.0 | -| test.c:606:18:606:23 | ... * ... | 1.1595206119E10 | -| test.c:606:18:606:27 | ... + ... | 1.1595206119E10 | -| test.c:606:22:606:23 | ip | 1.1595206119E10 | -| test.c:606:27:606:27 | 1 | 1.0 | -| test.c:606:27:606:27 | (unsigned int)... | 1.0 | -| test.c:606:32:606:33 | 14 | 1.0 | -| test.c:606:32:606:33 | (unsigned int)... | 1.0 | -| test.c:607:17:607:18 | 14 | 1.0 | -| test.c:607:17:607:18 | (unsigned int)... | 1.0 | -| test.c:607:17:607:29 | ... * ... | 1.1595206119E10 | -| test.c:607:17:607:39 | ... > ... | 1.0 | -| test.c:607:17:609:25 | ... ? ... : ... | 1.3444880494209504E20 | -| test.c:607:22:607:29 | (...) | 1.1595206119E10 | -| test.c:607:23:607:23 | 2 | 1.0 | -| test.c:607:23:607:23 | (unsigned int)... | 1.0 | -| test.c:607:23:607:28 | ... * ... | 1.1595206119E10 | -| test.c:607:27:607:28 | ip | 1.1595206119E10 | -| test.c:607:33:607:34 | 17 | 1.0 | -| test.c:607:33:607:34 | (unsigned int)... | 1.0 | -| test.c:607:33:607:39 | ... * ... | 1.1595206119E10 | -| test.c:607:38:607:39 | ip | 1.1595206119E10 | -| test.c:608:19:608:20 | 14 | 1.0 | -| test.c:608:19:608:20 | (unsigned int)... | 1.0 | -| test.c:608:19:608:31 | ... * ... | 1.1595206119E10 | -| test.c:608:24:608:31 | (...) | 1.1595206119E10 | -| test.c:608:25:608:25 | 2 | 1.0 | -| test.c:608:25:608:25 | (unsigned int)... | 1.0 | -| test.c:608:25:608:30 | ... * ... | 1.1595206119E10 | -| test.c:608:29:608:30 | ip | 1.1595206119E10 | -| test.c:609:19:609:20 | 14 | 1.0 | -| test.c:609:19:609:20 | (unsigned int)... | 1.0 | -| test.c:609:19:609:25 | ... * ... | 1.1595206119E10 | -| test.c:609:24:609:25 | ip | 1.1595206119E10 | -| test.c:610:11:610:11 | 2 | 1.0 | -| test.c:610:11:610:11 | (unsigned int)... | 1.0 | -| test.c:610:11:610:16 | ... * ... | 3.4785618357E10 | -| test.c:610:11:610:21 | ... * ... | 3.4785618357E10 | -| test.c:610:11:610:41 | ... + ... | 1.2100392444788552E21 | -| test.c:610:15:610:16 | ip | 3.4785618357E10 | -| test.c:610:20:610:21 | 14 | 1.0 | -| test.c:610:20:610:21 | (unsigned int)... | 1.0 | -| test.c:610:25:610:36 | (...) | 3.4785618357E10 | -| test.c:610:25:610:41 | ... * ... | 3.4785618357E10 | -| test.c:610:26:610:26 | 2 | 1.0 | -| test.c:610:26:610:26 | (unsigned int)... | 1.0 | -| test.c:610:26:610:31 | ... * ... | 3.4785618357E10 | -| test.c:610:26:610:35 | ... + ... | 3.4785618357E10 | -| test.c:610:30:610:31 | ip | 3.4785618357E10 | -| test.c:610:35:610:35 | 1 | 1.0 | -| test.c:610:35:610:35 | (unsigned int)... | 1.0 | -| test.c:610:40:610:41 | 17 | 1.0 | -| test.c:610:40:610:41 | (unsigned int)... | 1.0 | -| test.c:611:15:611:15 | 4 | 1.0 | -| test.c:611:15:611:15 | (unsigned int)... | 1.0 | -| test.c:611:15:611:32 | ... * ... | 3.4785618357E10 | -| test.c:611:15:612:32 | ... + ... | 1.2100392444788552E21 | -| test.c:611:15:613:32 | ... + ... | 4.209196335543408E31 | -| test.c:611:15:619:28 | ... + ... | 1.417386703353284E64 | -| test.c:611:19:611:32 | (...) | 3.4785618357E10 | -| test.c:611:20:611:21 | ip | 3.4785618357E10 | -| test.c:611:20:611:26 | ... * ... | 3.4785618357E10 | -| test.c:611:20:611:31 | ... + ... | 3.4785618357E10 | -| test.c:611:25:611:26 | 14 | 1.0 | -| test.c:611:25:611:26 | (unsigned int)... | 1.0 | -| test.c:611:30:611:31 | 32 | 1.0 | -| test.c:611:30:611:31 | (unsigned int)... | 1.0 | -| test.c:612:15:612:32 | (...) | 3.4785618357E10 | -| test.c:612:16:612:16 | 2 | 1.0 | -| test.c:612:16:612:16 | (unsigned int)... | 1.0 | -| test.c:612:16:612:21 | ... * ... | 3.4785618357E10 | -| test.c:612:16:612:26 | ... * ... | 3.4785618357E10 | -| test.c:612:16:612:31 | ... + ... | 3.4785618357E10 | -| test.c:612:20:612:21 | ip | 3.4785618357E10 | -| test.c:612:25:612:26 | 14 | 1.0 | -| test.c:612:25:612:26 | (unsigned int)... | 1.0 | -| test.c:612:30:612:31 | 32 | 1.0 | -| test.c:612:30:612:31 | (unsigned int)... | 1.0 | -| test.c:613:15:613:15 | 2 | 1.0 | -| test.c:613:15:613:15 | (unsigned int)... | 1.0 | -| test.c:613:15:613:32 | ... * ... | 3.4785618357E10 | -| test.c:613:19:613:32 | (...) | 3.4785618357E10 | -| test.c:613:20:613:21 | ip | 3.4785618357E10 | -| test.c:613:20:613:26 | ... * ... | 3.4785618357E10 | -| test.c:613:20:613:31 | ... + ... | 3.4785618357E10 | -| test.c:613:25:613:26 | 14 | 1.0 | -| test.c:613:25:613:26 | (unsigned int)... | 1.0 | -| test.c:613:30:613:31 | 64 | 1.0 | -| test.c:613:30:613:31 | (unsigned int)... | 1.0 | -| test.c:614:15:619:28 | (...) | 3.367357068579931E32 | -| test.c:614:16:614:27 | (...) | 3.4785618357E10 | -| test.c:614:16:614:32 | ... * ... | 3.4785618357E10 | -| test.c:614:16:615:65 | ... > ... | 1.0 | -| test.c:614:16:619:27 | ... ? ... : ... | 3.367357068579931E32 | -| test.c:614:17:614:17 | 2 | 1.0 | -| test.c:614:17:614:17 | (unsigned int)... | 1.0 | -| test.c:614:17:614:22 | ... * ... | 3.4785618357E10 | -| test.c:614:17:614:26 | ... + ... | 3.4785618357E10 | -| test.c:614:21:614:22 | ip | 3.4785618357E10 | -| test.c:614:26:614:26 | 1 | 1.0 | -| test.c:614:26:614:26 | (unsigned int)... | 1.0 | -| test.c:614:31:614:32 | 14 | 1.0 | -| test.c:614:31:614:32 | (unsigned int)... | 1.0 | -| test.c:615:15:615:65 | (...) | 1.2100392444788552E21 | -| test.c:615:16:615:17 | 14 | 1.0 | -| test.c:615:16:615:17 | (unsigned int)... | 1.0 | -| test.c:615:16:615:28 | ... * ... | 3.4785618357E10 | -| test.c:615:16:615:38 | ... > ... | 1.0 | -| test.c:615:16:615:64 | ... ? ... : ... | 1.2100392444788552E21 | -| test.c:615:21:615:28 | (...) | 3.4785618357E10 | -| test.c:615:22:615:22 | 2 | 1.0 | -| test.c:615:22:615:22 | (unsigned int)... | 1.0 | -| test.c:615:22:615:27 | ... * ... | 3.4785618357E10 | -| test.c:615:26:615:27 | ip | 3.4785618357E10 | -| test.c:615:32:615:33 | 17 | 1.0 | -| test.c:615:32:615:33 | (unsigned int)... | 1.0 | -| test.c:615:32:615:38 | ... * ... | 3.4785618357E10 | -| test.c:615:37:615:38 | ip | 3.4785618357E10 | -| test.c:615:42:615:43 | 17 | 1.0 | -| test.c:615:42:615:43 | (unsigned int)... | 1.0 | -| test.c:615:42:615:54 | ... * ... | 3.4785618357E10 | -| test.c:615:47:615:54 | (...) | 3.4785618357E10 | -| test.c:615:48:615:48 | 2 | 1.0 | -| test.c:615:48:615:48 | (unsigned int)... | 1.0 | -| test.c:615:48:615:53 | ... * ... | 3.4785618357E10 | -| test.c:615:52:615:53 | ip | 3.4785618357E10 | -| test.c:615:58:615:59 | 17 | 1.0 | -| test.c:615:58:615:59 | (unsigned int)... | 1.0 | -| test.c:615:58:615:64 | ... * ... | 3.4785618357E10 | -| test.c:615:63:615:64 | ip | 3.4785618357E10 | -| test.c:616:19:616:30 | (...) | 6.9571236715E10 | -| test.c:616:19:616:35 | ... * ... | 6.9571236715E10 | -| test.c:616:20:616:20 | 2 | 1.0 | -| test.c:616:20:616:20 | (unsigned int)... | 1.0 | -| test.c:616:20:616:25 | ... * ... | 6.9571236715E10 | -| test.c:616:20:616:29 | ... + ... | 6.9571236715E10 | -| test.c:616:24:616:25 | ip | 6.9571236715E10 | -| test.c:616:29:616:29 | 1 | 1.0 | -| test.c:616:29:616:29 | (unsigned int)... | 1.0 | -| test.c:616:34:616:35 | 14 | 1.0 | -| test.c:616:34:616:35 | (unsigned int)... | 1.0 | -| test.c:617:19:617:20 | 14 | 1.0 | -| test.c:617:19:617:20 | (unsigned int)... | 1.0 | -| test.c:617:19:617:31 | ... * ... | 6.9571236715E10 | -| test.c:617:19:617:41 | ... > ... | 1.0 | -| test.c:617:19:619:27 | ... ? ... : ... | 4.840156978054564E21 | -| test.c:617:24:617:31 | (...) | 6.9571236715E10 | -| test.c:617:25:617:25 | 2 | 1.0 | -| test.c:617:25:617:25 | (unsigned int)... | 1.0 | -| test.c:617:25:617:30 | ... * ... | 6.9571236715E10 | -| test.c:617:29:617:30 | ip | 6.9571236715E10 | -| test.c:617:35:617:36 | 17 | 1.0 | -| test.c:617:35:617:36 | (unsigned int)... | 1.0 | -| test.c:617:35:617:41 | ... * ... | 6.9571236715E10 | -| test.c:617:40:617:41 | ip | 6.9571236715E10 | -| test.c:618:21:618:22 | 14 | 1.0 | -| test.c:618:21:618:22 | (unsigned int)... | 1.0 | -| test.c:618:21:618:33 | ... * ... | 6.9571236715E10 | -| test.c:618:26:618:33 | (...) | 6.9571236715E10 | -| test.c:618:27:618:27 | 2 | 1.0 | -| test.c:618:27:618:27 | (unsigned int)... | 1.0 | -| test.c:618:27:618:32 | ... * ... | 6.9571236715E10 | -| test.c:618:31:618:32 | ip | 6.9571236715E10 | -| test.c:619:21:619:22 | 14 | 1.0 | -| test.c:619:21:619:22 | (unsigned int)... | 1.0 | -| test.c:619:21:619:27 | ... * ... | 6.9571236715E10 | -| test.c:619:26:619:27 | ip | 6.9571236715E10 | -| test.c:620:15:620:15 | 2 | 1.0 | -| test.c:620:15:620:15 | (unsigned int)... | 1.0 | -| test.c:620:15:620:20 | ... * ... | 3.4785618357E10 | -| test.c:620:15:620:25 | ... * ... | 3.4785618357E10 | -| test.c:620:15:620:45 | ... + ... | 1.2100392444788552E21 | -| test.c:620:19:620:20 | ip | 3.4785618357E10 | -| test.c:620:24:620:25 | 14 | 1.0 | -| test.c:620:24:620:25 | (unsigned int)... | 1.0 | -| test.c:620:29:620:40 | (...) | 3.4785618357E10 | -| test.c:620:29:620:45 | ... * ... | 3.4785618357E10 | -| test.c:620:30:620:30 | 2 | 1.0 | -| test.c:620:30:620:30 | (unsigned int)... | 1.0 | -| test.c:620:30:620:35 | ... * ... | 3.4785618357E10 | -| test.c:620:30:620:39 | ... + ... | 3.4785618357E10 | -| test.c:620:34:620:35 | ip | 3.4785618357E10 | -| test.c:620:39:620:39 | 1 | 1.0 | -| test.c:620:39:620:39 | (unsigned int)... | 1.0 | -| test.c:620:44:620:45 | 17 | 1.0 | -| test.c:620:44:620:45 | (unsigned int)... | 1.0 | -| test.c:621:11:621:11 | 4 | 1.0 | -| test.c:621:11:621:11 | (unsigned int)... | 1.0 | -| test.c:621:11:621:28 | ... * ... | 5.797603059E9 | -| test.c:621:11:622:32 | ... + ... | 3.361220122972616E19 | -| test.c:621:11:623:32 | ... + ... | 1.9487020066918396E29 | -| test.c:621:11:629:28 | ... + ... | 3.0379516094938436E59 | -| test.c:621:11:630:63 | ... > ... | 1.0 | -| test.c:621:11:642:27 | ... ? ... : ... | 4.390639451194891E87 | -| test.c:621:15:621:28 | (...) | 5.797603059E9 | -| test.c:621:16:621:17 | ip | 5.797603059E9 | -| test.c:621:16:621:22 | ... * ... | 5.797603059E9 | -| test.c:621:16:621:27 | ... + ... | 5.797603059E9 | -| test.c:621:21:621:22 | 14 | 1.0 | -| test.c:621:21:621:22 | (unsigned int)... | 1.0 | -| test.c:621:26:621:27 | 32 | 1.0 | -| test.c:621:26:621:27 | (unsigned int)... | 1.0 | -| test.c:622:15:622:32 | (...) | 5.797603059E9 | -| test.c:622:16:622:16 | 2 | 1.0 | -| test.c:622:16:622:16 | (unsigned int)... | 1.0 | -| test.c:622:16:622:21 | ... * ... | 5.797603059E9 | -| test.c:622:16:622:26 | ... * ... | 5.797603059E9 | -| test.c:622:16:622:31 | ... + ... | 5.797603059E9 | -| test.c:622:20:622:21 | ip | 5.797603059E9 | -| test.c:622:25:622:26 | 14 | 1.0 | -| test.c:622:25:622:26 | (unsigned int)... | 1.0 | -| test.c:622:30:622:31 | 32 | 1.0 | +| test.c:606:15:606:32 | (...) | 7.24700382E8 | +| test.c:606:16:606:16 | 2 | 1.0 | +| test.c:606:16:606:16 | (unsigned int)... | 1.0 | +| test.c:606:16:606:21 | ... * ... | 7.24700382E8 | +| test.c:606:16:606:26 | ... * ... | 7.24700382E8 | +| test.c:606:16:606:31 | ... + ... | 7.24700382E8 | +| test.c:606:20:606:21 | ip | 7.24700382E8 | +| test.c:606:25:606:26 | 14 | 1.0 | +| test.c:606:25:606:26 | (unsigned int)... | 1.0 | +| test.c:606:30:606:31 | 32 | 1.0 | +| test.c:606:30:606:31 | (unsigned int)... | 1.0 | +| test.c:607:15:607:15 | 2 | 1.0 | +| test.c:607:15:607:15 | (unsigned int)... | 1.0 | +| test.c:607:15:607:32 | ... * ... | 7.24700382E8 | +| test.c:607:19:607:32 | (...) | 7.24700382E8 | +| test.c:607:20:607:21 | ip | 7.24700382E8 | +| test.c:607:20:607:26 | ... * ... | 7.24700382E8 | +| test.c:607:20:607:31 | ... + ... | 7.24700382E8 | +| test.c:607:25:607:26 | 14 | 1.0 | +| test.c:607:25:607:26 | (unsigned int)... | 1.0 | +| test.c:607:30:607:31 | 64 | 1.0 | +| test.c:607:30:607:31 | (unsigned int)... | 1.0 | +| test.c:608:15:613:28 | (...) | 3.044846887031571E27 | +| test.c:608:16:608:27 | (...) | 7.24700382E8 | +| test.c:608:16:608:32 | ... * ... | 7.24700382E8 | +| test.c:608:16:609:65 | ... > ... | 1.0 | +| test.c:608:16:613:27 | ... ? ... : ... | 3.044846887031571E27 | +| test.c:608:17:608:17 | 2 | 1.0 | +| test.c:608:17:608:17 | (unsigned int)... | 1.0 | +| test.c:608:17:608:22 | ... * ... | 7.24700382E8 | +| test.c:608:17:608:26 | ... + ... | 7.24700382E8 | +| test.c:608:21:608:22 | ip | 7.24700382E8 | +| test.c:608:26:608:26 | 1 | 1.0 | +| test.c:608:26:608:26 | (unsigned int)... | 1.0 | +| test.c:608:31:608:32 | 14 | 1.0 | +| test.c:608:31:608:32 | (unsigned int)... | 1.0 | +| test.c:609:15:609:65 | (...) | 5.251906436709459E17 | +| test.c:609:16:609:17 | 14 | 1.0 | +| test.c:609:16:609:17 | (unsigned int)... | 1.0 | +| test.c:609:16:609:28 | ... * ... | 7.24700382E8 | +| test.c:609:16:609:38 | ... > ... | 1.0 | +| test.c:609:16:609:64 | ... ? ... : ... | 5.251906436709459E17 | +| test.c:609:21:609:28 | (...) | 7.24700382E8 | +| test.c:609:22:609:22 | 2 | 1.0 | +| test.c:609:22:609:22 | (unsigned int)... | 1.0 | +| test.c:609:22:609:27 | ... * ... | 7.24700382E8 | +| test.c:609:26:609:27 | ip | 7.24700382E8 | +| test.c:609:32:609:33 | 17 | 1.0 | +| test.c:609:32:609:33 | (unsigned int)... | 1.0 | +| test.c:609:32:609:38 | ... * ... | 7.24700382E8 | +| test.c:609:37:609:38 | ip | 7.24700382E8 | +| test.c:609:42:609:43 | 17 | 1.0 | +| test.c:609:42:609:43 | (unsigned int)... | 1.0 | +| test.c:609:42:609:54 | ... * ... | 7.24700382E8 | +| test.c:609:47:609:54 | (...) | 7.24700382E8 | +| test.c:609:48:609:48 | 2 | 1.0 | +| test.c:609:48:609:48 | (unsigned int)... | 1.0 | +| test.c:609:48:609:53 | ... * ... | 7.24700382E8 | +| test.c:609:52:609:53 | ip | 7.24700382E8 | +| test.c:609:58:609:59 | 17 | 1.0 | +| test.c:609:58:609:59 | (unsigned int)... | 1.0 | +| test.c:609:58:609:64 | ... * ... | 7.24700382E8 | +| test.c:609:63:609:64 | ip | 7.24700382E8 | +| test.c:610:19:610:30 | (...) | 1.449400765E9 | +| test.c:610:19:610:35 | ... * ... | 1.449400765E9 | +| test.c:610:20:610:20 | 2 | 1.0 | +| test.c:610:20:610:20 | (unsigned int)... | 1.0 | +| test.c:610:20:610:25 | ... * ... | 1.449400765E9 | +| test.c:610:20:610:29 | ... + ... | 1.449400765E9 | +| test.c:610:24:610:25 | ip | 1.449400765E9 | +| test.c:610:29:610:29 | 1 | 1.0 | +| test.c:610:29:610:29 | (unsigned int)... | 1.0 | +| test.c:610:34:610:35 | 14 | 1.0 | +| test.c:610:34:610:35 | (unsigned int)... | 1.0 | +| test.c:611:19:611:20 | 14 | 1.0 | +| test.c:611:19:611:20 | (unsigned int)... | 1.0 | +| test.c:611:19:611:31 | ... * ... | 1.449400765E9 | +| test.c:611:19:611:41 | ... > ... | 1.0 | +| test.c:611:19:613:27 | ... ? ... : ... | 2.1007625775825853E18 | +| test.c:611:24:611:31 | (...) | 1.449400765E9 | +| test.c:611:25:611:25 | 2 | 1.0 | +| test.c:611:25:611:25 | (unsigned int)... | 1.0 | +| test.c:611:25:611:30 | ... * ... | 1.449400765E9 | +| test.c:611:29:611:30 | ip | 1.449400765E9 | +| test.c:611:35:611:36 | 17 | 1.0 | +| test.c:611:35:611:36 | (unsigned int)... | 1.0 | +| test.c:611:35:611:41 | ... * ... | 1.449400765E9 | +| test.c:611:40:611:41 | ip | 1.449400765E9 | +| test.c:612:21:612:22 | 14 | 1.0 | +| test.c:612:21:612:22 | (unsigned int)... | 1.0 | +| test.c:612:21:612:33 | ... * ... | 1.449400765E9 | +| test.c:612:26:612:33 | (...) | 1.449400765E9 | +| test.c:612:27:612:27 | 2 | 1.0 | +| test.c:612:27:612:27 | (unsigned int)... | 1.0 | +| test.c:612:27:612:32 | ... * ... | 1.449400765E9 | +| test.c:612:31:612:32 | ip | 1.449400765E9 | +| test.c:613:21:613:22 | 14 | 1.0 | +| test.c:613:21:613:22 | (unsigned int)... | 1.0 | +| test.c:613:21:613:27 | ... * ... | 1.449400765E9 | +| test.c:613:26:613:27 | ip | 1.449400765E9 | +| test.c:614:15:614:16 | 14 | 1.0 | +| test.c:614:15:614:16 | (unsigned int)... | 1.0 | +| test.c:614:15:614:21 | ... * ... | 7.24700382E8 | +| test.c:614:15:614:37 | ... > ... | 1.0 | +| test.c:614:15:616:29 | ... ? ... : ... | 5.251906436709459E17 | +| test.c:614:20:614:21 | ip | 7.24700382E8 | +| test.c:614:25:614:32 | (...) | 7.24700382E8 | +| test.c:614:25:614:37 | ... * ... | 7.24700382E8 | +| test.c:614:26:614:27 | ip | 7.24700382E8 | +| test.c:614:26:614:31 | ... + ... | 7.24700382E8 | +| test.c:614:31:614:31 | 1 | 1.0 | +| test.c:614:31:614:31 | (unsigned int)... | 1.0 | +| test.c:614:36:614:37 | 17 | 1.0 | +| test.c:614:36:614:37 | (unsigned int)... | 1.0 | +| test.c:615:17:615:18 | 14 | 1.0 | +| test.c:615:17:615:18 | (unsigned int)... | 1.0 | +| test.c:615:17:615:23 | ... * ... | 7.24700382E8 | +| test.c:615:22:615:23 | ip | 7.24700382E8 | +| test.c:616:17:616:24 | (...) | 7.24700382E8 | +| test.c:616:17:616:29 | ... * ... | 7.24700382E8 | +| test.c:616:18:616:19 | ip | 7.24700382E8 | +| test.c:616:18:616:23 | ... + ... | 7.24700382E8 | +| test.c:616:23:616:23 | 1 | 1.0 | +| test.c:616:23:616:23 | (unsigned int)... | 1.0 | +| test.c:616:28:616:29 | 14 | 1.0 | +| test.c:616:28:616:29 | (unsigned int)... | 1.0 | +| test.c:617:11:617:11 | 2 | 1.0 | +| test.c:617:11:617:11 | (unsigned int)... | 1.0 | +| test.c:617:11:617:28 | ... * ... | 5.797603059E9 | +| test.c:617:11:637:46 | ... + ... | 9.943431528813442E94 | +| test.c:617:15:617:28 | (...) | 5.797603059E9 | +| test.c:617:16:617:17 | ip | 5.797603059E9 | +| test.c:617:16:617:22 | ... * ... | 5.797603059E9 | +| test.c:617:16:617:27 | ... + ... | 5.797603059E9 | +| test.c:617:21:617:22 | 14 | 1.0 | +| test.c:617:21:617:22 | (unsigned int)... | 1.0 | +| test.c:617:26:617:27 | 32 | 1.0 | +| test.c:617:26:617:27 | (unsigned int)... | 1.0 | +| test.c:618:11:637:46 | (...) | 1.715093535659983E85 | +| test.c:618:12:618:12 | 4 | 1.0 | +| test.c:618:12:618:12 | (unsigned int)... | 1.0 | +| test.c:618:12:618:29 | ... * ... | 5.797603059E9 | +| test.c:618:12:619:30 | ... + ... | 3.361220122972616E19 | +| test.c:618:12:620:30 | ... + ... | 1.9487020066918396E29 | +| test.c:618:12:626:26 | ... + ... | 3.0379516094938436E59 | +| test.c:618:12:627:41 | ... > ... | 1.0 | +| test.c:618:12:637:45 | ... ? ... : ... | 1.715093535659983E85 | +| test.c:618:16:618:29 | (...) | 5.797603059E9 | +| test.c:618:17:618:18 | ip | 5.797603059E9 | +| test.c:618:17:618:23 | ... * ... | 5.797603059E9 | +| test.c:618:17:618:28 | ... + ... | 5.797603059E9 | +| test.c:618:22:618:23 | 14 | 1.0 | +| test.c:618:22:618:23 | (unsigned int)... | 1.0 | +| test.c:618:27:618:28 | 32 | 1.0 | +| test.c:618:27:618:28 | (unsigned int)... | 1.0 | +| test.c:619:13:619:30 | (...) | 5.797603059E9 | +| test.c:619:14:619:14 | 2 | 1.0 | +| test.c:619:14:619:14 | (unsigned int)... | 1.0 | +| test.c:619:14:619:19 | ... * ... | 5.797603059E9 | +| test.c:619:14:619:24 | ... * ... | 5.797603059E9 | +| test.c:619:14:619:29 | ... + ... | 5.797603059E9 | +| test.c:619:18:619:19 | ip | 5.797603059E9 | +| test.c:619:23:619:24 | 14 | 1.0 | +| test.c:619:23:619:24 | (unsigned int)... | 1.0 | +| test.c:619:28:619:29 | 32 | 1.0 | +| test.c:619:28:619:29 | (unsigned int)... | 1.0 | +| test.c:620:13:620:13 | 2 | 1.0 | +| test.c:620:13:620:13 | (unsigned int)... | 1.0 | +| test.c:620:13:620:30 | ... * ... | 5.797603059E9 | +| test.c:620:17:620:30 | (...) | 5.797603059E9 | +| test.c:620:18:620:19 | ip | 5.797603059E9 | +| test.c:620:18:620:24 | ... * ... | 5.797603059E9 | +| test.c:620:18:620:29 | ... + ... | 5.797603059E9 | +| test.c:620:23:620:24 | 14 | 1.0 | +| test.c:620:23:620:24 | (unsigned int)... | 1.0 | +| test.c:620:28:620:29 | 64 | 1.0 | +| test.c:620:28:620:29 | (unsigned int)... | 1.0 | +| test.c:621:13:626:26 | (...) | 1.558961605756818E30 | +| test.c:621:14:621:25 | (...) | 5.797603059E9 | +| test.c:621:14:621:30 | ... * ... | 5.797603059E9 | +| test.c:621:14:622:63 | ... > ... | 1.0 | +| test.c:621:14:626:25 | ... ? ... : ... | 1.558961605756818E30 | +| test.c:621:15:621:15 | 2 | 1.0 | +| test.c:621:15:621:15 | (unsigned int)... | 1.0 | +| test.c:621:15:621:20 | ... * ... | 5.797603059E9 | +| test.c:621:15:621:24 | ... + ... | 5.797603059E9 | +| test.c:621:19:621:20 | ip | 5.797603059E9 | +| test.c:621:24:621:24 | 1 | 1.0 | +| test.c:621:24:621:24 | (unsigned int)... | 1.0 | +| test.c:621:29:621:30 | 14 | 1.0 | +| test.c:621:29:621:30 | (unsigned int)... | 1.0 | +| test.c:622:13:622:63 | (...) | 3.361220122972616E19 | +| test.c:622:14:622:15 | 14 | 1.0 | +| test.c:622:14:622:15 | (unsigned int)... | 1.0 | +| test.c:622:14:622:26 | ... * ... | 5.797603059E9 | +| test.c:622:14:622:36 | ... > ... | 1.0 | +| test.c:622:14:622:62 | ... ? ... : ... | 3.361220122972616E19 | +| test.c:622:19:622:26 | (...) | 5.797603059E9 | +| test.c:622:20:622:20 | 2 | 1.0 | +| test.c:622:20:622:20 | (unsigned int)... | 1.0 | +| test.c:622:20:622:25 | ... * ... | 5.797603059E9 | +| test.c:622:24:622:25 | ip | 5.797603059E9 | +| test.c:622:30:622:31 | 17 | 1.0 | | test.c:622:30:622:31 | (unsigned int)... | 1.0 | -| test.c:623:15:623:15 | 2 | 1.0 | -| test.c:623:15:623:15 | (unsigned int)... | 1.0 | -| test.c:623:15:623:32 | ... * ... | 5.797603059E9 | -| test.c:623:19:623:32 | (...) | 5.797603059E9 | -| test.c:623:20:623:21 | ip | 5.797603059E9 | -| test.c:623:20:623:26 | ... * ... | 5.797603059E9 | -| test.c:623:20:623:31 | ... + ... | 5.797603059E9 | -| test.c:623:25:623:26 | 14 | 1.0 | -| test.c:623:25:623:26 | (unsigned int)... | 1.0 | -| test.c:623:30:623:31 | 64 | 1.0 | -| test.c:623:30:623:31 | (unsigned int)... | 1.0 | -| test.c:624:15:629:28 | (...) | 1.558961605756818E30 | -| test.c:624:16:624:27 | (...) | 5.797603059E9 | -| test.c:624:16:624:32 | ... * ... | 5.797603059E9 | -| test.c:624:16:625:65 | ... > ... | 1.0 | -| test.c:624:16:629:27 | ... ? ... : ... | 1.558961605756818E30 | -| test.c:624:17:624:17 | 2 | 1.0 | -| test.c:624:17:624:17 | (unsigned int)... | 1.0 | -| test.c:624:17:624:22 | ... * ... | 5.797603059E9 | -| test.c:624:17:624:26 | ... + ... | 5.797603059E9 | -| test.c:624:21:624:22 | ip | 5.797603059E9 | -| test.c:624:26:624:26 | 1 | 1.0 | -| test.c:624:26:624:26 | (unsigned int)... | 1.0 | -| test.c:624:31:624:32 | 14 | 1.0 | -| test.c:624:31:624:32 | (unsigned int)... | 1.0 | -| test.c:625:15:625:65 | (...) | 3.361220122972616E19 | -| test.c:625:16:625:17 | 14 | 1.0 | -| test.c:625:16:625:17 | (unsigned int)... | 1.0 | -| test.c:625:16:625:28 | ... * ... | 5.797603059E9 | -| test.c:625:16:625:38 | ... > ... | 1.0 | -| test.c:625:16:625:64 | ... ? ... : ... | 3.361220122972616E19 | -| test.c:625:21:625:28 | (...) | 5.797603059E9 | -| test.c:625:22:625:22 | 2 | 1.0 | -| test.c:625:22:625:22 | (unsigned int)... | 1.0 | -| test.c:625:22:625:27 | ... * ... | 5.797603059E9 | -| test.c:625:26:625:27 | ip | 5.797603059E9 | -| test.c:625:32:625:33 | 17 | 1.0 | -| test.c:625:32:625:33 | (unsigned int)... | 1.0 | -| test.c:625:32:625:38 | ... * ... | 5.797603059E9 | -| test.c:625:37:625:38 | ip | 5.797603059E9 | -| test.c:625:42:625:43 | 17 | 1.0 | -| test.c:625:42:625:43 | (unsigned int)... | 1.0 | -| test.c:625:42:625:54 | ... * ... | 5.797603059E9 | -| test.c:625:47:625:54 | (...) | 5.797603059E9 | -| test.c:625:48:625:48 | 2 | 1.0 | -| test.c:625:48:625:48 | (unsigned int)... | 1.0 | -| test.c:625:48:625:53 | ... * ... | 5.797603059E9 | -| test.c:625:52:625:53 | ip | 5.797603059E9 | -| test.c:625:58:625:59 | 17 | 1.0 | -| test.c:625:58:625:59 | (unsigned int)... | 1.0 | -| test.c:625:58:625:64 | ... * ... | 5.797603059E9 | -| test.c:625:63:625:64 | ip | 5.797603059E9 | -| test.c:626:19:626:30 | (...) | 1.1595206119E10 | -| test.c:626:19:626:35 | ... * ... | 1.1595206119E10 | -| test.c:626:20:626:20 | 2 | 1.0 | -| test.c:626:20:626:20 | (unsigned int)... | 1.0 | -| test.c:626:20:626:25 | ... * ... | 1.1595206119E10 | -| test.c:626:20:626:29 | ... + ... | 1.1595206119E10 | +| test.c:622:30:622:36 | ... * ... | 5.797603059E9 | +| test.c:622:35:622:36 | ip | 5.797603059E9 | +| test.c:622:40:622:41 | 17 | 1.0 | +| test.c:622:40:622:41 | (unsigned int)... | 1.0 | +| test.c:622:40:622:52 | ... * ... | 5.797603059E9 | +| test.c:622:45:622:52 | (...) | 5.797603059E9 | +| test.c:622:46:622:46 | 2 | 1.0 | +| test.c:622:46:622:46 | (unsigned int)... | 1.0 | +| test.c:622:46:622:51 | ... * ... | 5.797603059E9 | +| test.c:622:50:622:51 | ip | 5.797603059E9 | +| test.c:622:56:622:57 | 17 | 1.0 | +| test.c:622:56:622:57 | (unsigned int)... | 1.0 | +| test.c:622:56:622:62 | ... * ... | 5.797603059E9 | +| test.c:622:61:622:62 | ip | 5.797603059E9 | +| test.c:623:17:623:28 | (...) | 1.1595206119E10 | +| test.c:623:17:623:33 | ... * ... | 1.1595206119E10 | +| test.c:623:18:623:18 | 2 | 1.0 | +| test.c:623:18:623:18 | (unsigned int)... | 1.0 | +| test.c:623:18:623:23 | ... * ... | 1.1595206119E10 | +| test.c:623:18:623:27 | ... + ... | 1.1595206119E10 | +| test.c:623:22:623:23 | ip | 1.1595206119E10 | +| test.c:623:27:623:27 | 1 | 1.0 | +| test.c:623:27:623:27 | (unsigned int)... | 1.0 | +| test.c:623:32:623:33 | 14 | 1.0 | +| test.c:623:32:623:33 | (unsigned int)... | 1.0 | +| test.c:624:17:624:18 | 14 | 1.0 | +| test.c:624:17:624:18 | (unsigned int)... | 1.0 | +| test.c:624:17:624:29 | ... * ... | 1.1595206119E10 | +| test.c:624:17:624:39 | ... > ... | 1.0 | +| test.c:624:17:626:25 | ... ? ... : ... | 1.3444880494209504E20 | +| test.c:624:22:624:29 | (...) | 1.1595206119E10 | +| test.c:624:23:624:23 | 2 | 1.0 | +| test.c:624:23:624:23 | (unsigned int)... | 1.0 | +| test.c:624:23:624:28 | ... * ... | 1.1595206119E10 | +| test.c:624:27:624:28 | ip | 1.1595206119E10 | +| test.c:624:33:624:34 | 17 | 1.0 | +| test.c:624:33:624:34 | (unsigned int)... | 1.0 | +| test.c:624:33:624:39 | ... * ... | 1.1595206119E10 | +| test.c:624:38:624:39 | ip | 1.1595206119E10 | +| test.c:625:19:625:20 | 14 | 1.0 | +| test.c:625:19:625:20 | (unsigned int)... | 1.0 | +| test.c:625:19:625:31 | ... * ... | 1.1595206119E10 | +| test.c:625:24:625:31 | (...) | 1.1595206119E10 | +| test.c:625:25:625:25 | 2 | 1.0 | +| test.c:625:25:625:25 | (unsigned int)... | 1.0 | +| test.c:625:25:625:30 | ... * ... | 1.1595206119E10 | +| test.c:625:29:625:30 | ip | 1.1595206119E10 | +| test.c:626:19:626:20 | 14 | 1.0 | +| test.c:626:19:626:20 | (unsigned int)... | 1.0 | +| test.c:626:19:626:25 | ... * ... | 1.1595206119E10 | | test.c:626:24:626:25 | ip | 1.1595206119E10 | -| test.c:626:29:626:29 | 1 | 1.0 | -| test.c:626:29:626:29 | (unsigned int)... | 1.0 | -| test.c:626:34:626:35 | 14 | 1.0 | -| test.c:626:34:626:35 | (unsigned int)... | 1.0 | -| test.c:627:19:627:20 | 14 | 1.0 | -| test.c:627:19:627:20 | (unsigned int)... | 1.0 | -| test.c:627:19:627:31 | ... * ... | 1.1595206119E10 | -| test.c:627:19:627:41 | ... > ... | 1.0 | -| test.c:627:19:629:27 | ... ? ... : ... | 1.3444880494209504E20 | -| test.c:627:24:627:31 | (...) | 1.1595206119E10 | -| test.c:627:25:627:25 | 2 | 1.0 | -| test.c:627:25:627:25 | (unsigned int)... | 1.0 | -| test.c:627:25:627:30 | ... * ... | 1.1595206119E10 | -| test.c:627:29:627:30 | ip | 1.1595206119E10 | -| test.c:627:35:627:36 | 17 | 1.0 | -| test.c:627:35:627:36 | (unsigned int)... | 1.0 | -| test.c:627:35:627:41 | ... * ... | 1.1595206119E10 | -| test.c:627:40:627:41 | ip | 1.1595206119E10 | -| test.c:628:21:628:22 | 14 | 1.0 | -| test.c:628:21:628:22 | (unsigned int)... | 1.0 | -| test.c:628:21:628:33 | ... * ... | 1.1595206119E10 | -| test.c:628:26:628:33 | (...) | 1.1595206119E10 | -| test.c:628:27:628:27 | 2 | 1.0 | -| test.c:628:27:628:27 | (unsigned int)... | 1.0 | -| test.c:628:27:628:32 | ... * ... | 1.1595206119E10 | -| test.c:628:31:628:32 | ip | 1.1595206119E10 | -| test.c:629:21:629:22 | 14 | 1.0 | -| test.c:629:21:629:22 | (unsigned int)... | 1.0 | -| test.c:629:21:629:27 | ... * ... | 1.1595206119E10 | -| test.c:629:26:629:27 | ip | 1.1595206119E10 | -| test.c:630:13:630:63 | (...) | 1.2100392444788552E21 | -| test.c:630:14:630:15 | 14 | 1.0 | -| test.c:630:14:630:15 | (unsigned int)... | 1.0 | -| test.c:630:14:630:20 | ... * ... | 3.4785618357E10 | -| test.c:630:14:630:36 | ... > ... | 1.0 | -| test.c:630:14:630:62 | ... ? ... : ... | 1.2100392444788552E21 | -| test.c:630:19:630:20 | ip | 3.4785618357E10 | -| test.c:630:24:630:31 | (...) | 3.4785618357E10 | -| test.c:630:24:630:36 | ... * ... | 3.4785618357E10 | -| test.c:630:25:630:26 | ip | 3.4785618357E10 | -| test.c:630:25:630:30 | ... + ... | 3.4785618357E10 | -| test.c:630:30:630:30 | 1 | 1.0 | -| test.c:630:30:630:30 | (unsigned int)... | 1.0 | -| test.c:630:35:630:36 | 17 | 1.0 | -| test.c:630:35:630:36 | (unsigned int)... | 1.0 | -| test.c:630:40:630:41 | 17 | 1.0 | -| test.c:630:40:630:41 | (unsigned int)... | 1.0 | -| test.c:630:40:630:46 | ... * ... | 3.4785618357E10 | -| test.c:630:45:630:46 | ip | 3.4785618357E10 | -| test.c:630:50:630:57 | (...) | 3.4785618357E10 | -| test.c:630:50:630:62 | ... * ... | 3.4785618357E10 | -| test.c:630:51:630:52 | ip | 3.4785618357E10 | -| test.c:630:51:630:56 | ... + ... | 3.4785618357E10 | -| test.c:630:56:630:56 | 1 | 1.0 | -| test.c:630:56:630:56 | (unsigned int)... | 1.0 | -| test.c:630:61:630:62 | 17 | 1.0 | -| test.c:630:61:630:62 | (unsigned int)... | 1.0 | -| test.c:631:13:631:13 | 4 | 1.0 | -| test.c:631:13:631:13 | (unsigned int)... | 1.0 | -| test.c:631:13:631:30 | ... * ... | 6.9571236714E10 | -| test.c:631:13:632:30 | ... + ... | 4.840156977915421E21 | -| test.c:631:13:633:30 | ... + ... | 3.3673570684347266E32 | -| test.c:631:13:639:26 | ... + ... | 9.071274901265435E65 | -| test.c:631:17:631:30 | (...) | 6.9571236714E10 | -| test.c:631:18:631:19 | ip | 6.9571236714E10 | -| test.c:631:18:631:24 | ... * ... | 6.9571236714E10 | -| test.c:631:18:631:29 | ... + ... | 6.9571236714E10 | -| test.c:631:23:631:24 | 14 | 1.0 | -| test.c:631:23:631:24 | (unsigned int)... | 1.0 | -| test.c:631:28:631:29 | 32 | 1.0 | -| test.c:631:28:631:29 | (unsigned int)... | 1.0 | -| test.c:632:13:632:30 | (...) | 6.9571236714E10 | -| test.c:632:14:632:14 | 2 | 1.0 | -| test.c:632:14:632:14 | (unsigned int)... | 1.0 | -| test.c:632:14:632:19 | ... * ... | 6.9571236714E10 | -| test.c:632:14:632:24 | ... * ... | 6.9571236714E10 | -| test.c:632:14:632:29 | ... + ... | 6.9571236714E10 | -| test.c:632:18:632:19 | ip | 6.9571236714E10 | -| test.c:632:23:632:24 | 14 | 1.0 | -| test.c:632:23:632:24 | (unsigned int)... | 1.0 | -| test.c:632:28:632:29 | 32 | 1.0 | -| test.c:632:28:632:29 | (unsigned int)... | 1.0 | -| test.c:633:13:633:13 | 2 | 1.0 | -| test.c:633:13:633:13 | (unsigned int)... | 1.0 | -| test.c:633:13:633:30 | ... * ... | 6.9571236714E10 | -| test.c:633:17:633:30 | (...) | 6.9571236714E10 | -| test.c:633:18:633:19 | ip | 6.9571236714E10 | -| test.c:633:18:633:24 | ... * ... | 6.9571236714E10 | -| test.c:633:18:633:29 | ... + ... | 6.9571236714E10 | -| test.c:633:23:633:24 | 14 | 1.0 | -| test.c:633:23:633:24 | (unsigned int)... | 1.0 | -| test.c:633:28:633:29 | 64 | 1.0 | -| test.c:633:28:633:29 | (unsigned int)... | 1.0 | -| test.c:634:13:639:26 | (...) | 2.693885654805863E33 | -| test.c:634:14:634:25 | (...) | 6.9571236714E10 | -| test.c:634:14:634:30 | ... * ... | 6.9571236714E10 | -| test.c:634:14:635:63 | ... > ... | 1.0 | -| test.c:634:14:639:25 | ... ? ... : ... | 2.693885654805863E33 | -| test.c:634:15:634:15 | 2 | 1.0 | -| test.c:634:15:634:15 | (unsigned int)... | 1.0 | -| test.c:634:15:634:20 | ... * ... | 6.9571236714E10 | -| test.c:634:15:634:24 | ... + ... | 6.9571236714E10 | -| test.c:634:19:634:20 | ip | 6.9571236714E10 | -| test.c:634:24:634:24 | 1 | 1.0 | -| test.c:634:24:634:24 | (unsigned int)... | 1.0 | -| test.c:634:29:634:30 | 14 | 1.0 | -| test.c:634:29:634:30 | (unsigned int)... | 1.0 | -| test.c:635:13:635:63 | (...) | 4.840156977915421E21 | -| test.c:635:14:635:15 | 14 | 1.0 | -| test.c:635:14:635:15 | (unsigned int)... | 1.0 | -| test.c:635:14:635:26 | ... * ... | 6.9571236714E10 | -| test.c:635:14:635:36 | ... > ... | 1.0 | -| test.c:635:14:635:62 | ... ? ... : ... | 4.840156977915421E21 | -| test.c:635:19:635:26 | (...) | 6.9571236714E10 | -| test.c:635:20:635:20 | 2 | 1.0 | -| test.c:635:20:635:20 | (unsigned int)... | 1.0 | -| test.c:635:20:635:25 | ... * ... | 6.9571236714E10 | -| test.c:635:24:635:25 | ip | 6.9571236714E10 | -| test.c:635:30:635:31 | 17 | 1.0 | -| test.c:635:30:635:31 | (unsigned int)... | 1.0 | -| test.c:635:30:635:36 | ... * ... | 6.9571236714E10 | -| test.c:635:35:635:36 | ip | 6.9571236714E10 | -| test.c:635:40:635:41 | 17 | 1.0 | -| test.c:635:40:635:41 | (unsigned int)... | 1.0 | -| test.c:635:40:635:52 | ... * ... | 6.9571236714E10 | -| test.c:635:45:635:52 | (...) | 6.9571236714E10 | -| test.c:635:46:635:46 | 2 | 1.0 | -| test.c:635:46:635:46 | (unsigned int)... | 1.0 | -| test.c:635:46:635:51 | ... * ... | 6.9571236714E10 | -| test.c:635:50:635:51 | ip | 6.9571236714E10 | -| test.c:635:56:635:57 | 17 | 1.0 | -| test.c:635:56:635:57 | (unsigned int)... | 1.0 | -| test.c:635:56:635:62 | ... * ... | 6.9571236714E10 | -| test.c:635:61:635:62 | ip | 6.9571236714E10 | -| test.c:636:17:636:28 | (...) | 1.39142473429E11 | -| test.c:636:17:636:33 | ... * ... | 1.39142473429E11 | -| test.c:636:18:636:18 | 2 | 1.0 | -| test.c:636:18:636:18 | (unsigned int)... | 1.0 | -| test.c:636:18:636:23 | ... * ... | 1.39142473429E11 | -| test.c:636:18:636:27 | ... + ... | 1.39142473429E11 | -| test.c:636:22:636:23 | ip | 1.39142473429E11 | -| test.c:636:27:636:27 | 1 | 1.0 | -| test.c:636:27:636:27 | (unsigned int)... | 1.0 | -| test.c:636:32:636:33 | 14 | 1.0 | -| test.c:636:32:636:33 | (unsigned int)... | 1.0 | -| test.c:637:17:637:18 | 14 | 1.0 | -| test.c:637:17:637:18 | (unsigned int)... | 1.0 | -| test.c:637:17:637:29 | ... * ... | 1.39142473429E11 | -| test.c:637:17:637:39 | ... > ... | 1.0 | -| test.c:637:17:639:25 | ... ? ... : ... | 1.936062791193997E22 | -| test.c:637:22:637:29 | (...) | 1.39142473429E11 | -| test.c:637:23:637:23 | 2 | 1.0 | -| test.c:637:23:637:23 | (unsigned int)... | 1.0 | -| test.c:637:23:637:28 | ... * ... | 1.39142473429E11 | -| test.c:637:27:637:28 | ip | 1.39142473429E11 | -| test.c:637:33:637:34 | 17 | 1.0 | -| test.c:637:33:637:34 | (unsigned int)... | 1.0 | -| test.c:637:33:637:39 | ... * ... | 1.39142473429E11 | -| test.c:637:38:637:39 | ip | 1.39142473429E11 | -| test.c:638:19:638:20 | 14 | 1.0 | -| test.c:638:19:638:20 | (unsigned int)... | 1.0 | -| test.c:638:19:638:31 | ... * ... | 1.39142473429E11 | -| test.c:638:24:638:31 | (...) | 1.39142473429E11 | -| test.c:638:25:638:25 | 2 | 1.0 | -| test.c:638:25:638:25 | (unsigned int)... | 1.0 | -| test.c:638:25:638:30 | ... * ... | 1.39142473429E11 | -| test.c:638:29:638:30 | ip | 1.39142473429E11 | -| test.c:639:19:639:20 | 14 | 1.0 | -| test.c:639:19:639:20 | (unsigned int)... | 1.0 | -| test.c:639:19:639:25 | ... * ... | 1.39142473429E11 | -| test.c:639:24:639:25 | ip | 1.39142473429E11 | -| test.c:640:13:640:14 | 14 | 1.0 | -| test.c:640:13:640:14 | (unsigned int)... | 1.0 | -| test.c:640:13:640:19 | ... * ... | 6.9571236714E10 | -| test.c:640:13:640:35 | ... > ... | 1.0 | -| test.c:640:13:642:27 | ... ? ... : ... | 4.840156977915421E21 | -| test.c:640:18:640:19 | ip | 6.9571236714E10 | -| test.c:640:23:640:30 | (...) | 6.9571236714E10 | -| test.c:640:23:640:35 | ... * ... | 6.9571236714E10 | -| test.c:640:24:640:25 | ip | 6.9571236714E10 | -| test.c:640:24:640:29 | ... + ... | 6.9571236714E10 | -| test.c:640:29:640:29 | 1 | 1.0 | -| test.c:640:29:640:29 | (unsigned int)... | 1.0 | -| test.c:640:34:640:35 | 17 | 1.0 | -| test.c:640:34:640:35 | (unsigned int)... | 1.0 | -| test.c:641:15:641:16 | 14 | 1.0 | -| test.c:641:15:641:16 | (unsigned int)... | 1.0 | -| test.c:641:15:641:21 | ... * ... | 6.9571236714E10 | -| test.c:641:20:641:21 | ip | 6.9571236714E10 | -| test.c:642:15:642:22 | (...) | 6.9571236714E10 | -| test.c:642:15:642:27 | ... * ... | 6.9571236714E10 | -| test.c:642:16:642:17 | ip | 6.9571236714E10 | -| test.c:642:16:642:21 | ... + ... | 6.9571236714E10 | -| test.c:642:21:642:21 | 1 | 1.0 | -| test.c:642:21:642:21 | (unsigned int)... | 1.0 | -| test.c:642:26:642:27 | 14 | 1.0 | -| test.c:642:26:642:27 | (unsigned int)... | 1.0 | -| test.c:643:10:643:23 | special_number | 1.297918419127476E201 | -| test.c:650:10:650:11 | 0 | 1.0 | -| test.c:651:7:651:8 | c1 | 1.0 | -| test.c:651:13:651:13 | x | 1.0 | -| test.c:651:13:651:23 | ... += ... | 1.0 | -| test.c:651:18:651:23 | 748596 | 1.0 | -| test.c:652:7:652:8 | c2 | 1.0 | -| test.c:652:13:652:13 | x | 2.0 | -| test.c:652:13:652:25 | ... += ... | 2.0 | -| test.c:652:18:652:25 | 84652395 | 1.0 | -| test.c:653:7:653:8 | c3 | 1.0 | -| test.c:653:13:653:13 | x | 4.0 | -| test.c:653:13:653:24 | ... += ... | 4.0 | -| test.c:653:18:653:24 | 3675895 | 1.0 | -| test.c:654:7:654:8 | c4 | 1.0 | -| test.c:654:13:654:13 | x | 8.0 | -| test.c:654:13:654:22 | ... += ... | 8.0 | -| test.c:654:18:654:22 | 98634 | 1.0 | -| test.c:655:7:655:8 | c5 | 1.0 | -| test.c:655:13:655:13 | x | 16.0 | -| test.c:655:13:655:24 | ... += ... | 16.0 | -| test.c:655:18:655:24 | 7834985 | 1.0 | -| test.c:656:7:656:8 | c1 | 2.0 | -| test.c:656:7:656:14 | ... && ... | 1.0 | -| test.c:656:13:656:14 | c2 | 2.0 | -| test.c:656:19:656:19 | x | 32.0 | -| test.c:656:19:656:32 | ... += ... | 32.0 | -| test.c:656:24:656:32 | 938457398 | 1.0 | -| test.c:657:7:657:8 | c1 | 3.0 | -| test.c:657:7:657:14 | ... && ... | 1.0 | -| test.c:657:13:657:14 | c3 | 2.0 | -| test.c:657:19:657:19 | x | 64.0 | -| test.c:657:19:657:31 | ... += ... | 64.0 | -| test.c:657:24:657:31 | 73895648 | 1.0 | -| test.c:658:7:658:8 | c1 | 4.0 | -| test.c:658:7:658:14 | ... && ... | 1.0 | -| test.c:658:13:658:14 | c4 | 2.0 | -| test.c:658:19:658:19 | x | 128.0 | -| test.c:658:19:658:31 | ... += ... | 128.0 | -| test.c:658:24:658:31 | 12345432 | 1.0 | -| test.c:659:7:659:8 | c1 | 5.0 | -| test.c:659:7:659:14 | ... && ... | 1.0 | -| test.c:659:13:659:14 | c5 | 2.0 | -| test.c:659:19:659:19 | x | 256.0 | -| test.c:659:19:659:28 | ... += ... | 256.0 | -| test.c:659:24:659:28 | 38847 | 1.0 | -| test.c:660:7:660:8 | c2 | 5.0 | -| test.c:660:7:660:14 | ... && ... | 1.0 | -| test.c:660:13:660:14 | c3 | 5.0 | -| test.c:660:19:660:19 | x | 512.0 | -| test.c:660:19:660:26 | ... += ... | 512.0 | -| test.c:660:24:660:26 | 234 | 1.0 | -| test.c:662:11:662:11 | x | 1024.0 | -| test.c:662:11:662:15 | ... + ... | 1048576.0 | -| test.c:662:11:662:19 | ... + ... | 1.073741824E9 | -| test.c:662:11:662:23 | ... + ... | 1.099511627776E12 | -| test.c:662:11:662:27 | ... + ... | 1.125899906842624E15 | -| test.c:662:11:662:31 | ... + ... | 1.152921504606847E18 | -| test.c:662:11:662:35 | ... + ... | 1.1805916207174113E21 | -| test.c:662:11:662:39 | ... + ... | 1.2089258196146292E24 | -| test.c:662:11:662:43 | ... + ... | 1.2379400392853803E27 | -| test.c:662:11:662:47 | ... + ... | 1.2676506002282294E30 | -| test.c:662:11:662:51 | ... + ... | 1.298074214633707E33 | -| test.c:662:11:662:55 | ... + ... | 1.329227995784916E36 | -| test.c:662:15:662:15 | x | 1024.0 | -| test.c:662:19:662:19 | x | 1024.0 | -| test.c:662:23:662:23 | x | 1024.0 | -| test.c:662:27:662:27 | x | 1024.0 | -| test.c:662:31:662:31 | x | 1024.0 | -| test.c:662:35:662:35 | x | 1024.0 | -| test.c:662:39:662:39 | x | 1024.0 | -| test.c:662:43:662:43 | x | 1024.0 | -| test.c:662:47:662:47 | x | 1024.0 | -| test.c:662:51:662:51 | x | 1024.0 | -| test.c:662:55:662:55 | x | 1024.0 | -| test.c:663:10:663:10 | y | 1.329227995784916E36 | -| test.c:668:20:668:20 | x | 1.0 | -| test.c:668:20:668:26 | ... < ... | 1.0 | -| test.c:668:20:668:36 | ... ? ... : ... | 1.0 | -| test.c:668:24:668:26 | 100 | 1.0 | -| test.c:668:24:668:26 | (unsigned int)... | 1.0 | -| test.c:668:30:668:30 | x | 1.0 | -| test.c:668:34:668:36 | 100 | 1.0 | -| test.c:668:34:668:36 | (unsigned int)... | 1.0 | -| test.c:671:3:671:4 | y1 | 1.0 | -| test.c:671:9:671:11 | ++ ... | 1.0 | -| test.c:671:11:671:11 | y | 1.0 | -| test.c:672:3:672:4 | y2 | 1.0 | -| test.c:672:19:672:19 | 3 | 1.0 | -| test.c:672:19:672:19 | (unsigned int)... | 1.0 | -| test.c:681:3:681:3 | i | 1.0 | -| test.c:681:3:681:8 | ... = ... | 1.0 | -| test.c:681:7:681:8 | 10 | 1.0 | -| test.c:682:7:682:7 | i | 1.0 | -| test.c:684:3:684:3 | i | 1.0 | -| test.c:684:3:684:8 | ... = ... | 1.0 | -| test.c:684:7:684:8 | 10 | 1.0 | -| test.c:685:3:685:3 | i | 1.0 | -| test.c:685:3:685:9 | ... += ... | 1.0 | -| test.c:685:8:685:9 | 10 | 1.0 | -| test.c:686:7:686:7 | i | 1.0 | -| test.c:688:3:688:3 | i | 1.0 | -| test.c:688:3:688:8 | ... = ... | 1.0 | -| test.c:688:7:688:8 | 40 | 1.0 | -| test.c:689:3:689:3 | i | 1.0 | -| test.c:689:3:689:9 | ... -= ... | 1.0 | -| test.c:689:8:689:9 | 10 | 1.0 | -| test.c:690:7:690:7 | i | 1.0 | -| test.c:692:3:692:3 | i | 1.0 | -| test.c:692:3:692:12 | ... = ... | 1.0 | -| test.c:692:7:692:7 | j | 1.0 | -| test.c:692:7:692:12 | ... = ... | 1.0 | -| test.c:692:11:692:12 | 40 | 1.0 | -| test.c:693:7:693:7 | i | 1.0 | -| test.c:695:3:695:3 | i | 1.0 | -| test.c:695:3:695:15 | ... = ... | 1.0 | -| test.c:695:7:695:15 | (...) | 1.0 | -| test.c:695:8:695:8 | j | 1.0 | -| test.c:695:8:695:14 | ... += ... | 1.0 | -| test.c:695:13:695:14 | 10 | 1.0 | -| test.c:696:7:696:7 | i | 1.0 | +| test.c:627:11:627:11 | 2 | 1.0 | +| test.c:627:11:627:11 | (unsigned int)... | 1.0 | +| test.c:627:11:627:16 | ... * ... | 3.4785618357E10 | +| test.c:627:11:627:21 | ... * ... | 3.4785618357E10 | +| test.c:627:11:627:41 | ... + ... | 1.2100392444788552E21 | +| test.c:627:15:627:16 | ip | 3.4785618357E10 | +| test.c:627:20:627:21 | 14 | 1.0 | +| test.c:627:20:627:21 | (unsigned int)... | 1.0 | +| test.c:627:25:627:36 | (...) | 3.4785618357E10 | +| test.c:627:25:627:41 | ... * ... | 3.4785618357E10 | +| test.c:627:26:627:26 | 2 | 1.0 | +| test.c:627:26:627:26 | (unsigned int)... | 1.0 | +| test.c:627:26:627:31 | ... * ... | 3.4785618357E10 | +| test.c:627:26:627:35 | ... + ... | 3.4785618357E10 | +| test.c:627:30:627:31 | ip | 3.4785618357E10 | +| test.c:627:35:627:35 | 1 | 1.0 | +| test.c:627:35:627:35 | (unsigned int)... | 1.0 | +| test.c:627:40:627:41 | 17 | 1.0 | +| test.c:627:40:627:41 | (unsigned int)... | 1.0 | +| test.c:628:15:628:15 | 4 | 1.0 | +| test.c:628:15:628:15 | (unsigned int)... | 1.0 | +| test.c:628:15:628:32 | ... * ... | 3.4785618357E10 | +| test.c:628:15:629:32 | ... + ... | 1.2100392444788552E21 | +| test.c:628:15:630:32 | ... + ... | 4.209196335543408E31 | +| test.c:628:15:636:28 | ... + ... | 1.417386703353284E64 | +| test.c:628:19:628:32 | (...) | 3.4785618357E10 | +| test.c:628:20:628:21 | ip | 3.4785618357E10 | +| test.c:628:20:628:26 | ... * ... | 3.4785618357E10 | +| test.c:628:20:628:31 | ... + ... | 3.4785618357E10 | +| test.c:628:25:628:26 | 14 | 1.0 | +| test.c:628:25:628:26 | (unsigned int)... | 1.0 | +| test.c:628:30:628:31 | 32 | 1.0 | +| test.c:628:30:628:31 | (unsigned int)... | 1.0 | +| test.c:629:15:629:32 | (...) | 3.4785618357E10 | +| test.c:629:16:629:16 | 2 | 1.0 | +| test.c:629:16:629:16 | (unsigned int)... | 1.0 | +| test.c:629:16:629:21 | ... * ... | 3.4785618357E10 | +| test.c:629:16:629:26 | ... * ... | 3.4785618357E10 | +| test.c:629:16:629:31 | ... + ... | 3.4785618357E10 | +| test.c:629:20:629:21 | ip | 3.4785618357E10 | +| test.c:629:25:629:26 | 14 | 1.0 | +| test.c:629:25:629:26 | (unsigned int)... | 1.0 | +| test.c:629:30:629:31 | 32 | 1.0 | +| test.c:629:30:629:31 | (unsigned int)... | 1.0 | +| test.c:630:15:630:15 | 2 | 1.0 | +| test.c:630:15:630:15 | (unsigned int)... | 1.0 | +| test.c:630:15:630:32 | ... * ... | 3.4785618357E10 | +| test.c:630:19:630:32 | (...) | 3.4785618357E10 | +| test.c:630:20:630:21 | ip | 3.4785618357E10 | +| test.c:630:20:630:26 | ... * ... | 3.4785618357E10 | +| test.c:630:20:630:31 | ... + ... | 3.4785618357E10 | +| test.c:630:25:630:26 | 14 | 1.0 | +| test.c:630:25:630:26 | (unsigned int)... | 1.0 | +| test.c:630:30:630:31 | 64 | 1.0 | +| test.c:630:30:630:31 | (unsigned int)... | 1.0 | +| test.c:631:15:636:28 | (...) | 3.367357068579931E32 | +| test.c:631:16:631:27 | (...) | 3.4785618357E10 | +| test.c:631:16:631:32 | ... * ... | 3.4785618357E10 | +| test.c:631:16:632:65 | ... > ... | 1.0 | +| test.c:631:16:636:27 | ... ? ... : ... | 3.367357068579931E32 | +| test.c:631:17:631:17 | 2 | 1.0 | +| test.c:631:17:631:17 | (unsigned int)... | 1.0 | +| test.c:631:17:631:22 | ... * ... | 3.4785618357E10 | +| test.c:631:17:631:26 | ... + ... | 3.4785618357E10 | +| test.c:631:21:631:22 | ip | 3.4785618357E10 | +| test.c:631:26:631:26 | 1 | 1.0 | +| test.c:631:26:631:26 | (unsigned int)... | 1.0 | +| test.c:631:31:631:32 | 14 | 1.0 | +| test.c:631:31:631:32 | (unsigned int)... | 1.0 | +| test.c:632:15:632:65 | (...) | 1.2100392444788552E21 | +| test.c:632:16:632:17 | 14 | 1.0 | +| test.c:632:16:632:17 | (unsigned int)... | 1.0 | +| test.c:632:16:632:28 | ... * ... | 3.4785618357E10 | +| test.c:632:16:632:38 | ... > ... | 1.0 | +| test.c:632:16:632:64 | ... ? ... : ... | 1.2100392444788552E21 | +| test.c:632:21:632:28 | (...) | 3.4785618357E10 | +| test.c:632:22:632:22 | 2 | 1.0 | +| test.c:632:22:632:22 | (unsigned int)... | 1.0 | +| test.c:632:22:632:27 | ... * ... | 3.4785618357E10 | +| test.c:632:26:632:27 | ip | 3.4785618357E10 | +| test.c:632:32:632:33 | 17 | 1.0 | +| test.c:632:32:632:33 | (unsigned int)... | 1.0 | +| test.c:632:32:632:38 | ... * ... | 3.4785618357E10 | +| test.c:632:37:632:38 | ip | 3.4785618357E10 | +| test.c:632:42:632:43 | 17 | 1.0 | +| test.c:632:42:632:43 | (unsigned int)... | 1.0 | +| test.c:632:42:632:54 | ... * ... | 3.4785618357E10 | +| test.c:632:47:632:54 | (...) | 3.4785618357E10 | +| test.c:632:48:632:48 | 2 | 1.0 | +| test.c:632:48:632:48 | (unsigned int)... | 1.0 | +| test.c:632:48:632:53 | ... * ... | 3.4785618357E10 | +| test.c:632:52:632:53 | ip | 3.4785618357E10 | +| test.c:632:58:632:59 | 17 | 1.0 | +| test.c:632:58:632:59 | (unsigned int)... | 1.0 | +| test.c:632:58:632:64 | ... * ... | 3.4785618357E10 | +| test.c:632:63:632:64 | ip | 3.4785618357E10 | +| test.c:633:19:633:30 | (...) | 6.9571236715E10 | +| test.c:633:19:633:35 | ... * ... | 6.9571236715E10 | +| test.c:633:20:633:20 | 2 | 1.0 | +| test.c:633:20:633:20 | (unsigned int)... | 1.0 | +| test.c:633:20:633:25 | ... * ... | 6.9571236715E10 | +| test.c:633:20:633:29 | ... + ... | 6.9571236715E10 | +| test.c:633:24:633:25 | ip | 6.9571236715E10 | +| test.c:633:29:633:29 | 1 | 1.0 | +| test.c:633:29:633:29 | (unsigned int)... | 1.0 | +| test.c:633:34:633:35 | 14 | 1.0 | +| test.c:633:34:633:35 | (unsigned int)... | 1.0 | +| test.c:634:19:634:20 | 14 | 1.0 | +| test.c:634:19:634:20 | (unsigned int)... | 1.0 | +| test.c:634:19:634:31 | ... * ... | 6.9571236715E10 | +| test.c:634:19:634:41 | ... > ... | 1.0 | +| test.c:634:19:636:27 | ... ? ... : ... | 4.840156978054564E21 | +| test.c:634:24:634:31 | (...) | 6.9571236715E10 | +| test.c:634:25:634:25 | 2 | 1.0 | +| test.c:634:25:634:25 | (unsigned int)... | 1.0 | +| test.c:634:25:634:30 | ... * ... | 6.9571236715E10 | +| test.c:634:29:634:30 | ip | 6.9571236715E10 | +| test.c:634:35:634:36 | 17 | 1.0 | +| test.c:634:35:634:36 | (unsigned int)... | 1.0 | +| test.c:634:35:634:41 | ... * ... | 6.9571236715E10 | +| test.c:634:40:634:41 | ip | 6.9571236715E10 | +| test.c:635:21:635:22 | 14 | 1.0 | +| test.c:635:21:635:22 | (unsigned int)... | 1.0 | +| test.c:635:21:635:33 | ... * ... | 6.9571236715E10 | +| test.c:635:26:635:33 | (...) | 6.9571236715E10 | +| test.c:635:27:635:27 | 2 | 1.0 | +| test.c:635:27:635:27 | (unsigned int)... | 1.0 | +| test.c:635:27:635:32 | ... * ... | 6.9571236715E10 | +| test.c:635:31:635:32 | ip | 6.9571236715E10 | +| test.c:636:21:636:22 | 14 | 1.0 | +| test.c:636:21:636:22 | (unsigned int)... | 1.0 | +| test.c:636:21:636:27 | ... * ... | 6.9571236715E10 | +| test.c:636:26:636:27 | ip | 6.9571236715E10 | +| test.c:637:15:637:15 | 2 | 1.0 | +| test.c:637:15:637:15 | (unsigned int)... | 1.0 | +| test.c:637:15:637:20 | ... * ... | 3.4785618357E10 | +| test.c:637:15:637:25 | ... * ... | 3.4785618357E10 | +| test.c:637:15:637:45 | ... + ... | 1.2100392444788552E21 | +| test.c:637:19:637:20 | ip | 3.4785618357E10 | +| test.c:637:24:637:25 | 14 | 1.0 | +| test.c:637:24:637:25 | (unsigned int)... | 1.0 | +| test.c:637:29:637:40 | (...) | 3.4785618357E10 | +| test.c:637:29:637:45 | ... * ... | 3.4785618357E10 | +| test.c:637:30:637:30 | 2 | 1.0 | +| test.c:637:30:637:30 | (unsigned int)... | 1.0 | +| test.c:637:30:637:35 | ... * ... | 3.4785618357E10 | +| test.c:637:30:637:39 | ... + ... | 3.4785618357E10 | +| test.c:637:34:637:35 | ip | 3.4785618357E10 | +| test.c:637:39:637:39 | 1 | 1.0 | +| test.c:637:39:637:39 | (unsigned int)... | 1.0 | +| test.c:637:44:637:45 | 17 | 1.0 | +| test.c:637:44:637:45 | (unsigned int)... | 1.0 | +| test.c:638:11:638:11 | 4 | 1.0 | +| test.c:638:11:638:11 | (unsigned int)... | 1.0 | +| test.c:638:11:638:28 | ... * ... | 5.797603059E9 | +| test.c:638:11:639:32 | ... + ... | 3.361220122972616E19 | +| test.c:638:11:640:32 | ... + ... | 1.9487020066918396E29 | +| test.c:638:11:646:28 | ... + ... | 3.0379516094938436E59 | +| test.c:638:11:647:63 | ... > ... | 1.0 | +| test.c:638:11:659:27 | ... ? ... : ... | 4.390639451194891E87 | +| test.c:638:15:638:28 | (...) | 5.797603059E9 | +| test.c:638:16:638:17 | ip | 5.797603059E9 | +| test.c:638:16:638:22 | ... * ... | 5.797603059E9 | +| test.c:638:16:638:27 | ... + ... | 5.797603059E9 | +| test.c:638:21:638:22 | 14 | 1.0 | +| test.c:638:21:638:22 | (unsigned int)... | 1.0 | +| test.c:638:26:638:27 | 32 | 1.0 | +| test.c:638:26:638:27 | (unsigned int)... | 1.0 | +| test.c:639:15:639:32 | (...) | 5.797603059E9 | +| test.c:639:16:639:16 | 2 | 1.0 | +| test.c:639:16:639:16 | (unsigned int)... | 1.0 | +| test.c:639:16:639:21 | ... * ... | 5.797603059E9 | +| test.c:639:16:639:26 | ... * ... | 5.797603059E9 | +| test.c:639:16:639:31 | ... + ... | 5.797603059E9 | +| test.c:639:20:639:21 | ip | 5.797603059E9 | +| test.c:639:25:639:26 | 14 | 1.0 | +| test.c:639:25:639:26 | (unsigned int)... | 1.0 | +| test.c:639:30:639:31 | 32 | 1.0 | +| test.c:639:30:639:31 | (unsigned int)... | 1.0 | +| test.c:640:15:640:15 | 2 | 1.0 | +| test.c:640:15:640:15 | (unsigned int)... | 1.0 | +| test.c:640:15:640:32 | ... * ... | 5.797603059E9 | +| test.c:640:19:640:32 | (...) | 5.797603059E9 | +| test.c:640:20:640:21 | ip | 5.797603059E9 | +| test.c:640:20:640:26 | ... * ... | 5.797603059E9 | +| test.c:640:20:640:31 | ... + ... | 5.797603059E9 | +| test.c:640:25:640:26 | 14 | 1.0 | +| test.c:640:25:640:26 | (unsigned int)... | 1.0 | +| test.c:640:30:640:31 | 64 | 1.0 | +| test.c:640:30:640:31 | (unsigned int)... | 1.0 | +| test.c:641:15:646:28 | (...) | 1.558961605756818E30 | +| test.c:641:16:641:27 | (...) | 5.797603059E9 | +| test.c:641:16:641:32 | ... * ... | 5.797603059E9 | +| test.c:641:16:642:65 | ... > ... | 1.0 | +| test.c:641:16:646:27 | ... ? ... : ... | 1.558961605756818E30 | +| test.c:641:17:641:17 | 2 | 1.0 | +| test.c:641:17:641:17 | (unsigned int)... | 1.0 | +| test.c:641:17:641:22 | ... * ... | 5.797603059E9 | +| test.c:641:17:641:26 | ... + ... | 5.797603059E9 | +| test.c:641:21:641:22 | ip | 5.797603059E9 | +| test.c:641:26:641:26 | 1 | 1.0 | +| test.c:641:26:641:26 | (unsigned int)... | 1.0 | +| test.c:641:31:641:32 | 14 | 1.0 | +| test.c:641:31:641:32 | (unsigned int)... | 1.0 | +| test.c:642:15:642:65 | (...) | 3.361220122972616E19 | +| test.c:642:16:642:17 | 14 | 1.0 | +| test.c:642:16:642:17 | (unsigned int)... | 1.0 | +| test.c:642:16:642:28 | ... * ... | 5.797603059E9 | +| test.c:642:16:642:38 | ... > ... | 1.0 | +| test.c:642:16:642:64 | ... ? ... : ... | 3.361220122972616E19 | +| test.c:642:21:642:28 | (...) | 5.797603059E9 | +| test.c:642:22:642:22 | 2 | 1.0 | +| test.c:642:22:642:22 | (unsigned int)... | 1.0 | +| test.c:642:22:642:27 | ... * ... | 5.797603059E9 | +| test.c:642:26:642:27 | ip | 5.797603059E9 | +| test.c:642:32:642:33 | 17 | 1.0 | +| test.c:642:32:642:33 | (unsigned int)... | 1.0 | +| test.c:642:32:642:38 | ... * ... | 5.797603059E9 | +| test.c:642:37:642:38 | ip | 5.797603059E9 | +| test.c:642:42:642:43 | 17 | 1.0 | +| test.c:642:42:642:43 | (unsigned int)... | 1.0 | +| test.c:642:42:642:54 | ... * ... | 5.797603059E9 | +| test.c:642:47:642:54 | (...) | 5.797603059E9 | +| test.c:642:48:642:48 | 2 | 1.0 | +| test.c:642:48:642:48 | (unsigned int)... | 1.0 | +| test.c:642:48:642:53 | ... * ... | 5.797603059E9 | +| test.c:642:52:642:53 | ip | 5.797603059E9 | +| test.c:642:58:642:59 | 17 | 1.0 | +| test.c:642:58:642:59 | (unsigned int)... | 1.0 | +| test.c:642:58:642:64 | ... * ... | 5.797603059E9 | +| test.c:642:63:642:64 | ip | 5.797603059E9 | +| test.c:643:19:643:30 | (...) | 1.1595206119E10 | +| test.c:643:19:643:35 | ... * ... | 1.1595206119E10 | +| test.c:643:20:643:20 | 2 | 1.0 | +| test.c:643:20:643:20 | (unsigned int)... | 1.0 | +| test.c:643:20:643:25 | ... * ... | 1.1595206119E10 | +| test.c:643:20:643:29 | ... + ... | 1.1595206119E10 | +| test.c:643:24:643:25 | ip | 1.1595206119E10 | +| test.c:643:29:643:29 | 1 | 1.0 | +| test.c:643:29:643:29 | (unsigned int)... | 1.0 | +| test.c:643:34:643:35 | 14 | 1.0 | +| test.c:643:34:643:35 | (unsigned int)... | 1.0 | +| test.c:644:19:644:20 | 14 | 1.0 | +| test.c:644:19:644:20 | (unsigned int)... | 1.0 | +| test.c:644:19:644:31 | ... * ... | 1.1595206119E10 | +| test.c:644:19:644:41 | ... > ... | 1.0 | +| test.c:644:19:646:27 | ... ? ... : ... | 1.3444880494209504E20 | +| test.c:644:24:644:31 | (...) | 1.1595206119E10 | +| test.c:644:25:644:25 | 2 | 1.0 | +| test.c:644:25:644:25 | (unsigned int)... | 1.0 | +| test.c:644:25:644:30 | ... * ... | 1.1595206119E10 | +| test.c:644:29:644:30 | ip | 1.1595206119E10 | +| test.c:644:35:644:36 | 17 | 1.0 | +| test.c:644:35:644:36 | (unsigned int)... | 1.0 | +| test.c:644:35:644:41 | ... * ... | 1.1595206119E10 | +| test.c:644:40:644:41 | ip | 1.1595206119E10 | +| test.c:645:21:645:22 | 14 | 1.0 | +| test.c:645:21:645:22 | (unsigned int)... | 1.0 | +| test.c:645:21:645:33 | ... * ... | 1.1595206119E10 | +| test.c:645:26:645:33 | (...) | 1.1595206119E10 | +| test.c:645:27:645:27 | 2 | 1.0 | +| test.c:645:27:645:27 | (unsigned int)... | 1.0 | +| test.c:645:27:645:32 | ... * ... | 1.1595206119E10 | +| test.c:645:31:645:32 | ip | 1.1595206119E10 | +| test.c:646:21:646:22 | 14 | 1.0 | +| test.c:646:21:646:22 | (unsigned int)... | 1.0 | +| test.c:646:21:646:27 | ... * ... | 1.1595206119E10 | +| test.c:646:26:646:27 | ip | 1.1595206119E10 | +| test.c:647:13:647:63 | (...) | 1.2100392444788552E21 | +| test.c:647:14:647:15 | 14 | 1.0 | +| test.c:647:14:647:15 | (unsigned int)... | 1.0 | +| test.c:647:14:647:20 | ... * ... | 3.4785618357E10 | +| test.c:647:14:647:36 | ... > ... | 1.0 | +| test.c:647:14:647:62 | ... ? ... : ... | 1.2100392444788552E21 | +| test.c:647:19:647:20 | ip | 3.4785618357E10 | +| test.c:647:24:647:31 | (...) | 3.4785618357E10 | +| test.c:647:24:647:36 | ... * ... | 3.4785618357E10 | +| test.c:647:25:647:26 | ip | 3.4785618357E10 | +| test.c:647:25:647:30 | ... + ... | 3.4785618357E10 | +| test.c:647:30:647:30 | 1 | 1.0 | +| test.c:647:30:647:30 | (unsigned int)... | 1.0 | +| test.c:647:35:647:36 | 17 | 1.0 | +| test.c:647:35:647:36 | (unsigned int)... | 1.0 | +| test.c:647:40:647:41 | 17 | 1.0 | +| test.c:647:40:647:41 | (unsigned int)... | 1.0 | +| test.c:647:40:647:46 | ... * ... | 3.4785618357E10 | +| test.c:647:45:647:46 | ip | 3.4785618357E10 | +| test.c:647:50:647:57 | (...) | 3.4785618357E10 | +| test.c:647:50:647:62 | ... * ... | 3.4785618357E10 | +| test.c:647:51:647:52 | ip | 3.4785618357E10 | +| test.c:647:51:647:56 | ... + ... | 3.4785618357E10 | +| test.c:647:56:647:56 | 1 | 1.0 | +| test.c:647:56:647:56 | (unsigned int)... | 1.0 | +| test.c:647:61:647:62 | 17 | 1.0 | +| test.c:647:61:647:62 | (unsigned int)... | 1.0 | +| test.c:648:13:648:13 | 4 | 1.0 | +| test.c:648:13:648:13 | (unsigned int)... | 1.0 | +| test.c:648:13:648:30 | ... * ... | 6.9571236714E10 | +| test.c:648:13:649:30 | ... + ... | 4.840156977915421E21 | +| test.c:648:13:650:30 | ... + ... | 3.3673570684347266E32 | +| test.c:648:13:656:26 | ... + ... | 9.071274901265435E65 | +| test.c:648:17:648:30 | (...) | 6.9571236714E10 | +| test.c:648:18:648:19 | ip | 6.9571236714E10 | +| test.c:648:18:648:24 | ... * ... | 6.9571236714E10 | +| test.c:648:18:648:29 | ... + ... | 6.9571236714E10 | +| test.c:648:23:648:24 | 14 | 1.0 | +| test.c:648:23:648:24 | (unsigned int)... | 1.0 | +| test.c:648:28:648:29 | 32 | 1.0 | +| test.c:648:28:648:29 | (unsigned int)... | 1.0 | +| test.c:649:13:649:30 | (...) | 6.9571236714E10 | +| test.c:649:14:649:14 | 2 | 1.0 | +| test.c:649:14:649:14 | (unsigned int)... | 1.0 | +| test.c:649:14:649:19 | ... * ... | 6.9571236714E10 | +| test.c:649:14:649:24 | ... * ... | 6.9571236714E10 | +| test.c:649:14:649:29 | ... + ... | 6.9571236714E10 | +| test.c:649:18:649:19 | ip | 6.9571236714E10 | +| test.c:649:23:649:24 | 14 | 1.0 | +| test.c:649:23:649:24 | (unsigned int)... | 1.0 | +| test.c:649:28:649:29 | 32 | 1.0 | +| test.c:649:28:649:29 | (unsigned int)... | 1.0 | +| test.c:650:13:650:13 | 2 | 1.0 | +| test.c:650:13:650:13 | (unsigned int)... | 1.0 | +| test.c:650:13:650:30 | ... * ... | 6.9571236714E10 | +| test.c:650:17:650:30 | (...) | 6.9571236714E10 | +| test.c:650:18:650:19 | ip | 6.9571236714E10 | +| test.c:650:18:650:24 | ... * ... | 6.9571236714E10 | +| test.c:650:18:650:29 | ... + ... | 6.9571236714E10 | +| test.c:650:23:650:24 | 14 | 1.0 | +| test.c:650:23:650:24 | (unsigned int)... | 1.0 | +| test.c:650:28:650:29 | 64 | 1.0 | +| test.c:650:28:650:29 | (unsigned int)... | 1.0 | +| test.c:651:13:656:26 | (...) | 2.693885654805863E33 | +| test.c:651:14:651:25 | (...) | 6.9571236714E10 | +| test.c:651:14:651:30 | ... * ... | 6.9571236714E10 | +| test.c:651:14:652:63 | ... > ... | 1.0 | +| test.c:651:14:656:25 | ... ? ... : ... | 2.693885654805863E33 | +| test.c:651:15:651:15 | 2 | 1.0 | +| test.c:651:15:651:15 | (unsigned int)... | 1.0 | +| test.c:651:15:651:20 | ... * ... | 6.9571236714E10 | +| test.c:651:15:651:24 | ... + ... | 6.9571236714E10 | +| test.c:651:19:651:20 | ip | 6.9571236714E10 | +| test.c:651:24:651:24 | 1 | 1.0 | +| test.c:651:24:651:24 | (unsigned int)... | 1.0 | +| test.c:651:29:651:30 | 14 | 1.0 | +| test.c:651:29:651:30 | (unsigned int)... | 1.0 | +| test.c:652:13:652:63 | (...) | 4.840156977915421E21 | +| test.c:652:14:652:15 | 14 | 1.0 | +| test.c:652:14:652:15 | (unsigned int)... | 1.0 | +| test.c:652:14:652:26 | ... * ... | 6.9571236714E10 | +| test.c:652:14:652:36 | ... > ... | 1.0 | +| test.c:652:14:652:62 | ... ? ... : ... | 4.840156977915421E21 | +| test.c:652:19:652:26 | (...) | 6.9571236714E10 | +| test.c:652:20:652:20 | 2 | 1.0 | +| test.c:652:20:652:20 | (unsigned int)... | 1.0 | +| test.c:652:20:652:25 | ... * ... | 6.9571236714E10 | +| test.c:652:24:652:25 | ip | 6.9571236714E10 | +| test.c:652:30:652:31 | 17 | 1.0 | +| test.c:652:30:652:31 | (unsigned int)... | 1.0 | +| test.c:652:30:652:36 | ... * ... | 6.9571236714E10 | +| test.c:652:35:652:36 | ip | 6.9571236714E10 | +| test.c:652:40:652:41 | 17 | 1.0 | +| test.c:652:40:652:41 | (unsigned int)... | 1.0 | +| test.c:652:40:652:52 | ... * ... | 6.9571236714E10 | +| test.c:652:45:652:52 | (...) | 6.9571236714E10 | +| test.c:652:46:652:46 | 2 | 1.0 | +| test.c:652:46:652:46 | (unsigned int)... | 1.0 | +| test.c:652:46:652:51 | ... * ... | 6.9571236714E10 | +| test.c:652:50:652:51 | ip | 6.9571236714E10 | +| test.c:652:56:652:57 | 17 | 1.0 | +| test.c:652:56:652:57 | (unsigned int)... | 1.0 | +| test.c:652:56:652:62 | ... * ... | 6.9571236714E10 | +| test.c:652:61:652:62 | ip | 6.9571236714E10 | +| test.c:653:17:653:28 | (...) | 1.39142473429E11 | +| test.c:653:17:653:33 | ... * ... | 1.39142473429E11 | +| test.c:653:18:653:18 | 2 | 1.0 | +| test.c:653:18:653:18 | (unsigned int)... | 1.0 | +| test.c:653:18:653:23 | ... * ... | 1.39142473429E11 | +| test.c:653:18:653:27 | ... + ... | 1.39142473429E11 | +| test.c:653:22:653:23 | ip | 1.39142473429E11 | +| test.c:653:27:653:27 | 1 | 1.0 | +| test.c:653:27:653:27 | (unsigned int)... | 1.0 | +| test.c:653:32:653:33 | 14 | 1.0 | +| test.c:653:32:653:33 | (unsigned int)... | 1.0 | +| test.c:654:17:654:18 | 14 | 1.0 | +| test.c:654:17:654:18 | (unsigned int)... | 1.0 | +| test.c:654:17:654:29 | ... * ... | 1.39142473429E11 | +| test.c:654:17:654:39 | ... > ... | 1.0 | +| test.c:654:17:656:25 | ... ? ... : ... | 1.936062791193997E22 | +| test.c:654:22:654:29 | (...) | 1.39142473429E11 | +| test.c:654:23:654:23 | 2 | 1.0 | +| test.c:654:23:654:23 | (unsigned int)... | 1.0 | +| test.c:654:23:654:28 | ... * ... | 1.39142473429E11 | +| test.c:654:27:654:28 | ip | 1.39142473429E11 | +| test.c:654:33:654:34 | 17 | 1.0 | +| test.c:654:33:654:34 | (unsigned int)... | 1.0 | +| test.c:654:33:654:39 | ... * ... | 1.39142473429E11 | +| test.c:654:38:654:39 | ip | 1.39142473429E11 | +| test.c:655:19:655:20 | 14 | 1.0 | +| test.c:655:19:655:20 | (unsigned int)... | 1.0 | +| test.c:655:19:655:31 | ... * ... | 1.39142473429E11 | +| test.c:655:24:655:31 | (...) | 1.39142473429E11 | +| test.c:655:25:655:25 | 2 | 1.0 | +| test.c:655:25:655:25 | (unsigned int)... | 1.0 | +| test.c:655:25:655:30 | ... * ... | 1.39142473429E11 | +| test.c:655:29:655:30 | ip | 1.39142473429E11 | +| test.c:656:19:656:20 | 14 | 1.0 | +| test.c:656:19:656:20 | (unsigned int)... | 1.0 | +| test.c:656:19:656:25 | ... * ... | 1.39142473429E11 | +| test.c:656:24:656:25 | ip | 1.39142473429E11 | +| test.c:657:13:657:14 | 14 | 1.0 | +| test.c:657:13:657:14 | (unsigned int)... | 1.0 | +| test.c:657:13:657:19 | ... * ... | 6.9571236714E10 | +| test.c:657:13:657:35 | ... > ... | 1.0 | +| test.c:657:13:659:27 | ... ? ... : ... | 4.840156977915421E21 | +| test.c:657:18:657:19 | ip | 6.9571236714E10 | +| test.c:657:23:657:30 | (...) | 6.9571236714E10 | +| test.c:657:23:657:35 | ... * ... | 6.9571236714E10 | +| test.c:657:24:657:25 | ip | 6.9571236714E10 | +| test.c:657:24:657:29 | ... + ... | 6.9571236714E10 | +| test.c:657:29:657:29 | 1 | 1.0 | +| test.c:657:29:657:29 | (unsigned int)... | 1.0 | +| test.c:657:34:657:35 | 17 | 1.0 | +| test.c:657:34:657:35 | (unsigned int)... | 1.0 | +| test.c:658:15:658:16 | 14 | 1.0 | +| test.c:658:15:658:16 | (unsigned int)... | 1.0 | +| test.c:658:15:658:21 | ... * ... | 6.9571236714E10 | +| test.c:658:20:658:21 | ip | 6.9571236714E10 | +| test.c:659:15:659:22 | (...) | 6.9571236714E10 | +| test.c:659:15:659:27 | ... * ... | 6.9571236714E10 | +| test.c:659:16:659:17 | ip | 6.9571236714E10 | +| test.c:659:16:659:21 | ... + ... | 6.9571236714E10 | +| test.c:659:21:659:21 | 1 | 1.0 | +| test.c:659:21:659:21 | (unsigned int)... | 1.0 | +| test.c:659:26:659:27 | 14 | 1.0 | +| test.c:659:26:659:27 | (unsigned int)... | 1.0 | +| test.c:660:10:660:23 | special_number | 1.297918419127476E201 | +| test.c:667:10:667:11 | 0 | 1.0 | +| test.c:668:7:668:8 | c1 | 1.0 | +| test.c:668:13:668:13 | x | 1.0 | +| test.c:668:13:668:23 | ... += ... | 1.0 | +| test.c:668:18:668:23 | 748596 | 1.0 | +| test.c:669:7:669:8 | c2 | 1.0 | +| test.c:669:13:669:13 | x | 2.0 | +| test.c:669:13:669:25 | ... += ... | 2.0 | +| test.c:669:18:669:25 | 84652395 | 1.0 | +| test.c:670:7:670:8 | c3 | 1.0 | +| test.c:670:13:670:13 | x | 4.0 | +| test.c:670:13:670:24 | ... += ... | 4.0 | +| test.c:670:18:670:24 | 3675895 | 1.0 | +| test.c:671:7:671:8 | c4 | 1.0 | +| test.c:671:13:671:13 | x | 8.0 | +| test.c:671:13:671:22 | ... += ... | 8.0 | +| test.c:671:18:671:22 | 98634 | 1.0 | +| test.c:672:7:672:8 | c5 | 1.0 | +| test.c:672:13:672:13 | x | 16.0 | +| test.c:672:13:672:24 | ... += ... | 16.0 | +| test.c:672:18:672:24 | 7834985 | 1.0 | +| test.c:673:7:673:8 | c1 | 2.0 | +| test.c:673:7:673:14 | ... && ... | 1.0 | +| test.c:673:13:673:14 | c2 | 2.0 | +| test.c:673:19:673:19 | x | 32.0 | +| test.c:673:19:673:32 | ... += ... | 32.0 | +| test.c:673:24:673:32 | 938457398 | 1.0 | +| test.c:674:7:674:8 | c1 | 3.0 | +| test.c:674:7:674:14 | ... && ... | 1.0 | +| test.c:674:13:674:14 | c3 | 2.0 | +| test.c:674:19:674:19 | x | 64.0 | +| test.c:674:19:674:31 | ... += ... | 64.0 | +| test.c:674:24:674:31 | 73895648 | 1.0 | +| test.c:675:7:675:8 | c1 | 4.0 | +| test.c:675:7:675:14 | ... && ... | 1.0 | +| test.c:675:13:675:14 | c4 | 2.0 | +| test.c:675:19:675:19 | x | 128.0 | +| test.c:675:19:675:31 | ... += ... | 128.0 | +| test.c:675:24:675:31 | 12345432 | 1.0 | +| test.c:676:7:676:8 | c1 | 5.0 | +| test.c:676:7:676:14 | ... && ... | 1.0 | +| test.c:676:13:676:14 | c5 | 2.0 | +| test.c:676:19:676:19 | x | 256.0 | +| test.c:676:19:676:28 | ... += ... | 256.0 | +| test.c:676:24:676:28 | 38847 | 1.0 | +| test.c:677:7:677:8 | c2 | 5.0 | +| test.c:677:7:677:14 | ... && ... | 1.0 | +| test.c:677:13:677:14 | c3 | 5.0 | +| test.c:677:19:677:19 | x | 512.0 | +| test.c:677:19:677:26 | ... += ... | 512.0 | +| test.c:677:24:677:26 | 234 | 1.0 | +| test.c:679:11:679:11 | x | 1024.0 | +| test.c:679:11:679:15 | ... + ... | 1048576.0 | +| test.c:679:11:679:19 | ... + ... | 1.073741824E9 | +| test.c:679:11:679:23 | ... + ... | 1.099511627776E12 | +| test.c:679:11:679:27 | ... + ... | 1.125899906842624E15 | +| test.c:679:11:679:31 | ... + ... | 1.152921504606847E18 | +| test.c:679:11:679:35 | ... + ... | 1.1805916207174113E21 | +| test.c:679:11:679:39 | ... + ... | 1.2089258196146292E24 | +| test.c:679:11:679:43 | ... + ... | 1.2379400392853803E27 | +| test.c:679:11:679:47 | ... + ... | 1.2676506002282294E30 | +| test.c:679:11:679:51 | ... + ... | 1.298074214633707E33 | +| test.c:679:11:679:55 | ... + ... | 1.329227995784916E36 | +| test.c:679:15:679:15 | x | 1024.0 | +| test.c:679:19:679:19 | x | 1024.0 | +| test.c:679:23:679:23 | x | 1024.0 | +| test.c:679:27:679:27 | x | 1024.0 | +| test.c:679:31:679:31 | x | 1024.0 | +| test.c:679:35:679:35 | x | 1024.0 | +| test.c:679:39:679:39 | x | 1024.0 | +| test.c:679:43:679:43 | x | 1024.0 | +| test.c:679:47:679:47 | x | 1024.0 | +| test.c:679:51:679:51 | x | 1024.0 | +| test.c:679:55:679:55 | x | 1024.0 | +| test.c:680:10:680:10 | y | 1.329227995784916E36 | +| test.c:685:20:685:20 | x | 1.0 | +| test.c:685:20:685:26 | ... < ... | 1.0 | +| test.c:685:20:685:36 | ... ? ... : ... | 1.0 | +| test.c:685:24:685:26 | 100 | 1.0 | +| test.c:685:24:685:26 | (unsigned int)... | 1.0 | +| test.c:685:30:685:30 | x | 1.0 | +| test.c:685:34:685:36 | 100 | 1.0 | +| test.c:685:34:685:36 | (unsigned int)... | 1.0 | +| test.c:688:3:688:4 | y1 | 1.0 | +| test.c:688:9:688:11 | ++ ... | 1.0 | +| test.c:688:11:688:11 | y | 1.0 | +| test.c:689:3:689:4 | y2 | 1.0 | +| test.c:689:19:689:19 | 3 | 1.0 | +| test.c:689:19:689:19 | (unsigned int)... | 1.0 | | test.c:698:3:698:3 | i | 1.0 | -| test.c:698:3:698:20 | ... = ... | 1.0 | -| test.c:698:7:698:8 | 20 | 1.0 | -| test.c:698:7:698:20 | ... + ... | 1.0 | -| test.c:698:12:698:20 | (...) | 1.0 | -| test.c:698:13:698:13 | j | 1.0 | -| test.c:698:13:698:19 | ... -= ... | 1.0 | -| test.c:698:18:698:19 | 10 | 1.0 | +| test.c:698:3:698:8 | ... = ... | 1.0 | +| test.c:698:7:698:8 | 10 | 1.0 | | test.c:699:7:699:7 | i | 1.0 | -| test.c:704:14:704:15 | 0 | 1.0 | -| test.c:706:7:706:7 | 3 | 1.0 | -| test.c:706:7:706:7 | (unsigned int)... | 1.0 | -| test.c:706:7:706:12 | ... <= ... | 1.0 | -| test.c:706:7:706:23 | ... && ... | 1.0 | -| test.c:706:7:706:33 | ... && ... | 1.0 | -| test.c:706:7:706:44 | ... && ... | 1.0 | -| test.c:706:12:706:12 | a | 1.0 | -| test.c:706:17:706:17 | a | 1.0 | -| test.c:706:17:706:23 | ... <= ... | 1.0 | -| test.c:706:22:706:23 | 11 | 1.0 | -| test.c:706:22:706:23 | (unsigned int)... | 1.0 | -| test.c:706:28:706:28 | 5 | 1.0 | -| test.c:706:28:706:28 | (unsigned int)... | 1.0 | -| test.c:706:28:706:33 | ... <= ... | 1.0 | -| test.c:706:33:706:33 | b | 1.0 | -| test.c:706:38:706:38 | b | 1.0 | -| test.c:706:38:706:44 | ... <= ... | 1.0 | -| test.c:706:43:706:44 | 23 | 1.0 | -| test.c:706:43:706:44 | (unsigned int)... | 1.0 | -| test.c:707:13:707:13 | a | 1.0 | -| test.c:707:13:707:15 | (int)... | 1.0 | -| test.c:707:13:707:15 | ... * ... | 1.0 | -| test.c:707:15:707:15 | b | 1.0 | -| test.c:708:5:708:9 | total | 1.0 | -| test.c:708:5:708:14 | ... += ... | 1.0 | -| test.c:708:14:708:14 | r | 1.0 | -| test.c:710:7:710:7 | 3 | 1.0 | -| test.c:710:7:710:7 | (unsigned int)... | 1.0 | -| test.c:710:7:710:12 | ... <= ... | 1.0 | -| test.c:710:7:710:23 | ... && ... | 1.0 | -| test.c:710:7:710:33 | ... && ... | 1.0 | -| test.c:710:7:710:44 | ... && ... | 1.0 | -| test.c:710:12:710:12 | a | 2.0 | -| test.c:710:17:710:17 | a | 2.0 | -| test.c:710:17:710:23 | ... <= ... | 1.0 | -| test.c:710:22:710:23 | 11 | 1.0 | -| test.c:710:22:710:23 | (unsigned int)... | 1.0 | -| test.c:710:28:710:28 | 0 | 1.0 | -| test.c:710:28:710:28 | (unsigned int)... | 1.0 | -| test.c:710:28:710:33 | ... <= ... | 1.0 | -| test.c:710:33:710:33 | b | 3.0 | -| test.c:710:38:710:38 | b | 3.0 | -| test.c:710:38:710:44 | ... <= ... | 1.0 | -| test.c:710:43:710:44 | 23 | 1.0 | -| test.c:710:43:710:44 | (unsigned int)... | 1.0 | -| test.c:711:13:711:13 | a | 2.0 | -| test.c:711:13:711:15 | (int)... | 6.0 | -| test.c:711:13:711:15 | ... * ... | 6.0 | -| test.c:711:15:711:15 | b | 3.0 | -| test.c:712:5:712:9 | total | 2.0 | -| test.c:712:5:712:14 | ... += ... | 12.0 | -| test.c:712:14:712:14 | r | 6.0 | -| test.c:714:7:714:7 | 3 | 1.0 | -| test.c:714:7:714:7 | (unsigned int)... | 1.0 | -| test.c:714:7:714:12 | ... <= ... | 1.0 | -| test.c:714:7:714:23 | ... && ... | 1.0 | -| test.c:714:7:714:34 | ... && ... | 1.0 | -| test.c:714:7:714:45 | ... && ... | 1.0 | -| test.c:714:12:714:12 | a | 3.0 | -| test.c:714:17:714:17 | a | 3.0 | -| test.c:714:17:714:23 | ... <= ... | 1.0 | -| test.c:714:22:714:23 | 11 | 1.0 | -| test.c:714:22:714:23 | (unsigned int)... | 1.0 | -| test.c:714:28:714:29 | 13 | 1.0 | -| test.c:714:28:714:29 | (unsigned int)... | 1.0 | -| test.c:714:28:714:34 | ... <= ... | 1.0 | -| test.c:714:34:714:34 | b | 7.0 | -| test.c:714:39:714:39 | b | 7.0 | -| test.c:714:39:714:45 | ... <= ... | 1.0 | -| test.c:714:44:714:45 | 23 | 1.0 | -| test.c:714:44:714:45 | (unsigned int)... | 1.0 | -| test.c:715:13:715:13 | a | 3.0 | -| test.c:715:13:715:15 | (int)... | 21.0 | -| test.c:715:13:715:15 | ... * ... | 21.0 | -| test.c:715:15:715:15 | b | 7.0 | -| test.c:716:5:716:9 | total | 14.0 | -| test.c:716:5:716:14 | ... += ... | 294.0 | -| test.c:716:14:716:14 | r | 21.0 | -| test.c:719:10:719:14 | total | 308.0 | -| test.c:723:14:723:15 | 0 | 1.0 | -| test.c:725:7:725:7 | 5 | 1.0 | -| test.c:725:7:725:7 | (unsigned int)... | 1.0 | -| test.c:725:7:725:12 | ... <= ... | 1.0 | -| test.c:725:7:725:23 | ... && ... | 1.0 | -| test.c:725:12:725:12 | b | 1.0 | -| test.c:725:17:725:17 | b | 1.0 | -| test.c:725:17:725:23 | ... <= ... | 1.0 | -| test.c:725:22:725:23 | 23 | 1.0 | -| test.c:725:22:725:23 | (unsigned int)... | 1.0 | -| test.c:726:13:726:14 | 11 | 1.0 | -| test.c:726:13:726:14 | (unsigned int)... | 1.0 | -| test.c:726:13:726:16 | (int)... | 1.0 | -| test.c:726:13:726:16 | ... * ... | 1.0 | -| test.c:726:16:726:16 | b | 1.0 | -| test.c:727:5:727:9 | total | 1.0 | -| test.c:727:5:727:14 | ... += ... | 1.0 | -| test.c:727:14:727:14 | r | 1.0 | -| test.c:729:7:729:7 | 0 | 1.0 | -| test.c:729:7:729:7 | (unsigned int)... | 1.0 | -| test.c:729:7:729:12 | ... <= ... | 1.0 | -| test.c:729:7:729:23 | ... && ... | 1.0 | -| test.c:729:12:729:12 | b | 2.0 | -| test.c:729:17:729:17 | b | 2.0 | -| test.c:729:17:729:23 | ... <= ... | 1.0 | -| test.c:729:22:729:23 | 23 | 1.0 | -| test.c:729:22:729:23 | (unsigned int)... | 1.0 | -| test.c:730:13:730:14 | 11 | 1.0 | -| test.c:730:13:730:14 | (unsigned int)... | 1.0 | -| test.c:730:13:730:16 | (int)... | 2.0 | -| test.c:730:13:730:16 | ... * ... | 2.0 | -| test.c:730:16:730:16 | b | 2.0 | -| test.c:731:5:731:9 | total | 2.0 | -| test.c:731:5:731:14 | ... += ... | 4.0 | -| test.c:731:14:731:14 | r | 2.0 | -| test.c:733:7:733:8 | 13 | 1.0 | -| test.c:733:7:733:8 | (unsigned int)... | 1.0 | -| test.c:733:7:733:13 | ... <= ... | 1.0 | -| test.c:733:7:733:24 | ... && ... | 1.0 | -| test.c:733:13:733:13 | b | 3.0 | -| test.c:733:18:733:18 | b | 3.0 | -| test.c:733:18:733:24 | ... <= ... | 1.0 | -| test.c:733:23:733:24 | 23 | 1.0 | -| test.c:733:23:733:24 | (unsigned int)... | 1.0 | -| test.c:734:13:734:14 | 11 | 1.0 | -| test.c:734:13:734:14 | (unsigned int)... | 1.0 | -| test.c:734:13:734:16 | (int)... | 3.0 | -| test.c:734:13:734:16 | ... * ... | 3.0 | -| test.c:734:16:734:16 | b | 3.0 | -| test.c:735:5:735:9 | total | 6.0 | -| test.c:735:5:735:14 | ... += ... | 18.0 | -| test.c:735:14:735:14 | r | 3.0 | -| test.c:738:10:738:14 | total | 24.0 | -| test.c:743:3:743:3 | x | 1.0 | -| test.c:743:3:743:22 | ... = ... | 1.0 | -| test.c:743:7:743:7 | y | 1.0 | -| test.c:743:7:743:22 | ... = ... | 1.0 | -| test.c:743:11:743:22 | 1000000003 | 1.0 | -| test.c:744:3:744:4 | xy | 1.0 | -| test.c:744:3:744:12 | ... = ... | 1.0 | -| test.c:744:8:744:8 | x | 1.0 | -| test.c:744:8:744:12 | ... * ... | 1.0 | -| test.c:744:12:744:12 | y | 1.0 | -| test.c:745:10:745:11 | xy | 1.0 | -| test.c:750:3:750:3 | x | 1.0 | -| test.c:750:3:750:14 | ... = ... | 1.0 | -| test.c:750:7:750:14 | 274177 | 1.0 | -| test.c:751:3:751:3 | y | 1.0 | -| test.c:751:3:751:22 | ... = ... | 1.0 | -| test.c:751:7:751:22 | 67280421310721 | 1.0 | -| test.c:752:3:752:4 | xy | 1.0 | -| test.c:752:3:752:12 | ... = ... | 1.0 | -| test.c:752:8:752:8 | x | 1.0 | -| test.c:752:8:752:12 | ... * ... | 1.0 | -| test.c:752:12:752:12 | y | 1.0 | -| test.c:753:10:753:11 | xy | 1.0 | -| test.c:757:7:757:8 | ui | 1.0 | -| test.c:757:7:757:14 | ... >= ... | 1.0 | -| test.c:757:13:757:14 | 10 | 1.0 | -| test.c:757:13:757:14 | (unsigned int)... | 1.0 | -| test.c:758:28:758:44 | (unsigned long)... | 1.0 | -| test.c:758:28:758:49 | ... * ... | 1.0 | -| test.c:758:43:758:44 | ui | 1.0 | -| test.c:758:48:758:49 | (unsigned long)... | 1.0 | -| test.c:758:48:758:49 | ui | 1.0 | -| test.c:759:12:759:17 | result | 1.0 | -| test.c:761:7:761:8 | ul | 1.0 | -| test.c:761:7:761:14 | ... >= ... | 1.0 | -| test.c:761:13:761:14 | 10 | 1.0 | -| test.c:761:13:761:14 | (unsigned long)... | 1.0 | -| test.c:762:28:762:29 | ul | 1.0 | -| test.c:762:28:762:34 | ... * ... | 1.0 | -| test.c:762:33:762:34 | ul | 1.0 | -| test.c:763:12:763:17 | result | 1.0 | -| test.c:765:10:765:10 | 0 | 1.0 | -| test.c:765:10:765:10 | (unsigned long)... | 1.0 | -| test.c:769:7:769:8 | ui | 1.0 | -| test.c:769:7:769:14 | ... <= ... | 1.0 | -| test.c:769:7:769:25 | ... && ... | 1.0 | -| test.c:769:13:769:14 | 10 | 1.0 | -| test.c:769:13:769:14 | (unsigned int)... | 1.0 | -| test.c:769:19:769:20 | ui | 1.0 | -| test.c:769:19:769:25 | ... >= ... | 1.0 | -| test.c:769:25:769:25 | 2 | 1.0 | -| test.c:769:25:769:25 | (unsigned int)... | 1.0 | -| test.c:770:5:770:6 | ui | 1.0 | -| test.c:770:5:770:16 | ... *= ... | 1.0 | -| test.c:770:11:770:12 | ui | 1.0 | -| test.c:770:11:770:16 | ... + ... | 1.0 | -| test.c:770:16:770:16 | 0 | 1.0 | -| test.c:770:16:770:16 | (unsigned int)... | 1.0 | -| test.c:771:12:771:13 | (unsigned long)... | 1.0 | -| test.c:771:12:771:13 | ui | 1.0 | -| test.c:774:26:774:27 | 10 | 1.0 | -| test.c:774:26:774:27 | (unsigned int)... | 1.0 | -| test.c:775:3:775:9 | uiconst | 1.0 | -| test.c:775:3:775:14 | ... *= ... | 1.0 | -| test.c:775:14:775:14 | 4 | 1.0 | -| test.c:775:14:775:14 | (unsigned int)... | 1.0 | -| test.c:777:27:777:28 | 10 | 1.0 | -| test.c:777:27:777:28 | (unsigned long)... | 1.0 | -| test.c:778:3:778:9 | ulconst | 1.0 | -| test.c:778:3:778:14 | ... *= ... | 1.0 | -| test.c:778:14:778:14 | 4 | 1.0 | -| test.c:778:14:778:14 | (unsigned long)... | 1.0 | -| test.c:779:10:779:16 | (unsigned long)... | 1.0 | -| test.c:779:10:779:16 | uiconst | 1.0 | -| test.c:779:10:779:26 | ... + ... | 1.0 | -| test.c:779:20:779:26 | ulconst | 1.0 | -| test.c:783:7:783:7 | i | 1.0 | -| test.c:783:7:783:13 | ... >= ... | 1.0 | -| test.c:783:7:783:23 | ... && ... | 1.0 | -| test.c:783:12:783:13 | - ... | 1.0 | -| test.c:783:13:783:13 | 1 | 1.0 | -| test.c:783:18:783:18 | i | 1.0 | -| test.c:783:18:783:23 | ... <= ... | 1.0 | -| test.c:783:23:783:23 | 2 | 1.0 | -| test.c:784:5:784:5 | i | 1.0 | -| test.c:784:5:784:13 | ... = ... | 1.0 | -| test.c:784:9:784:9 | 5 | 1.0 | -| test.c:784:9:784:13 | ... * ... | 1.0 | -| test.c:784:13:784:13 | i | 1.0 | -| test.c:785:9:785:9 | i | 1.0 | -| test.c:787:5:787:5 | i | 1.0 | -| test.c:787:5:787:14 | ... = ... | 1.0 | -| test.c:787:9:787:9 | i | 1.0 | -| test.c:787:9:787:14 | ... * ... | 1.0 | -| test.c:787:13:787:14 | - ... | 1.0 | -| test.c:787:14:787:14 | 3 | 1.0 | -| test.c:788:9:788:9 | i | 1.0 | -| test.c:790:5:790:5 | i | 1.0 | -| test.c:790:5:790:10 | ... *= ... | 1.0 | -| test.c:790:10:790:10 | 7 | 1.0 | -| test.c:791:9:791:9 | i | 1.0 | -| test.c:793:5:793:5 | i | 1.0 | -| test.c:793:5:793:12 | ... *= ... | 1.0 | -| test.c:793:10:793:12 | - ... | 1.0 | -| test.c:793:11:793:12 | 11 | 1.0 | -| test.c:794:9:794:9 | i | 1.0 | -| test.c:796:7:796:7 | i | 2.0 | -| test.c:796:7:796:13 | ... == ... | 1.0 | -| test.c:796:12:796:13 | - ... | 1.0 | -| test.c:796:13:796:13 | 1 | 1.0 | -| test.c:797:5:797:5 | i | 1.0 | -| test.c:797:5:797:27 | ... = ... | 2.0 | -| test.c:797:9:797:9 | i | 2.0 | -| test.c:797:9:797:27 | ... * ... | 2.0 | -| test.c:797:13:797:27 | (int)... | 1.0 | -| test.c:797:18:797:27 | 4294967295 | 1.0 | -| test.c:798:9:798:9 | i | 2.0 | -| test.c:800:3:800:3 | i | 1.0 | -| test.c:800:3:800:12 | ... = ... | 4.0 | -| test.c:800:7:800:7 | i | 4.0 | -| test.c:800:7:800:12 | ... * ... | 4.0 | -| test.c:800:11:800:12 | - ... | 1.0 | -| test.c:800:12:800:12 | 1 | 1.0 | -| test.c:801:10:801:10 | i | 4.0 | -| test.c:803:20:803:20 | 1 | 1.0 | -| test.c:803:20:803:20 | (signed char)... | 1.0 | -| test.c:804:3:804:3 | i | 1.0 | -| test.c:804:3:804:17 | ... = ... | 1.0 | -| test.c:804:7:804:17 | (...) | 1.0 | -| test.c:804:7:804:17 | (int)... | 1.0 | -| test.c:804:8:804:11 | * ... | 1.0 | -| test.c:804:8:804:16 | ... *= ... | 1.0 | -| test.c:804:10:804:11 | sc | 1.0 | -| test.c:804:16:804:16 | 2 | 1.0 | -| test.c:806:7:806:7 | i | 1.0 | -| test.c:808:10:808:10 | 0 | 1.0 | -| test.c:813:7:813:7 | (int)... | 1.0 | -| test.c:813:7:813:7 | n | 1.0 | -| test.c:815:7:815:7 | n | 1.0 | -| test.c:815:7:815:11 | ... > ... | 1.0 | -| test.c:815:11:815:11 | 0 | 1.0 | -| test.c:815:11:815:11 | (unsigned int)... | 1.0 | -| test.c:816:9:816:9 | (int)... | 1.0 | -| test.c:816:9:816:9 | n | 1.0 | -| test.c:819:7:819:7 | n | 2.0 | -| test.c:819:7:819:12 | ... != ... | 1.0 | -| test.c:819:12:819:12 | 0 | 1.0 | -| test.c:819:12:819:12 | (unsigned int)... | 1.0 | -| test.c:820:9:820:9 | (int)... | 2.0 | -| test.c:820:9:820:9 | n | 2.0 | -| test.c:822:9:822:9 | (int)... | 2.0 | -| test.c:822:9:822:9 | n | 2.0 | -| test.c:825:7:825:8 | ! ... | 1.0 | -| test.c:825:8:825:8 | n | 4.0 | -| test.c:826:9:826:9 | (int)... | 4.0 | -| test.c:826:9:826:9 | n | 4.0 | -| test.c:828:9:828:9 | (int)... | 4.0 | -| test.c:828:9:828:9 | n | 4.0 | -| test.c:831:10:831:10 | n | 13.0 | -| test.c:831:10:831:15 | ... != ... | 1.0 | -| test.c:831:15:831:15 | 0 | 1.0 | -| test.c:831:15:831:15 | (unsigned int)... | 1.0 | -| test.c:832:5:832:5 | n | 13.0 | -| test.c:832:5:832:7 | ... -- | 13.0 | -| test.c:835:7:835:7 | (int)... | 13.0 | -| test.c:835:7:835:7 | n | 13.0 | -| test.c:839:7:839:7 | (int)... | 1.0 | -| test.c:839:7:839:7 | n | 1.0 | -| test.c:839:7:839:11 | ... < ... | 1.0 | -| test.c:839:11:839:11 | 0 | 1.0 | -| test.c:842:7:842:7 | (int)... | 1.0 | -| test.c:842:7:842:7 | n | 1.0 | -| test.c:842:7:842:12 | ... == ... | 1.0 | -| test.c:842:12:842:12 | 0 | 1.0 | -| test.c:843:9:843:9 | (int)... | 1.0 | -| test.c:843:9:843:9 | n | 1.0 | -| test.c:845:9:845:9 | (int)... | 1.0 | -| test.c:845:9:845:9 | n | 1.0 | -| test.c:848:7:848:7 | n | 2.0 | -| test.c:849:9:849:9 | (int)... | 2.0 | -| test.c:849:9:849:9 | n | 2.0 | -| test.c:851:9:851:9 | (int)... | 2.0 | -| test.c:851:9:851:9 | n | 2.0 | -| test.c:854:10:854:10 | (int)... | 13.0 | -| test.c:854:10:854:10 | n | 12.0 | -| test.c:854:10:854:15 | ... != ... | 1.0 | -| test.c:854:15:854:15 | 0 | 1.0 | -| test.c:855:5:855:5 | n | 12.0 | -| test.c:855:5:855:7 | ... -- | 12.0 | -| test.c:858:7:858:7 | (int)... | 12.0 | -| test.c:858:7:858:7 | n | 12.0 | -| test.c:862:7:862:7 | (int)... | 1.0 | -| test.c:862:7:862:7 | n | 1.0 | -| test.c:862:7:862:12 | ... != ... | 1.0 | -| test.c:862:12:862:12 | 0 | 1.0 | -| test.c:863:9:863:9 | (int)... | 1.0 | -| test.c:863:9:863:9 | n | 1.0 | -| test.c:863:9:863:14 | ... >= ... | 1.0 | -| test.c:863:14:863:14 | 0 | 1.0 | -| test.c:864:11:864:11 | (int)... | 1.0 | -| test.c:864:11:864:11 | n | 1.0 | -| test.c:868:7:868:7 | (int)... | 2.0 | -| test.c:868:7:868:7 | n | 2.0 | -| test.c:868:7:868:12 | ... >= ... | 1.0 | -| test.c:868:12:868:12 | 5 | 1.0 | -| test.c:869:9:869:9 | 2 | 1.0 | -| test.c:869:9:869:13 | ... * ... | 2.0 | -| test.c:869:9:869:18 | ... - ... | 2.0 | -| test.c:869:9:869:23 | ... == ... | 1.0 | -| test.c:869:13:869:13 | (int)... | 2.0 | -| test.c:869:13:869:13 | n | 2.0 | -| test.c:869:17:869:18 | 10 | 1.0 | -| test.c:869:23:869:23 | 0 | 1.0 | -| test.c:872:9:872:9 | (int)... | 2.0 | -| test.c:872:9:872:9 | n | 2.0 | -| test.c:875:7:875:7 | (int)... | 3.0 | -| test.c:875:7:875:7 | n | 3.0 | -| test.c:875:7:875:17 | ... != ... | 1.0 | -| test.c:875:7:875:32 | ... && ... | 1.0 | -| test.c:875:12:875:17 | - ... | 1.0 | -| test.c:875:13:875:17 | 32768 | 1.0 | -| test.c:875:22:875:22 | (int)... | 3.0 | -| test.c:875:22:875:22 | n | 3.0 | -| test.c:875:22:875:32 | ... != ... | 1.0 | -| test.c:875:27:875:32 | - ... | 1.0 | -| test.c:875:28:875:32 | 32767 | 1.0 | -| test.c:876:9:876:9 | (int)... | 3.0 | -| test.c:876:9:876:9 | n | 3.0 | -| test.c:879:7:879:7 | (int)... | 4.0 | -| test.c:879:7:879:7 | n | 4.0 | -| test.c:879:7:879:12 | ... >= ... | 1.0 | +| test.c:701:3:701:3 | i | 1.0 | +| test.c:701:3:701:8 | ... = ... | 1.0 | +| test.c:701:7:701:8 | 10 | 1.0 | +| test.c:702:3:702:3 | i | 1.0 | +| test.c:702:3:702:9 | ... += ... | 1.0 | +| test.c:702:8:702:9 | 10 | 1.0 | +| test.c:703:7:703:7 | i | 1.0 | +| test.c:705:3:705:3 | i | 1.0 | +| test.c:705:3:705:8 | ... = ... | 1.0 | +| test.c:705:7:705:8 | 40 | 1.0 | +| test.c:706:3:706:3 | i | 1.0 | +| test.c:706:3:706:9 | ... -= ... | 1.0 | +| test.c:706:8:706:9 | 10 | 1.0 | +| test.c:707:7:707:7 | i | 1.0 | +| test.c:709:3:709:3 | i | 1.0 | +| test.c:709:3:709:12 | ... = ... | 1.0 | +| test.c:709:7:709:7 | j | 1.0 | +| test.c:709:7:709:12 | ... = ... | 1.0 | +| test.c:709:11:709:12 | 40 | 1.0 | +| test.c:710:7:710:7 | i | 1.0 | +| test.c:712:3:712:3 | i | 1.0 | +| test.c:712:3:712:15 | ... = ... | 1.0 | +| test.c:712:7:712:15 | (...) | 1.0 | +| test.c:712:8:712:8 | j | 1.0 | +| test.c:712:8:712:14 | ... += ... | 1.0 | +| test.c:712:13:712:14 | 10 | 1.0 | +| test.c:713:7:713:7 | i | 1.0 | +| test.c:715:3:715:3 | i | 1.0 | +| test.c:715:3:715:20 | ... = ... | 1.0 | +| test.c:715:7:715:8 | 20 | 1.0 | +| test.c:715:7:715:20 | ... + ... | 1.0 | +| test.c:715:12:715:20 | (...) | 1.0 | +| test.c:715:13:715:13 | j | 1.0 | +| test.c:715:13:715:19 | ... -= ... | 1.0 | +| test.c:715:18:715:19 | 10 | 1.0 | +| test.c:716:7:716:7 | i | 1.0 | +| test.c:721:14:721:15 | 0 | 1.0 | +| test.c:723:7:723:7 | 3 | 1.0 | +| test.c:723:7:723:7 | (unsigned int)... | 1.0 | +| test.c:723:7:723:12 | ... <= ... | 1.0 | +| test.c:723:7:723:23 | ... && ... | 1.0 | +| test.c:723:7:723:33 | ... && ... | 1.0 | +| test.c:723:7:723:44 | ... && ... | 1.0 | +| test.c:723:12:723:12 | a | 1.0 | +| test.c:723:17:723:17 | a | 1.0 | +| test.c:723:17:723:23 | ... <= ... | 1.0 | +| test.c:723:22:723:23 | 11 | 1.0 | +| test.c:723:22:723:23 | (unsigned int)... | 1.0 | +| test.c:723:28:723:28 | 5 | 1.0 | +| test.c:723:28:723:28 | (unsigned int)... | 1.0 | +| test.c:723:28:723:33 | ... <= ... | 1.0 | +| test.c:723:33:723:33 | b | 1.0 | +| test.c:723:38:723:38 | b | 1.0 | +| test.c:723:38:723:44 | ... <= ... | 1.0 | +| test.c:723:43:723:44 | 23 | 1.0 | +| test.c:723:43:723:44 | (unsigned int)... | 1.0 | +| test.c:724:13:724:13 | a | 1.0 | +| test.c:724:13:724:15 | (int)... | 1.0 | +| test.c:724:13:724:15 | ... * ... | 1.0 | +| test.c:724:15:724:15 | b | 1.0 | +| test.c:725:5:725:9 | total | 1.0 | +| test.c:725:5:725:14 | ... += ... | 1.0 | +| test.c:725:14:725:14 | r | 1.0 | +| test.c:727:7:727:7 | 3 | 1.0 | +| test.c:727:7:727:7 | (unsigned int)... | 1.0 | +| test.c:727:7:727:12 | ... <= ... | 1.0 | +| test.c:727:7:727:23 | ... && ... | 1.0 | +| test.c:727:7:727:33 | ... && ... | 1.0 | +| test.c:727:7:727:44 | ... && ... | 1.0 | +| test.c:727:12:727:12 | a | 2.0 | +| test.c:727:17:727:17 | a | 2.0 | +| test.c:727:17:727:23 | ... <= ... | 1.0 | +| test.c:727:22:727:23 | 11 | 1.0 | +| test.c:727:22:727:23 | (unsigned int)... | 1.0 | +| test.c:727:28:727:28 | 0 | 1.0 | +| test.c:727:28:727:28 | (unsigned int)... | 1.0 | +| test.c:727:28:727:33 | ... <= ... | 1.0 | +| test.c:727:33:727:33 | b | 3.0 | +| test.c:727:38:727:38 | b | 3.0 | +| test.c:727:38:727:44 | ... <= ... | 1.0 | +| test.c:727:43:727:44 | 23 | 1.0 | +| test.c:727:43:727:44 | (unsigned int)... | 1.0 | +| test.c:728:13:728:13 | a | 2.0 | +| test.c:728:13:728:15 | (int)... | 6.0 | +| test.c:728:13:728:15 | ... * ... | 6.0 | +| test.c:728:15:728:15 | b | 3.0 | +| test.c:729:5:729:9 | total | 2.0 | +| test.c:729:5:729:14 | ... += ... | 12.0 | +| test.c:729:14:729:14 | r | 6.0 | +| test.c:731:7:731:7 | 3 | 1.0 | +| test.c:731:7:731:7 | (unsigned int)... | 1.0 | +| test.c:731:7:731:12 | ... <= ... | 1.0 | +| test.c:731:7:731:23 | ... && ... | 1.0 | +| test.c:731:7:731:34 | ... && ... | 1.0 | +| test.c:731:7:731:45 | ... && ... | 1.0 | +| test.c:731:12:731:12 | a | 3.0 | +| test.c:731:17:731:17 | a | 3.0 | +| test.c:731:17:731:23 | ... <= ... | 1.0 | +| test.c:731:22:731:23 | 11 | 1.0 | +| test.c:731:22:731:23 | (unsigned int)... | 1.0 | +| test.c:731:28:731:29 | 13 | 1.0 | +| test.c:731:28:731:29 | (unsigned int)... | 1.0 | +| test.c:731:28:731:34 | ... <= ... | 1.0 | +| test.c:731:34:731:34 | b | 7.0 | +| test.c:731:39:731:39 | b | 7.0 | +| test.c:731:39:731:45 | ... <= ... | 1.0 | +| test.c:731:44:731:45 | 23 | 1.0 | +| test.c:731:44:731:45 | (unsigned int)... | 1.0 | +| test.c:732:13:732:13 | a | 3.0 | +| test.c:732:13:732:15 | (int)... | 21.0 | +| test.c:732:13:732:15 | ... * ... | 21.0 | +| test.c:732:15:732:15 | b | 7.0 | +| test.c:733:5:733:9 | total | 14.0 | +| test.c:733:5:733:14 | ... += ... | 294.0 | +| test.c:733:14:733:14 | r | 21.0 | +| test.c:736:10:736:14 | total | 308.0 | +| test.c:740:14:740:15 | 0 | 1.0 | +| test.c:742:7:742:7 | 5 | 1.0 | +| test.c:742:7:742:7 | (unsigned int)... | 1.0 | +| test.c:742:7:742:12 | ... <= ... | 1.0 | +| test.c:742:7:742:23 | ... && ... | 1.0 | +| test.c:742:12:742:12 | b | 1.0 | +| test.c:742:17:742:17 | b | 1.0 | +| test.c:742:17:742:23 | ... <= ... | 1.0 | +| test.c:742:22:742:23 | 23 | 1.0 | +| test.c:742:22:742:23 | (unsigned int)... | 1.0 | +| test.c:743:13:743:14 | 11 | 1.0 | +| test.c:743:13:743:14 | (unsigned int)... | 1.0 | +| test.c:743:13:743:16 | (int)... | 1.0 | +| test.c:743:13:743:16 | ... * ... | 1.0 | +| test.c:743:16:743:16 | b | 1.0 | +| test.c:744:5:744:9 | total | 1.0 | +| test.c:744:5:744:14 | ... += ... | 1.0 | +| test.c:744:14:744:14 | r | 1.0 | +| test.c:746:7:746:7 | 0 | 1.0 | +| test.c:746:7:746:7 | (unsigned int)... | 1.0 | +| test.c:746:7:746:12 | ... <= ... | 1.0 | +| test.c:746:7:746:23 | ... && ... | 1.0 | +| test.c:746:12:746:12 | b | 2.0 | +| test.c:746:17:746:17 | b | 2.0 | +| test.c:746:17:746:23 | ... <= ... | 1.0 | +| test.c:746:22:746:23 | 23 | 1.0 | +| test.c:746:22:746:23 | (unsigned int)... | 1.0 | +| test.c:747:13:747:14 | 11 | 1.0 | +| test.c:747:13:747:14 | (unsigned int)... | 1.0 | +| test.c:747:13:747:16 | (int)... | 2.0 | +| test.c:747:13:747:16 | ... * ... | 2.0 | +| test.c:747:16:747:16 | b | 2.0 | +| test.c:748:5:748:9 | total | 2.0 | +| test.c:748:5:748:14 | ... += ... | 4.0 | +| test.c:748:14:748:14 | r | 2.0 | +| test.c:750:7:750:8 | 13 | 1.0 | +| test.c:750:7:750:8 | (unsigned int)... | 1.0 | +| test.c:750:7:750:13 | ... <= ... | 1.0 | +| test.c:750:7:750:24 | ... && ... | 1.0 | +| test.c:750:13:750:13 | b | 3.0 | +| test.c:750:18:750:18 | b | 3.0 | +| test.c:750:18:750:24 | ... <= ... | 1.0 | +| test.c:750:23:750:24 | 23 | 1.0 | +| test.c:750:23:750:24 | (unsigned int)... | 1.0 | +| test.c:751:13:751:14 | 11 | 1.0 | +| test.c:751:13:751:14 | (unsigned int)... | 1.0 | +| test.c:751:13:751:16 | (int)... | 3.0 | +| test.c:751:13:751:16 | ... * ... | 3.0 | +| test.c:751:16:751:16 | b | 3.0 | +| test.c:752:5:752:9 | total | 6.0 | +| test.c:752:5:752:14 | ... += ... | 18.0 | +| test.c:752:14:752:14 | r | 3.0 | +| test.c:755:10:755:14 | total | 24.0 | +| test.c:760:3:760:3 | x | 1.0 | +| test.c:760:3:760:22 | ... = ... | 1.0 | +| test.c:760:7:760:7 | y | 1.0 | +| test.c:760:7:760:22 | ... = ... | 1.0 | +| test.c:760:11:760:22 | 1000000003 | 1.0 | +| test.c:761:3:761:4 | xy | 1.0 | +| test.c:761:3:761:12 | ... = ... | 1.0 | +| test.c:761:8:761:8 | x | 1.0 | +| test.c:761:8:761:12 | ... * ... | 1.0 | +| test.c:761:12:761:12 | y | 1.0 | +| test.c:762:10:762:11 | xy | 1.0 | +| test.c:767:3:767:3 | x | 1.0 | +| test.c:767:3:767:14 | ... = ... | 1.0 | +| test.c:767:7:767:14 | 274177 | 1.0 | +| test.c:768:3:768:3 | y | 1.0 | +| test.c:768:3:768:22 | ... = ... | 1.0 | +| test.c:768:7:768:22 | 67280421310721 | 1.0 | +| test.c:769:3:769:4 | xy | 1.0 | +| test.c:769:3:769:12 | ... = ... | 1.0 | +| test.c:769:8:769:8 | x | 1.0 | +| test.c:769:8:769:12 | ... * ... | 1.0 | +| test.c:769:12:769:12 | y | 1.0 | +| test.c:770:10:770:11 | xy | 1.0 | +| test.c:774:7:774:8 | ui | 1.0 | +| test.c:774:7:774:14 | ... >= ... | 1.0 | +| test.c:774:13:774:14 | 10 | 1.0 | +| test.c:774:13:774:14 | (unsigned int)... | 1.0 | +| test.c:775:28:775:44 | (unsigned long)... | 1.0 | +| test.c:775:28:775:49 | ... * ... | 1.0 | +| test.c:775:43:775:44 | ui | 1.0 | +| test.c:775:48:775:49 | (unsigned long)... | 1.0 | +| test.c:775:48:775:49 | ui | 1.0 | +| test.c:776:12:776:17 | result | 1.0 | +| test.c:778:7:778:8 | ul | 1.0 | +| test.c:778:7:778:14 | ... >= ... | 1.0 | +| test.c:778:13:778:14 | 10 | 1.0 | +| test.c:778:13:778:14 | (unsigned long)... | 1.0 | +| test.c:779:28:779:29 | ul | 1.0 | +| test.c:779:28:779:34 | ... * ... | 1.0 | +| test.c:779:33:779:34 | ul | 1.0 | +| test.c:780:12:780:17 | result | 1.0 | +| test.c:782:10:782:10 | 0 | 1.0 | +| test.c:782:10:782:10 | (unsigned long)... | 1.0 | +| test.c:786:7:786:8 | ui | 1.0 | +| test.c:786:7:786:14 | ... <= ... | 1.0 | +| test.c:786:7:786:25 | ... && ... | 1.0 | +| test.c:786:13:786:14 | 10 | 1.0 | +| test.c:786:13:786:14 | (unsigned int)... | 1.0 | +| test.c:786:19:786:20 | ui | 1.0 | +| test.c:786:19:786:25 | ... >= ... | 1.0 | +| test.c:786:25:786:25 | 2 | 1.0 | +| test.c:786:25:786:25 | (unsigned int)... | 1.0 | +| test.c:787:5:787:6 | ui | 1.0 | +| test.c:787:5:787:16 | ... *= ... | 1.0 | +| test.c:787:11:787:12 | ui | 1.0 | +| test.c:787:11:787:16 | ... + ... | 1.0 | +| test.c:787:16:787:16 | 0 | 1.0 | +| test.c:787:16:787:16 | (unsigned int)... | 1.0 | +| test.c:788:12:788:13 | (unsigned long)... | 1.0 | +| test.c:788:12:788:13 | ui | 1.0 | +| test.c:791:26:791:27 | 10 | 1.0 | +| test.c:791:26:791:27 | (unsigned int)... | 1.0 | +| test.c:792:3:792:9 | uiconst | 1.0 | +| test.c:792:3:792:14 | ... *= ... | 1.0 | +| test.c:792:14:792:14 | 4 | 1.0 | +| test.c:792:14:792:14 | (unsigned int)... | 1.0 | +| test.c:794:27:794:28 | 10 | 1.0 | +| test.c:794:27:794:28 | (unsigned long)... | 1.0 | +| test.c:795:3:795:9 | ulconst | 1.0 | +| test.c:795:3:795:14 | ... *= ... | 1.0 | +| test.c:795:14:795:14 | 4 | 1.0 | +| test.c:795:14:795:14 | (unsigned long)... | 1.0 | +| test.c:796:10:796:16 | (unsigned long)... | 1.0 | +| test.c:796:10:796:16 | uiconst | 1.0 | +| test.c:796:10:796:26 | ... + ... | 1.0 | +| test.c:796:20:796:26 | ulconst | 1.0 | +| test.c:800:7:800:7 | i | 1.0 | +| test.c:800:7:800:13 | ... >= ... | 1.0 | +| test.c:800:7:800:23 | ... && ... | 1.0 | +| test.c:800:12:800:13 | - ... | 1.0 | +| test.c:800:13:800:13 | 1 | 1.0 | +| test.c:800:18:800:18 | i | 1.0 | +| test.c:800:18:800:23 | ... <= ... | 1.0 | +| test.c:800:23:800:23 | 2 | 1.0 | +| test.c:801:5:801:5 | i | 1.0 | +| test.c:801:5:801:13 | ... = ... | 1.0 | +| test.c:801:9:801:9 | 5 | 1.0 | +| test.c:801:9:801:13 | ... * ... | 1.0 | +| test.c:801:13:801:13 | i | 1.0 | +| test.c:802:9:802:9 | i | 1.0 | +| test.c:804:5:804:5 | i | 1.0 | +| test.c:804:5:804:14 | ... = ... | 1.0 | +| test.c:804:9:804:9 | i | 1.0 | +| test.c:804:9:804:14 | ... * ... | 1.0 | +| test.c:804:13:804:14 | - ... | 1.0 | +| test.c:804:14:804:14 | 3 | 1.0 | +| test.c:805:9:805:9 | i | 1.0 | +| test.c:807:5:807:5 | i | 1.0 | +| test.c:807:5:807:10 | ... *= ... | 1.0 | +| test.c:807:10:807:10 | 7 | 1.0 | +| test.c:808:9:808:9 | i | 1.0 | +| test.c:810:5:810:5 | i | 1.0 | +| test.c:810:5:810:12 | ... *= ... | 1.0 | +| test.c:810:10:810:12 | - ... | 1.0 | +| test.c:810:11:810:12 | 11 | 1.0 | +| test.c:811:9:811:9 | i | 1.0 | +| test.c:813:7:813:7 | i | 2.0 | +| test.c:813:7:813:13 | ... == ... | 1.0 | +| test.c:813:12:813:13 | - ... | 1.0 | +| test.c:813:13:813:13 | 1 | 1.0 | +| test.c:814:5:814:5 | i | 1.0 | +| test.c:814:5:814:27 | ... = ... | 2.0 | +| test.c:814:9:814:9 | i | 2.0 | +| test.c:814:9:814:27 | ... * ... | 2.0 | +| test.c:814:13:814:27 | (int)... | 1.0 | +| test.c:814:18:814:27 | 4294967295 | 1.0 | +| test.c:815:9:815:9 | i | 2.0 | +| test.c:817:3:817:3 | i | 1.0 | +| test.c:817:3:817:12 | ... = ... | 4.0 | +| test.c:817:7:817:7 | i | 4.0 | +| test.c:817:7:817:12 | ... * ... | 4.0 | +| test.c:817:11:817:12 | - ... | 1.0 | +| test.c:817:12:817:12 | 1 | 1.0 | +| test.c:818:10:818:10 | i | 4.0 | +| test.c:820:20:820:20 | 1 | 1.0 | +| test.c:820:20:820:20 | (signed char)... | 1.0 | +| test.c:821:3:821:3 | i | 1.0 | +| test.c:821:3:821:17 | ... = ... | 1.0 | +| test.c:821:7:821:17 | (...) | 1.0 | +| test.c:821:7:821:17 | (int)... | 1.0 | +| test.c:821:8:821:11 | * ... | 1.0 | +| test.c:821:8:821:16 | ... *= ... | 1.0 | +| test.c:821:10:821:11 | sc | 1.0 | +| test.c:821:16:821:16 | 2 | 1.0 | +| test.c:823:7:823:7 | i | 1.0 | +| test.c:825:10:825:10 | 0 | 1.0 | +| test.c:830:7:830:7 | (int)... | 1.0 | +| test.c:830:7:830:7 | n | 1.0 | +| test.c:832:7:832:7 | n | 1.0 | +| test.c:832:7:832:11 | ... > ... | 1.0 | +| test.c:832:11:832:11 | 0 | 1.0 | +| test.c:832:11:832:11 | (unsigned int)... | 1.0 | +| test.c:833:9:833:9 | (int)... | 1.0 | +| test.c:833:9:833:9 | n | 1.0 | +| test.c:836:7:836:7 | n | 2.0 | +| test.c:836:7:836:12 | ... != ... | 1.0 | +| test.c:836:12:836:12 | 0 | 1.0 | +| test.c:836:12:836:12 | (unsigned int)... | 1.0 | +| test.c:837:9:837:9 | (int)... | 2.0 | +| test.c:837:9:837:9 | n | 2.0 | +| test.c:839:9:839:9 | (int)... | 2.0 | +| test.c:839:9:839:9 | n | 2.0 | +| test.c:842:7:842:8 | ! ... | 1.0 | +| test.c:842:8:842:8 | n | 4.0 | +| test.c:843:9:843:9 | (int)... | 4.0 | +| test.c:843:9:843:9 | n | 4.0 | +| test.c:845:9:845:9 | (int)... | 4.0 | +| test.c:845:9:845:9 | n | 4.0 | +| test.c:848:10:848:10 | n | 13.0 | +| test.c:848:10:848:15 | ... != ... | 1.0 | +| test.c:848:15:848:15 | 0 | 1.0 | +| test.c:848:15:848:15 | (unsigned int)... | 1.0 | +| test.c:849:5:849:5 | n | 13.0 | +| test.c:849:5:849:7 | ... -- | 13.0 | +| test.c:852:7:852:7 | (int)... | 13.0 | +| test.c:852:7:852:7 | n | 13.0 | +| test.c:856:7:856:7 | (int)... | 1.0 | +| test.c:856:7:856:7 | n | 1.0 | +| test.c:856:7:856:11 | ... < ... | 1.0 | +| test.c:856:11:856:11 | 0 | 1.0 | +| test.c:859:7:859:7 | (int)... | 1.0 | +| test.c:859:7:859:7 | n | 1.0 | +| test.c:859:7:859:12 | ... == ... | 1.0 | +| test.c:859:12:859:12 | 0 | 1.0 | +| test.c:860:9:860:9 | (int)... | 1.0 | +| test.c:860:9:860:9 | n | 1.0 | +| test.c:862:9:862:9 | (int)... | 1.0 | +| test.c:862:9:862:9 | n | 1.0 | +| test.c:865:7:865:7 | n | 2.0 | +| test.c:866:9:866:9 | (int)... | 2.0 | +| test.c:866:9:866:9 | n | 2.0 | +| test.c:868:9:868:9 | (int)... | 2.0 | +| test.c:868:9:868:9 | n | 2.0 | +| test.c:871:10:871:10 | (int)... | 13.0 | +| test.c:871:10:871:10 | n | 12.0 | +| test.c:871:10:871:15 | ... != ... | 1.0 | +| test.c:871:15:871:15 | 0 | 1.0 | +| test.c:872:5:872:5 | n | 12.0 | +| test.c:872:5:872:7 | ... -- | 12.0 | +| test.c:875:7:875:7 | (int)... | 12.0 | +| test.c:875:7:875:7 | n | 12.0 | +| test.c:879:7:879:7 | (int)... | 1.0 | +| test.c:879:7:879:7 | n | 1.0 | +| test.c:879:7:879:12 | ... != ... | 1.0 | | test.c:879:12:879:12 | 0 | 1.0 | -| test.c:880:5:880:5 | n | 4.0 | -| test.c:880:5:880:14 | ... ? ... : ... | 16.0 | -| test.c:880:10:880:10 | (int)... | 4.0 | -| test.c:880:10:880:10 | n | 4.0 | -| test.c:880:14:880:14 | (int)... | 4.0 | -| test.c:880:14:880:14 | n | 4.0 | -| test.c:881:5:881:6 | ! ... | 1.0 | -| test.c:881:5:881:14 | ... ? ... : ... | 64.0 | -| test.c:881:6:881:6 | n | 8.0 | -| test.c:881:10:881:10 | (int)... | 8.0 | -| test.c:881:10:881:10 | n | 8.0 | -| test.c:881:14:881:14 | (int)... | 8.0 | -| test.c:881:14:881:14 | n | 8.0 | -| test.c:892:7:892:8 | (unsigned long)... | 1.0 | -| test.c:892:7:892:8 | ss | 1.0 | -| test.c:892:7:892:22 | ... < ... | 1.0 | -| test.c:892:12:892:22 | sizeof(int) | 1.0 | -| test.c:893:9:893:10 | (int)... | 1.0 | -| test.c:893:9:893:10 | ss | 1.0 | -| test.c:896:7:896:8 | (int)... | 2.0 | -| test.c:896:7:896:8 | ss | 2.0 | -| test.c:896:7:896:17 | ... < ... | 1.0 | -| test.c:896:12:896:17 | 32769 | 1.0 | -| test.c:897:9:897:10 | (int)... | 2.0 | -| test.c:897:9:897:10 | ss | 2.0 | -| test.c:900:7:900:15 | (int)... | 1.0 | -| test.c:900:7:900:15 | (short)... | 1.0 | -| test.c:900:7:900:20 | ... >= ... | 1.0 | -| test.c:900:14:900:15 | us | 1.0 | -| test.c:900:20:900:20 | 0 | 1.0 | -| test.c:901:9:901:10 | (int)... | 1.0 | -| test.c:901:9:901:10 | us | 1.0 | -| test.c:904:7:904:15 | (int)... | 2.0 | -| test.c:904:7:904:15 | (short)... | 2.0 | -| test.c:904:7:904:21 | ... >= ... | 1.0 | -| test.c:904:14:904:15 | us | 2.0 | -| test.c:904:20:904:21 | - ... | 1.0 | -| test.c:904:21:904:21 | 1 | 1.0 | -| test.c:905:9:905:10 | (int)... | 2.0 | -| test.c:905:9:905:10 | us | 2.0 | -| test.c:908:7:908:8 | (unsigned long)... | 3.0 | -| test.c:908:7:908:8 | ss | 3.0 | -| test.c:908:7:908:23 | ... >= ... | 1.0 | -| test.c:908:13:908:23 | sizeof(int) | 1.0 | -| test.c:909:9:909:10 | (int)... | 3.0 | -| test.c:909:9:909:10 | ss | 3.0 | -| test.c:912:7:912:8 | (int)... | 4.0 | -| test.c:912:7:912:8 | ss | 4.0 | -| test.c:912:7:912:12 | (unsigned long)... | 4.0 | -| test.c:912:7:912:12 | ... + ... | 4.0 | -| test.c:912:7:912:26 | ... < ... | 1.0 | -| test.c:912:12:912:12 | 1 | 1.0 | -| test.c:912:16:912:26 | sizeof(int) | 1.0 | -| test.c:913:9:913:10 | (int)... | 4.0 | -| test.c:913:9:913:10 | ss | 4.0 | -| test.c:919:8:919:8 | s | 1.0 | -| test.c:919:8:919:12 | ... = ... | 1.0 | -| test.c:919:12:919:12 | 0 | 1.0 | -| test.c:919:15:919:15 | s | 13.0 | -| test.c:919:15:919:20 | ... < ... | 1.0 | -| test.c:919:19:919:20 | 10 | 1.0 | -| test.c:919:23:919:23 | s | 13.0 | -| test.c:919:23:919:25 | ... ++ | 13.0 | -| test.c:920:18:920:18 | s | 13.0 | -| test.c:920:18:920:22 | ... + ... | 13.0 | -| test.c:920:22:920:22 | s | 13.0 | -| test.c:921:9:921:14 | result | 13.0 | -| test.c:926:10:926:11 | 0 | 1.0 | -| test.c:927:7:927:7 | i | 1.0 | -| test.c:927:7:927:11 | ... < ... | 1.0 | -| test.c:927:11:927:11 | 0 | 1.0 | -| test.c:928:9:928:9 | i | 1.0 | -| test.c:931:20:931:20 | 0 | 1.0 | -| test.c:931:20:931:20 | (unsigned int)... | 1.0 | -| test.c:932:7:932:7 | u | 1.0 | -| test.c:932:7:932:11 | ... < ... | 1.0 | -| test.c:932:11:932:11 | 0 | 1.0 | -| test.c:932:11:932:11 | (unsigned int)... | 1.0 | -| test.c:933:9:933:9 | (int)... | 1.0 | -| test.c:933:9:933:9 | u | 1.0 | -| test.c:938:12:938:12 | s | 1.0 | -| test.c:938:12:938:16 | ... % ... | 1.0 | -| test.c:938:16:938:16 | 5 | 1.0 | -| test.c:939:7:939:8 | s2 | 1.0 | -| test.c:944:7:944:7 | x | 1.0 | -| test.c:945:9:945:9 | y | 1.0 | -| test.c:945:9:945:14 | ... != ... | 1.0 | -| test.c:945:14:945:14 | 0 | 1.0 | -| test.c:946:12:946:12 | 0 | 1.0 | -| test.c:949:7:949:7 | y | 2.0 | -| test.c:958:7:958:7 | x | 1.0 | -| test.c:958:7:958:13 | ... >= ... | 1.0 | -| test.c:958:12:958:13 | 10 | 1.0 | -| test.c:963:7:963:7 | x | 13.0 | -| test.c:968:16:968:26 | 2147483647 | 1.0 | -| test.c:969:16:969:19 | 256 | 1.0 | -| test.c:970:7:970:13 | (...) | 1.0 | -| test.c:970:7:970:20 | ... <= ... | 1.0 | -| test.c:970:8:970:8 | x | 1.0 | -| test.c:970:8:970:12 | ... + ... | 1.0 | -| test.c:970:12:970:12 | y | 1.0 | -| test.c:970:18:970:20 | 512 | 1.0 | -| test.c:971:9:971:9 | x | 1.0 | -| test.c:972:9:972:9 | y | 1.0 | -| test.c:977:9:977:11 | 1 | 1.0 | -| test.c:978:9:978:11 | 2 | 1.0 | -| test.c:979:9:979:11 | 4 | 1.0 | -| test.c:980:9:980:11 | 8 | 1.0 | -| test.c:981:9:981:12 | 16 | 1.0 | -| test.c:985:7:985:7 | (int)... | 1.0 | -| test.c:985:7:985:7 | e | 1.0 | +| test.c:880:9:880:9 | (int)... | 1.0 | +| test.c:880:9:880:9 | n | 1.0 | +| test.c:880:9:880:14 | ... >= ... | 1.0 | +| test.c:880:14:880:14 | 0 | 1.0 | +| test.c:881:11:881:11 | (int)... | 1.0 | +| test.c:881:11:881:11 | n | 1.0 | +| test.c:885:7:885:7 | (int)... | 2.0 | +| test.c:885:7:885:7 | n | 2.0 | +| test.c:885:7:885:12 | ... >= ... | 1.0 | +| test.c:885:12:885:12 | 5 | 1.0 | +| test.c:886:9:886:9 | 2 | 1.0 | +| test.c:886:9:886:13 | ... * ... | 2.0 | +| test.c:886:9:886:18 | ... - ... | 2.0 | +| test.c:886:9:886:23 | ... == ... | 1.0 | +| test.c:886:13:886:13 | (int)... | 2.0 | +| test.c:886:13:886:13 | n | 2.0 | +| test.c:886:17:886:18 | 10 | 1.0 | +| test.c:886:23:886:23 | 0 | 1.0 | +| test.c:889:9:889:9 | (int)... | 2.0 | +| test.c:889:9:889:9 | n | 2.0 | +| test.c:892:7:892:7 | (int)... | 3.0 | +| test.c:892:7:892:7 | n | 3.0 | +| test.c:892:7:892:17 | ... != ... | 1.0 | +| test.c:892:7:892:32 | ... && ... | 1.0 | +| test.c:892:12:892:17 | - ... | 1.0 | +| test.c:892:13:892:17 | 32768 | 1.0 | +| test.c:892:22:892:22 | (int)... | 3.0 | +| test.c:892:22:892:22 | n | 3.0 | +| test.c:892:22:892:32 | ... != ... | 1.0 | +| test.c:892:27:892:32 | - ... | 1.0 | +| test.c:892:28:892:32 | 32767 | 1.0 | +| test.c:893:9:893:9 | (int)... | 3.0 | +| test.c:893:9:893:9 | n | 3.0 | +| test.c:896:7:896:7 | (int)... | 4.0 | +| test.c:896:7:896:7 | n | 4.0 | +| test.c:896:7:896:12 | ... >= ... | 1.0 | +| test.c:896:12:896:12 | 0 | 1.0 | +| test.c:897:5:897:5 | n | 4.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 16.0 | +| test.c:897:10:897:10 | (int)... | 4.0 | +| test.c:897:10:897:10 | n | 4.0 | +| test.c:897:14:897:14 | (int)... | 4.0 | +| test.c:897:14:897:14 | n | 4.0 | +| test.c:898:5:898:6 | ! ... | 1.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 64.0 | +| test.c:898:6:898:6 | n | 8.0 | +| test.c:898:10:898:10 | (int)... | 8.0 | +| test.c:898:10:898:10 | n | 8.0 | +| test.c:898:14:898:14 | (int)... | 8.0 | +| test.c:898:14:898:14 | n | 8.0 | +| test.c:909:7:909:8 | (unsigned long)... | 1.0 | +| test.c:909:7:909:8 | ss | 1.0 | +| test.c:909:7:909:22 | ... < ... | 1.0 | +| test.c:909:12:909:22 | sizeof(int) | 1.0 | +| test.c:910:9:910:10 | (int)... | 1.0 | +| test.c:910:9:910:10 | ss | 1.0 | +| test.c:913:7:913:8 | (int)... | 2.0 | +| test.c:913:7:913:8 | ss | 2.0 | +| test.c:913:7:913:17 | ... < ... | 1.0 | +| test.c:913:12:913:17 | 32769 | 1.0 | +| test.c:914:9:914:10 | (int)... | 2.0 | +| test.c:914:9:914:10 | ss | 2.0 | +| test.c:917:7:917:15 | (int)... | 1.0 | +| test.c:917:7:917:15 | (short)... | 1.0 | +| test.c:917:7:917:20 | ... >= ... | 1.0 | +| test.c:917:14:917:15 | us | 1.0 | +| test.c:917:20:917:20 | 0 | 1.0 | +| test.c:918:9:918:10 | (int)... | 1.0 | +| test.c:918:9:918:10 | us | 1.0 | +| test.c:921:7:921:15 | (int)... | 2.0 | +| test.c:921:7:921:15 | (short)... | 2.0 | +| test.c:921:7:921:21 | ... >= ... | 1.0 | +| test.c:921:14:921:15 | us | 2.0 | +| test.c:921:20:921:21 | - ... | 1.0 | +| test.c:921:21:921:21 | 1 | 1.0 | +| test.c:922:9:922:10 | (int)... | 2.0 | +| test.c:922:9:922:10 | us | 2.0 | +| test.c:925:7:925:8 | (unsigned long)... | 3.0 | +| test.c:925:7:925:8 | ss | 3.0 | +| test.c:925:7:925:23 | ... >= ... | 1.0 | +| test.c:925:13:925:23 | sizeof(int) | 1.0 | +| test.c:926:9:926:10 | (int)... | 3.0 | +| test.c:926:9:926:10 | ss | 3.0 | +| test.c:929:7:929:8 | (int)... | 4.0 | +| test.c:929:7:929:8 | ss | 4.0 | +| test.c:929:7:929:12 | (unsigned long)... | 4.0 | +| test.c:929:7:929:12 | ... + ... | 4.0 | +| test.c:929:7:929:26 | ... < ... | 1.0 | +| test.c:929:12:929:12 | 1 | 1.0 | +| test.c:929:16:929:26 | sizeof(int) | 1.0 | +| test.c:930:9:930:10 | (int)... | 4.0 | +| test.c:930:9:930:10 | ss | 4.0 | +| test.c:936:8:936:8 | s | 1.0 | +| test.c:936:8:936:12 | ... = ... | 1.0 | +| test.c:936:12:936:12 | 0 | 1.0 | +| test.c:936:15:936:15 | s | 13.0 | +| test.c:936:15:936:20 | ... < ... | 1.0 | +| test.c:936:19:936:20 | 10 | 1.0 | +| test.c:936:23:936:23 | s | 13.0 | +| test.c:936:23:936:25 | ... ++ | 13.0 | +| test.c:937:18:937:18 | s | 13.0 | +| test.c:937:18:937:22 | ... + ... | 13.0 | +| test.c:937:22:937:22 | s | 13.0 | +| test.c:938:9:938:14 | result | 13.0 | +| test.c:943:10:943:11 | 0 | 1.0 | +| test.c:944:7:944:7 | i | 1.0 | +| test.c:944:7:944:11 | ... < ... | 1.0 | +| test.c:944:11:944:11 | 0 | 1.0 | +| test.c:945:9:945:9 | i | 1.0 | +| test.c:948:20:948:20 | 0 | 1.0 | +| test.c:948:20:948:20 | (unsigned int)... | 1.0 | +| test.c:949:7:949:7 | u | 1.0 | +| test.c:949:7:949:11 | ... < ... | 1.0 | +| test.c:949:11:949:11 | 0 | 1.0 | +| test.c:949:11:949:11 | (unsigned int)... | 1.0 | +| test.c:950:9:950:9 | (int)... | 1.0 | +| test.c:950:9:950:9 | u | 1.0 | +| test.c:955:12:955:12 | s | 1.0 | +| test.c:955:12:955:16 | ... % ... | 1.0 | +| test.c:955:16:955:16 | 5 | 1.0 | +| test.c:956:7:956:8 | s2 | 1.0 | +| test.c:961:7:961:7 | x | 1.0 | +| test.c:962:9:962:9 | y | 1.0 | +| test.c:962:9:962:14 | ... != ... | 1.0 | +| test.c:962:14:962:14 | 0 | 1.0 | +| test.c:963:12:963:12 | 0 | 1.0 | +| test.c:966:7:966:7 | y | 2.0 | +| test.c:975:7:975:7 | x | 1.0 | +| test.c:975:7:975:13 | ... >= ... | 1.0 | +| test.c:975:12:975:13 | 10 | 1.0 | +| test.c:980:7:980:7 | x | 13.0 | +| test.c:985:16:985:26 | 2147483647 | 1.0 | +| test.c:986:16:986:19 | 256 | 1.0 | +| test.c:987:7:987:13 | (...) | 1.0 | +| test.c:987:7:987:20 | ... <= ... | 1.0 | +| test.c:987:8:987:8 | x | 1.0 | +| test.c:987:8:987:12 | ... + ... | 1.0 | +| test.c:987:12:987:12 | y | 1.0 | +| test.c:987:18:987:20 | 512 | 1.0 | +| test.c:988:9:988:9 | x | 1.0 | +| test.c:989:9:989:9 | y | 1.0 | +| test.c:994:9:994:11 | 1 | 1.0 | +| test.c:995:9:995:11 | 2 | 1.0 | +| test.c:996:9:996:11 | 4 | 1.0 | +| test.c:997:9:997:11 | 8 | 1.0 | +| test.c:998:9:998:12 | 16 | 1.0 | +| test.c:1002:7:1002:7 | (int)... | 1.0 | +| test.c:1002:7:1002:7 | e | 1.0 | | test.cpp:9:11:9:12 | - ... | 1.0 | | test.cpp:9:12:9:12 | 1 | 1.0 | | test.cpp:10:7:10:7 | (bool)... | 1.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected index 50b65d84bf32..8b30e12cd4f6 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryLower.expected @@ -77,77 +77,77 @@ | test.c:426:22:426:82 | ... ? ... : ... | 0.13204114 | 0.42186276 | 0.13204114 | | test.c:426:26:426:69 | ... ? ... : ... | 0.42186276 | 0.42186276 | 0.44996679 | | test.c:426:30:426:56 | ... ? ... : ... | 0.42186276 | 0.42186276 | 0.53843358 | -| test.c:468:4:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:468:5:470:49 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:471:6:553:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:472:8:490:41 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:475:10:479:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:475:31:475:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:477:13:479:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:484:12:489:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:485:12:485:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:487:15:489:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:491:6:510:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:494:8:498:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:494:29:494:77 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:496:11:498:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:499:6:499:54 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:503:10:507:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:503:31:503:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:505:13:507:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:508:9:510:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:512:10:531:43 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:515:12:520:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:516:12:516:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:518:15:520:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:525:14:530:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:526:14:526:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:528:17:530:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:532:9:553:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:535:14:540:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:536:14:536:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:538:17:540:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:541:12:541:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:545:12:550:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:546:12:546:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:548:15:550:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:551:11:553:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:554:9:556:51 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:557:9:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:558:14:577:47 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:561:16:566:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:562:16:562:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:564:19:566:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:571:18:576:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:572:18:572:66 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:574:21:576:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:578:12:599:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:581:14:586:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:582:14:582:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:584:17:586:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:587:12:587:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:591:16:596:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:592:16:592:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:594:19:596:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:597:15:599:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:601:12:620:45 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:604:14:609:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:605:14:605:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:607:17:609:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:614:16:619:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:615:16:615:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:617:19:619:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:621:11:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:624:16:629:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:625:16:625:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:627:19:629:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:630:14:630:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:634:14:639:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:635:14:635:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:637:17:639:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:640:13:642:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | -| test.c:668:20:668:36 | ... ? ... : ... | 0.0 | 0.0 | 100.0 | -| test.c:880:5:880:14 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | -| test.c:881:5:881:14 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:485:5:487:49 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:488:6:570:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:489:8:507:41 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:492:10:496:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:492:31:492:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:494:13:496:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:501:12:506:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:502:12:502:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:504:15:506:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:508:6:527:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:511:8:515:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:511:29:511:77 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:513:11:515:19 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:516:6:516:54 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:520:10:524:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:520:31:520:79 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:522:13:524:21 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:525:9:527:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:529:10:548:43 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:532:12:537:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:533:12:533:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:535:15:537:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:542:14:547:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:543:14:543:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:545:17:547:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:549:9:570:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:552:14:557:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:553:14:553:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:555:17:557:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:558:12:558:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:562:12:567:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:563:12:563:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:565:15:567:23 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:568:11:570:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:571:9:573:51 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:574:9:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:575:14:594:47 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:578:16:583:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:579:16:579:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:581:19:583:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:588:18:593:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:589:18:589:66 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:591:21:593:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:595:12:616:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:598:14:603:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:599:14:599:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:601:17:603:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:604:12:604:60 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:608:16:613:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:609:16:609:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:611:19:613:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:614:15:616:29 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:618:12:637:45 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:621:14:626:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:622:14:622:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:624:17:626:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:631:16:636:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:632:16:632:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:634:19:636:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:638:11:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:641:16:646:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:642:16:642:64 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:644:19:646:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:647:14:647:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:651:14:656:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:652:14:652:62 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:654:17:656:25 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:657:13:659:27 | ... ? ... : ... | 0.0 | 0.0 | 0.0 | +| test.c:685:20:685:36 | ... ? ... : ... | 0.0 | 0.0 | 100.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | | test.cpp:121:3:121:12 | ... ? ... : ... | 0.0 | 1.0 | 0.0 | | test.cpp:122:3:122:12 | ... ? ... : ... | 0.0 | 0.0 | 1.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected index 3b3a00df6b9c..90f786b6cef6 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/ternaryUpper.expected @@ -77,77 +77,77 @@ | test.c:426:22:426:82 | ... ? ... : ... | 0.53843358 | 0.53843358 | 0.13204114 | | test.c:426:26:426:69 | ... ? ... : ... | 0.53843358 | 0.53843358 | 0.44996679 | | test.c:426:30:426:56 | ... ? ... : ... | 0.53843358 | 0.42186276 | 0.53843358 | -| test.c:468:4:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:468:5:470:49 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:471:6:553:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:472:8:490:41 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:475:10:479:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:475:31:475:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:477:13:479:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:484:12:489:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:485:12:485:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:487:15:489:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:491:6:510:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:494:8:498:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:494:29:494:77 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:496:11:498:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:499:6:499:54 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:503:10:507:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:503:31:503:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:505:13:507:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:508:9:510:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:512:10:531:43 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:515:12:520:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:516:12:516:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:518:15:520:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:525:14:530:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:526:14:526:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:528:17:530:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:532:9:553:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:535:14:540:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:536:14:536:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:538:17:540:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:541:12:541:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:545:12:550:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:546:12:546:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:548:15:550:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:551:11:553:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:554:9:556:51 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:557:9:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:558:14:577:47 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:561:16:566:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:562:16:562:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:564:19:566:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:571:18:576:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:572:18:572:66 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:574:21:576:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:578:12:599:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:581:14:586:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:582:14:582:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:584:17:586:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:587:12:587:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:591:16:596:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:592:16:592:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:594:19:596:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:597:15:599:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:601:12:620:45 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:604:14:609:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:605:14:605:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:607:17:609:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:614:16:619:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:615:16:615:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:617:19:619:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:621:11:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:624:16:629:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:625:16:625:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:627:19:629:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:630:14:630:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:634:14:639:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:635:14:635:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:637:17:639:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:640:13:642:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | -| test.c:668:20:668:36 | ... ? ... : ... | 100.0 | 99.0 | 100.0 | -| test.c:880:5:880:14 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | -| test.c:881:5:881:14 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:485:5:487:49 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:488:6:570:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:489:8:507:41 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:492:10:496:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:492:31:492:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:494:13:496:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:501:12:506:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:502:12:502:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:504:15:506:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:508:6:527:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:511:8:515:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:511:29:511:77 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:513:11:515:19 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:516:6:516:54 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:520:10:524:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:520:31:520:79 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:522:13:524:21 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:525:9:527:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:529:10:548:43 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:532:12:537:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:533:12:533:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:535:15:537:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:542:14:547:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:543:14:543:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:545:17:547:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:549:9:570:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:552:14:557:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:553:14:553:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:555:17:557:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:558:12:558:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:562:12:567:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:563:12:563:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:565:15:567:23 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:568:11:570:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:571:9:573:51 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:574:9:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:575:14:594:47 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:578:16:583:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:579:16:579:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:581:19:583:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:588:18:593:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:589:18:589:66 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:591:21:593:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:595:12:616:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:598:14:603:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:599:14:599:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:601:17:603:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:604:12:604:60 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:608:16:613:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:609:16:609:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:611:19:613:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:614:15:616:29 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:618:12:637:45 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:621:14:626:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:622:14:622:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:624:17:626:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:631:16:636:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:632:16:632:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:634:19:636:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:638:11:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:641:16:646:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:642:16:642:64 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:644:19:646:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:647:14:647:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:651:14:656:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:652:14:652:62 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:654:17:656:25 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:657:13:659:27 | ... ? ... : ... | 4.294967295E9 | 4.294967295E9 | 4.294967295E9 | +| test.c:685:20:685:36 | ... ? ... : ... | 100.0 | 99.0 | 100.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | | test.cpp:121:3:121:12 | ... ? ... : ... | 32767.0 | 32767.0 | 0.0 | | test.cpp:122:3:122:12 | ... ? ... : ... | 32767.0 | 0.0 | 32767.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c index 71f28e8f605c..0f5ee451dff9 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/test.c @@ -446,6 +446,23 @@ int repeated_if_statements(unsigned int rhs) { return rhs; // rhs has 6 bounds } +int repeated_if_else_statements(unsigned int rhs) { + // Test how many bounds we estimate for repeated `if`-`else` statements that + // guard the same variable. + if (rhs < 10) { rhs << 1; } else { rhs << 2; } + if (rhs < 11) { rhs << 1; } else { rhs << 2; } + if (rhs < 12) { rhs << 1; } else { rhs << 2; } + if (rhs < 13) { rhs << 1; } else { rhs << 2; } + if (rhs < 14) { rhs << 1; } else { rhs << 2; } + if (rhs < 15) { rhs << 1; } else { rhs << 2; } + if (rhs < 16) { rhs << 1; } else { rhs << 2; } + if (rhs < 17) { rhs << 1; } else { rhs << 2; } + if (rhs < 18) { rhs << 1; } else { rhs << 2; } + if (rhs < 19) { rhs << 1; } else { rhs << 2; } + if (rhs < 20) { rhs << 1; } else { rhs << 2; } + return rhs; // rhs has 12 bounds +} + int ne_phi_nodes(int a, int b) { if (a == 17) { if (b == 23) { diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected index a4aee501a940..29b428bc6afd 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/upperBound.expected @@ -513,519 +513,553 @@ | test.c:445:7:445:9 | rhs | 4294967295 | | test.c:445:19:445:21 | rhs | 15 | | test.c:446:10:446:12 | rhs | 4294967295 | -| test.c:450:7:450:7 | a | 2147483647 | -| test.c:451:9:451:9 | b | 2147483647 | -| test.c:452:7:452:7 | a | 17 | -| test.c:452:12:452:12 | b | 23 | -| test.c:454:9:454:9 | a | 40 | -| test.c:455:7:455:7 | b | 2147483647 | -| test.c:460:11:460:11 | a | 2147483647 | -| test.c:460:15:460:15 | b | 2147483647 | -| test.c:461:10:461:10 | a | 2147483647 | -| test.c:461:14:461:14 | b | 2147483647 | -| test.c:468:10:468:11 | ip | 4294967295 | -| test.c:468:20:468:21 | ip | 4294967295 | -| test.c:468:40:468:41 | ip | 4294967295 | -| test.c:469:14:469:15 | ip | 4294967295 | -| test.c:470:14:470:15 | ip | 4294967295 | -| test.c:470:34:470:35 | ip | 4294967295 | -| test.c:471:11:471:12 | ip | 4294967295 | -| test.c:472:13:472:14 | ip | 4294967295 | -| test.c:473:14:473:15 | ip | 4294967295 | -| test.c:474:14:474:15 | ip | 4294967295 | -| test.c:475:15:475:16 | ip | 4294967295 | -| test.c:475:41:475:42 | ip | 4294967295 | -| test.c:475:52:475:53 | ip | 4294967295 | -| test.c:475:67:475:68 | ip | 4294967295 | -| test.c:475:78:475:79 | ip | 4294967295 | -| test.c:476:18:476:19 | ip | 4294967295 | -| test.c:477:23:477:24 | ip | 4294967295 | -| test.c:477:34:477:35 | ip | 4294967295 | -| test.c:478:25:478:26 | ip | 4294967295 | -| test.c:479:20:479:21 | ip | 4294967295 | -| test.c:480:11:480:12 | ip | 4294967295 | -| test.c:480:26:480:27 | ip | 4294967295 | -| test.c:481:16:481:17 | ip | 4294967295 | -| test.c:482:16:482:17 | ip | 4294967295 | -| test.c:483:16:483:17 | ip | 4294967295 | -| test.c:484:17:484:18 | ip | 4294967295 | -| test.c:485:22:485:23 | ip | 4294967295 | -| test.c:485:33:485:34 | ip | 4294967295 | -| test.c:485:48:485:49 | ip | 4294967295 | -| test.c:485:59:485:60 | ip | 4294967295 | -| test.c:486:20:486:21 | ip | 4294967295 | -| test.c:487:25:487:26 | ip | 4294967295 | -| test.c:487:36:487:37 | ip | 4294967295 | -| test.c:488:27:488:28 | ip | 4294967295 | -| test.c:489:22:489:23 | ip | 4294967295 | -| test.c:490:15:490:16 | ip | 4294967295 | -| test.c:490:30:490:31 | ip | 4294967295 | -| test.c:491:11:491:12 | ip | 4294967295 | -| test.c:492:12:492:13 | ip | 4294967295 | -| test.c:493:12:493:13 | ip | 4294967295 | -| test.c:494:13:494:14 | ip | 4294967295 | -| test.c:494:39:494:40 | ip | 4294967295 | -| test.c:494:50:494:51 | ip | 4294967295 | -| test.c:494:65:494:66 | ip | 4294967295 | -| test.c:494:76:494:77 | ip | 4294967295 | -| test.c:495:16:495:17 | ip | 4294967295 | -| test.c:496:21:496:22 | ip | 4294967295 | -| test.c:496:32:496:33 | ip | 4294967295 | -| test.c:497:23:497:24 | ip | 4294967295 | -| test.c:498:18:498:19 | ip | 4294967295 | -| test.c:499:11:499:12 | ip | 4294967295 | -| test.c:499:17:499:18 | ip | 4294967295 | -| test.c:499:37:499:38 | ip | 4294967295 | -| test.c:499:43:499:44 | ip | 4294967295 | -| test.c:500:14:500:15 | ip | 4294967295 | -| test.c:501:14:501:15 | ip | 4294967295 | -| test.c:502:14:502:15 | ip | 4294967295 | -| test.c:503:15:503:16 | ip | 4294967295 | -| test.c:503:41:503:42 | ip | 4294967295 | -| test.c:503:52:503:53 | ip | 4294967295 | -| test.c:503:67:503:68 | ip | 4294967295 | -| test.c:503:78:503:79 | ip | 4294967295 | -| test.c:504:18:504:19 | ip | 4294967295 | -| test.c:505:23:505:24 | ip | 4294967295 | -| test.c:505:34:505:35 | ip | 4294967295 | -| test.c:506:25:506:26 | ip | 4294967295 | -| test.c:507:20:507:21 | ip | 4294967295 | -| test.c:508:14:508:15 | ip | 4294967295 | -| test.c:508:20:508:21 | ip | 4294967295 | -| test.c:509:16:509:17 | ip | 4294967295 | +| test.c:452:7:452:9 | rhs | 4294967295 | +| test.c:452:19:452:21 | rhs | 9 | +| test.c:452:38:452:40 | rhs | 4294967295 | +| test.c:453:7:453:9 | rhs | 4294967295 | +| test.c:453:19:453:21 | rhs | 10 | +| test.c:453:38:453:40 | rhs | 4294967295 | +| test.c:454:7:454:9 | rhs | 4294967295 | +| test.c:454:19:454:21 | rhs | 11 | +| test.c:454:38:454:40 | rhs | 4294967295 | +| test.c:455:7:455:9 | rhs | 4294967295 | +| test.c:455:19:455:21 | rhs | 12 | +| test.c:455:38:455:40 | rhs | 4294967295 | +| test.c:456:7:456:9 | rhs | 4294967295 | +| test.c:456:19:456:21 | rhs | 13 | +| test.c:456:38:456:40 | rhs | 4294967295 | +| test.c:457:7:457:9 | rhs | 4294967295 | +| test.c:457:19:457:21 | rhs | 14 | +| test.c:457:38:457:40 | rhs | 4294967295 | +| test.c:458:7:458:9 | rhs | 4294967295 | +| test.c:458:19:458:21 | rhs | 15 | +| test.c:458:38:458:40 | rhs | 4294967295 | +| test.c:459:7:459:9 | rhs | 4294967295 | +| test.c:459:19:459:21 | rhs | 16 | +| test.c:459:38:459:40 | rhs | 4294967295 | +| test.c:460:7:460:9 | rhs | 4294967295 | +| test.c:460:19:460:21 | rhs | 17 | +| test.c:460:38:460:40 | rhs | 4294967295 | +| test.c:461:7:461:9 | rhs | 4294967295 | +| test.c:461:19:461:21 | rhs | 18 | +| test.c:461:38:461:40 | rhs | 4294967295 | +| test.c:462:7:462:9 | rhs | 4294967295 | +| test.c:462:19:462:21 | rhs | 19 | +| test.c:462:38:462:40 | rhs | 4294967295 | +| test.c:463:10:463:12 | rhs | 4294967295 | +| test.c:467:7:467:7 | a | 2147483647 | +| test.c:468:9:468:9 | b | 2147483647 | +| test.c:469:7:469:7 | a | 17 | +| test.c:469:12:469:12 | b | 23 | +| test.c:471:9:471:9 | a | 40 | +| test.c:472:7:472:7 | b | 2147483647 | +| test.c:477:11:477:11 | a | 2147483647 | +| test.c:477:15:477:15 | b | 2147483647 | +| test.c:478:10:478:10 | a | 2147483647 | +| test.c:478:14:478:14 | b | 2147483647 | +| test.c:485:10:485:11 | ip | 4294967295 | +| test.c:485:20:485:21 | ip | 4294967295 | +| test.c:485:40:485:41 | ip | 4294967295 | +| test.c:486:14:486:15 | ip | 4294967295 | +| test.c:487:14:487:15 | ip | 4294967295 | +| test.c:487:34:487:35 | ip | 4294967295 | +| test.c:488:11:488:12 | ip | 4294967295 | +| test.c:489:13:489:14 | ip | 4294967295 | +| test.c:490:14:490:15 | ip | 4294967295 | +| test.c:491:14:491:15 | ip | 4294967295 | +| test.c:492:15:492:16 | ip | 4294967295 | +| test.c:492:41:492:42 | ip | 4294967295 | +| test.c:492:52:492:53 | ip | 4294967295 | +| test.c:492:67:492:68 | ip | 4294967295 | +| test.c:492:78:492:79 | ip | 4294967295 | +| test.c:493:18:493:19 | ip | 4294967295 | +| test.c:494:23:494:24 | ip | 4294967295 | +| test.c:494:34:494:35 | ip | 4294967295 | +| test.c:495:25:495:26 | ip | 4294967295 | +| test.c:496:20:496:21 | ip | 4294967295 | +| test.c:497:11:497:12 | ip | 4294967295 | +| test.c:497:26:497:27 | ip | 4294967295 | +| test.c:498:16:498:17 | ip | 4294967295 | +| test.c:499:16:499:17 | ip | 4294967295 | +| test.c:500:16:500:17 | ip | 4294967295 | +| test.c:501:17:501:18 | ip | 4294967295 | +| test.c:502:22:502:23 | ip | 4294967295 | +| test.c:502:33:502:34 | ip | 4294967295 | +| test.c:502:48:502:49 | ip | 4294967295 | +| test.c:502:59:502:60 | ip | 4294967295 | +| test.c:503:20:503:21 | ip | 4294967295 | +| test.c:504:25:504:26 | ip | 4294967295 | +| test.c:504:36:504:37 | ip | 4294967295 | +| test.c:505:27:505:28 | ip | 4294967295 | +| test.c:506:22:506:23 | ip | 4294967295 | +| test.c:507:15:507:16 | ip | 4294967295 | +| test.c:507:30:507:31 | ip | 4294967295 | +| test.c:508:11:508:12 | ip | 4294967295 | +| test.c:509:12:509:13 | ip | 4294967295 | | test.c:510:12:510:13 | ip | 4294967295 | -| test.c:511:14:511:15 | ip | 4294967295 | -| test.c:512:15:512:16 | ip | 4294967295 | -| test.c:513:16:513:17 | ip | 4294967295 | -| test.c:514:16:514:17 | ip | 4294967295 | -| test.c:515:17:515:18 | ip | 4294967295 | -| test.c:516:22:516:23 | ip | 4294967295 | -| test.c:516:33:516:34 | ip | 4294967295 | -| test.c:516:48:516:49 | ip | 4294967295 | -| test.c:516:59:516:60 | ip | 4294967295 | -| test.c:517:20:517:21 | ip | 4294967295 | -| test.c:518:25:518:26 | ip | 4294967295 | -| test.c:518:36:518:37 | ip | 4294967295 | -| test.c:519:27:519:28 | ip | 4294967295 | -| test.c:520:22:520:23 | ip | 4294967295 | -| test.c:521:13:521:14 | ip | 4294967295 | -| test.c:521:28:521:29 | ip | 4294967295 | -| test.c:522:18:522:19 | ip | 4294967295 | -| test.c:523:18:523:19 | ip | 4294967295 | -| test.c:524:18:524:19 | ip | 4294967295 | -| test.c:525:19:525:20 | ip | 4294967295 | -| test.c:526:24:526:25 | ip | 4294967295 | -| test.c:526:35:526:36 | ip | 4294967295 | -| test.c:526:50:526:51 | ip | 4294967295 | -| test.c:526:61:526:62 | ip | 4294967295 | -| test.c:527:22:527:23 | ip | 4294967295 | -| test.c:528:27:528:28 | ip | 4294967295 | -| test.c:528:38:528:39 | ip | 4294967295 | -| test.c:529:29:529:30 | ip | 4294967295 | -| test.c:530:24:530:25 | ip | 4294967295 | -| test.c:531:17:531:18 | ip | 4294967295 | -| test.c:531:32:531:33 | ip | 4294967295 | -| test.c:532:14:532:15 | ip | 4294967295 | -| test.c:533:18:533:19 | ip | 4294967295 | -| test.c:534:18:534:19 | ip | 4294967295 | -| test.c:535:19:535:20 | ip | 4294967295 | -| test.c:536:24:536:25 | ip | 4294967295 | -| test.c:536:35:536:36 | ip | 4294967295 | -| test.c:536:50:536:51 | ip | 4294967295 | -| test.c:536:61:536:62 | ip | 4294967295 | +| test.c:511:13:511:14 | ip | 4294967295 | +| test.c:511:39:511:40 | ip | 4294967295 | +| test.c:511:50:511:51 | ip | 4294967295 | +| test.c:511:65:511:66 | ip | 4294967295 | +| test.c:511:76:511:77 | ip | 4294967295 | +| test.c:512:16:512:17 | ip | 4294967295 | +| test.c:513:21:513:22 | ip | 4294967295 | +| test.c:513:32:513:33 | ip | 4294967295 | +| test.c:514:23:514:24 | ip | 4294967295 | +| test.c:515:18:515:19 | ip | 4294967295 | +| test.c:516:11:516:12 | ip | 4294967295 | +| test.c:516:17:516:18 | ip | 4294967295 | +| test.c:516:37:516:38 | ip | 4294967295 | +| test.c:516:43:516:44 | ip | 4294967295 | +| test.c:517:14:517:15 | ip | 4294967295 | +| test.c:518:14:518:15 | ip | 4294967295 | +| test.c:519:14:519:15 | ip | 4294967295 | +| test.c:520:15:520:16 | ip | 4294967295 | +| test.c:520:41:520:42 | ip | 4294967295 | +| test.c:520:52:520:53 | ip | 4294967295 | +| test.c:520:67:520:68 | ip | 4294967295 | +| test.c:520:78:520:79 | ip | 4294967295 | +| test.c:521:18:521:19 | ip | 4294967295 | +| test.c:522:23:522:24 | ip | 4294967295 | +| test.c:522:34:522:35 | ip | 4294967295 | +| test.c:523:25:523:26 | ip | 4294967295 | +| test.c:524:20:524:21 | ip | 4294967295 | +| test.c:525:14:525:15 | ip | 4294967295 | +| test.c:525:20:525:21 | ip | 4294967295 | +| test.c:526:16:526:17 | ip | 4294967295 | +| test.c:527:12:527:13 | ip | 4294967295 | +| test.c:528:14:528:15 | ip | 4294967295 | +| test.c:529:15:529:16 | ip | 4294967295 | +| test.c:530:16:530:17 | ip | 4294967295 | +| test.c:531:16:531:17 | ip | 4294967295 | +| test.c:532:17:532:18 | ip | 4294967295 | +| test.c:533:22:533:23 | ip | 4294967295 | +| test.c:533:33:533:34 | ip | 4294967295 | +| test.c:533:48:533:49 | ip | 4294967295 | +| test.c:533:59:533:60 | ip | 4294967295 | +| test.c:534:20:534:21 | ip | 4294967295 | +| test.c:535:25:535:26 | ip | 4294967295 | +| test.c:535:36:535:37 | ip | 4294967295 | +| test.c:536:27:536:28 | ip | 4294967295 | | test.c:537:22:537:23 | ip | 4294967295 | -| test.c:538:27:538:28 | ip | 4294967295 | -| test.c:538:38:538:39 | ip | 4294967295 | -| test.c:539:29:539:30 | ip | 4294967295 | -| test.c:540:24:540:25 | ip | 4294967295 | -| test.c:541:17:541:18 | ip | 4294967295 | -| test.c:541:23:541:24 | ip | 4294967295 | -| test.c:541:43:541:44 | ip | 4294967295 | -| test.c:541:49:541:50 | ip | 4294967295 | -| test.c:542:16:542:17 | ip | 4294967295 | -| test.c:543:16:543:17 | ip | 4294967295 | -| test.c:544:16:544:17 | ip | 4294967295 | -| test.c:545:17:545:18 | ip | 4294967295 | -| test.c:546:22:546:23 | ip | 4294967295 | -| test.c:546:33:546:34 | ip | 4294967295 | -| test.c:546:48:546:49 | ip | 4294967295 | -| test.c:546:59:546:60 | ip | 4294967295 | -| test.c:547:20:547:21 | ip | 4294967295 | -| test.c:548:25:548:26 | ip | 4294967295 | -| test.c:548:36:548:37 | ip | 4294967295 | -| test.c:549:27:549:28 | ip | 4294967295 | -| test.c:550:22:550:23 | ip | 4294967295 | -| test.c:551:16:551:17 | ip | 4294967295 | -| test.c:551:22:551:23 | ip | 4294967295 | -| test.c:552:18:552:19 | ip | 4294967295 | -| test.c:553:14:553:15 | ip | 4294967295 | -| test.c:554:14:554:15 | ip | 4294967295 | -| test.c:554:24:554:25 | ip | 4294967295 | -| test.c:554:44:554:45 | ip | 4294967295 | -| test.c:555:16:555:17 | ip | 4294967295 | -| test.c:556:16:556:17 | ip | 4294967295 | -| test.c:556:36:556:37 | ip | 4294967295 | -| test.c:557:14:557:15 | ip | 4294967295 | -| test.c:558:19:558:20 | ip | 4294967295 | -| test.c:559:20:559:21 | ip | 4294967295 | -| test.c:560:20:560:21 | ip | 4294967295 | -| test.c:561:21:561:22 | ip | 4294967295 | -| test.c:562:26:562:27 | ip | 4294967295 | -| test.c:562:37:562:38 | ip | 4294967295 | -| test.c:562:52:562:53 | ip | 4294967295 | -| test.c:562:63:562:64 | ip | 4294967295 | -| test.c:563:24:563:25 | ip | 4294967295 | -| test.c:564:29:564:30 | ip | 4294967295 | -| test.c:564:40:564:41 | ip | 4294967295 | -| test.c:565:31:565:32 | ip | 4294967295 | -| test.c:566:26:566:27 | ip | 4294967295 | -| test.c:567:17:567:18 | ip | 4294967295 | -| test.c:567:32:567:33 | ip | 4294967295 | +| test.c:538:13:538:14 | ip | 4294967295 | +| test.c:538:28:538:29 | ip | 4294967295 | +| test.c:539:18:539:19 | ip | 4294967295 | +| test.c:540:18:540:19 | ip | 4294967295 | +| test.c:541:18:541:19 | ip | 4294967295 | +| test.c:542:19:542:20 | ip | 4294967295 | +| test.c:543:24:543:25 | ip | 4294967295 | +| test.c:543:35:543:36 | ip | 4294967295 | +| test.c:543:50:543:51 | ip | 4294967295 | +| test.c:543:61:543:62 | ip | 4294967295 | +| test.c:544:22:544:23 | ip | 4294967295 | +| test.c:545:27:545:28 | ip | 4294967295 | +| test.c:545:38:545:39 | ip | 4294967295 | +| test.c:546:29:546:30 | ip | 4294967295 | +| test.c:547:24:547:25 | ip | 4294967295 | +| test.c:548:17:548:18 | ip | 4294967295 | +| test.c:548:32:548:33 | ip | 4294967295 | +| test.c:549:14:549:15 | ip | 4294967295 | +| test.c:550:18:550:19 | ip | 4294967295 | +| test.c:551:18:551:19 | ip | 4294967295 | +| test.c:552:19:552:20 | ip | 4294967295 | +| test.c:553:24:553:25 | ip | 4294967295 | +| test.c:553:35:553:36 | ip | 4294967295 | +| test.c:553:50:553:51 | ip | 4294967295 | +| test.c:553:61:553:62 | ip | 4294967295 | +| test.c:554:22:554:23 | ip | 4294967295 | +| test.c:555:27:555:28 | ip | 4294967295 | +| test.c:555:38:555:39 | ip | 4294967295 | +| test.c:556:29:556:30 | ip | 4294967295 | +| test.c:557:24:557:25 | ip | 4294967295 | +| test.c:558:17:558:18 | ip | 4294967295 | +| test.c:558:23:558:24 | ip | 4294967295 | +| test.c:558:43:558:44 | ip | 4294967295 | +| test.c:558:49:558:50 | ip | 4294967295 | +| test.c:559:16:559:17 | ip | 4294967295 | +| test.c:560:16:560:17 | ip | 4294967295 | +| test.c:561:16:561:17 | ip | 4294967295 | +| test.c:562:17:562:18 | ip | 4294967295 | +| test.c:563:22:563:23 | ip | 4294967295 | +| test.c:563:33:563:34 | ip | 4294967295 | +| test.c:563:48:563:49 | ip | 4294967295 | +| test.c:563:59:563:60 | ip | 4294967295 | +| test.c:564:20:564:21 | ip | 4294967295 | +| test.c:565:25:565:26 | ip | 4294967295 | +| test.c:565:36:565:37 | ip | 4294967295 | +| test.c:566:27:566:28 | ip | 4294967295 | +| test.c:567:22:567:23 | ip | 4294967295 | +| test.c:568:16:568:17 | ip | 4294967295 | | test.c:568:22:568:23 | ip | 4294967295 | -| test.c:569:22:569:23 | ip | 4294967295 | -| test.c:570:22:570:23 | ip | 4294967295 | -| test.c:571:23:571:24 | ip | 4294967295 | -| test.c:572:28:572:29 | ip | 4294967295 | -| test.c:572:39:572:40 | ip | 4294967295 | -| test.c:572:54:572:55 | ip | 4294967295 | -| test.c:572:65:572:66 | ip | 4294967295 | -| test.c:573:26:573:27 | ip | 4294967295 | -| test.c:574:31:574:32 | ip | 4294967295 | -| test.c:574:42:574:43 | ip | 4294967295 | -| test.c:575:33:575:34 | ip | 4294967295 | -| test.c:576:28:576:29 | ip | 4294967295 | -| test.c:577:21:577:22 | ip | 4294967295 | -| test.c:577:36:577:37 | ip | 4294967295 | -| test.c:578:17:578:18 | ip | 4294967295 | -| test.c:579:18:579:19 | ip | 4294967295 | -| test.c:580:18:580:19 | ip | 4294967295 | -| test.c:581:19:581:20 | ip | 4294967295 | -| test.c:582:24:582:25 | ip | 4294967295 | -| test.c:582:35:582:36 | ip | 4294967295 | -| test.c:582:50:582:51 | ip | 4294967295 | -| test.c:582:61:582:62 | ip | 4294967295 | -| test.c:583:22:583:23 | ip | 4294967295 | -| test.c:584:27:584:28 | ip | 4294967295 | -| test.c:584:38:584:39 | ip | 4294967295 | -| test.c:585:29:585:30 | ip | 4294967295 | -| test.c:586:24:586:25 | ip | 4294967295 | -| test.c:587:17:587:18 | ip | 4294967295 | -| test.c:587:23:587:24 | ip | 4294967295 | -| test.c:587:43:587:44 | ip | 4294967295 | -| test.c:587:49:587:50 | ip | 4294967295 | -| test.c:588:20:588:21 | ip | 4294967295 | -| test.c:589:20:589:21 | ip | 4294967295 | -| test.c:590:20:590:21 | ip | 4294967295 | -| test.c:591:21:591:22 | ip | 4294967295 | -| test.c:592:26:592:27 | ip | 4294967295 | -| test.c:592:37:592:38 | ip | 4294967295 | -| test.c:592:52:592:53 | ip | 4294967295 | -| test.c:592:63:592:64 | ip | 4294967295 | -| test.c:593:24:593:25 | ip | 4294967295 | -| test.c:594:29:594:30 | ip | 4294967295 | -| test.c:594:40:594:41 | ip | 4294967295 | -| test.c:595:31:595:32 | ip | 4294967295 | -| test.c:596:26:596:27 | ip | 4294967295 | -| test.c:597:20:597:21 | ip | 4294967295 | -| test.c:597:26:597:27 | ip | 4294967295 | -| test.c:598:22:598:23 | ip | 4294967295 | -| test.c:599:18:599:19 | ip | 4294967295 | -| test.c:600:16:600:17 | ip | 4294967295 | -| test.c:601:17:601:18 | ip | 4294967295 | -| test.c:602:18:602:19 | ip | 4294967295 | -| test.c:603:18:603:19 | ip | 4294967295 | -| test.c:604:19:604:20 | ip | 4294967295 | -| test.c:605:24:605:25 | ip | 4294967295 | -| test.c:605:35:605:36 | ip | 4294967295 | -| test.c:605:50:605:51 | ip | 4294967295 | -| test.c:605:61:605:62 | ip | 4294967295 | -| test.c:606:22:606:23 | ip | 4294967295 | -| test.c:607:27:607:28 | ip | 4294967295 | -| test.c:607:38:607:39 | ip | 4294967295 | -| test.c:608:29:608:30 | ip | 4294967295 | -| test.c:609:24:609:25 | ip | 4294967295 | -| test.c:610:15:610:16 | ip | 4294967295 | -| test.c:610:30:610:31 | ip | 4294967295 | -| test.c:611:20:611:21 | ip | 4294967295 | -| test.c:612:20:612:21 | ip | 4294967295 | -| test.c:613:20:613:21 | ip | 4294967295 | -| test.c:614:21:614:22 | ip | 4294967295 | -| test.c:615:26:615:27 | ip | 4294967295 | -| test.c:615:37:615:38 | ip | 4294967295 | -| test.c:615:52:615:53 | ip | 4294967295 | -| test.c:615:63:615:64 | ip | 4294967295 | -| test.c:616:24:616:25 | ip | 4294967295 | -| test.c:617:29:617:30 | ip | 4294967295 | -| test.c:617:40:617:41 | ip | 4294967295 | -| test.c:618:31:618:32 | ip | 4294967295 | -| test.c:619:26:619:27 | ip | 4294967295 | -| test.c:620:19:620:20 | ip | 4294967295 | -| test.c:620:34:620:35 | ip | 4294967295 | -| test.c:621:16:621:17 | ip | 4294967295 | -| test.c:622:20:622:21 | ip | 4294967295 | -| test.c:623:20:623:21 | ip | 4294967295 | -| test.c:624:21:624:22 | ip | 4294967295 | -| test.c:625:26:625:27 | ip | 4294967295 | -| test.c:625:37:625:38 | ip | 4294967295 | -| test.c:625:52:625:53 | ip | 4294967295 | -| test.c:625:63:625:64 | ip | 4294967295 | +| test.c:569:18:569:19 | ip | 4294967295 | +| test.c:570:14:570:15 | ip | 4294967295 | +| test.c:571:14:571:15 | ip | 4294967295 | +| test.c:571:24:571:25 | ip | 4294967295 | +| test.c:571:44:571:45 | ip | 4294967295 | +| test.c:572:16:572:17 | ip | 4294967295 | +| test.c:573:16:573:17 | ip | 4294967295 | +| test.c:573:36:573:37 | ip | 4294967295 | +| test.c:574:14:574:15 | ip | 4294967295 | +| test.c:575:19:575:20 | ip | 4294967295 | +| test.c:576:20:576:21 | ip | 4294967295 | +| test.c:577:20:577:21 | ip | 4294967295 | +| test.c:578:21:578:22 | ip | 4294967295 | +| test.c:579:26:579:27 | ip | 4294967295 | +| test.c:579:37:579:38 | ip | 4294967295 | +| test.c:579:52:579:53 | ip | 4294967295 | +| test.c:579:63:579:64 | ip | 4294967295 | +| test.c:580:24:580:25 | ip | 4294967295 | +| test.c:581:29:581:30 | ip | 4294967295 | +| test.c:581:40:581:41 | ip | 4294967295 | +| test.c:582:31:582:32 | ip | 4294967295 | +| test.c:583:26:583:27 | ip | 4294967295 | +| test.c:584:17:584:18 | ip | 4294967295 | +| test.c:584:32:584:33 | ip | 4294967295 | +| test.c:585:22:585:23 | ip | 4294967295 | +| test.c:586:22:586:23 | ip | 4294967295 | +| test.c:587:22:587:23 | ip | 4294967295 | +| test.c:588:23:588:24 | ip | 4294967295 | +| test.c:589:28:589:29 | ip | 4294967295 | +| test.c:589:39:589:40 | ip | 4294967295 | +| test.c:589:54:589:55 | ip | 4294967295 | +| test.c:589:65:589:66 | ip | 4294967295 | +| test.c:590:26:590:27 | ip | 4294967295 | +| test.c:591:31:591:32 | ip | 4294967295 | +| test.c:591:42:591:43 | ip | 4294967295 | +| test.c:592:33:592:34 | ip | 4294967295 | +| test.c:593:28:593:29 | ip | 4294967295 | +| test.c:594:21:594:22 | ip | 4294967295 | +| test.c:594:36:594:37 | ip | 4294967295 | +| test.c:595:17:595:18 | ip | 4294967295 | +| test.c:596:18:596:19 | ip | 4294967295 | +| test.c:597:18:597:19 | ip | 4294967295 | +| test.c:598:19:598:20 | ip | 4294967295 | +| test.c:599:24:599:25 | ip | 4294967295 | +| test.c:599:35:599:36 | ip | 4294967295 | +| test.c:599:50:599:51 | ip | 4294967295 | +| test.c:599:61:599:62 | ip | 4294967295 | +| test.c:600:22:600:23 | ip | 4294967295 | +| test.c:601:27:601:28 | ip | 4294967295 | +| test.c:601:38:601:39 | ip | 4294967295 | +| test.c:602:29:602:30 | ip | 4294967295 | +| test.c:603:24:603:25 | ip | 4294967295 | +| test.c:604:17:604:18 | ip | 4294967295 | +| test.c:604:23:604:24 | ip | 4294967295 | +| test.c:604:43:604:44 | ip | 4294967295 | +| test.c:604:49:604:50 | ip | 4294967295 | +| test.c:605:20:605:21 | ip | 4294967295 | +| test.c:606:20:606:21 | ip | 4294967295 | +| test.c:607:20:607:21 | ip | 4294967295 | +| test.c:608:21:608:22 | ip | 4294967295 | +| test.c:609:26:609:27 | ip | 4294967295 | +| test.c:609:37:609:38 | ip | 4294967295 | +| test.c:609:52:609:53 | ip | 4294967295 | +| test.c:609:63:609:64 | ip | 4294967295 | +| test.c:610:24:610:25 | ip | 4294967295 | +| test.c:611:29:611:30 | ip | 4294967295 | +| test.c:611:40:611:41 | ip | 4294967295 | +| test.c:612:31:612:32 | ip | 4294967295 | +| test.c:613:26:613:27 | ip | 4294967295 | +| test.c:614:20:614:21 | ip | 4294967295 | +| test.c:614:26:614:27 | ip | 4294967295 | +| test.c:615:22:615:23 | ip | 4294967295 | +| test.c:616:18:616:19 | ip | 4294967295 | +| test.c:617:16:617:17 | ip | 4294967295 | +| test.c:618:17:618:18 | ip | 4294967295 | +| test.c:619:18:619:19 | ip | 4294967295 | +| test.c:620:18:620:19 | ip | 4294967295 | +| test.c:621:19:621:20 | ip | 4294967295 | +| test.c:622:24:622:25 | ip | 4294967295 | +| test.c:622:35:622:36 | ip | 4294967295 | +| test.c:622:50:622:51 | ip | 4294967295 | +| test.c:622:61:622:62 | ip | 4294967295 | +| test.c:623:22:623:23 | ip | 4294967295 | +| test.c:624:27:624:28 | ip | 4294967295 | +| test.c:624:38:624:39 | ip | 4294967295 | +| test.c:625:29:625:30 | ip | 4294967295 | | test.c:626:24:626:25 | ip | 4294967295 | -| test.c:627:29:627:30 | ip | 4294967295 | -| test.c:627:40:627:41 | ip | 4294967295 | -| test.c:628:31:628:32 | ip | 4294967295 | -| test.c:629:26:629:27 | ip | 4294967295 | -| test.c:630:19:630:20 | ip | 4294967295 | -| test.c:630:25:630:26 | ip | 4294967295 | -| test.c:630:45:630:46 | ip | 4294967295 | -| test.c:630:51:630:52 | ip | 4294967295 | -| test.c:631:18:631:19 | ip | 4294967295 | -| test.c:632:18:632:19 | ip | 4294967295 | -| test.c:633:18:633:19 | ip | 4294967295 | -| test.c:634:19:634:20 | ip | 4294967295 | -| test.c:635:24:635:25 | ip | 4294967295 | -| test.c:635:35:635:36 | ip | 4294967295 | -| test.c:635:50:635:51 | ip | 4294967295 | -| test.c:635:61:635:62 | ip | 4294967295 | -| test.c:636:22:636:23 | ip | 4294967295 | -| test.c:637:27:637:28 | ip | 4294967295 | -| test.c:637:38:637:39 | ip | 4294967295 | -| test.c:638:29:638:30 | ip | 4294967295 | -| test.c:639:24:639:25 | ip | 4294967295 | -| test.c:640:18:640:19 | ip | 4294967295 | -| test.c:640:24:640:25 | ip | 4294967295 | -| test.c:641:20:641:21 | ip | 4294967295 | -| test.c:642:16:642:17 | ip | 4294967295 | -| test.c:643:10:643:23 | special_number | 4294967295 | -| test.c:651:7:651:8 | c1 | 2147483647 | -| test.c:651:13:651:13 | x | 0 | -| test.c:652:7:652:8 | c2 | 2147483647 | -| test.c:652:13:652:13 | x | 748596 | -| test.c:653:7:653:8 | c3 | 2147483647 | -| test.c:653:13:653:13 | x | 85400991 | -| test.c:654:7:654:8 | c4 | 2147483647 | -| test.c:654:13:654:13 | x | 89076886 | -| test.c:655:7:655:8 | c5 | 2147483647 | -| test.c:655:13:655:13 | x | 89175520 | -| test.c:656:7:656:8 | c1 | 2147483647 | -| test.c:656:13:656:14 | c2 | 2147483647 | -| test.c:656:19:656:19 | x | 97010505 | -| test.c:657:7:657:8 | c1 | 2147483647 | -| test.c:657:13:657:14 | c3 | 2147483647 | -| test.c:657:19:657:19 | x | 1035467903 | -| test.c:658:7:658:8 | c1 | 2147483647 | -| test.c:658:13:658:14 | c4 | 2147483647 | -| test.c:658:19:658:19 | x | 1109363551 | -| test.c:659:7:659:8 | c1 | 2147483647 | -| test.c:659:13:659:14 | c5 | 2147483647 | -| test.c:659:19:659:19 | x | 1121708983 | -| test.c:660:7:660:8 | c2 | 2147483647 | -| test.c:660:13:660:14 | c3 | 2147483647 | -| test.c:660:19:660:19 | x | 1121747830 | -| test.c:662:11:662:11 | x | 2147483647 | -| test.c:662:15:662:15 | x | 2147483647 | -| test.c:662:19:662:19 | x | 2147483647 | -| test.c:662:23:662:23 | x | 2147483647 | -| test.c:662:27:662:27 | x | 2147483647 | -| test.c:662:31:662:31 | x | 2147483647 | -| test.c:662:35:662:35 | x | 2147483647 | -| test.c:662:39:662:39 | x | 2147483647 | -| test.c:662:43:662:43 | x | 2147483647 | -| test.c:662:47:662:47 | x | 2147483647 | -| test.c:662:51:662:51 | x | 2147483647 | -| test.c:662:55:662:55 | x | 2147483647 | -| test.c:663:10:663:10 | y | 2147483647 | -| test.c:668:20:668:20 | x | 4294967295 | -| test.c:668:30:668:30 | x | 99 | -| test.c:671:3:671:4 | y1 | 4294967295 | -| test.c:671:11:671:11 | y | 100 | -| test.c:671:14:671:14 | y | 101 | -| test.c:672:3:672:4 | y2 | 4294967295 | -| test.c:672:9:672:9 | y | 101 | -| test.c:672:14:672:14 | y | 102 | -| test.c:672:22:672:22 | y | 105 | -| test.c:673:10:673:11 | y1 | 101 | -| test.c:673:15:673:16 | y2 | 105 | -| test.c:681:3:681:3 | i | 2147483647 | -| test.c:682:7:682:7 | i | 10 | -| test.c:684:3:684:3 | i | 2147483647 | -| test.c:685:3:685:3 | i | 10 | -| test.c:686:7:686:7 | i | 20 | -| test.c:688:3:688:3 | i | 2147483647 | -| test.c:689:3:689:3 | i | 40 | -| test.c:690:7:690:7 | i | 30 | -| test.c:692:3:692:3 | i | 2147483647 | -| test.c:692:7:692:7 | j | 2147483647 | -| test.c:693:7:693:7 | i | 40 | -| test.c:695:3:695:3 | i | 2147483647 | -| test.c:695:8:695:8 | j | 40 | -| test.c:696:7:696:7 | i | 50 | +| test.c:627:15:627:16 | ip | 4294967295 | +| test.c:627:30:627:31 | ip | 4294967295 | +| test.c:628:20:628:21 | ip | 4294967295 | +| test.c:629:20:629:21 | ip | 4294967295 | +| test.c:630:20:630:21 | ip | 4294967295 | +| test.c:631:21:631:22 | ip | 4294967295 | +| test.c:632:26:632:27 | ip | 4294967295 | +| test.c:632:37:632:38 | ip | 4294967295 | +| test.c:632:52:632:53 | ip | 4294967295 | +| test.c:632:63:632:64 | ip | 4294967295 | +| test.c:633:24:633:25 | ip | 4294967295 | +| test.c:634:29:634:30 | ip | 4294967295 | +| test.c:634:40:634:41 | ip | 4294967295 | +| test.c:635:31:635:32 | ip | 4294967295 | +| test.c:636:26:636:27 | ip | 4294967295 | +| test.c:637:19:637:20 | ip | 4294967295 | +| test.c:637:34:637:35 | ip | 4294967295 | +| test.c:638:16:638:17 | ip | 4294967295 | +| test.c:639:20:639:21 | ip | 4294967295 | +| test.c:640:20:640:21 | ip | 4294967295 | +| test.c:641:21:641:22 | ip | 4294967295 | +| test.c:642:26:642:27 | ip | 4294967295 | +| test.c:642:37:642:38 | ip | 4294967295 | +| test.c:642:52:642:53 | ip | 4294967295 | +| test.c:642:63:642:64 | ip | 4294967295 | +| test.c:643:24:643:25 | ip | 4294967295 | +| test.c:644:29:644:30 | ip | 4294967295 | +| test.c:644:40:644:41 | ip | 4294967295 | +| test.c:645:31:645:32 | ip | 4294967295 | +| test.c:646:26:646:27 | ip | 4294967295 | +| test.c:647:19:647:20 | ip | 4294967295 | +| test.c:647:25:647:26 | ip | 4294967295 | +| test.c:647:45:647:46 | ip | 4294967295 | +| test.c:647:51:647:52 | ip | 4294967295 | +| test.c:648:18:648:19 | ip | 4294967295 | +| test.c:649:18:649:19 | ip | 4294967295 | +| test.c:650:18:650:19 | ip | 4294967295 | +| test.c:651:19:651:20 | ip | 4294967295 | +| test.c:652:24:652:25 | ip | 4294967295 | +| test.c:652:35:652:36 | ip | 4294967295 | +| test.c:652:50:652:51 | ip | 4294967295 | +| test.c:652:61:652:62 | ip | 4294967295 | +| test.c:653:22:653:23 | ip | 4294967295 | +| test.c:654:27:654:28 | ip | 4294967295 | +| test.c:654:38:654:39 | ip | 4294967295 | +| test.c:655:29:655:30 | ip | 4294967295 | +| test.c:656:24:656:25 | ip | 4294967295 | +| test.c:657:18:657:19 | ip | 4294967295 | +| test.c:657:24:657:25 | ip | 4294967295 | +| test.c:658:20:658:21 | ip | 4294967295 | +| test.c:659:16:659:17 | ip | 4294967295 | +| test.c:660:10:660:23 | special_number | 4294967295 | +| test.c:668:7:668:8 | c1 | 2147483647 | +| test.c:668:13:668:13 | x | 0 | +| test.c:669:7:669:8 | c2 | 2147483647 | +| test.c:669:13:669:13 | x | 748596 | +| test.c:670:7:670:8 | c3 | 2147483647 | +| test.c:670:13:670:13 | x | 85400991 | +| test.c:671:7:671:8 | c4 | 2147483647 | +| test.c:671:13:671:13 | x | 89076886 | +| test.c:672:7:672:8 | c5 | 2147483647 | +| test.c:672:13:672:13 | x | 89175520 | +| test.c:673:7:673:8 | c1 | 2147483647 | +| test.c:673:13:673:14 | c2 | 2147483647 | +| test.c:673:19:673:19 | x | 97010505 | +| test.c:674:7:674:8 | c1 | 2147483647 | +| test.c:674:13:674:14 | c3 | 2147483647 | +| test.c:674:19:674:19 | x | 1035467903 | +| test.c:675:7:675:8 | c1 | 2147483647 | +| test.c:675:13:675:14 | c4 | 2147483647 | +| test.c:675:19:675:19 | x | 1109363551 | +| test.c:676:7:676:8 | c1 | 2147483647 | +| test.c:676:13:676:14 | c5 | 2147483647 | +| test.c:676:19:676:19 | x | 1121708983 | +| test.c:677:7:677:8 | c2 | 2147483647 | +| test.c:677:13:677:14 | c3 | 2147483647 | +| test.c:677:19:677:19 | x | 1121747830 | +| test.c:679:11:679:11 | x | 2147483647 | +| test.c:679:15:679:15 | x | 2147483647 | +| test.c:679:19:679:19 | x | 2147483647 | +| test.c:679:23:679:23 | x | 2147483647 | +| test.c:679:27:679:27 | x | 2147483647 | +| test.c:679:31:679:31 | x | 2147483647 | +| test.c:679:35:679:35 | x | 2147483647 | +| test.c:679:39:679:39 | x | 2147483647 | +| test.c:679:43:679:43 | x | 2147483647 | +| test.c:679:47:679:47 | x | 2147483647 | +| test.c:679:51:679:51 | x | 2147483647 | +| test.c:679:55:679:55 | x | 2147483647 | +| test.c:680:10:680:10 | y | 2147483647 | +| test.c:685:20:685:20 | x | 4294967295 | +| test.c:685:30:685:30 | x | 99 | +| test.c:688:3:688:4 | y1 | 4294967295 | +| test.c:688:11:688:11 | y | 100 | +| test.c:688:14:688:14 | y | 101 | +| test.c:689:3:689:4 | y2 | 4294967295 | +| test.c:689:9:689:9 | y | 101 | +| test.c:689:14:689:14 | y | 102 | +| test.c:689:22:689:22 | y | 105 | +| test.c:690:10:690:11 | y1 | 101 | +| test.c:690:15:690:16 | y2 | 105 | | test.c:698:3:698:3 | i | 2147483647 | -| test.c:698:13:698:13 | j | 50 | -| test.c:699:7:699:7 | i | 60 | -| test.c:706:12:706:12 | a | 4294967295 | -| test.c:706:17:706:17 | a | 4294967295 | -| test.c:706:33:706:33 | b | 4294967295 | -| test.c:706:38:706:38 | b | 4294967295 | -| test.c:707:13:707:13 | a | 11 | -| test.c:707:15:707:15 | b | 23 | -| test.c:708:5:708:9 | total | 0 | -| test.c:708:14:708:14 | r | 253 | -| test.c:710:12:710:12 | a | 4294967295 | -| test.c:710:17:710:17 | a | 4294967295 | -| test.c:710:33:710:33 | b | 4294967295 | -| test.c:710:38:710:38 | b | 4294967295 | -| test.c:711:13:711:13 | a | 11 | -| test.c:711:15:711:15 | b | 23 | -| test.c:712:5:712:9 | total | 253 | -| test.c:712:14:712:14 | r | 253 | -| test.c:714:12:714:12 | a | 4294967295 | -| test.c:714:17:714:17 | a | 4294967295 | -| test.c:714:34:714:34 | b | 4294967295 | -| test.c:714:39:714:39 | b | 4294967295 | -| test.c:715:13:715:13 | a | 11 | -| test.c:715:15:715:15 | b | 23 | -| test.c:716:5:716:9 | total | 506 | -| test.c:716:14:716:14 | r | 253 | -| test.c:719:10:719:14 | total | 759 | -| test.c:725:12:725:12 | b | 4294967295 | -| test.c:725:17:725:17 | b | 4294967295 | -| test.c:726:16:726:16 | b | 23 | -| test.c:727:5:727:9 | total | 0 | -| test.c:727:14:727:14 | r | 253 | -| test.c:729:12:729:12 | b | 4294967295 | -| test.c:729:17:729:17 | b | 4294967295 | -| test.c:730:16:730:16 | b | 23 | -| test.c:731:5:731:9 | total | 253 | -| test.c:731:14:731:14 | r | 253 | -| test.c:733:13:733:13 | b | 4294967295 | -| test.c:733:18:733:18 | b | 4294967295 | -| test.c:734:16:734:16 | b | 23 | -| test.c:735:5:735:9 | total | 506 | -| test.c:735:14:735:14 | r | 253 | -| test.c:738:10:738:14 | total | 759 | -| test.c:743:3:743:3 | x | 18446744073709551616 | -| test.c:743:7:743:7 | y | 18446744073709551616 | -| test.c:744:3:744:4 | xy | 18446744073709551616 | -| test.c:744:8:744:8 | x | 1000000003 | -| test.c:744:12:744:12 | y | 1000000003 | -| test.c:745:10:745:11 | xy | 1000000006000000000 | -| test.c:750:3:750:3 | x | 18446744073709551616 | -| test.c:751:3:751:3 | y | 18446744073709551616 | -| test.c:752:3:752:4 | xy | 18446744073709551616 | -| test.c:752:8:752:8 | x | 274177 | -| test.c:752:12:752:12 | y | 67280421310721 | -| test.c:753:10:753:11 | xy | 18446744073709551616 | -| test.c:757:7:757:8 | ui | 4294967295 | -| test.c:758:43:758:44 | ui | 4294967295 | -| test.c:758:48:758:49 | ui | 4294967295 | -| test.c:759:12:759:17 | result | 18446744065119617024 | -| test.c:761:7:761:8 | ul | 18446744073709551616 | -| test.c:762:28:762:29 | ul | 18446744073709551616 | -| test.c:762:33:762:34 | ul | 18446744073709551616 | -| test.c:763:12:763:17 | result | 18446744073709551616 | -| test.c:769:7:769:8 | ui | 4294967295 | -| test.c:769:19:769:20 | ui | 10 | -| test.c:770:5:770:6 | ui | 10 | -| test.c:770:11:770:12 | ui | 10 | -| test.c:771:12:771:13 | ui | 100 | -| test.c:775:3:775:9 | uiconst | 10 | -| test.c:778:3:778:9 | ulconst | 10 | -| test.c:779:10:779:16 | uiconst | 40 | -| test.c:779:20:779:26 | ulconst | 40 | -| test.c:783:7:783:7 | i | 2147483647 | -| test.c:783:18:783:18 | i | 2147483647 | -| test.c:784:5:784:5 | i | 2147483647 | -| test.c:784:13:784:13 | i | 2 | -| test.c:785:9:785:9 | i | 10 | -| test.c:787:5:787:5 | i | 2147483647 | -| test.c:787:9:787:9 | i | 10 | -| test.c:788:9:788:9 | i | 15 | -| test.c:790:5:790:5 | i | 15 | -| test.c:791:9:791:9 | i | 105 | -| test.c:793:5:793:5 | i | 105 | -| test.c:794:9:794:9 | i | 2310 | -| test.c:796:7:796:7 | i | 2147483647 | -| test.c:797:5:797:5 | i | 2147483647 | -| test.c:797:9:797:9 | i | -1 | -| test.c:798:9:798:9 | i | 1 | -| test.c:800:3:800:3 | i | 2147483647 | +| test.c:699:7:699:7 | i | 10 | +| test.c:701:3:701:3 | i | 2147483647 | +| test.c:702:3:702:3 | i | 10 | +| test.c:703:7:703:7 | i | 20 | +| test.c:705:3:705:3 | i | 2147483647 | +| test.c:706:3:706:3 | i | 40 | +| test.c:707:7:707:7 | i | 30 | +| test.c:709:3:709:3 | i | 2147483647 | +| test.c:709:7:709:7 | j | 2147483647 | +| test.c:710:7:710:7 | i | 40 | +| test.c:712:3:712:3 | i | 2147483647 | +| test.c:712:8:712:8 | j | 40 | +| test.c:713:7:713:7 | i | 50 | +| test.c:715:3:715:3 | i | 2147483647 | +| test.c:715:13:715:13 | j | 50 | +| test.c:716:7:716:7 | i | 60 | +| test.c:723:12:723:12 | a | 4294967295 | +| test.c:723:17:723:17 | a | 4294967295 | +| test.c:723:33:723:33 | b | 4294967295 | +| test.c:723:38:723:38 | b | 4294967295 | +| test.c:724:13:724:13 | a | 11 | +| test.c:724:15:724:15 | b | 23 | +| test.c:725:5:725:9 | total | 0 | +| test.c:725:14:725:14 | r | 253 | +| test.c:727:12:727:12 | a | 4294967295 | +| test.c:727:17:727:17 | a | 4294967295 | +| test.c:727:33:727:33 | b | 4294967295 | +| test.c:727:38:727:38 | b | 4294967295 | +| test.c:728:13:728:13 | a | 11 | +| test.c:728:15:728:15 | b | 23 | +| test.c:729:5:729:9 | total | 253 | +| test.c:729:14:729:14 | r | 253 | +| test.c:731:12:731:12 | a | 4294967295 | +| test.c:731:17:731:17 | a | 4294967295 | +| test.c:731:34:731:34 | b | 4294967295 | +| test.c:731:39:731:39 | b | 4294967295 | +| test.c:732:13:732:13 | a | 11 | +| test.c:732:15:732:15 | b | 23 | +| test.c:733:5:733:9 | total | 506 | +| test.c:733:14:733:14 | r | 253 | +| test.c:736:10:736:14 | total | 759 | +| test.c:742:12:742:12 | b | 4294967295 | +| test.c:742:17:742:17 | b | 4294967295 | +| test.c:743:16:743:16 | b | 23 | +| test.c:744:5:744:9 | total | 0 | +| test.c:744:14:744:14 | r | 253 | +| test.c:746:12:746:12 | b | 4294967295 | +| test.c:746:17:746:17 | b | 4294967295 | +| test.c:747:16:747:16 | b | 23 | +| test.c:748:5:748:9 | total | 253 | +| test.c:748:14:748:14 | r | 253 | +| test.c:750:13:750:13 | b | 4294967295 | +| test.c:750:18:750:18 | b | 4294967295 | +| test.c:751:16:751:16 | b | 23 | +| test.c:752:5:752:9 | total | 506 | +| test.c:752:14:752:14 | r | 253 | +| test.c:755:10:755:14 | total | 759 | +| test.c:760:3:760:3 | x | 18446744073709551616 | +| test.c:760:7:760:7 | y | 18446744073709551616 | +| test.c:761:3:761:4 | xy | 18446744073709551616 | +| test.c:761:8:761:8 | x | 1000000003 | +| test.c:761:12:761:12 | y | 1000000003 | +| test.c:762:10:762:11 | xy | 1000000006000000000 | +| test.c:767:3:767:3 | x | 18446744073709551616 | +| test.c:768:3:768:3 | y | 18446744073709551616 | +| test.c:769:3:769:4 | xy | 18446744073709551616 | +| test.c:769:8:769:8 | x | 274177 | +| test.c:769:12:769:12 | y | 67280421310721 | +| test.c:770:10:770:11 | xy | 18446744073709551616 | +| test.c:774:7:774:8 | ui | 4294967295 | +| test.c:775:43:775:44 | ui | 4294967295 | +| test.c:775:48:775:49 | ui | 4294967295 | +| test.c:776:12:776:17 | result | 18446744065119617024 | +| test.c:778:7:778:8 | ul | 18446744073709551616 | +| test.c:779:28:779:29 | ul | 18446744073709551616 | +| test.c:779:33:779:34 | ul | 18446744073709551616 | +| test.c:780:12:780:17 | result | 18446744073709551616 | +| test.c:786:7:786:8 | ui | 4294967295 | +| test.c:786:19:786:20 | ui | 10 | +| test.c:787:5:787:6 | ui | 10 | +| test.c:787:11:787:12 | ui | 10 | +| test.c:788:12:788:13 | ui | 100 | +| test.c:792:3:792:9 | uiconst | 10 | +| test.c:795:3:795:9 | ulconst | 10 | +| test.c:796:10:796:16 | uiconst | 40 | +| test.c:796:20:796:26 | ulconst | 40 | | test.c:800:7:800:7 | i | 2147483647 | -| test.c:801:10:801:10 | i | 2147483647 | -| test.c:804:3:804:3 | i | 2147483647 | -| test.c:804:10:804:11 | sc | 1 | -| test.c:806:7:806:7 | i | 127 | -| test.c:813:7:813:7 | n | 4294967295 | -| test.c:815:7:815:7 | n | 4294967295 | -| test.c:816:9:816:9 | n | 4294967295 | -| test.c:819:7:819:7 | n | 4294967295 | -| test.c:820:9:820:9 | n | 4294967295 | -| test.c:822:9:822:9 | n | 0 | -| test.c:825:8:825:8 | n | 4294967295 | -| test.c:826:9:826:9 | n | 0 | -| test.c:828:9:828:9 | n | 4294967295 | -| test.c:831:10:831:10 | n | 4294967295 | -| test.c:832:5:832:5 | n | 4294967295 | -| test.c:835:7:835:7 | n | 0 | -| test.c:839:7:839:7 | n | 32767 | -| test.c:842:7:842:7 | n | 32767 | +| test.c:800:18:800:18 | i | 2147483647 | +| test.c:801:5:801:5 | i | 2147483647 | +| test.c:801:13:801:13 | i | 2 | +| test.c:802:9:802:9 | i | 10 | +| test.c:804:5:804:5 | i | 2147483647 | +| test.c:804:9:804:9 | i | 10 | +| test.c:805:9:805:9 | i | 15 | +| test.c:807:5:807:5 | i | 15 | +| test.c:808:9:808:9 | i | 105 | +| test.c:810:5:810:5 | i | 105 | +| test.c:811:9:811:9 | i | 2310 | +| test.c:813:7:813:7 | i | 2147483647 | +| test.c:814:5:814:5 | i | 2147483647 | +| test.c:814:9:814:9 | i | -1 | +| test.c:815:9:815:9 | i | 1 | +| test.c:817:3:817:3 | i | 2147483647 | +| test.c:817:7:817:7 | i | 2147483647 | +| test.c:818:10:818:10 | i | 2147483647 | +| test.c:821:3:821:3 | i | 2147483647 | +| test.c:821:10:821:11 | sc | 1 | +| test.c:823:7:823:7 | i | 127 | +| test.c:830:7:830:7 | n | 4294967295 | +| test.c:832:7:832:7 | n | 4294967295 | +| test.c:833:9:833:9 | n | 4294967295 | +| test.c:836:7:836:7 | n | 4294967295 | +| test.c:837:9:837:9 | n | 4294967295 | +| test.c:839:9:839:9 | n | 0 | +| test.c:842:8:842:8 | n | 4294967295 | | test.c:843:9:843:9 | n | 0 | -| test.c:845:9:845:9 | n | 32767 | -| test.c:848:7:848:7 | n | 32767 | -| test.c:849:9:849:9 | n | 32767 | -| test.c:851:9:851:9 | n | 0 | -| test.c:854:10:854:10 | n | 32767 | -| test.c:855:5:855:5 | n | 32767 | -| test.c:858:7:858:7 | n | 0 | -| test.c:862:7:862:7 | n | 32767 | -| test.c:863:9:863:9 | n | 32767 | -| test.c:864:11:864:11 | n | 32767 | -| test.c:868:7:868:7 | n | 32767 | -| test.c:869:13:869:13 | n | 32767 | -| test.c:872:9:872:9 | n | 32767 | -| test.c:875:7:875:7 | n | 32767 | -| test.c:875:22:875:22 | n | 32767 | -| test.c:876:9:876:9 | n | 32767 | +| test.c:845:9:845:9 | n | 4294967295 | +| test.c:848:10:848:10 | n | 4294967295 | +| test.c:849:5:849:5 | n | 4294967295 | +| test.c:852:7:852:7 | n | 0 | +| test.c:856:7:856:7 | n | 32767 | +| test.c:859:7:859:7 | n | 32767 | +| test.c:860:9:860:9 | n | 0 | +| test.c:862:9:862:9 | n | 32767 | +| test.c:865:7:865:7 | n | 32767 | +| test.c:866:9:866:9 | n | 32767 | +| test.c:868:9:868:9 | n | 0 | +| test.c:871:10:871:10 | n | 32767 | +| test.c:872:5:872:5 | n | 32767 | +| test.c:875:7:875:7 | n | 0 | | test.c:879:7:879:7 | n | 32767 | -| test.c:880:5:880:5 | n | 32767 | -| test.c:880:10:880:10 | n | 32767 | -| test.c:880:14:880:14 | n | 0 | -| test.c:881:6:881:6 | n | 32767 | -| test.c:881:10:881:10 | n | 0 | -| test.c:881:14:881:14 | n | 32767 | -| test.c:892:7:892:8 | ss | 32767 | -| test.c:893:9:893:10 | ss | 3 | -| test.c:896:7:896:8 | ss | 32767 | -| test.c:897:9:897:10 | ss | 32767 | -| test.c:900:14:900:15 | us | 65535 | -| test.c:901:9:901:10 | us | 32767 | -| test.c:904:14:904:15 | us | 65535 | -| test.c:905:9:905:10 | us | 65535 | -| test.c:908:7:908:8 | ss | 32767 | -| test.c:909:9:909:10 | ss | 32767 | -| test.c:912:7:912:8 | ss | 32767 | -| test.c:913:9:913:10 | ss | 2 | -| test.c:919:8:919:8 | s | 2147483647 | -| test.c:919:15:919:15 | s | 127 | -| test.c:919:23:919:23 | s | 9 | -| test.c:920:18:920:18 | s | 9 | -| test.c:920:22:920:22 | s | 9 | -| test.c:921:9:921:14 | result | 127 | -| test.c:927:7:927:7 | i | 0 | -| test.c:928:9:928:9 | i | 2147483647 | -| test.c:932:7:932:7 | u | 0 | -| test.c:933:9:933:9 | u | 4294967295 | -| test.c:938:12:938:12 | s | 2147483647 | -| test.c:939:7:939:8 | s2 | 4 | -| test.c:944:7:944:7 | x | 2147483647 | -| test.c:945:9:945:9 | y | 2147483647 | -| test.c:949:7:949:7 | y | 2147483647 | -| test.c:958:7:958:7 | x | 2147483647 | -| test.c:963:7:963:7 | x | 15 | -| test.c:970:8:970:8 | x | 2147483647 | -| test.c:970:12:970:12 | y | 256 | -| test.c:971:9:971:9 | x | 2147483647 | -| test.c:972:9:972:9 | y | 256 | -| test.c:985:7:985:7 | e | 2147483647 | +| test.c:880:9:880:9 | n | 32767 | +| test.c:881:11:881:11 | n | 32767 | +| test.c:885:7:885:7 | n | 32767 | +| test.c:886:13:886:13 | n | 32767 | +| test.c:889:9:889:9 | n | 32767 | +| test.c:892:7:892:7 | n | 32767 | +| test.c:892:22:892:22 | n | 32767 | +| test.c:893:9:893:9 | n | 32767 | +| test.c:896:7:896:7 | n | 32767 | +| test.c:897:5:897:5 | n | 32767 | +| test.c:897:10:897:10 | n | 32767 | +| test.c:897:14:897:14 | n | 0 | +| test.c:898:6:898:6 | n | 32767 | +| test.c:898:10:898:10 | n | 0 | +| test.c:898:14:898:14 | n | 32767 | +| test.c:909:7:909:8 | ss | 32767 | +| test.c:910:9:910:10 | ss | 3 | +| test.c:913:7:913:8 | ss | 32767 | +| test.c:914:9:914:10 | ss | 32767 | +| test.c:917:14:917:15 | us | 65535 | +| test.c:918:9:918:10 | us | 32767 | +| test.c:921:14:921:15 | us | 65535 | +| test.c:922:9:922:10 | us | 65535 | +| test.c:925:7:925:8 | ss | 32767 | +| test.c:926:9:926:10 | ss | 32767 | +| test.c:929:7:929:8 | ss | 32767 | +| test.c:930:9:930:10 | ss | 2 | +| test.c:936:8:936:8 | s | 2147483647 | +| test.c:936:15:936:15 | s | 127 | +| test.c:936:23:936:23 | s | 9 | +| test.c:937:18:937:18 | s | 9 | +| test.c:937:22:937:22 | s | 9 | +| test.c:938:9:938:14 | result | 127 | +| test.c:944:7:944:7 | i | 0 | +| test.c:945:9:945:9 | i | 2147483647 | +| test.c:949:7:949:7 | u | 0 | +| test.c:950:9:950:9 | u | 4294967295 | +| test.c:955:12:955:12 | s | 2147483647 | +| test.c:956:7:956:8 | s2 | 4 | +| test.c:961:7:961:7 | x | 2147483647 | +| test.c:962:9:962:9 | y | 2147483647 | +| test.c:966:7:966:7 | y | 2147483647 | +| test.c:975:7:975:7 | x | 2147483647 | +| test.c:980:7:980:7 | x | 15 | +| test.c:987:8:987:8 | x | 2147483647 | +| test.c:987:12:987:12 | y | 256 | +| test.c:988:9:988:9 | x | 2147483647 | +| test.c:989:9:989:9 | y | 256 | +| test.c:1002:7:1002:7 | e | 2147483647 | | test.cpp:10:7:10:7 | b | 2147483647 | | test.cpp:11:5:11:5 | x | 2147483647 | | test.cpp:13:10:13:10 | x | 2147483647 | From 032c7ea034c60b461b9e123ba64ae313df42f225 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 16 Feb 2026 13:51:08 +0100 Subject: [PATCH 075/243] C++: Include the actual number of lower/upper bounds for added context in expected files --- .../cpp/rangeanalysis/SimpleRangeAnalysis.qll | 12 +- .../SimpleRangeAnalysis/nrOfBounds.expected | 10462 ++++++++-------- .../SimpleRangeAnalysis/nrOfBounds.ql | 16 +- 3 files changed, 5256 insertions(+), 5234 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 90f6a8272558..6ff81e07f48d 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -2180,6 +2180,16 @@ module SimpleRangeAnalysisInternal { /** Gets the estimate of the number of bounds for `e`. */ float estimateNrOfBounds(Expr e) { result = BoundsEstimate::nrOfBoundsExpr(e) } + + /** Counts the numbers of lower bounds that are computed internally for `e`. */ + float countNrOfLowerBounds(Expr e) { + result = strictcount(float lb | lb = getLowerBoundsImpl(e) | lb) + } + + /** Counts the numbers of upper bounds that are computed internally for `e`. */ + float countNrOfUpperBounds(Expr e) { + result = strictcount(float ub | ub = getUpperBoundsImpl(e) | ub) + } } /** Provides predicates for debugging the simple range analysis library. */ @@ -2208,7 +2218,7 @@ private module Debug { */ predicate countGetLowerBoundsImpl(Expr e, int n) { e = getRelevantLocatable() and - n = strictcount(float lb | lb = getLowerBoundsImpl(e) | lb) + n = SimpleRangeAnalysisInternal::countNrOfLowerBounds(e) } float debugNrOfBounds(Expr e) { diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected index b94384f038c1..cf4b2f342042 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected @@ -1,5233 +1,5233 @@ testFailures estimateNrOfBounds -| inline_assembly.c:9:20:9:20 | 0 | 1.0 | -| inline_assembly.c:9:20:9:20 | (unsigned int)... | 1.0 | -| inline_assembly.c:10:3:10:3 | y | 1.0 | -| inline_assembly.c:10:3:10:7 | ... = ... | 1.0 | -| inline_assembly.c:10:7:10:7 | 1 | 1.0 | -| inline_assembly.c:10:7:10:7 | (unsigned int)... | 1.0 | -| inline_assembly.c:12:3:12:8 | call to printf | 1.0 | -| inline_assembly.c:12:29:12:29 | x | 1.0 | -| inline_assembly.c:12:32:12:32 | y | 1.0 | -| inline_assembly.c:16:25:16:25 | x | 1.0 | -| inline_assembly.c:16:35:16:35 | y | 1.0 | -| inline_assembly.c:21:3:21:8 | call to printf | 1.0 | -| inline_assembly.c:21:29:21:29 | x | 1.0 | -| inline_assembly.c:21:32:21:32 | y | 1.0 | -| inline_assembly.c:23:10:23:10 | 0 | 1.0 | -| minmax.c:16:9:16:10 | 1 | 1.0 | -| minmax.c:16:16:16:17 | 2 | 1.0 | -| minmax.c:16:23:16:24 | 3 | 1.0 | -| minmax.c:18:2:18:7 | call to printf | 1.0 | -| minmax.c:18:37:18:37 | x | 1.0 | -| minmax.c:18:40:18:40 | y | 1.0 | -| minmax.c:18:43:18:43 | z | 1.0 | -| minmax.c:20:2:20:2 | z | 1.0 | -| minmax.c:20:2:24:3 | ... = ... | 2.0 | -| minmax.c:20:6:24:3 | (statement expression) | 2.0 | -| minmax.c:21:10:21:11 | 0 | 1.0 | -| minmax.c:22:7:22:14 | ... != ... | 1.0 | -| minmax.c:22:8:22:8 | x | 1.0 | -| minmax.c:22:14:22:14 | y | 1.0 | -| minmax.c:22:18:22:18 | t | 1.0 | -| minmax.c:22:18:22:22 | ... = ... | 1.0 | -| minmax.c:22:22:22:22 | x | 1.0 | -| minmax.c:23:3:23:3 | t | 2.0 | -| minmax.c:26:2:26:7 | call to printf | 1.0 | -| minmax.c:26:37:26:37 | x | 1.0 | -| minmax.c:26:40:26:40 | y | 1.0 | -| minmax.c:26:43:26:43 | z | 2.0 | -| test.c:6:14:6:15 | 0 | 1.0 | -| test.c:8:5:8:9 | count | 1.0 | -| test.c:8:5:8:19 | ... = ... | 13.0 | -| test.c:8:13:8:17 | count | 13.0 | -| test.c:8:13:8:19 | ... + ... | 13.0 | -| test.c:8:19:8:19 | 1 | 1.0 | -| test.c:10:10:10:14 | count | 13.0 | -| test.c:14:14:14:15 | 0 | 1.0 | -| test.c:16:5:16:9 | count | 1.0 | -| test.c:16:5:16:26 | ... = ... | 13.0 | -| test.c:16:13:16:21 | (...) | 13.0 | -| test.c:16:13:16:26 | ... % ... | 13.0 | -| test.c:16:14:16:18 | count | 13.0 | -| test.c:16:14:16:20 | ... + ... | 13.0 | -| test.c:16:20:16:20 | 1 | 1.0 | -| test.c:16:25:16:26 | 10 | 1.0 | -| test.c:18:10:18:14 | count | 13.0 | -| test.c:22:14:22:15 | 0 | 1.0 | -| test.c:24:5:24:9 | count | 13.0 | -| test.c:24:5:24:11 | ... ++ | 13.0 | -| test.c:25:5:25:9 | count | 1.0 | -| test.c:25:5:25:22 | ... = ... | 13.0 | -| test.c:25:13:25:17 | count | 13.0 | -| test.c:25:13:25:22 | ... % ... | 13.0 | -| test.c:25:21:25:22 | 10 | 1.0 | -| test.c:27:10:27:14 | count | 13.0 | -| test.c:31:10:31:11 | 0 | 1.0 | -| test.c:32:14:32:15 | 0 | 1.0 | -| test.c:33:8:33:8 | i | 1.0 | -| test.c:33:8:33:12 | ... = ... | 1.0 | -| test.c:33:12:33:12 | 0 | 1.0 | -| test.c:33:15:33:15 | i | 13.0 | -| test.c:33:15:33:19 | ... < ... | 1.0 | -| test.c:33:19:33:19 | 2 | 1.0 | -| test.c:33:22:33:22 | i | 1.0 | -| test.c:33:22:33:28 | ... = ... | 13.0 | -| test.c:33:26:33:26 | i | 13.0 | -| test.c:33:26:33:28 | ... + ... | 13.0 | -| test.c:33:28:33:28 | 1 | 1.0 | -| test.c:34:5:34:9 | total | 13.0 | -| test.c:34:5:34:14 | ... += ... | 13.0 | -| test.c:34:14:34:14 | i | 13.0 | -| test.c:36:10:36:14 | total | 13.0 | -| test.c:36:10:36:18 | ... + ... | 13.0 | -| test.c:36:18:36:18 | i | 13.0 | -| test.c:40:10:40:11 | 0 | 1.0 | -| test.c:41:14:41:15 | 0 | 1.0 | -| test.c:42:8:42:8 | i | 1.0 | -| test.c:42:8:42:12 | ... = ... | 1.0 | -| test.c:42:12:42:12 | 0 | 1.0 | -| test.c:42:15:42:15 | i | 13.0 | -| test.c:42:15:42:19 | ... < ... | 1.0 | -| test.c:42:19:42:19 | 2 | 1.0 | -| test.c:42:22:42:22 | i | 13.0 | -| test.c:42:22:42:24 | ... ++ | 13.0 | -| test.c:43:5:43:9 | total | 13.0 | -| test.c:43:5:43:14 | ... += ... | 13.0 | -| test.c:43:14:43:14 | i | 13.0 | -| test.c:45:10:45:14 | total | 13.0 | -| test.c:45:10:45:18 | ... + ... | 13.0 | -| test.c:45:18:45:18 | i | 13.0 | -| test.c:49:10:49:11 | 0 | 1.0 | -| test.c:50:14:50:15 | 0 | 1.0 | -| test.c:51:8:51:8 | i | 1.0 | -| test.c:51:8:51:12 | ... = ... | 1.0 | -| test.c:51:12:51:12 | 0 | 1.0 | -| test.c:51:15:51:15 | i | 13.0 | -| test.c:51:15:51:17 | ... + ... | 13.0 | -| test.c:51:15:51:21 | ... < ... | 1.0 | -| test.c:51:17:51:17 | 2 | 1.0 | -| test.c:51:21:51:21 | 4 | 1.0 | -| test.c:51:24:51:24 | i | 1.0 | -| test.c:51:24:51:30 | ... = ... | 13.0 | -| test.c:51:28:51:28 | i | 13.0 | -| test.c:51:28:51:30 | ... + ... | 13.0 | -| test.c:51:30:51:30 | 1 | 1.0 | -| test.c:52:5:52:9 | total | 13.0 | -| test.c:52:5:52:14 | ... += ... | 13.0 | -| test.c:52:14:52:14 | i | 13.0 | -| test.c:54:10:54:14 | total | 13.0 | -| test.c:54:10:54:18 | ... + ... | 13.0 | -| test.c:54:18:54:18 | i | 13.0 | -| test.c:58:7:58:7 | i | 1.0 | -| test.c:58:7:58:11 | ... < ... | 1.0 | -| test.c:58:11:58:11 | 4 | 1.0 | -| test.c:59:9:59:9 | i | 1.0 | -| test.c:59:9:59:13 | ... < ... | 1.0 | -| test.c:59:13:59:13 | 5 | 1.0 | -| test.c:60:14:60:14 | i | 1.0 | -| test.c:63:10:63:10 | 1 | 1.0 | -| test.c:67:7:67:11 | - ... | 1.0 | -| test.c:67:7:67:15 | ... < ... | 1.0 | -| test.c:67:7:67:25 | ... && ... | 1.0 | -| test.c:67:8:67:11 | 1000 | 1.0 | -| test.c:67:15:67:15 | y | 1.0 | -| test.c:67:20:67:20 | y | 1.0 | -| test.c:67:20:67:25 | ... < ... | 1.0 | -| test.c:67:24:67:25 | 10 | 1.0 | -| test.c:68:9:68:9 | x | 1.0 | -| test.c:68:9:68:15 | ... < ... | 1.0 | -| test.c:68:13:68:13 | y | 1.0 | -| test.c:68:13:68:15 | ... - ... | 1.0 | -| test.c:68:15:68:15 | 2 | 1.0 | -| test.c:69:14:69:14 | x | 1.0 | -| test.c:72:10:72:10 | y | 1.0 | -| test.c:76:7:76:7 | y | 1.0 | -| test.c:76:7:76:12 | ... == ... | 1.0 | -| test.c:76:12:76:12 | 0 | 1.0 | -| test.c:77:9:77:9 | x | 1.0 | -| test.c:77:9:77:13 | ... < ... | 1.0 | -| test.c:77:13:77:13 | 4 | 1.0 | -| test.c:78:14:78:14 | 0 | 1.0 | -| test.c:81:9:81:9 | x | 1.0 | -| test.c:81:9:81:13 | ... < ... | 1.0 | -| test.c:81:13:81:13 | 4 | 1.0 | -| test.c:82:14:82:14 | 1 | 1.0 | -| test.c:85:10:85:10 | x | 1.0 | -| test.c:89:7:89:7 | y | 1.0 | -| test.c:89:7:89:11 | ... > ... | 1.0 | -| test.c:89:11:89:11 | 7 | 1.0 | -| test.c:90:9:90:9 | x | 1.0 | -| test.c:90:9:90:13 | ... < ... | 1.0 | -| test.c:90:13:90:13 | y | 1.0 | -| test.c:91:14:91:14 | 0 | 1.0 | -| test.c:93:12:93:12 | x | 1.0 | -| test.c:95:10:95:10 | 1 | 1.0 | -| test.c:100:3:100:3 | c | 1.0 | -| test.c:100:3:100:8 | ... = ... | 1.0 | -| test.c:100:7:100:8 | * ... | 1.0 | -| test.c:101:7:101:7 | (int)... | 1.0 | -| test.c:101:7:101:7 | c | 1.0 | -| test.c:101:7:101:15 | ... != ... | 1.0 | -| test.c:101:12:101:15 | 0 | 1.0 | -| test.c:102:5:102:8 | * ... | 1.0 | -| test.c:102:5:102:15 | ... = ... | 1.0 | -| test.c:102:12:102:15 | 0 | 1.0 | -| test.c:102:12:102:15 | (char)... | 1.0 | -| test.c:104:7:104:7 | (int)... | 2.0 | -| test.c:104:7:104:7 | c | 2.0 | -| test.c:104:7:104:14 | ... == ... | 1.0 | -| test.c:104:12:104:14 | 58 | 1.0 | -| test.c:105:5:105:5 | c | 1.0 | -| test.c:105:5:105:10 | ... = ... | 1.0 | -| test.c:105:9:105:10 | * ... | 1.0 | -| test.c:106:9:106:9 | (int)... | 1.0 | -| test.c:106:9:106:9 | c | 1.0 | -| test.c:106:9:106:17 | ... != ... | 1.0 | -| test.c:106:14:106:17 | 0 | 1.0 | -| test.c:107:7:107:10 | * ... | 1.0 | -| test.c:107:7:107:17 | ... = ... | 1.0 | -| test.c:107:14:107:17 | 0 | 1.0 | -| test.c:107:14:107:17 | (char)... | 1.0 | -| test.c:109:9:109:9 | (int)... | 2.0 | -| test.c:109:9:109:9 | c | 2.0 | -| test.c:109:9:109:16 | ... != ... | 1.0 | -| test.c:109:14:109:16 | 44 | 1.0 | -| test.c:110:14:110:14 | 1 | 1.0 | -| test.c:112:10:112:10 | 0 | 1.0 | -| test.c:118:24:118:24 | 0 | 1.0 | -| test.c:118:24:118:24 | (size_type)... | 1.0 | -| test.c:119:10:119:10 | n | 1.0 | -| test.c:119:10:119:12 | ... ++ | 1.0 | -| test.c:123:22:123:22 | 0 | 1.0 | -| test.c:123:22:123:22 | (size_type)... | 1.0 | -| test.c:124:11:124:15 | Start | 13.0 | -| test.c:124:11:124:36 | ... <= ... | 1.0 | -| test.c:124:20:124:32 | call to test12_helper | 1.0 | -| test.c:124:20:124:36 | ... - ... | 1.0 | -| test.c:124:36:124:36 | 1 | 1.0 | -| test.c:124:36:124:36 | (unsigned long long)... | 1.0 | -| test.c:126:31:126:43 | call to test12_helper | 1.0 | -| test.c:127:6:127:10 | Start | 13.0 | -| test.c:127:6:127:24 | ... += ... | 13.0 | -| test.c:127:15:127:20 | Length | 1.0 | -| test.c:127:15:127:24 | ... + ... | 1.0 | -| test.c:127:24:127:24 | 1 | 1.0 | -| test.c:127:24:127:24 | (unsigned long long)... | 1.0 | -| test.c:130:11:130:11 | 1 | 1.0 | -| test.c:135:22:135:22 | (unsigned char)... | 1.0 | -| test.c:135:22:135:22 | c | 1.0 | -| test.c:136:20:136:20 | 0 | 1.0 | -| test.c:136:20:136:20 | (unsigned int)... | 1.0 | -| test.c:137:20:137:20 | x | 1.0 | -| test.c:137:20:137:22 | ... - ... | 1.0 | -| test.c:137:22:137:22 | 1 | 1.0 | -| test.c:137:22:137:22 | (unsigned int)... | 1.0 | -| test.c:138:11:138:11 | i | 1.0 | -| test.c:138:11:138:13 | ... + ... | 1.0 | -| test.c:138:13:138:13 | 1 | 1.0 | -| test.c:139:10:139:41 | (double)... | 1.0 | -| test.c:139:10:139:41 | (int)... | 1.0 | -| test.c:139:18:139:41 | (...) | 1.0 | -| test.c:139:19:139:19 | (int)... | 1.0 | -| test.c:139:19:139:19 | c | 1.0 | -| test.c:139:19:139:23 | ... + ... | 1.0 | -| test.c:139:19:139:28 | (unsigned int)... | 1.0 | -| test.c:139:19:139:28 | ... + ... | 1.0 | -| test.c:139:19:139:32 | ... + ... | 1.0 | -| test.c:139:19:139:36 | ... + ... | 1.0 | -| test.c:139:19:139:40 | ... + ... | 1.0 | -| test.c:139:23:139:23 | i | 1.0 | -| test.c:139:27:139:28 | (int)... | 1.0 | -| test.c:139:27:139:28 | uc | 1.0 | -| test.c:139:32:139:32 | x | 1.0 | -| test.c:139:36:139:36 | y | 1.0 | -| test.c:139:40:139:40 | (unsigned int)... | 1.0 | -| test.c:139:40:139:40 | z | 1.0 | -| test.c:144:12:144:23 | (int)... | 1.0 | -| test.c:144:17:144:23 | (char)... | 1.0 | -| test.c:144:23:144:23 | x | 1.0 | -| test.c:145:12:145:32 | (int)... | 1.0 | -| test.c:145:17:145:32 | (unsigned char)... | 1.0 | -| test.c:145:32:145:32 | x | 1.0 | -| test.c:146:12:146:33 | (int)... | 1.0 | -| test.c:146:17:146:33 | (unsigned short)... | 1.0 | -| test.c:146:33:146:33 | x | 1.0 | -| test.c:147:12:147:31 | (int)... | 1.0 | -| test.c:147:17:147:31 | (unsigned int)... | 1.0 | -| test.c:147:31:147:31 | x | 1.0 | -| test.c:148:13:148:13 | (char)... | 1.0 | -| test.c:148:13:148:13 | x | 1.0 | -| test.c:149:23:149:23 | (unsigned short)... | 1.0 | -| test.c:149:23:149:23 | x | 1.0 | -| test.c:150:10:150:11 | x0 | 1.0 | -| test.c:150:10:150:16 | ... + ... | 1.0 | -| test.c:150:10:150:21 | ... + ... | 1.0 | -| test.c:150:10:150:26 | ... + ... | 1.0 | -| test.c:150:10:150:31 | ... + ... | 1.0 | -| test.c:150:10:150:36 | ... + ... | 1.0 | -| test.c:150:15:150:16 | x1 | 1.0 | -| test.c:150:20:150:21 | x2 | 1.0 | -| test.c:150:25:150:26 | x3 | 1.0 | -| test.c:150:30:150:31 | (int)... | 1.0 | -| test.c:150:30:150:31 | c0 | 1.0 | -| test.c:150:35:150:36 | (int)... | 1.0 | -| test.c:150:35:150:36 | s0 | 1.0 | -| test.c:154:10:154:31 | (...) | 1.0 | -| test.c:154:10:154:40 | ... ? ... : ... | 1.0 | -| test.c:154:11:154:11 | x | 1.0 | -| test.c:154:11:154:15 | ... > ... | 1.0 | -| test.c:154:11:154:30 | ... && ... | 1.0 | -| test.c:154:15:154:15 | 0 | 1.0 | -| test.c:154:15:154:15 | (long long)... | 1.0 | -| test.c:154:20:154:20 | x | 1.0 | -| test.c:154:20:154:30 | ... == ... | 1.0 | -| test.c:154:25:154:30 | (int)... | 1.0 | -| test.c:154:25:154:30 | (long long)... | 1.0 | -| test.c:154:30:154:30 | x | 1.0 | -| test.c:154:35:154:35 | x | 1.0 | -| test.c:154:39:154:40 | (long long)... | 1.0 | -| test.c:154:39:154:40 | - ... | 1.0 | -| test.c:154:40:154:40 | 1 | 1.0 | -| test.c:159:14:159:15 | 0 | 1.0 | -| test.c:161:7:161:7 | 3 | 1.0 | -| test.c:161:7:161:12 | ... <= ... | 1.0 | -| test.c:161:7:161:23 | ... && ... | 1.0 | -| test.c:161:12:161:12 | a | 1.0 | -| test.c:161:17:161:17 | a | 1.0 | -| test.c:161:17:161:23 | ... <= ... | 1.0 | -| test.c:161:22:161:23 | 11 | 1.0 | -| test.c:162:13:162:14 | + ... | 1.0 | -| test.c:162:14:162:14 | a | 1.0 | -| test.c:163:13:163:14 | - ... | 1.0 | -| test.c:163:14:163:14 | a | 1.0 | -| test.c:164:5:164:9 | total | 1.0 | -| test.c:164:5:164:16 | ... += ... | 1.0 | -| test.c:164:14:164:14 | b | 1.0 | -| test.c:164:14:164:16 | ... + ... | 1.0 | -| test.c:164:16:164:16 | c | 1.0 | -| test.c:166:7:166:7 | 0 | 1.0 | -| test.c:166:7:166:12 | ... <= ... | 1.0 | -| test.c:166:7:166:23 | ... && ... | 1.0 | -| test.c:166:12:166:12 | a | 2.0 | -| test.c:166:17:166:17 | a | 2.0 | -| test.c:166:17:166:23 | ... <= ... | 1.0 | -| test.c:166:22:166:23 | 11 | 1.0 | -| test.c:167:13:167:14 | + ... | 2.0 | -| test.c:167:14:167:14 | a | 2.0 | -| test.c:168:13:168:14 | - ... | 2.0 | -| test.c:168:14:168:14 | a | 2.0 | -| test.c:169:5:169:9 | total | 2.0 | -| test.c:169:5:169:16 | ... += ... | 8.0 | -| test.c:169:14:169:14 | b | 2.0 | -| test.c:169:14:169:16 | ... + ... | 4.0 | -| test.c:169:16:169:16 | c | 2.0 | -| test.c:171:7:171:8 | - ... | 1.0 | -| test.c:171:7:171:13 | ... <= ... | 1.0 | -| test.c:171:7:171:24 | ... && ... | 1.0 | -| test.c:171:8:171:8 | 7 | 1.0 | -| test.c:171:13:171:13 | a | 3.0 | -| test.c:171:18:171:18 | a | 3.0 | -| test.c:171:18:171:24 | ... <= ... | 1.0 | -| test.c:171:23:171:24 | 11 | 1.0 | -| test.c:172:13:172:14 | + ... | 3.0 | -| test.c:172:14:172:14 | a | 3.0 | -| test.c:173:13:173:14 | - ... | 3.0 | -| test.c:173:14:173:14 | a | 3.0 | -| test.c:174:5:174:9 | total | 10.0 | -| test.c:174:5:174:16 | ... += ... | 90.0 | -| test.c:174:14:174:14 | b | 3.0 | -| test.c:174:14:174:16 | ... + ... | 9.0 | -| test.c:174:16:174:16 | c | 3.0 | -| test.c:176:7:176:8 | - ... | 1.0 | -| test.c:176:7:176:13 | ... <= ... | 1.0 | -| test.c:176:7:176:23 | ... && ... | 1.0 | -| test.c:176:8:176:8 | 7 | 1.0 | -| test.c:176:13:176:13 | a | 4.0 | -| test.c:176:18:176:18 | a | 4.0 | -| test.c:176:18:176:23 | ... <= ... | 1.0 | -| test.c:176:23:176:23 | 1 | 1.0 | -| test.c:177:13:177:14 | + ... | 4.0 | -| test.c:177:14:177:14 | a | 4.0 | -| test.c:178:13:178:14 | - ... | 4.0 | -| test.c:178:14:178:14 | a | 4.0 | -| test.c:179:5:179:9 | total | 100.0 | -| test.c:179:5:179:16 | ... += ... | 1600.0 | -| test.c:179:14:179:14 | b | 4.0 | -| test.c:179:14:179:16 | ... + ... | 16.0 | -| test.c:179:16:179:16 | c | 4.0 | -| test.c:181:7:181:8 | - ... | 1.0 | -| test.c:181:7:181:13 | ... <= ... | 1.0 | -| test.c:181:7:181:23 | ... && ... | 1.0 | -| test.c:181:8:181:8 | 7 | 1.0 | -| test.c:181:13:181:13 | a | 5.0 | -| test.c:181:18:181:18 | a | 5.0 | -| test.c:181:18:181:23 | ... <= ... | 1.0 | -| test.c:181:23:181:23 | 0 | 1.0 | -| test.c:182:13:182:14 | + ... | 5.0 | -| test.c:182:14:182:14 | a | 5.0 | -| test.c:183:13:183:14 | - ... | 5.0 | -| test.c:183:14:183:14 | a | 5.0 | -| test.c:184:5:184:9 | total | 1700.0 | -| test.c:184:5:184:16 | ... += ... | 42500.0 | -| test.c:184:14:184:14 | b | 5.0 | -| test.c:184:14:184:16 | ... + ... | 25.0 | -| test.c:184:16:184:16 | c | 5.0 | -| test.c:186:7:186:8 | - ... | 1.0 | -| test.c:186:7:186:13 | ... <= ... | 1.0 | -| test.c:186:7:186:24 | ... && ... | 1.0 | -| test.c:186:8:186:8 | 7 | 1.0 | -| test.c:186:13:186:13 | a | 6.0 | -| test.c:186:18:186:18 | a | 6.0 | -| test.c:186:18:186:24 | ... <= ... | 1.0 | -| test.c:186:23:186:24 | - ... | 1.0 | -| test.c:186:24:186:24 | 2 | 1.0 | -| test.c:187:13:187:14 | + ... | 6.0 | -| test.c:187:14:187:14 | a | 6.0 | -| test.c:188:13:188:14 | - ... | 6.0 | -| test.c:188:14:188:14 | a | 6.0 | -| test.c:189:5:189:9 | total | 44200.0 | -| test.c:189:5:189:16 | ... += ... | 1591200.0 | -| test.c:189:14:189:14 | b | 6.0 | -| test.c:189:14:189:16 | ... + ... | 36.0 | -| test.c:189:16:189:16 | c | 6.0 | -| test.c:192:10:192:14 | total | 1635400.0 | -| test.c:198:14:198:15 | 0 | 1.0 | -| test.c:200:7:200:7 | 3 | 1.0 | -| test.c:200:7:200:12 | ... <= ... | 1.0 | -| test.c:200:7:200:23 | ... && ... | 1.0 | -| test.c:200:7:200:33 | ... && ... | 1.0 | -| test.c:200:7:200:44 | ... && ... | 1.0 | -| test.c:200:12:200:12 | a | 1.0 | -| test.c:200:17:200:17 | a | 1.0 | -| test.c:200:17:200:23 | ... <= ... | 1.0 | -| test.c:200:22:200:23 | 11 | 1.0 | -| test.c:200:28:200:28 | 5 | 1.0 | -| test.c:200:28:200:33 | ... <= ... | 1.0 | -| test.c:200:33:200:33 | b | 1.0 | -| test.c:200:38:200:38 | b | 1.0 | -| test.c:200:38:200:44 | ... <= ... | 1.0 | -| test.c:200:43:200:44 | 23 | 1.0 | -| test.c:201:13:201:13 | a | 1.0 | -| test.c:201:13:201:15 | ... * ... | 1.0 | -| test.c:201:15:201:15 | b | 1.0 | -| test.c:202:5:202:9 | total | 1.0 | -| test.c:202:5:202:14 | ... += ... | 1.0 | -| test.c:202:14:202:14 | r | 1.0 | -| test.c:204:7:204:7 | 3 | 1.0 | -| test.c:204:7:204:12 | ... <= ... | 1.0 | -| test.c:204:7:204:23 | ... && ... | 1.0 | -| test.c:204:7:204:33 | ... && ... | 1.0 | -| test.c:204:7:204:44 | ... && ... | 1.0 | -| test.c:204:12:204:12 | a | 2.0 | -| test.c:204:17:204:17 | a | 2.0 | -| test.c:204:17:204:23 | ... <= ... | 1.0 | -| test.c:204:22:204:23 | 11 | 1.0 | -| test.c:204:28:204:28 | 0 | 1.0 | -| test.c:204:28:204:33 | ... <= ... | 1.0 | -| test.c:204:33:204:33 | b | 3.0 | -| test.c:204:38:204:38 | b | 3.0 | -| test.c:204:38:204:44 | ... <= ... | 1.0 | -| test.c:204:43:204:44 | 23 | 1.0 | -| test.c:205:13:205:13 | a | 2.0 | -| test.c:205:13:205:15 | ... * ... | 1.0 | -| test.c:205:15:205:15 | b | 3.0 | -| test.c:206:5:206:9 | total | 2.0 | -| test.c:206:5:206:14 | ... += ... | 2.0 | -| test.c:206:14:206:14 | r | 1.0 | -| test.c:208:7:208:7 | 3 | 1.0 | -| test.c:208:7:208:12 | ... <= ... | 1.0 | -| test.c:208:7:208:23 | ... && ... | 1.0 | -| test.c:208:7:208:35 | ... && ... | 1.0 | -| test.c:208:7:208:46 | ... && ... | 1.0 | -| test.c:208:12:208:12 | a | 3.0 | -| test.c:208:17:208:17 | a | 3.0 | -| test.c:208:17:208:23 | ... <= ... | 1.0 | -| test.c:208:22:208:23 | 11 | 1.0 | -| test.c:208:28:208:30 | - ... | 1.0 | -| test.c:208:28:208:35 | ... <= ... | 1.0 | -| test.c:208:29:208:30 | 13 | 1.0 | -| test.c:208:35:208:35 | b | 7.0 | -| test.c:208:40:208:40 | b | 7.0 | -| test.c:208:40:208:46 | ... <= ... | 1.0 | -| test.c:208:45:208:46 | 23 | 1.0 | -| test.c:209:13:209:13 | a | 3.0 | -| test.c:209:13:209:15 | ... * ... | 1.0 | -| test.c:209:15:209:15 | b | 7.0 | -| test.c:210:5:210:9 | total | 4.0 | -| test.c:210:5:210:14 | ... += ... | 4.0 | -| test.c:210:14:210:14 | r | 1.0 | -| test.c:212:7:212:7 | 3 | 1.0 | -| test.c:212:7:212:12 | ... <= ... | 1.0 | -| test.c:212:7:212:23 | ... && ... | 1.0 | -| test.c:212:7:212:35 | ... && ... | 1.0 | -| test.c:212:7:212:45 | ... && ... | 1.0 | -| test.c:212:12:212:12 | a | 4.0 | -| test.c:212:17:212:17 | a | 4.0 | -| test.c:212:17:212:23 | ... <= ... | 1.0 | -| test.c:212:22:212:23 | 11 | 1.0 | -| test.c:212:28:212:30 | - ... | 1.0 | -| test.c:212:28:212:35 | ... <= ... | 1.0 | -| test.c:212:29:212:30 | 13 | 1.0 | -| test.c:212:35:212:35 | b | 15.0 | -| test.c:212:40:212:40 | b | 15.0 | -| test.c:212:40:212:45 | ... <= ... | 1.0 | -| test.c:212:45:212:45 | 0 | 1.0 | -| test.c:213:13:213:13 | a | 4.0 | -| test.c:213:13:213:15 | ... * ... | 1.0 | -| test.c:213:15:213:15 | b | 15.0 | -| test.c:214:5:214:9 | total | 8.0 | -| test.c:214:5:214:14 | ... += ... | 8.0 | -| test.c:214:14:214:14 | r | 1.0 | -| test.c:216:7:216:7 | 3 | 1.0 | -| test.c:216:7:216:12 | ... <= ... | 1.0 | -| test.c:216:7:216:23 | ... && ... | 1.0 | -| test.c:216:7:216:35 | ... && ... | 1.0 | -| test.c:216:7:216:46 | ... && ... | 1.0 | -| test.c:216:12:216:12 | a | 5.0 | -| test.c:216:17:216:17 | a | 5.0 | -| test.c:216:17:216:23 | ... <= ... | 1.0 | -| test.c:216:22:216:23 | 11 | 1.0 | -| test.c:216:28:216:30 | - ... | 1.0 | -| test.c:216:28:216:35 | ... <= ... | 1.0 | -| test.c:216:29:216:30 | 13 | 1.0 | -| test.c:216:35:216:35 | b | 31.0 | -| test.c:216:40:216:40 | b | 31.0 | -| test.c:216:40:216:46 | ... <= ... | 1.0 | -| test.c:216:45:216:46 | - ... | 1.0 | -| test.c:216:46:216:46 | 7 | 1.0 | -| test.c:217:13:217:13 | a | 5.0 | -| test.c:217:13:217:15 | ... * ... | 1.0 | -| test.c:217:15:217:15 | b | 31.0 | -| test.c:218:5:218:9 | total | 16.0 | -| test.c:218:5:218:14 | ... += ... | 16.0 | -| test.c:218:14:218:14 | r | 1.0 | -| test.c:221:10:221:14 | total | 32.0 | -| test.c:226:14:226:15 | 0 | 1.0 | -| test.c:228:7:228:7 | 0 | 1.0 | -| test.c:228:7:228:12 | ... <= ... | 1.0 | -| test.c:228:7:228:23 | ... && ... | 1.0 | -| test.c:228:7:228:33 | ... && ... | 1.0 | -| test.c:228:7:228:44 | ... && ... | 1.0 | -| test.c:228:12:228:12 | a | 1.0 | -| test.c:228:17:228:17 | a | 1.0 | -| test.c:228:17:228:23 | ... <= ... | 1.0 | -| test.c:228:22:228:23 | 11 | 1.0 | -| test.c:228:28:228:28 | 5 | 1.0 | -| test.c:228:28:228:33 | ... <= ... | 1.0 | -| test.c:228:33:228:33 | b | 1.0 | -| test.c:228:38:228:38 | b | 1.0 | -| test.c:228:38:228:44 | ... <= ... | 1.0 | -| test.c:228:43:228:44 | 23 | 1.0 | -| test.c:229:13:229:13 | a | 1.0 | -| test.c:229:13:229:15 | ... * ... | 1.0 | -| test.c:229:15:229:15 | b | 1.0 | -| test.c:230:5:230:9 | total | 1.0 | -| test.c:230:5:230:14 | ... += ... | 1.0 | -| test.c:230:14:230:14 | r | 1.0 | -| test.c:232:7:232:7 | 0 | 1.0 | -| test.c:232:7:232:12 | ... <= ... | 1.0 | -| test.c:232:7:232:23 | ... && ... | 1.0 | -| test.c:232:7:232:33 | ... && ... | 1.0 | -| test.c:232:7:232:44 | ... && ... | 1.0 | -| test.c:232:12:232:12 | a | 2.0 | -| test.c:232:17:232:17 | a | 2.0 | -| test.c:232:17:232:23 | ... <= ... | 1.0 | -| test.c:232:22:232:23 | 11 | 1.0 | -| test.c:232:28:232:28 | 0 | 1.0 | -| test.c:232:28:232:33 | ... <= ... | 1.0 | -| test.c:232:33:232:33 | b | 3.0 | -| test.c:232:38:232:38 | b | 3.0 | -| test.c:232:38:232:44 | ... <= ... | 1.0 | -| test.c:232:43:232:44 | 23 | 1.0 | -| test.c:233:13:233:13 | a | 2.0 | -| test.c:233:13:233:15 | ... * ... | 1.0 | -| test.c:233:15:233:15 | b | 3.0 | -| test.c:234:5:234:9 | total | 2.0 | -| test.c:234:5:234:14 | ... += ... | 2.0 | -| test.c:234:14:234:14 | r | 1.0 | -| test.c:236:7:236:7 | 0 | 1.0 | -| test.c:236:7:236:12 | ... <= ... | 1.0 | -| test.c:236:7:236:23 | ... && ... | 1.0 | -| test.c:236:7:236:35 | ... && ... | 1.0 | -| test.c:236:7:236:46 | ... && ... | 1.0 | -| test.c:236:12:236:12 | a | 3.0 | -| test.c:236:17:236:17 | a | 3.0 | -| test.c:236:17:236:23 | ... <= ... | 1.0 | -| test.c:236:22:236:23 | 11 | 1.0 | -| test.c:236:28:236:30 | - ... | 1.0 | -| test.c:236:28:236:35 | ... <= ... | 1.0 | -| test.c:236:29:236:30 | 13 | 1.0 | -| test.c:236:35:236:35 | b | 7.0 | -| test.c:236:40:236:40 | b | 7.0 | -| test.c:236:40:236:46 | ... <= ... | 1.0 | -| test.c:236:45:236:46 | 23 | 1.0 | -| test.c:237:13:237:13 | a | 3.0 | -| test.c:237:13:237:15 | ... * ... | 1.0 | -| test.c:237:15:237:15 | b | 7.0 | -| test.c:238:5:238:9 | total | 4.0 | -| test.c:238:5:238:14 | ... += ... | 4.0 | -| test.c:238:14:238:14 | r | 1.0 | -| test.c:240:7:240:7 | 0 | 1.0 | -| test.c:240:7:240:12 | ... <= ... | 1.0 | -| test.c:240:7:240:23 | ... && ... | 1.0 | -| test.c:240:7:240:35 | ... && ... | 1.0 | -| test.c:240:7:240:45 | ... && ... | 1.0 | -| test.c:240:12:240:12 | a | 4.0 | -| test.c:240:17:240:17 | a | 4.0 | -| test.c:240:17:240:23 | ... <= ... | 1.0 | -| test.c:240:22:240:23 | 11 | 1.0 | -| test.c:240:28:240:30 | - ... | 1.0 | -| test.c:240:28:240:35 | ... <= ... | 1.0 | -| test.c:240:29:240:30 | 13 | 1.0 | -| test.c:240:35:240:35 | b | 15.0 | -| test.c:240:40:240:40 | b | 15.0 | -| test.c:240:40:240:45 | ... <= ... | 1.0 | -| test.c:240:45:240:45 | 0 | 1.0 | -| test.c:241:13:241:13 | a | 4.0 | -| test.c:241:13:241:15 | ... * ... | 1.0 | -| test.c:241:15:241:15 | b | 15.0 | -| test.c:242:5:242:9 | total | 8.0 | -| test.c:242:5:242:14 | ... += ... | 8.0 | -| test.c:242:14:242:14 | r | 1.0 | -| test.c:244:7:244:7 | 0 | 1.0 | -| test.c:244:7:244:12 | ... <= ... | 1.0 | -| test.c:244:7:244:23 | ... && ... | 1.0 | -| test.c:244:7:244:35 | ... && ... | 1.0 | -| test.c:244:7:244:46 | ... && ... | 1.0 | -| test.c:244:12:244:12 | a | 5.0 | -| test.c:244:17:244:17 | a | 5.0 | -| test.c:244:17:244:23 | ... <= ... | 1.0 | -| test.c:244:22:244:23 | 11 | 1.0 | -| test.c:244:28:244:30 | - ... | 1.0 | -| test.c:244:28:244:35 | ... <= ... | 1.0 | -| test.c:244:29:244:30 | 13 | 1.0 | -| test.c:244:35:244:35 | b | 31.0 | -| test.c:244:40:244:40 | b | 31.0 | -| test.c:244:40:244:46 | ... <= ... | 1.0 | -| test.c:244:45:244:46 | - ... | 1.0 | -| test.c:244:46:244:46 | 7 | 1.0 | -| test.c:245:13:245:13 | a | 5.0 | -| test.c:245:13:245:15 | ... * ... | 1.0 | -| test.c:245:15:245:15 | b | 31.0 | -| test.c:246:5:246:9 | total | 16.0 | -| test.c:246:5:246:14 | ... += ... | 16.0 | -| test.c:246:14:246:14 | r | 1.0 | -| test.c:249:10:249:14 | total | 32.0 | -| test.c:254:14:254:15 | 0 | 1.0 | -| test.c:256:7:256:9 | - ... | 1.0 | -| test.c:256:7:256:14 | ... <= ... | 1.0 | -| test.c:256:7:256:25 | ... && ... | 1.0 | -| test.c:256:7:256:35 | ... && ... | 1.0 | -| test.c:256:7:256:46 | ... && ... | 1.0 | -| test.c:256:8:256:9 | 17 | 1.0 | -| test.c:256:14:256:14 | a | 1.0 | -| test.c:256:19:256:19 | a | 1.0 | -| test.c:256:19:256:25 | ... <= ... | 1.0 | -| test.c:256:24:256:25 | 11 | 1.0 | -| test.c:256:30:256:30 | 5 | 1.0 | -| test.c:256:30:256:35 | ... <= ... | 1.0 | -| test.c:256:35:256:35 | b | 1.0 | -| test.c:256:40:256:40 | b | 1.0 | -| test.c:256:40:256:46 | ... <= ... | 1.0 | -| test.c:256:45:256:46 | 23 | 1.0 | -| test.c:257:13:257:13 | a | 1.0 | -| test.c:257:13:257:15 | ... * ... | 1.0 | -| test.c:257:15:257:15 | b | 1.0 | -| test.c:258:5:258:9 | total | 1.0 | -| test.c:258:5:258:14 | ... += ... | 1.0 | -| test.c:258:14:258:14 | r | 1.0 | -| test.c:260:7:260:9 | - ... | 1.0 | -| test.c:260:7:260:14 | ... <= ... | 1.0 | -| test.c:260:7:260:25 | ... && ... | 1.0 | -| test.c:260:7:260:35 | ... && ... | 1.0 | -| test.c:260:7:260:46 | ... && ... | 1.0 | -| test.c:260:8:260:9 | 17 | 1.0 | -| test.c:260:14:260:14 | a | 2.0 | -| test.c:260:19:260:19 | a | 2.0 | -| test.c:260:19:260:25 | ... <= ... | 1.0 | -| test.c:260:24:260:25 | 11 | 1.0 | -| test.c:260:30:260:30 | 0 | 1.0 | -| test.c:260:30:260:35 | ... <= ... | 1.0 | -| test.c:260:35:260:35 | b | 3.0 | -| test.c:260:40:260:40 | b | 3.0 | -| test.c:260:40:260:46 | ... <= ... | 1.0 | -| test.c:260:45:260:46 | 23 | 1.0 | -| test.c:261:13:261:13 | a | 2.0 | -| test.c:261:13:261:15 | ... * ... | 1.0 | -| test.c:261:15:261:15 | b | 3.0 | -| test.c:262:5:262:9 | total | 2.0 | -| test.c:262:5:262:14 | ... += ... | 2.0 | -| test.c:262:14:262:14 | r | 1.0 | -| test.c:264:7:264:9 | - ... | 1.0 | -| test.c:264:7:264:14 | ... <= ... | 1.0 | -| test.c:264:7:264:25 | ... && ... | 1.0 | -| test.c:264:7:264:37 | ... && ... | 1.0 | -| test.c:264:7:264:48 | ... && ... | 1.0 | -| test.c:264:8:264:9 | 17 | 1.0 | -| test.c:264:14:264:14 | a | 3.0 | -| test.c:264:19:264:19 | a | 3.0 | -| test.c:264:19:264:25 | ... <= ... | 1.0 | -| test.c:264:24:264:25 | 11 | 1.0 | -| test.c:264:30:264:32 | - ... | 1.0 | -| test.c:264:30:264:37 | ... <= ... | 1.0 | -| test.c:264:31:264:32 | 13 | 1.0 | -| test.c:264:37:264:37 | b | 7.0 | -| test.c:264:42:264:42 | b | 7.0 | -| test.c:264:42:264:48 | ... <= ... | 1.0 | -| test.c:264:47:264:48 | 23 | 1.0 | -| test.c:265:13:265:13 | a | 3.0 | -| test.c:265:13:265:15 | ... * ... | 1.0 | -| test.c:265:15:265:15 | b | 7.0 | -| test.c:266:5:266:9 | total | 4.0 | -| test.c:266:5:266:14 | ... += ... | 4.0 | -| test.c:266:14:266:14 | r | 1.0 | -| test.c:268:7:268:9 | - ... | 1.0 | -| test.c:268:7:268:14 | ... <= ... | 1.0 | -| test.c:268:7:268:25 | ... && ... | 1.0 | -| test.c:268:7:268:37 | ... && ... | 1.0 | -| test.c:268:7:268:47 | ... && ... | 1.0 | -| test.c:268:8:268:9 | 17 | 1.0 | -| test.c:268:14:268:14 | a | 4.0 | -| test.c:268:19:268:19 | a | 4.0 | -| test.c:268:19:268:25 | ... <= ... | 1.0 | -| test.c:268:24:268:25 | 11 | 1.0 | -| test.c:268:30:268:32 | - ... | 1.0 | -| test.c:268:30:268:37 | ... <= ... | 1.0 | -| test.c:268:31:268:32 | 13 | 1.0 | -| test.c:268:37:268:37 | b | 15.0 | -| test.c:268:42:268:42 | b | 15.0 | -| test.c:268:42:268:47 | ... <= ... | 1.0 | -| test.c:268:47:268:47 | 0 | 1.0 | -| test.c:269:13:269:13 | a | 4.0 | -| test.c:269:13:269:15 | ... * ... | 1.0 | -| test.c:269:15:269:15 | b | 15.0 | -| test.c:270:5:270:9 | total | 8.0 | -| test.c:270:5:270:14 | ... += ... | 8.0 | -| test.c:270:14:270:14 | r | 1.0 | -| test.c:272:7:272:9 | - ... | 1.0 | -| test.c:272:7:272:14 | ... <= ... | 1.0 | -| test.c:272:7:272:25 | ... && ... | 1.0 | -| test.c:272:7:272:37 | ... && ... | 1.0 | -| test.c:272:7:272:48 | ... && ... | 1.0 | -| test.c:272:8:272:9 | 17 | 1.0 | -| test.c:272:14:272:14 | a | 5.0 | -| test.c:272:19:272:19 | a | 5.0 | -| test.c:272:19:272:25 | ... <= ... | 1.0 | -| test.c:272:24:272:25 | 11 | 1.0 | -| test.c:272:30:272:32 | - ... | 1.0 | -| test.c:272:30:272:37 | ... <= ... | 1.0 | -| test.c:272:31:272:32 | 13 | 1.0 | -| test.c:272:37:272:37 | b | 31.0 | -| test.c:272:42:272:42 | b | 31.0 | -| test.c:272:42:272:48 | ... <= ... | 1.0 | -| test.c:272:47:272:48 | - ... | 1.0 | -| test.c:272:48:272:48 | 7 | 1.0 | -| test.c:273:13:273:13 | a | 5.0 | -| test.c:273:13:273:15 | ... * ... | 1.0 | -| test.c:273:15:273:15 | b | 31.0 | -| test.c:274:5:274:9 | total | 16.0 | -| test.c:274:5:274:14 | ... += ... | 16.0 | -| test.c:274:14:274:14 | r | 1.0 | -| test.c:277:10:277:14 | total | 32.0 | -| test.c:282:14:282:15 | 0 | 1.0 | -| test.c:284:7:284:9 | - ... | 1.0 | -| test.c:284:7:284:14 | ... <= ... | 1.0 | -| test.c:284:7:284:24 | ... && ... | 1.0 | -| test.c:284:7:284:34 | ... && ... | 1.0 | -| test.c:284:7:284:45 | ... && ... | 1.0 | -| test.c:284:8:284:9 | 17 | 1.0 | -| test.c:284:14:284:14 | a | 1.0 | -| test.c:284:19:284:19 | a | 1.0 | -| test.c:284:19:284:24 | ... <= ... | 1.0 | -| test.c:284:24:284:24 | 0 | 1.0 | -| test.c:284:29:284:29 | 5 | 1.0 | -| test.c:284:29:284:34 | ... <= ... | 1.0 | -| test.c:284:34:284:34 | b | 1.0 | -| test.c:284:39:284:39 | b | 1.0 | -| test.c:284:39:284:45 | ... <= ... | 1.0 | -| test.c:284:44:284:45 | 23 | 1.0 | -| test.c:285:13:285:13 | a | 1.0 | -| test.c:285:13:285:15 | ... * ... | 1.0 | -| test.c:285:15:285:15 | b | 1.0 | -| test.c:286:5:286:9 | total | 1.0 | -| test.c:286:5:286:14 | ... += ... | 1.0 | -| test.c:286:14:286:14 | r | 1.0 | -| test.c:288:7:288:9 | - ... | 1.0 | -| test.c:288:7:288:14 | ... <= ... | 1.0 | -| test.c:288:7:288:24 | ... && ... | 1.0 | -| test.c:288:7:288:34 | ... && ... | 1.0 | -| test.c:288:7:288:45 | ... && ... | 1.0 | -| test.c:288:8:288:9 | 17 | 1.0 | -| test.c:288:14:288:14 | a | 2.0 | -| test.c:288:19:288:19 | a | 2.0 | -| test.c:288:19:288:24 | ... <= ... | 1.0 | -| test.c:288:24:288:24 | 0 | 1.0 | -| test.c:288:29:288:29 | 0 | 1.0 | -| test.c:288:29:288:34 | ... <= ... | 1.0 | -| test.c:288:34:288:34 | b | 3.0 | -| test.c:288:39:288:39 | b | 3.0 | -| test.c:288:39:288:45 | ... <= ... | 1.0 | -| test.c:288:44:288:45 | 23 | 1.0 | -| test.c:289:13:289:13 | a | 2.0 | -| test.c:289:13:289:15 | ... * ... | 1.0 | -| test.c:289:15:289:15 | b | 3.0 | -| test.c:290:5:290:9 | total | 2.0 | -| test.c:290:5:290:14 | ... += ... | 2.0 | -| test.c:290:14:290:14 | r | 1.0 | -| test.c:292:7:292:9 | - ... | 1.0 | -| test.c:292:7:292:14 | ... <= ... | 1.0 | -| test.c:292:7:292:24 | ... && ... | 1.0 | -| test.c:292:7:292:36 | ... && ... | 1.0 | -| test.c:292:7:292:47 | ... && ... | 1.0 | -| test.c:292:8:292:9 | 17 | 1.0 | -| test.c:292:14:292:14 | a | 3.0 | -| test.c:292:19:292:19 | a | 3.0 | -| test.c:292:19:292:24 | ... <= ... | 1.0 | -| test.c:292:24:292:24 | 0 | 1.0 | -| test.c:292:29:292:31 | - ... | 1.0 | -| test.c:292:29:292:36 | ... <= ... | 1.0 | -| test.c:292:30:292:31 | 13 | 1.0 | -| test.c:292:36:292:36 | b | 7.0 | -| test.c:292:41:292:41 | b | 7.0 | -| test.c:292:41:292:47 | ... <= ... | 1.0 | -| test.c:292:46:292:47 | 23 | 1.0 | -| test.c:293:13:293:13 | a | 3.0 | -| test.c:293:13:293:15 | ... * ... | 1.0 | -| test.c:293:15:293:15 | b | 7.0 | -| test.c:294:5:294:9 | total | 4.0 | -| test.c:294:5:294:14 | ... += ... | 4.0 | -| test.c:294:14:294:14 | r | 1.0 | -| test.c:296:7:296:9 | - ... | 1.0 | -| test.c:296:7:296:14 | ... <= ... | 1.0 | -| test.c:296:7:296:24 | ... && ... | 1.0 | -| test.c:296:7:296:36 | ... && ... | 1.0 | -| test.c:296:7:296:46 | ... && ... | 1.0 | -| test.c:296:8:296:9 | 17 | 1.0 | -| test.c:296:14:296:14 | a | 4.0 | -| test.c:296:19:296:19 | a | 4.0 | -| test.c:296:19:296:24 | ... <= ... | 1.0 | -| test.c:296:24:296:24 | 0 | 1.0 | -| test.c:296:29:296:31 | - ... | 1.0 | -| test.c:296:29:296:36 | ... <= ... | 1.0 | -| test.c:296:30:296:31 | 13 | 1.0 | -| test.c:296:36:296:36 | b | 15.0 | -| test.c:296:41:296:41 | b | 15.0 | -| test.c:296:41:296:46 | ... <= ... | 1.0 | -| test.c:296:46:296:46 | 0 | 1.0 | -| test.c:297:13:297:13 | a | 4.0 | -| test.c:297:13:297:15 | ... * ... | 1.0 | -| test.c:297:15:297:15 | b | 15.0 | -| test.c:298:5:298:9 | total | 8.0 | -| test.c:298:5:298:14 | ... += ... | 8.0 | -| test.c:298:14:298:14 | r | 1.0 | -| test.c:300:7:300:9 | - ... | 1.0 | -| test.c:300:7:300:14 | ... <= ... | 1.0 | -| test.c:300:7:300:24 | ... && ... | 1.0 | -| test.c:300:7:300:36 | ... && ... | 1.0 | -| test.c:300:7:300:47 | ... && ... | 1.0 | -| test.c:300:8:300:9 | 17 | 1.0 | -| test.c:300:14:300:14 | a | 5.0 | -| test.c:300:19:300:19 | a | 5.0 | -| test.c:300:19:300:24 | ... <= ... | 1.0 | -| test.c:300:24:300:24 | 0 | 1.0 | -| test.c:300:29:300:31 | - ... | 1.0 | -| test.c:300:29:300:36 | ... <= ... | 1.0 | -| test.c:300:30:300:31 | 13 | 1.0 | -| test.c:300:36:300:36 | b | 31.0 | -| test.c:300:41:300:41 | b | 31.0 | -| test.c:300:41:300:47 | ... <= ... | 1.0 | -| test.c:300:46:300:47 | - ... | 1.0 | -| test.c:300:47:300:47 | 7 | 1.0 | -| test.c:301:13:301:13 | a | 5.0 | -| test.c:301:13:301:15 | ... * ... | 1.0 | -| test.c:301:15:301:15 | b | 31.0 | -| test.c:302:5:302:9 | total | 16.0 | -| test.c:302:5:302:14 | ... += ... | 16.0 | -| test.c:302:14:302:14 | r | 1.0 | -| test.c:305:10:305:14 | total | 32.0 | -| test.c:310:14:310:15 | 0 | 1.0 | -| test.c:312:7:312:9 | - ... | 1.0 | -| test.c:312:7:312:14 | ... <= ... | 1.0 | -| test.c:312:7:312:25 | ... && ... | 1.0 | -| test.c:312:7:312:35 | ... && ... | 1.0 | -| test.c:312:7:312:46 | ... && ... | 1.0 | -| test.c:312:8:312:9 | 17 | 1.0 | -| test.c:312:14:312:14 | a | 1.0 | -| test.c:312:19:312:19 | a | 1.0 | -| test.c:312:19:312:25 | ... <= ... | 1.0 | -| test.c:312:24:312:25 | - ... | 1.0 | -| test.c:312:25:312:25 | 2 | 1.0 | -| test.c:312:30:312:30 | 5 | 1.0 | -| test.c:312:30:312:35 | ... <= ... | 1.0 | -| test.c:312:35:312:35 | b | 1.0 | -| test.c:312:40:312:40 | b | 1.0 | -| test.c:312:40:312:46 | ... <= ... | 1.0 | -| test.c:312:45:312:46 | 23 | 1.0 | -| test.c:313:13:313:13 | a | 1.0 | -| test.c:313:13:313:15 | ... * ... | 1.0 | -| test.c:313:15:313:15 | b | 1.0 | -| test.c:314:5:314:9 | total | 1.0 | -| test.c:314:5:314:14 | ... += ... | 1.0 | -| test.c:314:14:314:14 | r | 1.0 | -| test.c:316:7:316:9 | - ... | 1.0 | -| test.c:316:7:316:14 | ... <= ... | 1.0 | -| test.c:316:7:316:25 | ... && ... | 1.0 | -| test.c:316:7:316:35 | ... && ... | 1.0 | -| test.c:316:7:316:46 | ... && ... | 1.0 | -| test.c:316:8:316:9 | 17 | 1.0 | -| test.c:316:14:316:14 | a | 2.0 | -| test.c:316:19:316:19 | a | 2.0 | -| test.c:316:19:316:25 | ... <= ... | 1.0 | -| test.c:316:24:316:25 | - ... | 1.0 | -| test.c:316:25:316:25 | 2 | 1.0 | -| test.c:316:30:316:30 | 0 | 1.0 | -| test.c:316:30:316:35 | ... <= ... | 1.0 | -| test.c:316:35:316:35 | b | 3.0 | -| test.c:316:40:316:40 | b | 3.0 | -| test.c:316:40:316:46 | ... <= ... | 1.0 | -| test.c:316:45:316:46 | 23 | 1.0 | -| test.c:317:13:317:13 | a | 2.0 | -| test.c:317:13:317:15 | ... * ... | 1.0 | -| test.c:317:15:317:15 | b | 3.0 | -| test.c:318:5:318:9 | total | 2.0 | -| test.c:318:5:318:14 | ... += ... | 2.0 | -| test.c:318:14:318:14 | r | 1.0 | -| test.c:320:7:320:9 | - ... | 1.0 | -| test.c:320:7:320:14 | ... <= ... | 1.0 | -| test.c:320:7:320:25 | ... && ... | 1.0 | -| test.c:320:7:320:37 | ... && ... | 1.0 | -| test.c:320:7:320:48 | ... && ... | 1.0 | -| test.c:320:8:320:9 | 17 | 1.0 | -| test.c:320:14:320:14 | a | 3.0 | -| test.c:320:19:320:19 | a | 3.0 | -| test.c:320:19:320:25 | ... <= ... | 1.0 | -| test.c:320:24:320:25 | - ... | 1.0 | -| test.c:320:25:320:25 | 2 | 1.0 | -| test.c:320:30:320:32 | - ... | 1.0 | -| test.c:320:30:320:37 | ... <= ... | 1.0 | -| test.c:320:31:320:32 | 13 | 1.0 | -| test.c:320:37:320:37 | b | 7.0 | -| test.c:320:42:320:42 | b | 7.0 | -| test.c:320:42:320:48 | ... <= ... | 1.0 | -| test.c:320:47:320:48 | 23 | 1.0 | -| test.c:321:13:321:13 | a | 3.0 | -| test.c:321:13:321:15 | ... * ... | 1.0 | -| test.c:321:15:321:15 | b | 7.0 | -| test.c:322:5:322:9 | total | 4.0 | -| test.c:322:5:322:14 | ... += ... | 4.0 | -| test.c:322:14:322:14 | r | 1.0 | -| test.c:324:7:324:9 | - ... | 1.0 | -| test.c:324:7:324:14 | ... <= ... | 1.0 | -| test.c:324:7:324:25 | ... && ... | 1.0 | -| test.c:324:7:324:37 | ... && ... | 1.0 | -| test.c:324:7:324:47 | ... && ... | 1.0 | -| test.c:324:8:324:9 | 17 | 1.0 | -| test.c:324:14:324:14 | a | 4.0 | -| test.c:324:19:324:19 | a | 4.0 | -| test.c:324:19:324:25 | ... <= ... | 1.0 | -| test.c:324:24:324:25 | - ... | 1.0 | -| test.c:324:25:324:25 | 2 | 1.0 | -| test.c:324:30:324:32 | - ... | 1.0 | -| test.c:324:30:324:37 | ... <= ... | 1.0 | -| test.c:324:31:324:32 | 13 | 1.0 | -| test.c:324:37:324:37 | b | 15.0 | -| test.c:324:42:324:42 | b | 15.0 | -| test.c:324:42:324:47 | ... <= ... | 1.0 | -| test.c:324:47:324:47 | 0 | 1.0 | -| test.c:325:13:325:13 | a | 4.0 | -| test.c:325:13:325:15 | ... * ... | 1.0 | -| test.c:325:15:325:15 | b | 15.0 | -| test.c:326:5:326:9 | total | 8.0 | -| test.c:326:5:326:14 | ... += ... | 8.0 | -| test.c:326:14:326:14 | r | 1.0 | -| test.c:328:7:328:9 | - ... | 1.0 | -| test.c:328:7:328:14 | ... <= ... | 1.0 | -| test.c:328:7:328:25 | ... && ... | 1.0 | -| test.c:328:7:328:37 | ... && ... | 1.0 | -| test.c:328:7:328:48 | ... && ... | 1.0 | -| test.c:328:8:328:9 | 17 | 1.0 | -| test.c:328:14:328:14 | a | 5.0 | -| test.c:328:19:328:19 | a | 5.0 | -| test.c:328:19:328:25 | ... <= ... | 1.0 | -| test.c:328:24:328:25 | - ... | 1.0 | -| test.c:328:25:328:25 | 2 | 1.0 | -| test.c:328:30:328:32 | - ... | 1.0 | -| test.c:328:30:328:37 | ... <= ... | 1.0 | -| test.c:328:31:328:32 | 13 | 1.0 | -| test.c:328:37:328:37 | b | 31.0 | -| test.c:328:42:328:42 | b | 31.0 | -| test.c:328:42:328:48 | ... <= ... | 1.0 | -| test.c:328:47:328:48 | - ... | 1.0 | -| test.c:328:48:328:48 | 7 | 1.0 | -| test.c:329:13:329:13 | a | 5.0 | -| test.c:329:13:329:15 | ... * ... | 1.0 | -| test.c:329:15:329:15 | b | 31.0 | -| test.c:330:5:330:9 | total | 16.0 | -| test.c:330:5:330:14 | ... += ... | 16.0 | -| test.c:330:14:330:14 | r | 1.0 | -| test.c:333:10:333:14 | total | 32.0 | -| test.c:339:28:339:43 | 9007199254740992 | 1.0 | -| test.c:339:28:339:47 | (unsigned long long)... | 1.0 | -| test.c:339:28:339:47 | ... - ... | 1.0 | -| test.c:339:47:339:47 | 1 | 1.0 | -| test.c:339:47:339:47 | (long)... | 1.0 | -| test.c:341:32:341:34 | odd | 1.0 | -| test.c:341:32:341:39 | ... >> ... | 1.0 | -| test.c:341:39:341:39 | 1 | 1.0 | -| test.c:343:10:343:16 | shifted | 1.0 | -| test.c:348:22:348:32 | (...) | 1.0 | -| test.c:348:22:348:36 | ... > ... | 1.0 | -| test.c:348:22:348:44 | ... ? ... : ... | 1.0 | -| test.c:348:23:348:23 | 2 | 1.0 | -| test.c:348:23:348:23 | (unsigned int)... | 1.0 | -| test.c:348:23:348:27 | ... * ... | 1.0 | -| test.c:348:23:348:31 | ... + ... | 1.0 | -| test.c:348:27:348:27 | e | 1.0 | -| test.c:348:31:348:31 | 1 | 1.0 | -| test.c:348:31:348:31 | (unsigned int)... | 1.0 | -| test.c:348:36:348:36 | 0 | 1.0 | -| test.c:348:36:348:36 | (unsigned int)... | 1.0 | -| test.c:348:40:348:40 | e | 1.0 | -| test.c:348:44:348:44 | 2 | 1.0 | -| test.c:348:44:348:44 | (unsigned int)... | 1.0 | -| test.c:349:20:349:30 | (...) | 2.0 | -| test.c:349:20:349:35 | ... >= ... | 1.0 | -| test.c:349:20:349:43 | (signed int)... | 2.0 | -| test.c:349:20:349:43 | ... ? ... : ... | 2.0 | -| test.c:349:21:349:21 | 2 | 1.0 | -| test.c:349:21:349:21 | (unsigned int)... | 1.0 | -| test.c:349:21:349:25 | ... * ... | 2.0 | -| test.c:349:21:349:29 | ... + ... | 2.0 | -| test.c:349:25:349:25 | e | 2.0 | -| test.c:349:29:349:29 | 1 | 1.0 | -| test.c:349:29:349:29 | (unsigned int)... | 1.0 | -| test.c:349:35:349:35 | 0 | 1.0 | -| test.c:349:35:349:35 | (unsigned int)... | 1.0 | -| test.c:349:39:349:39 | e | 2.0 | -| test.c:349:43:349:43 | 2 | 1.0 | -| test.c:349:43:349:43 | (unsigned int)... | 1.0 | -| test.c:350:22:350:32 | (...) | 4.0 | -| test.c:350:22:350:36 | ... > ... | 1.0 | -| test.c:350:22:350:44 | ... ? ... : ... | 4.0 | -| test.c:350:23:350:23 | 3 | 1.0 | -| test.c:350:23:350:23 | (unsigned int)... | 1.0 | -| test.c:350:23:350:27 | ... * ... | 4.0 | -| test.c:350:23:350:31 | ... + ... | 4.0 | -| test.c:350:27:350:27 | e | 4.0 | -| test.c:350:31:350:31 | 2 | 1.0 | -| test.c:350:31:350:31 | (unsigned int)... | 1.0 | -| test.c:350:36:350:36 | 0 | 1.0 | -| test.c:350:36:350:36 | (unsigned int)... | 1.0 | -| test.c:350:40:350:40 | e | 4.0 | -| test.c:350:44:350:44 | 2 | 1.0 | -| test.c:350:44:350:44 | (unsigned int)... | 1.0 | -| test.c:351:22:351:32 | (...) | 8.0 | -| test.c:351:22:351:36 | ... > ... | 1.0 | -| test.c:351:22:351:44 | ... ? ... : ... | 8.0 | -| test.c:351:23:351:23 | 2 | 1.0 | -| test.c:351:23:351:23 | (unsigned int)... | 1.0 | -| test.c:351:23:351:27 | ... * ... | 8.0 | -| test.c:351:23:351:31 | ... + ... | 8.0 | -| test.c:351:27:351:27 | e | 8.0 | -| test.c:351:31:351:31 | 1 | 1.0 | -| test.c:351:31:351:31 | (unsigned int)... | 1.0 | -| test.c:351:36:351:36 | 0 | 1.0 | -| test.c:351:36:351:36 | (unsigned int)... | 1.0 | -| test.c:351:40:351:40 | e | 8.0 | -| test.c:351:44:351:44 | 2 | 1.0 | -| test.c:351:44:351:44 | (unsigned int)... | 1.0 | -| test.c:352:22:352:32 | (...) | 16.0 | -| test.c:352:22:352:37 | ... > ... | 1.0 | -| test.c:352:22:352:45 | ... ? ... : ... | 16.0 | -| test.c:352:23:352:23 | 2 | 1.0 | -| test.c:352:23:352:23 | (unsigned int)... | 1.0 | -| test.c:352:23:352:27 | ... * ... | 16.0 | -| test.c:352:23:352:31 | ... + ... | 16.0 | -| test.c:352:27:352:27 | e | 16.0 | -| test.c:352:31:352:31 | 1 | 1.0 | -| test.c:352:31:352:31 | (unsigned int)... | 1.0 | -| test.c:352:36:352:37 | 16 | 1.0 | -| test.c:352:36:352:37 | (unsigned int)... | 1.0 | -| test.c:352:41:352:41 | e | 16.0 | -| test.c:352:45:352:45 | 2 | 1.0 | -| test.c:352:45:352:45 | (unsigned int)... | 1.0 | -| test.c:354:10:354:12 | bi1 | 1.0 | -| test.c:354:10:354:18 | ... + ... | 2.0 | -| test.c:354:10:354:24 | ... + ... | 8.0 | -| test.c:354:10:354:30 | ... + ... | 64.0 | -| test.c:354:10:354:36 | ... + ... | 1024.0 | -| test.c:354:16:354:18 | (unsigned int)... | 2.0 | -| test.c:354:16:354:18 | bi2 | 2.0 | -| test.c:354:22:354:24 | bi3 | 4.0 | -| test.c:354:28:354:30 | bi4 | 8.0 | -| test.c:354:34:354:36 | bi5 | 16.0 | -| test.c:358:13:358:14 | 0 | 1.0 | -| test.c:359:7:359:7 | x | 1.0 | -| test.c:359:7:359:11 | ... < ... | 1.0 | -| test.c:359:11:359:11 | 0 | 1.0 | -| test.c:360:12:360:13 | - ... | 1.0 | -| test.c:360:13:360:13 | 1 | 1.0 | -| test.c:363:10:363:10 | i | 13.0 | -| test.c:363:10:363:14 | ... < ... | 1.0 | -| test.c:363:14:363:14 | 3 | 1.0 | -| test.c:364:5:364:5 | i | 13.0 | -| test.c:364:5:364:7 | ... ++ | 13.0 | -| test.c:366:3:366:3 | d | 1.0 | -| test.c:366:3:366:7 | ... = ... | 13.0 | -| test.c:366:7:366:7 | i | 13.0 | -| test.c:367:7:367:7 | x | 1.0 | -| test.c:367:7:367:11 | ... < ... | 1.0 | -| test.c:367:11:367:11 | 0 | 1.0 | -| test.c:368:9:368:9 | d | 13.0 | -| test.c:368:9:368:14 | ... > ... | 1.0 | -| test.c:368:13:368:14 | - ... | 1.0 | -| test.c:368:14:368:14 | x | 1.0 | -| test.c:369:14:369:14 | 1 | 1.0 | -| test.c:372:10:372:10 | 0 | 1.0 | -| test.c:378:3:378:4 | y1 | 1.0 | -| test.c:378:3:378:23 | ... = ... | 1.0 | -| test.c:378:8:378:8 | x | 1.0 | -| test.c:378:8:378:14 | ... < ... | 1.0 | -| test.c:378:8:378:23 | ... ? ... : ... | 1.0 | -| test.c:378:12:378:14 | 100 | 1.0 | -| test.c:378:12:378:14 | (unsigned int)... | 1.0 | -| test.c:378:18:378:18 | x | 1.0 | -| test.c:378:22:378:23 | 10 | 1.0 | -| test.c:378:22:378:23 | (unsigned int)... | 1.0 | -| test.c:379:3:379:4 | y2 | 1.0 | -| test.c:379:3:379:24 | ... = ... | 2.0 | -| test.c:379:8:379:8 | x | 2.0 | -| test.c:379:8:379:15 | ... >= ... | 1.0 | -| test.c:379:8:379:24 | ... ? ... : ... | 2.0 | -| test.c:379:13:379:15 | 100 | 1.0 | -| test.c:379:13:379:15 | (unsigned int)... | 1.0 | -| test.c:379:19:379:20 | 10 | 1.0 | -| test.c:379:19:379:20 | (unsigned int)... | 1.0 | -| test.c:379:24:379:24 | x | 2.0 | -| test.c:380:3:380:4 | y3 | 1.0 | -| test.c:380:3:380:8 | ... = ... | 1.0 | -| test.c:380:8:380:8 | 0 | 1.0 | -| test.c:380:8:380:8 | (unsigned int)... | 1.0 | -| test.c:381:3:381:4 | y4 | 1.0 | -| test.c:381:3:381:8 | ... = ... | 1.0 | -| test.c:381:8:381:8 | 0 | 1.0 | -| test.c:381:8:381:8 | (unsigned int)... | 1.0 | -| test.c:382:3:382:4 | y5 | 1.0 | -| test.c:382:3:382:8 | ... = ... | 1.0 | -| test.c:382:8:382:8 | 0 | 1.0 | -| test.c:382:8:382:8 | (unsigned int)... | 1.0 | -| test.c:383:3:383:4 | y6 | 1.0 | -| test.c:383:3:383:8 | ... = ... | 1.0 | -| test.c:383:8:383:8 | 0 | 1.0 | -| test.c:383:8:383:8 | (unsigned int)... | 1.0 | -| test.c:384:3:384:4 | y7 | 1.0 | -| test.c:384:3:384:8 | ... = ... | 1.0 | -| test.c:384:8:384:8 | 0 | 1.0 | -| test.c:384:8:384:8 | (unsigned int)... | 1.0 | -| test.c:385:3:385:4 | y8 | 1.0 | -| test.c:385:3:385:8 | ... = ... | 1.0 | -| test.c:385:8:385:8 | 0 | 1.0 | -| test.c:385:8:385:8 | (unsigned int)... | 1.0 | -| test.c:386:7:386:7 | x | 4.0 | -| test.c:386:7:386:13 | ... < ... | 1.0 | -| test.c:386:11:386:13 | 300 | 1.0 | -| test.c:386:11:386:13 | (unsigned int)... | 1.0 | -| test.c:387:5:387:6 | y3 | 1.0 | -| test.c:387:5:387:15 | ... = ... | 4.0 | -| test.c:387:10:387:10 | x | 4.0 | -| test.c:387:10:387:15 | ... ? ... : ... | 4.0 | -| test.c:387:15:387:15 | 5 | 1.0 | -| test.c:387:15:387:15 | (unsigned int)... | 1.0 | -| test.c:388:5:388:6 | y4 | 1.0 | -| test.c:388:5:388:17 | ... = ... | 4.0 | -| test.c:388:10:388:10 | x | 4.0 | -| test.c:388:10:388:17 | ... ? ... : ... | 4.0 | -| test.c:388:15:388:17 | 500 | 1.0 | -| test.c:388:15:388:17 | (unsigned int)... | 1.0 | -| test.c:389:5:389:6 | y5 | 1.0 | -| test.c:389:5:389:21 | ... = ... | 4.0 | -| test.c:389:10:389:14 | (...) | 4.0 | -| test.c:389:10:389:21 | ... ? ... : ... | 4.0 | -| test.c:389:11:389:11 | x | 4.0 | -| test.c:389:11:389:13 | ... + ... | 4.0 | -| test.c:389:13:389:13 | 1 | 1.0 | -| test.c:389:13:389:13 | (unsigned int)... | 1.0 | -| test.c:389:19:389:21 | 500 | 1.0 | -| test.c:389:19:389:21 | (unsigned int)... | 1.0 | -| test.c:390:5:390:6 | y6 | 1.0 | -| test.c:390:5:390:36 | ... = ... | 4.0 | -| test.c:390:10:390:31 | (...) | 4.0 | -| test.c:390:10:390:36 | (unsigned int)... | 4.0 | -| test.c:390:10:390:36 | ... ? ... : ... | 4.0 | -| test.c:390:11:390:30 | (unsigned char)... | 4.0 | -| test.c:390:26:390:30 | (...) | 4.0 | -| test.c:390:27:390:27 | x | 4.0 | -| test.c:390:27:390:29 | ... + ... | 4.0 | -| test.c:390:29:390:29 | 1 | 1.0 | -| test.c:390:29:390:29 | (unsigned int)... | 1.0 | -| test.c:390:36:390:36 | 5 | 1.0 | -| test.c:391:5:391:6 | y7 | 1.0 | -| test.c:391:5:391:38 | ... = ... | 4.0 | -| test.c:391:10:391:31 | (...) | 4.0 | -| test.c:391:10:391:38 | (unsigned int)... | 4.0 | -| test.c:391:10:391:38 | ... ? ... : ... | 4.0 | -| test.c:391:11:391:30 | (unsigned char)... | 4.0 | -| test.c:391:26:391:30 | (...) | 4.0 | -| test.c:391:27:391:27 | x | 4.0 | -| test.c:391:27:391:29 | ... + ... | 4.0 | -| test.c:391:29:391:29 | 1 | 1.0 | -| test.c:391:29:391:29 | (unsigned int)... | 1.0 | -| test.c:391:36:391:38 | 500 | 1.0 | -| test.c:392:5:392:6 | y8 | 1.0 | -| test.c:392:5:392:39 | ... = ... | 4.0 | -| test.c:392:10:392:32 | (...) | 4.0 | -| test.c:392:10:392:39 | (unsigned int)... | 4.0 | -| test.c:392:10:392:39 | ... ? ... : ... | 4.0 | -| test.c:392:11:392:31 | (unsigned short)... | 4.0 | -| test.c:392:27:392:31 | (...) | 4.0 | -| test.c:392:28:392:28 | x | 4.0 | -| test.c:392:28:392:30 | ... + ... | 4.0 | -| test.c:392:30:392:30 | 1 | 1.0 | -| test.c:392:30:392:30 | (unsigned int)... | 1.0 | -| test.c:392:37:392:39 | 500 | 1.0 | -| test.c:394:10:394:11 | y1 | 1.0 | -| test.c:394:10:394:16 | ... + ... | 2.0 | -| test.c:394:10:394:21 | ... + ... | 10.0 | -| test.c:394:10:394:26 | ... + ... | 50.0 | -| test.c:394:10:394:31 | ... + ... | 250.0 | -| test.c:394:10:394:36 | ... + ... | 1250.0 | -| test.c:394:10:394:41 | ... + ... | 6250.0 | -| test.c:394:10:394:46 | ... + ... | 31250.0 | -| test.c:394:15:394:16 | y2 | 2.0 | -| test.c:394:20:394:21 | y3 | 5.0 | -| test.c:394:25:394:26 | y4 | 5.0 | -| test.c:394:30:394:31 | y5 | 5.0 | -| test.c:394:35:394:36 | y6 | 5.0 | -| test.c:394:40:394:41 | y7 | 5.0 | -| test.c:394:45:394:46 | y8 | 5.0 | -| test.c:400:3:400:4 | y1 | 1.0 | -| test.c:400:3:400:24 | ... = ... | 1.0 | -| test.c:400:8:400:8 | x | 1.0 | -| test.c:400:8:400:14 | ... > ... | 1.0 | -| test.c:400:8:400:24 | ... ? ... : ... | 1.0 | -| test.c:400:12:400:14 | 100 | 1.0 | -| test.c:400:12:400:14 | (unsigned int)... | 1.0 | -| test.c:400:18:400:18 | x | 1.0 | -| test.c:400:22:400:24 | 110 | 1.0 | -| test.c:400:22:400:24 | (unsigned int)... | 1.0 | -| test.c:401:3:401:4 | y2 | 1.0 | -| test.c:401:3:401:25 | ... = ... | 2.0 | -| test.c:401:8:401:8 | x | 2.0 | -| test.c:401:8:401:15 | ... <= ... | 1.0 | -| test.c:401:8:401:25 | ... ? ... : ... | 2.0 | -| test.c:401:13:401:15 | 100 | 1.0 | -| test.c:401:13:401:15 | (unsigned int)... | 1.0 | -| test.c:401:19:401:21 | 110 | 1.0 | -| test.c:401:19:401:21 | (unsigned int)... | 1.0 | -| test.c:401:25:401:25 | x | 2.0 | -| test.c:402:3:402:4 | y3 | 1.0 | -| test.c:402:3:402:11 | ... = ... | 1.0 | -| test.c:402:8:402:11 | 1000 | 1.0 | -| test.c:402:8:402:11 | (unsigned int)... | 1.0 | -| test.c:403:3:403:4 | y4 | 1.0 | -| test.c:403:3:403:11 | ... = ... | 1.0 | -| test.c:403:8:403:11 | 1000 | 1.0 | -| test.c:403:8:403:11 | (unsigned int)... | 1.0 | -| test.c:404:3:404:4 | y5 | 1.0 | -| test.c:404:3:404:11 | ... = ... | 1.0 | -| test.c:404:8:404:11 | 1000 | 1.0 | -| test.c:404:8:404:11 | (unsigned int)... | 1.0 | -| test.c:405:7:405:7 | x | 4.0 | -| test.c:405:7:405:14 | ... >= ... | 1.0 | -| test.c:405:12:405:14 | 300 | 1.0 | -| test.c:405:12:405:14 | (unsigned int)... | 1.0 | -| test.c:406:5:406:6 | y3 | 1.0 | -| test.c:406:5:406:21 | ... = ... | 4.0 | -| test.c:406:10:406:16 | (...) | 4.0 | -| test.c:406:10:406:21 | ... ? ... : ... | 4.0 | -| test.c:406:11:406:11 | x | 4.0 | -| test.c:406:11:406:15 | ... - ... | 4.0 | -| test.c:406:13:406:15 | 300 | 1.0 | -| test.c:406:13:406:15 | (unsigned int)... | 1.0 | -| test.c:406:21:406:21 | 5 | 1.0 | -| test.c:406:21:406:21 | (unsigned int)... | 1.0 | -| test.c:407:5:407:6 | y4 | 1.0 | -| test.c:407:5:407:21 | ... = ... | 4.0 | -| test.c:407:10:407:16 | (...) | 4.0 | -| test.c:407:10:407:21 | ... ? ... : ... | 4.0 | -| test.c:407:11:407:11 | x | 4.0 | -| test.c:407:11:407:15 | ... - ... | 4.0 | -| test.c:407:13:407:15 | 200 | 1.0 | -| test.c:407:13:407:15 | (unsigned int)... | 1.0 | -| test.c:407:21:407:21 | 5 | 1.0 | -| test.c:407:21:407:21 | (unsigned int)... | 1.0 | -| test.c:408:5:408:6 | y5 | 1.0 | -| test.c:408:5:408:38 | ... = ... | 4.0 | -| test.c:408:10:408:33 | (...) | 4.0 | -| test.c:408:10:408:38 | (unsigned int)... | 4.0 | -| test.c:408:10:408:38 | ... ? ... : ... | 4.0 | -| test.c:408:11:408:32 | (unsigned char)... | 4.0 | -| test.c:408:26:408:32 | (...) | 4.0 | -| test.c:408:27:408:27 | x | 4.0 | -| test.c:408:27:408:31 | ... - ... | 4.0 | -| test.c:408:29:408:31 | 200 | 1.0 | -| test.c:408:29:408:31 | (unsigned int)... | 1.0 | -| test.c:408:38:408:38 | 5 | 1.0 | -| test.c:410:10:410:11 | y1 | 1.0 | -| test.c:410:10:410:16 | ... + ... | 2.0 | -| test.c:410:10:410:21 | ... + ... | 10.0 | -| test.c:410:10:410:26 | ... + ... | 50.0 | -| test.c:410:10:410:31 | ... + ... | 250.0 | -| test.c:410:15:410:16 | y2 | 2.0 | -| test.c:410:20:410:21 | y3 | 5.0 | -| test.c:410:25:410:26 | y4 | 5.0 | -| test.c:410:30:410:31 | y5 | 5.0 | -| test.c:415:14:415:14 | m | 1.0 | -| test.c:415:14:415:108 | ... ? ... : ... | 1.0 | -| test.c:415:18:415:18 | n | 1.0 | -| test.c:415:18:415:95 | ... ? ... : ... | 1.0 | -| test.c:415:22:415:22 | o | 1.0 | -| test.c:415:22:415:82 | ... ? ... : ... | 1.0 | -| test.c:415:26:415:26 | p | 1.0 | -| test.c:415:26:415:69 | ... ? ... : ... | 1.0 | -| test.c:415:30:415:30 | q | 1.0 | -| test.c:415:30:415:56 | ... ? ... : ... | 1.0 | -| test.c:415:34:415:43 | 0.4743882700000000008 | 1.0 | -| test.c:415:47:415:56 | 0.1433388700000000071 | 1.0 | -| test.c:415:60:415:69 | 0.3527920299999999787 | 1.0 | -| test.c:415:73:415:82 | 0.3920645799999999959 | 1.0 | -| test.c:415:86:415:95 | 0.2154022499999999896 | 1.0 | -| test.c:415:99:415:108 | 0.4049680500000000238 | 1.0 | -| test.c:416:14:416:14 | m | 2.0 | -| test.c:416:14:416:108 | ... ? ... : ... | 1.0 | -| test.c:416:18:416:18 | n | 3.0 | -| test.c:416:18:416:95 | ... ? ... : ... | 1.0 | -| test.c:416:22:416:22 | o | 3.0 | -| test.c:416:22:416:82 | ... ? ... : ... | 1.0 | -| test.c:416:26:416:26 | p | 3.0 | -| test.c:416:26:416:69 | ... ? ... : ... | 1.0 | -| test.c:416:30:416:30 | q | 3.0 | -| test.c:416:30:416:56 | ... ? ... : ... | 1.0 | -| test.c:416:34:416:43 | 0.3418334800000000229 | 1.0 | -| test.c:416:47:416:56 | 0.3533464000000000049 | 1.0 | -| test.c:416:60:416:69 | 0.2224785300000000077 | 1.0 | -| test.c:416:73:416:82 | 0.326618929999999974 | 1.0 | -| test.c:416:86:416:95 | 0.5927046500000000551 | 1.0 | -| test.c:416:99:416:108 | 0.5297741000000000255 | 1.0 | -| test.c:417:14:417:14 | m | 4.0 | -| test.c:417:14:417:108 | ... ? ... : ... | 1.0 | -| test.c:417:18:417:18 | n | 9.0 | -| test.c:417:18:417:95 | ... ? ... : ... | 1.0 | -| test.c:417:22:417:22 | o | 9.0 | -| test.c:417:22:417:82 | ... ? ... : ... | 1.0 | -| test.c:417:26:417:26 | p | 9.0 | -| test.c:417:26:417:69 | ... ? ... : ... | 1.0 | -| test.c:417:30:417:30 | q | 9.0 | -| test.c:417:30:417:56 | ... ? ... : ... | 1.0 | -| test.c:417:34:417:43 | 0.774296030000000024 | 1.0 | -| test.c:417:47:417:56 | 0.3147808400000000062 | 1.0 | -| test.c:417:60:417:69 | 0.3123551399999999756 | 1.0 | -| test.c:417:73:417:82 | 0.05121255999999999725 | 1.0 | -| test.c:417:86:417:95 | 0.7931074500000000471 | 1.0 | -| test.c:417:99:417:108 | 0.6798145100000000385 | 1.0 | -| test.c:418:14:418:14 | m | 8.0 | -| test.c:418:14:418:108 | ... ? ... : ... | 1.0 | -| test.c:418:18:418:18 | n | 27.0 | -| test.c:418:18:418:95 | ... ? ... : ... | 1.0 | -| test.c:418:22:418:22 | o | 27.0 | -| test.c:418:22:418:82 | ... ? ... : ... | 1.0 | -| test.c:418:26:418:26 | p | 27.0 | -| test.c:418:26:418:69 | ... ? ... : ... | 1.0 | -| test.c:418:30:418:30 | q | 27.0 | -| test.c:418:30:418:56 | ... ? ... : ... | 1.0 | -| test.c:418:34:418:43 | 0.4472955599999999809 | 1.0 | -| test.c:418:47:418:56 | 0.8059920200000000312 | 1.0 | -| test.c:418:60:418:69 | 0.9899726199999999698 | 1.0 | -| test.c:418:73:418:82 | 0.5995273199999999747 | 1.0 | -| test.c:418:86:418:95 | 0.3697694799999999837 | 1.0 | -| test.c:418:99:418:108 | 0.8386683499999999514 | 1.0 | -| test.c:419:14:419:14 | m | 16.0 | -| test.c:419:14:419:108 | ... ? ... : ... | 1.0 | -| test.c:419:18:419:18 | n | 81.0 | -| test.c:419:18:419:95 | ... ? ... : ... | 1.0 | -| test.c:419:22:419:22 | o | 81.0 | -| test.c:419:22:419:82 | ... ? ... : ... | 1.0 | -| test.c:419:26:419:26 | p | 81.0 | -| test.c:419:26:419:69 | ... ? ... : ... | 1.0 | -| test.c:419:30:419:30 | q | 81.0 | -| test.c:419:30:419:56 | ... ? ... : ... | 1.0 | -| test.c:419:34:419:43 | 0.4931182800000000199 | 1.0 | -| test.c:419:47:419:56 | 0.9038991100000000056 | 1.0 | -| test.c:419:60:419:69 | 0.1059771199999999941 | 1.0 | -| test.c:419:73:419:82 | 0.2177842600000000073 | 1.0 | -| test.c:419:86:419:95 | 0.7248596600000000167 | 1.0 | -| test.c:419:99:419:108 | 0.6873487400000000136 | 1.0 | -| test.c:420:14:420:14 | m | 32.0 | -| test.c:420:14:420:108 | ... ? ... : ... | 1.0 | -| test.c:420:18:420:18 | n | 243.0 | -| test.c:420:18:420:95 | ... ? ... : ... | 1.0 | -| test.c:420:22:420:22 | o | 243.0 | -| test.c:420:22:420:82 | ... ? ... : ... | 1.0 | -| test.c:420:26:420:26 | p | 243.0 | -| test.c:420:26:420:69 | ... ? ... : ... | 1.0 | -| test.c:420:30:420:30 | q | 243.0 | -| test.c:420:30:420:56 | ... ? ... : ... | 1.0 | -| test.c:420:34:420:43 | 0.4745284799999999747 | 1.0 | -| test.c:420:47:420:56 | 0.107866500000000004 | 1.0 | -| test.c:420:60:420:69 | 0.1188457599999999947 | 1.0 | -| test.c:420:73:420:82 | 0.7616405200000000431 | 1.0 | -| test.c:420:86:420:95 | 0.3480889200000000239 | 1.0 | -| test.c:420:99:420:108 | 0.584408649999999974 | 1.0 | -| test.c:421:14:421:14 | m | 64.0 | -| test.c:421:14:421:108 | ... ? ... : ... | 1.0 | -| test.c:421:18:421:18 | n | 729.0 | -| test.c:421:18:421:95 | ... ? ... : ... | 1.0 | -| test.c:421:22:421:22 | o | 729.0 | -| test.c:421:22:421:82 | ... ? ... : ... | 1.0 | -| test.c:421:26:421:26 | p | 729.0 | -| test.c:421:26:421:69 | ... ? ... : ... | 1.0 | -| test.c:421:30:421:30 | q | 729.0 | -| test.c:421:30:421:56 | ... ? ... : ... | 1.0 | -| test.c:421:34:421:43 | 0.02524326 | 1.0 | -| test.c:421:47:421:56 | 0.8290504600000000446 | 1.0 | -| test.c:421:60:421:69 | 0.95823075000000002 | 1.0 | -| test.c:421:73:421:82 | 0.1251655799999999985 | 1.0 | -| test.c:421:86:421:95 | 0.8523517900000000536 | 1.0 | -| test.c:421:99:421:108 | 0.3623238400000000081 | 1.0 | -| test.c:422:14:422:14 | m | 128.0 | -| test.c:422:14:422:108 | ... ? ... : ... | 1.0 | -| test.c:422:18:422:18 | n | 2187.0 | -| test.c:422:18:422:95 | ... ? ... : ... | 1.0 | -| test.c:422:22:422:22 | o | 2187.0 | -| test.c:422:22:422:82 | ... ? ... : ... | 1.0 | -| test.c:422:26:422:26 | p | 2187.0 | -| test.c:422:26:422:69 | ... ? ... : ... | 1.0 | -| test.c:422:30:422:30 | q | 2187.0 | -| test.c:422:30:422:56 | ... ? ... : ... | 1.0 | -| test.c:422:34:422:43 | 0.3870862600000000153 | 1.0 | -| test.c:422:47:422:56 | 0.3287604399999999871 | 1.0 | -| test.c:422:60:422:69 | 0.1496348500000000137 | 1.0 | -| test.c:422:73:422:82 | 0.4504110800000000192 | 1.0 | -| test.c:422:86:422:95 | 0.4864090899999999884 | 1.0 | -| test.c:422:99:422:108 | 0.8433127200000000157 | 1.0 | -| test.c:423:14:423:14 | m | 256.0 | -| test.c:423:14:423:108 | ... ? ... : ... | 1.0 | -| test.c:423:18:423:18 | n | 6561.0 | -| test.c:423:18:423:95 | ... ? ... : ... | 1.0 | -| test.c:423:22:423:22 | o | 6561.0 | -| test.c:423:22:423:82 | ... ? ... : ... | 1.0 | -| test.c:423:26:423:26 | p | 6561.0 | -| test.c:423:26:423:69 | ... ? ... : ... | 1.0 | -| test.c:423:30:423:30 | q | 6561.0 | -| test.c:423:30:423:56 | ... ? ... : ... | 1.0 | -| test.c:423:34:423:43 | 0.1575506299999999971 | 1.0 | -| test.c:423:47:423:56 | 0.7708683299999999905 | 1.0 | -| test.c:423:60:423:69 | 0.2642848099999999811 | 1.0 | -| test.c:423:73:423:82 | 0.1480050800000000111 | 1.0 | -| test.c:423:86:423:95 | 0.374281430000000026 | 1.0 | -| test.c:423:99:423:108 | 0.05328182000000000057 | 1.0 | -| test.c:424:14:424:14 | m | 512.0 | -| test.c:424:14:424:108 | ... ? ... : ... | 1.0 | -| test.c:424:18:424:18 | n | 19683.0 | -| test.c:424:18:424:95 | ... ? ... : ... | 1.0 | -| test.c:424:22:424:22 | o | 19683.0 | -| test.c:424:22:424:82 | ... ? ... : ... | 1.0 | -| test.c:424:26:424:26 | p | 19683.0 | -| test.c:424:26:424:69 | ... ? ... : ... | 1.0 | -| test.c:424:30:424:30 | q | 19683.0 | -| test.c:424:30:424:56 | ... ? ... : ... | 1.0 | -| test.c:424:34:424:43 | 0.4173653600000000186 | 1.0 | -| test.c:424:47:424:56 | 0.7682662799999999681 | 1.0 | -| test.c:424:60:424:69 | 0.2764323799999999776 | 1.0 | -| test.c:424:73:424:82 | 0.5567927400000000082 | 1.0 | -| test.c:424:86:424:95 | 0.3946885700000000163 | 1.0 | -| test.c:424:99:424:108 | 0.6907214400000000198 | 1.0 | -| test.c:425:14:425:14 | m | 1024.0 | -| test.c:425:14:425:108 | ... ? ... : ... | 1.0 | -| test.c:425:18:425:18 | n | 59049.0 | -| test.c:425:18:425:95 | ... ? ... : ... | 1.0 | -| test.c:425:22:425:22 | o | 59049.0 | -| test.c:425:22:425:82 | ... ? ... : ... | 1.0 | -| test.c:425:26:425:26 | p | 59049.0 | -| test.c:425:26:425:69 | ... ? ... : ... | 1.0 | -| test.c:425:30:425:30 | q | 59049.0 | -| test.c:425:30:425:56 | ... ? ... : ... | 1.0 | -| test.c:425:34:425:43 | 0.8895534499999999678 | 1.0 | -| test.c:425:47:425:56 | 0.2990482400000000207 | 1.0 | -| test.c:425:60:425:69 | 0.7624258299999999711 | 1.0 | -| test.c:425:73:425:82 | 0.2051910999999999874 | 1.0 | -| test.c:425:86:425:95 | 0.8874555899999999609 | 1.0 | -| test.c:425:99:425:108 | 0.8137279800000000174 | 1.0 | -| test.c:426:14:426:14 | m | 2048.0 | -| test.c:426:14:426:108 | ... ? ... : ... | 1.0 | -| test.c:426:18:426:18 | n | 177147.0 | -| test.c:426:18:426:95 | ... ? ... : ... | 1.0 | -| test.c:426:22:426:22 | o | 177147.0 | -| test.c:426:22:426:82 | ... ? ... : ... | 1.0 | -| test.c:426:26:426:26 | p | 177147.0 | -| test.c:426:26:426:69 | ... ? ... : ... | 1.0 | -| test.c:426:30:426:30 | q | 177147.0 | -| test.c:426:30:426:56 | ... ? ... : ... | 1.0 | -| test.c:426:34:426:43 | 0.4218627600000000033 | 1.0 | -| test.c:426:47:426:56 | 0.5384335799999999672 | 1.0 | -| test.c:426:60:426:69 | 0.4499667900000000054 | 1.0 | -| test.c:426:73:426:82 | 0.1320411400000000013 | 1.0 | -| test.c:426:86:426:95 | 0.5203124099999999475 | 1.0 | -| test.c:426:99:426:108 | 0.4276264699999999808 | 1.0 | -| test.c:432:19:432:19 | a | 1.0 | -| test.c:432:19:432:23 | ... + ... | 1.0 | -| test.c:432:19:432:27 | ... + ... | 1.0 | -| test.c:432:19:432:31 | ... + ... | 1.0 | -| test.c:432:19:432:35 | ... + ... | 1.0 | -| test.c:432:19:432:39 | ... + ... | 1.0 | -| test.c:432:19:432:43 | ... + ... | 1.0 | -| test.c:432:19:432:47 | ... + ... | 1.0 | -| test.c:432:19:432:51 | ... + ... | 1.0 | -| test.c:432:19:432:55 | ... + ... | 1.0 | -| test.c:432:19:432:59 | ... + ... | 1.0 | -| test.c:432:19:432:63 | ... + ... | 1.0 | -| test.c:432:23:432:23 | b | 1.0 | -| test.c:432:27:432:27 | c | 1.0 | -| test.c:432:31:432:31 | d | 1.0 | -| test.c:432:35:432:35 | e | 1.0 | -| test.c:432:39:432:39 | f | 1.0 | -| test.c:432:43:432:43 | g | 1.0 | -| test.c:432:47:432:47 | h | 1.0 | -| test.c:432:51:432:51 | i | 1.0 | -| test.c:432:55:432:55 | j | 1.0 | -| test.c:432:59:432:59 | k | 1.0 | -| test.c:432:63:432:63 | l | 1.0 | -| test.c:434:10:434:15 | output | 1.0 | -| test.c:441:7:441:9 | rhs | 1.0 | -| test.c:441:7:441:14 | ... < ... | 1.0 | -| test.c:441:13:441:14 | 12 | 1.0 | -| test.c:441:13:441:14 | (unsigned int)... | 1.0 | -| test.c:441:19:441:21 | rhs | 1.0 | -| test.c:441:19:441:26 | ... << ... | 1.0 | -| test.c:441:26:441:26 | 1 | 1.0 | -| test.c:442:7:442:9 | rhs | 2.0 | -| test.c:442:7:442:14 | ... < ... | 1.0 | -| test.c:442:13:442:14 | 13 | 1.0 | -| test.c:442:13:442:14 | (unsigned int)... | 1.0 | -| test.c:442:19:442:21 | rhs | 2.0 | -| test.c:442:19:442:26 | ... << ... | 1.0 | -| test.c:442:26:442:26 | 1 | 1.0 | -| test.c:443:7:443:9 | rhs | 3.0 | -| test.c:443:7:443:14 | ... < ... | 1.0 | -| test.c:443:13:443:14 | 14 | 1.0 | -| test.c:443:13:443:14 | (unsigned int)... | 1.0 | -| test.c:443:19:443:21 | rhs | 3.0 | -| test.c:443:19:443:26 | ... << ... | 1.0 | -| test.c:443:26:443:26 | 1 | 1.0 | -| test.c:444:7:444:9 | rhs | 4.0 | -| test.c:444:7:444:14 | ... < ... | 1.0 | -| test.c:444:13:444:14 | 15 | 1.0 | -| test.c:444:13:444:14 | (unsigned int)... | 1.0 | -| test.c:444:19:444:21 | rhs | 4.0 | -| test.c:444:19:444:26 | ... << ... | 1.0 | -| test.c:444:26:444:26 | 1 | 1.0 | -| test.c:445:7:445:9 | rhs | 5.0 | -| test.c:445:7:445:14 | ... < ... | 1.0 | -| test.c:445:13:445:14 | 16 | 1.0 | -| test.c:445:13:445:14 | (unsigned int)... | 1.0 | -| test.c:445:19:445:21 | rhs | 5.0 | -| test.c:445:19:445:26 | ... << ... | 1.0 | -| test.c:445:26:445:26 | 1 | 1.0 | -| test.c:446:10:446:12 | (int)... | 6.0 | -| test.c:446:10:446:12 | rhs | 6.0 | -| test.c:452:7:452:9 | rhs | 1.0 | -| test.c:452:7:452:14 | ... < ... | 1.0 | -| test.c:452:13:452:14 | 10 | 1.0 | -| test.c:452:13:452:14 | (unsigned int)... | 1.0 | -| test.c:452:19:452:21 | rhs | 1.0 | -| test.c:452:19:452:26 | ... << ... | 1.0 | -| test.c:452:26:452:26 | 1 | 1.0 | -| test.c:452:38:452:40 | rhs | 1.0 | -| test.c:452:38:452:45 | ... << ... | 1.0 | -| test.c:452:45:452:45 | 2 | 1.0 | -| test.c:453:7:453:9 | rhs | 2.0 | -| test.c:453:7:453:14 | ... < ... | 1.0 | -| test.c:453:13:453:14 | 11 | 1.0 | -| test.c:453:13:453:14 | (unsigned int)... | 1.0 | -| test.c:453:19:453:21 | rhs | 2.0 | -| test.c:453:19:453:26 | ... << ... | 1.0 | -| test.c:453:26:453:26 | 1 | 1.0 | -| test.c:453:38:453:40 | rhs | 2.0 | -| test.c:453:38:453:45 | ... << ... | 1.0 | -| test.c:453:45:453:45 | 2 | 1.0 | -| test.c:454:7:454:9 | rhs | 4.0 | -| test.c:454:7:454:14 | ... < ... | 1.0 | -| test.c:454:13:454:14 | 12 | 1.0 | -| test.c:454:13:454:14 | (unsigned int)... | 1.0 | -| test.c:454:19:454:21 | rhs | 4.0 | -| test.c:454:19:454:26 | ... << ... | 1.0 | -| test.c:454:26:454:26 | 1 | 1.0 | -| test.c:454:38:454:40 | rhs | 4.0 | -| test.c:454:38:454:45 | ... << ... | 1.0 | -| test.c:454:45:454:45 | 2 | 1.0 | -| test.c:455:7:455:9 | rhs | 8.0 | -| test.c:455:7:455:14 | ... < ... | 1.0 | -| test.c:455:13:455:14 | 13 | 1.0 | -| test.c:455:13:455:14 | (unsigned int)... | 1.0 | -| test.c:455:19:455:21 | rhs | 8.0 | -| test.c:455:19:455:26 | ... << ... | 1.0 | -| test.c:455:26:455:26 | 1 | 1.0 | -| test.c:455:38:455:40 | rhs | 8.0 | -| test.c:455:38:455:45 | ... << ... | 1.0 | -| test.c:455:45:455:45 | 2 | 1.0 | -| test.c:456:7:456:9 | rhs | 16.0 | -| test.c:456:7:456:14 | ... < ... | 1.0 | -| test.c:456:13:456:14 | 14 | 1.0 | -| test.c:456:13:456:14 | (unsigned int)... | 1.0 | -| test.c:456:19:456:21 | rhs | 16.0 | -| test.c:456:19:456:26 | ... << ... | 1.0 | -| test.c:456:26:456:26 | 1 | 1.0 | -| test.c:456:38:456:40 | rhs | 16.0 | -| test.c:456:38:456:45 | ... << ... | 1.0 | -| test.c:456:45:456:45 | 2 | 1.0 | -| test.c:457:7:457:9 | rhs | 32.0 | -| test.c:457:7:457:14 | ... < ... | 1.0 | -| test.c:457:13:457:14 | 15 | 1.0 | -| test.c:457:13:457:14 | (unsigned int)... | 1.0 | -| test.c:457:19:457:21 | rhs | 32.0 | -| test.c:457:19:457:26 | ... << ... | 1.0 | -| test.c:457:26:457:26 | 1 | 1.0 | -| test.c:457:38:457:40 | rhs | 32.0 | -| test.c:457:38:457:45 | ... << ... | 1.0 | -| test.c:457:45:457:45 | 2 | 1.0 | -| test.c:458:7:458:9 | rhs | 64.0 | -| test.c:458:7:458:14 | ... < ... | 1.0 | -| test.c:458:13:458:14 | 16 | 1.0 | -| test.c:458:13:458:14 | (unsigned int)... | 1.0 | -| test.c:458:19:458:21 | rhs | 64.0 | -| test.c:458:19:458:26 | ... << ... | 1.0 | -| test.c:458:26:458:26 | 1 | 1.0 | -| test.c:458:38:458:40 | rhs | 64.0 | -| test.c:458:38:458:45 | ... << ... | 1.0 | -| test.c:458:45:458:45 | 2 | 1.0 | -| test.c:459:7:459:9 | rhs | 128.0 | -| test.c:459:7:459:14 | ... < ... | 1.0 | -| test.c:459:13:459:14 | 17 | 1.0 | -| test.c:459:13:459:14 | (unsigned int)... | 1.0 | -| test.c:459:19:459:21 | rhs | 128.0 | -| test.c:459:19:459:26 | ... << ... | 1.0 | -| test.c:459:26:459:26 | 1 | 1.0 | -| test.c:459:38:459:40 | rhs | 128.0 | -| test.c:459:38:459:45 | ... << ... | 1.0 | -| test.c:459:45:459:45 | 2 | 1.0 | -| test.c:460:7:460:9 | rhs | 256.0 | -| test.c:460:7:460:14 | ... < ... | 1.0 | -| test.c:460:13:460:14 | 18 | 1.0 | -| test.c:460:13:460:14 | (unsigned int)... | 1.0 | -| test.c:460:19:460:21 | rhs | 256.0 | -| test.c:460:19:460:26 | ... << ... | 1.0 | -| test.c:460:26:460:26 | 1 | 1.0 | -| test.c:460:38:460:40 | rhs | 256.0 | -| test.c:460:38:460:45 | ... << ... | 1.0 | -| test.c:460:45:460:45 | 2 | 1.0 | -| test.c:461:7:461:9 | rhs | 512.0 | -| test.c:461:7:461:14 | ... < ... | 1.0 | -| test.c:461:13:461:14 | 19 | 1.0 | -| test.c:461:13:461:14 | (unsigned int)... | 1.0 | -| test.c:461:19:461:21 | rhs | 512.0 | -| test.c:461:19:461:26 | ... << ... | 1.0 | -| test.c:461:26:461:26 | 1 | 1.0 | -| test.c:461:38:461:40 | rhs | 512.0 | -| test.c:461:38:461:45 | ... << ... | 1.0 | -| test.c:461:45:461:45 | 2 | 1.0 | -| test.c:462:7:462:9 | rhs | 1024.0 | -| test.c:462:7:462:14 | ... < ... | 1.0 | -| test.c:462:13:462:14 | 20 | 1.0 | -| test.c:462:13:462:14 | (unsigned int)... | 1.0 | -| test.c:462:19:462:21 | rhs | 1024.0 | -| test.c:462:19:462:26 | ... << ... | 1.0 | -| test.c:462:26:462:26 | 1 | 1.0 | -| test.c:462:38:462:40 | rhs | 1024.0 | -| test.c:462:38:462:45 | ... << ... | 1.0 | -| test.c:462:45:462:45 | 2 | 1.0 | -| test.c:463:10:463:12 | (int)... | 2048.0 | -| test.c:463:10:463:12 | rhs | 2048.0 | -| test.c:467:7:467:7 | a | 1.0 | -| test.c:467:7:467:13 | ... == ... | 1.0 | -| test.c:467:12:467:13 | 17 | 1.0 | -| test.c:468:9:468:9 | b | 1.0 | -| test.c:468:9:468:15 | ... == ... | 1.0 | -| test.c:468:14:468:15 | 23 | 1.0 | -| test.c:469:7:469:7 | a | 1.0 | -| test.c:469:7:469:12 | ... += ... | 1.0 | -| test.c:469:12:469:12 | b | 1.0 | -| test.c:471:9:471:9 | a | 2.0 | -| test.c:471:9:471:15 | ... == ... | 1.0 | -| test.c:471:14:471:15 | 18 | 1.0 | -| test.c:472:7:472:7 | b | 1.0 | -| test.c:472:7:472:12 | ... = ... | 1.0 | -| test.c:472:11:472:12 | 10 | 1.0 | -| test.c:477:11:477:11 | a | 4.0 | -| test.c:477:11:477:15 | ... + ... | 16.0 | -| test.c:477:15:477:15 | b | 4.0 | -| test.c:478:10:478:10 | a | 4.0 | -| test.c:478:10:478:14 | ... + ... | 16.0 | -| test.c:478:14:478:14 | b | 4.0 | -| test.c:485:4:487:50 | (...) | 1.0 | -| test.c:485:4:570:26 | ... > ... | 1.0 | -| test.c:485:4:659:27 | ... ? ... : ... | 1.297918419127476E201 | -| test.c:485:5:485:6 | 14 | 1.0 | -| test.c:485:5:485:6 | (unsigned int)... | 1.0 | -| test.c:485:5:485:11 | ... * ... | 1.0 | -| test.c:485:5:485:55 | ... > ... | 1.0 | -| test.c:485:5:487:49 | ... ? ... : ... | 1.0 | -| test.c:485:10:485:11 | ip | 1.0 | -| test.c:485:15:485:26 | (...) | 1.0 | -| test.c:485:15:485:31 | ... * ... | 1.0 | -| test.c:485:15:485:55 | ... + ... | 1.0 | -| test.c:485:16:485:16 | 2 | 1.0 | -| test.c:485:16:485:16 | (unsigned int)... | 1.0 | -| test.c:485:16:485:21 | ... * ... | 1.0 | -| test.c:485:16:485:25 | ... + ... | 1.0 | -| test.c:485:20:485:21 | ip | 1.0 | -| test.c:485:25:485:25 | 1 | 1.0 | -| test.c:485:25:485:25 | (unsigned int)... | 1.0 | -| test.c:485:30:485:31 | 17 | 1.0 | -| test.c:485:30:485:31 | (unsigned int)... | 1.0 | -| test.c:485:35:485:50 | (...) | 1.0 | -| test.c:485:35:485:55 | ... * ... | 1.0 | -| test.c:485:36:485:36 | 2 | 1.0 | -| test.c:485:36:485:36 | (unsigned int)... | 1.0 | -| test.c:485:36:485:41 | ... * ... | 1.0 | -| test.c:485:36:485:45 | ... + ... | 1.0 | -| test.c:485:36:485:49 | ... + ... | 1.0 | -| test.c:485:40:485:41 | ip | 1.0 | -| test.c:485:45:485:45 | 1 | 1.0 | -| test.c:485:45:485:45 | (unsigned int)... | 1.0 | -| test.c:485:49:485:49 | 1 | 1.0 | -| test.c:485:49:485:49 | (unsigned int)... | 1.0 | -| test.c:485:54:485:55 | 17 | 1.0 | -| test.c:485:54:485:55 | (unsigned int)... | 1.0 | -| test.c:486:9:486:10 | 14 | 1.0 | -| test.c:486:9:486:10 | (unsigned int)... | 1.0 | -| test.c:486:9:486:15 | ... * ... | 1.0 | -| test.c:486:14:486:15 | ip | 1.0 | -| test.c:487:9:487:20 | (...) | 1.0 | -| test.c:487:9:487:25 | ... * ... | 1.0 | -| test.c:487:9:487:49 | ... + ... | 1.0 | -| test.c:487:10:487:10 | 2 | 1.0 | -| test.c:487:10:487:10 | (unsigned int)... | 1.0 | -| test.c:487:10:487:15 | ... * ... | 1.0 | -| test.c:487:10:487:19 | ... + ... | 1.0 | -| test.c:487:14:487:15 | ip | 1.0 | -| test.c:487:19:487:19 | 1 | 1.0 | -| test.c:487:19:487:19 | (unsigned int)... | 1.0 | -| test.c:487:24:487:25 | 14 | 1.0 | -| test.c:487:24:487:25 | (unsigned int)... | 1.0 | -| test.c:487:29:487:44 | (...) | 1.0 | -| test.c:487:29:487:49 | ... * ... | 1.0 | -| test.c:487:30:487:30 | 2 | 1.0 | -| test.c:487:30:487:30 | (unsigned int)... | 1.0 | -| test.c:487:30:487:35 | ... * ... | 1.0 | -| test.c:487:30:487:39 | ... + ... | 1.0 | -| test.c:487:30:487:43 | ... + ... | 1.0 | -| test.c:487:34:487:35 | ip | 1.0 | -| test.c:487:39:487:39 | 1 | 1.0 | -| test.c:487:39:487:39 | (unsigned int)... | 1.0 | -| test.c:487:43:487:43 | 1 | 1.0 | -| test.c:487:43:487:43 | (unsigned int)... | 1.0 | -| test.c:487:48:487:49 | 17 | 1.0 | -| test.c:487:48:487:49 | (unsigned int)... | 1.0 | -| test.c:488:5:570:26 | (...) | 9.29462083211502E84 | -| test.c:488:6:488:6 | 2 | 1.0 | -| test.c:488:6:488:6 | (unsigned int)... | 1.0 | -| test.c:488:6:488:23 | ... * ... | 2.0 | -| test.c:488:6:507:42 | ... + ... | 4.524508125E10 | -| test.c:488:6:527:24 | ... > ... | 1.0 | -| test.c:488:6:570:25 | ... ? ... : ... | 9.29462083211502E84 | -| test.c:488:10:488:23 | (...) | 2.0 | -| test.c:488:11:488:12 | ip | 2.0 | -| test.c:488:11:488:17 | ... * ... | 2.0 | -| test.c:488:11:488:22 | ... + ... | 2.0 | -| test.c:488:16:488:17 | 14 | 1.0 | -| test.c:488:16:488:17 | (unsigned int)... | 1.0 | -| test.c:488:21:488:22 | 32 | 1.0 | -| test.c:488:21:488:22 | (unsigned int)... | 1.0 | -| test.c:489:7:507:42 | (...) | 2.2622540625E10 | -| test.c:489:8:489:8 | 4 | 1.0 | -| test.c:489:8:489:8 | (unsigned int)... | 1.0 | -| test.c:489:8:489:25 | ... * ... | 2.0 | -| test.c:489:8:490:26 | ... + ... | 4.0 | -| test.c:489:8:491:26 | ... + ... | 8.0 | -| test.c:489:8:496:22 | ... + ... | 1000.0 | -| test.c:489:8:497:37 | ... > ... | 1.0 | -| test.c:489:8:507:41 | ... ? ... : ... | 2.2622540625E10 | -| test.c:489:12:489:25 | (...) | 2.0 | -| test.c:489:13:489:14 | ip | 2.0 | -| test.c:489:13:489:19 | ... * ... | 2.0 | -| test.c:489:13:489:24 | ... + ... | 2.0 | -| test.c:489:18:489:19 | 14 | 1.0 | -| test.c:489:18:489:19 | (unsigned int)... | 1.0 | -| test.c:489:23:489:24 | 32 | 1.0 | -| test.c:489:23:489:24 | (unsigned int)... | 1.0 | -| test.c:490:9:490:26 | (...) | 2.0 | -| test.c:490:10:490:10 | 2 | 1.0 | -| test.c:490:10:490:10 | (unsigned int)... | 1.0 | -| test.c:490:10:490:15 | ... * ... | 2.0 | -| test.c:490:10:490:20 | ... * ... | 2.0 | -| test.c:490:10:490:25 | ... + ... | 2.0 | -| test.c:490:14:490:15 | ip | 2.0 | -| test.c:490:19:490:20 | 14 | 1.0 | -| test.c:490:19:490:20 | (unsigned int)... | 1.0 | -| test.c:490:24:490:25 | 32 | 1.0 | -| test.c:490:24:490:25 | (unsigned int)... | 1.0 | -| test.c:491:9:491:9 | 2 | 1.0 | -| test.c:491:9:491:9 | (unsigned int)... | 1.0 | -| test.c:491:9:491:26 | ... * ... | 2.0 | -| test.c:491:13:491:26 | (...) | 2.0 | -| test.c:491:14:491:15 | ip | 2.0 | -| test.c:491:14:491:20 | ... * ... | 2.0 | -| test.c:491:14:491:25 | ... + ... | 2.0 | -| test.c:491:19:491:20 | 14 | 1.0 | -| test.c:491:19:491:20 | (unsigned int)... | 1.0 | -| test.c:491:24:491:25 | 64 | 1.0 | -| test.c:491:24:491:25 | (unsigned int)... | 1.0 | -| test.c:492:9:496:22 | (...) | 125.0 | -| test.c:492:10:492:21 | (...) | 2.0 | -| test.c:492:10:492:26 | ... * ... | 2.0 | -| test.c:492:10:492:80 | ... > ... | 1.0 | -| test.c:492:10:496:21 | ... ? ... : ... | 125.0 | -| test.c:492:11:492:11 | 2 | 1.0 | -| test.c:492:11:492:11 | (unsigned int)... | 1.0 | -| test.c:492:11:492:16 | ... * ... | 2.0 | -| test.c:492:11:492:20 | ... + ... | 2.0 | -| test.c:492:15:492:16 | ip | 2.0 | -| test.c:492:20:492:20 | 1 | 1.0 | -| test.c:492:20:492:20 | (unsigned int)... | 1.0 | -| test.c:492:25:492:26 | 14 | 1.0 | -| test.c:492:25:492:26 | (unsigned int)... | 1.0 | -| test.c:492:30:492:80 | (...) | 4.0 | -| test.c:492:31:492:32 | 17 | 1.0 | -| test.c:492:31:492:32 | (unsigned int)... | 1.0 | -| test.c:492:31:492:43 | ... * ... | 2.0 | -| test.c:492:31:492:53 | ... > ... | 1.0 | -| test.c:492:31:492:79 | ... ? ... : ... | 4.0 | -| test.c:492:36:492:43 | (...) | 2.0 | -| test.c:492:37:492:37 | 2 | 1.0 | -| test.c:492:37:492:37 | (unsigned int)... | 1.0 | -| test.c:492:37:492:42 | ... * ... | 2.0 | -| test.c:492:41:492:42 | ip | 2.0 | -| test.c:492:47:492:48 | 17 | 1.0 | -| test.c:492:47:492:48 | (unsigned int)... | 1.0 | -| test.c:492:47:492:53 | ... * ... | 2.0 | -| test.c:492:52:492:53 | ip | 2.0 | -| test.c:492:57:492:58 | 17 | 1.0 | -| test.c:492:57:492:58 | (unsigned int)... | 1.0 | -| test.c:492:57:492:69 | ... * ... | 2.0 | -| test.c:492:62:492:69 | (...) | 2.0 | -| test.c:492:63:492:63 | 2 | 1.0 | -| test.c:492:63:492:63 | (unsigned int)... | 1.0 | -| test.c:492:63:492:68 | ... * ... | 2.0 | -| test.c:492:67:492:68 | ip | 2.0 | -| test.c:492:73:492:74 | 17 | 1.0 | -| test.c:492:73:492:74 | (unsigned int)... | 1.0 | -| test.c:492:73:492:79 | ... * ... | 2.0 | -| test.c:492:78:492:79 | ip | 2.0 | -| test.c:493:13:493:24 | (...) | 5.0 | -| test.c:493:13:493:29 | ... * ... | 5.0 | -| test.c:493:14:493:14 | 2 | 1.0 | -| test.c:493:14:493:14 | (unsigned int)... | 1.0 | -| test.c:493:14:493:19 | ... * ... | 5.0 | -| test.c:493:14:493:23 | ... + ... | 5.0 | -| test.c:493:18:493:19 | ip | 5.0 | -| test.c:493:23:493:23 | 1 | 1.0 | -| test.c:493:23:493:23 | (unsigned int)... | 1.0 | -| test.c:493:28:493:29 | 14 | 1.0 | -| test.c:493:28:493:29 | (unsigned int)... | 1.0 | -| test.c:494:13:494:14 | 14 | 1.0 | -| test.c:494:13:494:14 | (unsigned int)... | 1.0 | -| test.c:494:13:494:25 | ... * ... | 5.0 | -| test.c:494:13:494:35 | ... > ... | 1.0 | -| test.c:494:13:496:21 | ... ? ... : ... | 25.0 | -| test.c:494:18:494:25 | (...) | 5.0 | -| test.c:494:19:494:19 | 2 | 1.0 | -| test.c:494:19:494:19 | (unsigned int)... | 1.0 | -| test.c:494:19:494:24 | ... * ... | 5.0 | -| test.c:494:23:494:24 | ip | 5.0 | -| test.c:494:29:494:30 | 17 | 1.0 | -| test.c:494:29:494:30 | (unsigned int)... | 1.0 | -| test.c:494:29:494:35 | ... * ... | 5.0 | -| test.c:494:34:494:35 | ip | 5.0 | -| test.c:495:15:495:16 | 14 | 1.0 | -| test.c:495:15:495:16 | (unsigned int)... | 1.0 | -| test.c:495:15:495:27 | ... * ... | 5.0 | -| test.c:495:20:495:27 | (...) | 5.0 | -| test.c:495:21:495:21 | 2 | 1.0 | -| test.c:495:21:495:21 | (unsigned int)... | 1.0 | -| test.c:495:21:495:26 | ... * ... | 5.0 | -| test.c:495:25:495:26 | ip | 5.0 | -| test.c:496:15:496:16 | 14 | 1.0 | -| test.c:496:15:496:16 | (unsigned int)... | 1.0 | -| test.c:496:15:496:21 | ... * ... | 5.0 | -| test.c:496:20:496:21 | ip | 5.0 | -| test.c:497:7:497:7 | 2 | 1.0 | -| test.c:497:7:497:7 | (unsigned int)... | 1.0 | -| test.c:497:7:497:12 | ... * ... | 15.0 | -| test.c:497:7:497:17 | ... * ... | 15.0 | -| test.c:497:7:497:37 | ... + ... | 225.0 | -| test.c:497:11:497:12 | ip | 15.0 | -| test.c:497:16:497:17 | 14 | 1.0 | -| test.c:497:16:497:17 | (unsigned int)... | 1.0 | -| test.c:497:21:497:32 | (...) | 15.0 | -| test.c:497:21:497:37 | ... * ... | 15.0 | -| test.c:497:22:497:22 | 2 | 1.0 | -| test.c:497:22:497:22 | (unsigned int)... | 1.0 | -| test.c:497:22:497:27 | ... * ... | 15.0 | -| test.c:497:22:497:31 | ... + ... | 15.0 | -| test.c:497:26:497:27 | ip | 15.0 | -| test.c:497:31:497:31 | 1 | 1.0 | -| test.c:497:31:497:31 | (unsigned int)... | 1.0 | -| test.c:497:36:497:37 | 17 | 1.0 | -| test.c:497:36:497:37 | (unsigned int)... | 1.0 | -| test.c:498:11:498:11 | 4 | 1.0 | -| test.c:498:11:498:11 | (unsigned int)... | 1.0 | -| test.c:498:11:498:28 | ... * ... | 15.0 | -| test.c:498:11:499:28 | ... + ... | 225.0 | -| test.c:498:11:500:28 | ... + ... | 3375.0 | -| test.c:498:11:506:24 | ... + ... | 1.00544625E8 | -| test.c:498:15:498:28 | (...) | 15.0 | -| test.c:498:16:498:17 | ip | 15.0 | -| test.c:498:16:498:22 | ... * ... | 15.0 | -| test.c:498:16:498:27 | ... + ... | 15.0 | -| test.c:498:21:498:22 | 14 | 1.0 | -| test.c:498:21:498:22 | (unsigned int)... | 1.0 | -| test.c:498:26:498:27 | 32 | 1.0 | -| test.c:498:26:498:27 | (unsigned int)... | 1.0 | -| test.c:499:11:499:28 | (...) | 15.0 | -| test.c:499:12:499:12 | 2 | 1.0 | -| test.c:499:12:499:12 | (unsigned int)... | 1.0 | -| test.c:499:12:499:17 | ... * ... | 15.0 | -| test.c:499:12:499:22 | ... * ... | 15.0 | -| test.c:499:12:499:27 | ... + ... | 15.0 | -| test.c:499:16:499:17 | ip | 15.0 | -| test.c:499:21:499:22 | 14 | 1.0 | -| test.c:499:21:499:22 | (unsigned int)... | 1.0 | -| test.c:499:26:499:27 | 32 | 1.0 | -| test.c:499:26:499:27 | (unsigned int)... | 1.0 | -| test.c:500:11:500:11 | 2 | 1.0 | -| test.c:500:11:500:11 | (unsigned int)... | 1.0 | -| test.c:500:11:500:28 | ... * ... | 15.0 | -| test.c:500:15:500:28 | (...) | 15.0 | -| test.c:500:16:500:17 | ip | 15.0 | -| test.c:500:16:500:22 | ... * ... | 15.0 | -| test.c:500:16:500:27 | ... + ... | 15.0 | -| test.c:500:21:500:22 | 14 | 1.0 | -| test.c:500:21:500:22 | (unsigned int)... | 1.0 | -| test.c:500:26:500:27 | 64 | 1.0 | -| test.c:500:26:500:27 | (unsigned int)... | 1.0 | -| test.c:501:11:506:24 | (...) | 29791.0 | -| test.c:501:12:501:23 | (...) | 15.0 | -| test.c:501:12:501:28 | ... * ... | 15.0 | -| test.c:501:12:502:61 | ... > ... | 1.0 | -| test.c:501:12:506:23 | ... ? ... : ... | 29791.0 | -| test.c:501:13:501:13 | 2 | 1.0 | -| test.c:501:13:501:13 | (unsigned int)... | 1.0 | -| test.c:501:13:501:18 | ... * ... | 15.0 | -| test.c:501:13:501:22 | ... + ... | 15.0 | -| test.c:501:17:501:18 | ip | 15.0 | -| test.c:501:22:501:22 | 1 | 1.0 | -| test.c:501:22:501:22 | (unsigned int)... | 1.0 | -| test.c:501:27:501:28 | 14 | 1.0 | -| test.c:501:27:501:28 | (unsigned int)... | 1.0 | -| test.c:502:11:502:61 | (...) | 225.0 | -| test.c:502:12:502:13 | 14 | 1.0 | -| test.c:502:12:502:13 | (unsigned int)... | 1.0 | -| test.c:502:12:502:24 | ... * ... | 15.0 | -| test.c:502:12:502:34 | ... > ... | 1.0 | -| test.c:502:12:502:60 | ... ? ... : ... | 225.0 | -| test.c:502:17:502:24 | (...) | 15.0 | -| test.c:502:18:502:18 | 2 | 1.0 | -| test.c:502:18:502:18 | (unsigned int)... | 1.0 | -| test.c:502:18:502:23 | ... * ... | 15.0 | -| test.c:502:22:502:23 | ip | 15.0 | -| test.c:502:28:502:29 | 17 | 1.0 | -| test.c:502:28:502:29 | (unsigned int)... | 1.0 | -| test.c:502:28:502:34 | ... * ... | 15.0 | -| test.c:502:33:502:34 | ip | 15.0 | -| test.c:502:38:502:39 | 17 | 1.0 | -| test.c:502:38:502:39 | (unsigned int)... | 1.0 | -| test.c:502:38:502:50 | ... * ... | 15.0 | -| test.c:502:43:502:50 | (...) | 15.0 | -| test.c:502:44:502:44 | 2 | 1.0 | -| test.c:502:44:502:44 | (unsigned int)... | 1.0 | -| test.c:502:44:502:49 | ... * ... | 15.0 | -| test.c:502:48:502:49 | ip | 15.0 | -| test.c:502:54:502:55 | 17 | 1.0 | -| test.c:502:54:502:55 | (unsigned int)... | 1.0 | -| test.c:502:54:502:60 | ... * ... | 15.0 | -| test.c:502:59:502:60 | ip | 15.0 | -| test.c:503:15:503:26 | (...) | 31.0 | -| test.c:503:15:503:31 | ... * ... | 31.0 | -| test.c:503:16:503:16 | 2 | 1.0 | -| test.c:503:16:503:16 | (unsigned int)... | 1.0 | -| test.c:503:16:503:21 | ... * ... | 31.0 | -| test.c:503:16:503:25 | ... + ... | 31.0 | -| test.c:503:20:503:21 | ip | 31.0 | -| test.c:503:25:503:25 | 1 | 1.0 | -| test.c:503:25:503:25 | (unsigned int)... | 1.0 | -| test.c:503:30:503:31 | 14 | 1.0 | -| test.c:503:30:503:31 | (unsigned int)... | 1.0 | -| test.c:504:15:504:16 | 14 | 1.0 | -| test.c:504:15:504:16 | (unsigned int)... | 1.0 | -| test.c:504:15:504:27 | ... * ... | 31.0 | -| test.c:504:15:504:37 | ... > ... | 1.0 | -| test.c:504:15:506:23 | ... ? ... : ... | 961.0 | -| test.c:504:20:504:27 | (...) | 31.0 | -| test.c:504:21:504:21 | 2 | 1.0 | -| test.c:504:21:504:21 | (unsigned int)... | 1.0 | -| test.c:504:21:504:26 | ... * ... | 31.0 | -| test.c:504:25:504:26 | ip | 31.0 | -| test.c:504:31:504:32 | 17 | 1.0 | -| test.c:504:31:504:32 | (unsigned int)... | 1.0 | -| test.c:504:31:504:37 | ... * ... | 31.0 | -| test.c:504:36:504:37 | ip | 31.0 | -| test.c:505:17:505:18 | 14 | 1.0 | -| test.c:505:17:505:18 | (unsigned int)... | 1.0 | -| test.c:505:17:505:29 | ... * ... | 31.0 | -| test.c:505:22:505:29 | (...) | 31.0 | -| test.c:505:23:505:23 | 2 | 1.0 | -| test.c:505:23:505:23 | (unsigned int)... | 1.0 | -| test.c:505:23:505:28 | ... * ... | 31.0 | -| test.c:505:27:505:28 | ip | 31.0 | -| test.c:506:17:506:18 | 14 | 1.0 | -| test.c:506:17:506:18 | (unsigned int)... | 1.0 | -| test.c:506:17:506:23 | ... * ... | 31.0 | -| test.c:506:22:506:23 | ip | 31.0 | -| test.c:507:11:507:11 | 2 | 1.0 | -| test.c:507:11:507:11 | (unsigned int)... | 1.0 | -| test.c:507:11:507:16 | ... * ... | 15.0 | -| test.c:507:11:507:21 | ... * ... | 15.0 | -| test.c:507:11:507:41 | ... + ... | 225.0 | -| test.c:507:15:507:16 | ip | 15.0 | -| test.c:507:20:507:21 | 14 | 1.0 | -| test.c:507:20:507:21 | (unsigned int)... | 1.0 | -| test.c:507:25:507:36 | (...) | 15.0 | -| test.c:507:25:507:41 | ... * ... | 15.0 | -| test.c:507:26:507:26 | 2 | 1.0 | -| test.c:507:26:507:26 | (unsigned int)... | 1.0 | -| test.c:507:26:507:31 | ... * ... | 15.0 | -| test.c:507:26:507:35 | ... + ... | 15.0 | -| test.c:507:30:507:31 | ip | 15.0 | -| test.c:507:35:507:35 | 1 | 1.0 | -| test.c:507:35:507:35 | (unsigned int)... | 1.0 | -| test.c:507:40:507:41 | 17 | 1.0 | -| test.c:507:40:507:41 | (unsigned int)... | 1.0 | -| test.c:508:5:527:24 | (...) | 6.6142118960740864E25 | -| test.c:508:6:508:6 | 4 | 1.0 | -| test.c:508:6:508:6 | (unsigned int)... | 1.0 | -| test.c:508:6:508:23 | ... * ... | 108.0 | -| test.c:508:6:509:24 | ... + ... | 11664.0 | -| test.c:508:6:510:24 | ... + ... | 1259712.0 | -| test.c:508:6:515:20 | ... + ... | 1.2872131505856E13 | -| test.c:508:6:516:55 | ... > ... | 1.0 | -| test.c:508:6:527:23 | ... ? ... : ... | 6.6142118960740864E25 | -| test.c:508:10:508:23 | (...) | 108.0 | -| test.c:508:11:508:12 | ip | 108.0 | -| test.c:508:11:508:17 | ... * ... | 108.0 | -| test.c:508:11:508:22 | ... + ... | 108.0 | -| test.c:508:16:508:17 | 14 | 1.0 | -| test.c:508:16:508:17 | (unsigned int)... | 1.0 | -| test.c:508:21:508:22 | 32 | 1.0 | -| test.c:508:21:508:22 | (unsigned int)... | 1.0 | -| test.c:509:7:509:24 | (...) | 108.0 | -| test.c:509:8:509:8 | 2 | 1.0 | -| test.c:509:8:509:8 | (unsigned int)... | 1.0 | -| test.c:509:8:509:13 | ... * ... | 108.0 | -| test.c:509:8:509:18 | ... * ... | 108.0 | -| test.c:509:8:509:23 | ... + ... | 108.0 | -| test.c:509:12:509:13 | ip | 108.0 | -| test.c:509:17:509:18 | 14 | 1.0 | -| test.c:509:17:509:18 | (unsigned int)... | 1.0 | -| test.c:509:22:509:23 | 32 | 1.0 | -| test.c:509:22:509:23 | (unsigned int)... | 1.0 | -| test.c:510:7:510:7 | 2 | 1.0 | -| test.c:510:7:510:7 | (unsigned int)... | 1.0 | -| test.c:510:7:510:24 | ... * ... | 108.0 | -| test.c:510:11:510:24 | (...) | 108.0 | -| test.c:510:12:510:13 | ip | 108.0 | -| test.c:510:12:510:18 | ... * ... | 108.0 | -| test.c:510:12:510:23 | ... + ... | 108.0 | -| test.c:510:17:510:18 | 14 | 1.0 | -| test.c:510:17:510:18 | (unsigned int)... | 1.0 | -| test.c:510:22:510:23 | 64 | 1.0 | -| test.c:510:22:510:23 | (unsigned int)... | 1.0 | -| test.c:511:7:515:20 | (...) | 1.0218313E7 | -| test.c:511:8:511:19 | (...) | 108.0 | -| test.c:511:8:511:24 | ... * ... | 108.0 | -| test.c:511:8:511:78 | ... > ... | 1.0 | -| test.c:511:8:515:19 | ... ? ... : ... | 1.0218313E7 | -| test.c:511:9:511:9 | 2 | 1.0 | -| test.c:511:9:511:9 | (unsigned int)... | 1.0 | -| test.c:511:9:511:14 | ... * ... | 108.0 | -| test.c:511:9:511:18 | ... + ... | 108.0 | -| test.c:511:13:511:14 | ip | 108.0 | -| test.c:511:18:511:18 | 1 | 1.0 | -| test.c:511:18:511:18 | (unsigned int)... | 1.0 | -| test.c:511:23:511:24 | 14 | 1.0 | -| test.c:511:23:511:24 | (unsigned int)... | 1.0 | -| test.c:511:28:511:78 | (...) | 11664.0 | -| test.c:511:29:511:30 | 17 | 1.0 | -| test.c:511:29:511:30 | (unsigned int)... | 1.0 | -| test.c:511:29:511:41 | ... * ... | 108.0 | -| test.c:511:29:511:51 | ... > ... | 1.0 | -| test.c:511:29:511:77 | ... ? ... : ... | 11664.0 | -| test.c:511:34:511:41 | (...) | 108.0 | -| test.c:511:35:511:35 | 2 | 1.0 | -| test.c:511:35:511:35 | (unsigned int)... | 1.0 | -| test.c:511:35:511:40 | ... * ... | 108.0 | -| test.c:511:39:511:40 | ip | 108.0 | -| test.c:511:45:511:46 | 17 | 1.0 | -| test.c:511:45:511:46 | (unsigned int)... | 1.0 | -| test.c:511:45:511:51 | ... * ... | 108.0 | -| test.c:511:50:511:51 | ip | 108.0 | -| test.c:511:55:511:56 | 17 | 1.0 | -| test.c:511:55:511:56 | (unsigned int)... | 1.0 | -| test.c:511:55:511:67 | ... * ... | 108.0 | -| test.c:511:60:511:67 | (...) | 108.0 | -| test.c:511:61:511:61 | 2 | 1.0 | -| test.c:511:61:511:61 | (unsigned int)... | 1.0 | -| test.c:511:61:511:66 | ... * ... | 108.0 | -| test.c:511:65:511:66 | ip | 108.0 | -| test.c:511:71:511:72 | 17 | 1.0 | -| test.c:511:71:511:72 | (unsigned int)... | 1.0 | -| test.c:511:71:511:77 | ... * ... | 108.0 | -| test.c:511:76:511:77 | ip | 108.0 | -| test.c:512:11:512:22 | (...) | 217.0 | -| test.c:512:11:512:27 | ... * ... | 217.0 | -| test.c:512:12:512:12 | 2 | 1.0 | -| test.c:512:12:512:12 | (unsigned int)... | 1.0 | -| test.c:512:12:512:17 | ... * ... | 217.0 | -| test.c:512:12:512:21 | ... + ... | 217.0 | -| test.c:512:16:512:17 | ip | 217.0 | -| test.c:512:21:512:21 | 1 | 1.0 | -| test.c:512:21:512:21 | (unsigned int)... | 1.0 | -| test.c:512:26:512:27 | 14 | 1.0 | -| test.c:512:26:512:27 | (unsigned int)... | 1.0 | -| test.c:513:11:513:12 | 14 | 1.0 | -| test.c:513:11:513:12 | (unsigned int)... | 1.0 | -| test.c:513:11:513:23 | ... * ... | 217.0 | -| test.c:513:11:513:33 | ... > ... | 1.0 | -| test.c:513:11:515:19 | ... ? ... : ... | 47089.0 | -| test.c:513:16:513:23 | (...) | 217.0 | -| test.c:513:17:513:17 | 2 | 1.0 | -| test.c:513:17:513:17 | (unsigned int)... | 1.0 | -| test.c:513:17:513:22 | ... * ... | 217.0 | -| test.c:513:21:513:22 | ip | 217.0 | -| test.c:513:27:513:28 | 17 | 1.0 | -| test.c:513:27:513:28 | (unsigned int)... | 1.0 | -| test.c:513:27:513:33 | ... * ... | 217.0 | -| test.c:513:32:513:33 | ip | 217.0 | -| test.c:514:13:514:14 | 14 | 1.0 | -| test.c:514:13:514:14 | (unsigned int)... | 1.0 | -| test.c:514:13:514:25 | ... * ... | 217.0 | -| test.c:514:18:514:25 | (...) | 217.0 | -| test.c:514:19:514:19 | 2 | 1.0 | -| test.c:514:19:514:19 | (unsigned int)... | 1.0 | -| test.c:514:19:514:24 | ... * ... | 217.0 | -| test.c:514:23:514:24 | ip | 217.0 | -| test.c:515:13:515:14 | 14 | 1.0 | -| test.c:515:13:515:14 | (unsigned int)... | 1.0 | -| test.c:515:13:515:19 | ... * ... | 217.0 | -| test.c:515:18:515:19 | ip | 217.0 | -| test.c:516:5:516:55 | (...) | 423801.0 | -| test.c:516:6:516:7 | 14 | 1.0 | -| test.c:516:6:516:7 | (unsigned int)... | 1.0 | -| test.c:516:6:516:12 | ... * ... | 651.0 | -| test.c:516:6:516:28 | ... > ... | 1.0 | -| test.c:516:6:516:54 | ... ? ... : ... | 423801.0 | -| test.c:516:11:516:12 | ip | 651.0 | -| test.c:516:16:516:23 | (...) | 651.0 | -| test.c:516:16:516:28 | ... * ... | 651.0 | -| test.c:516:17:516:18 | ip | 651.0 | -| test.c:516:17:516:22 | ... + ... | 651.0 | -| test.c:516:22:516:22 | 1 | 1.0 | -| test.c:516:22:516:22 | (unsigned int)... | 1.0 | -| test.c:516:27:516:28 | 17 | 1.0 | -| test.c:516:27:516:28 | (unsigned int)... | 1.0 | -| test.c:516:32:516:33 | 17 | 1.0 | -| test.c:516:32:516:33 | (unsigned int)... | 1.0 | -| test.c:516:32:516:38 | ... * ... | 651.0 | -| test.c:516:37:516:38 | ip | 651.0 | -| test.c:516:42:516:49 | (...) | 651.0 | -| test.c:516:42:516:54 | ... * ... | 651.0 | -| test.c:516:43:516:44 | ip | 651.0 | -| test.c:516:43:516:48 | ... + ... | 651.0 | -| test.c:516:48:516:48 | 1 | 1.0 | -| test.c:516:48:516:48 | (unsigned int)... | 1.0 | -| test.c:516:53:516:54 | 17 | 1.0 | -| test.c:516:53:516:54 | (unsigned int)... | 1.0 | -| test.c:517:9:517:9 | 4 | 1.0 | -| test.c:517:9:517:9 | (unsigned int)... | 1.0 | -| test.c:517:9:517:26 | ... * ... | 1302.0 | -| test.c:517:9:518:26 | ... + ... | 1695204.0 | -| test.c:517:9:519:26 | ... + ... | 2.207155608E9 | -| test.c:517:9:524:22 | ... + ... | 3.9017203216097214E19 | -| test.c:517:13:517:26 | (...) | 1302.0 | -| test.c:517:14:517:15 | ip | 1302.0 | -| test.c:517:14:517:20 | ... * ... | 1302.0 | -| test.c:517:14:517:25 | ... + ... | 1302.0 | -| test.c:517:19:517:20 | 14 | 1.0 | -| test.c:517:19:517:20 | (unsigned int)... | 1.0 | -| test.c:517:24:517:25 | 32 | 1.0 | -| test.c:517:24:517:25 | (unsigned int)... | 1.0 | -| test.c:518:9:518:26 | (...) | 1302.0 | -| test.c:518:10:518:10 | 2 | 1.0 | -| test.c:518:10:518:10 | (unsigned int)... | 1.0 | -| test.c:518:10:518:15 | ... * ... | 1302.0 | -| test.c:518:10:518:20 | ... * ... | 1302.0 | -| test.c:518:10:518:25 | ... + ... | 1302.0 | -| test.c:518:14:518:15 | ip | 1302.0 | -| test.c:518:19:518:20 | 14 | 1.0 | -| test.c:518:19:518:20 | (unsigned int)... | 1.0 | -| test.c:518:24:518:25 | 32 | 1.0 | -| test.c:518:24:518:25 | (unsigned int)... | 1.0 | -| test.c:519:9:519:9 | 2 | 1.0 | -| test.c:519:9:519:9 | (unsigned int)... | 1.0 | -| test.c:519:9:519:26 | ... * ... | 1302.0 | -| test.c:519:13:519:26 | (...) | 1302.0 | -| test.c:519:14:519:15 | ip | 1302.0 | -| test.c:519:14:519:20 | ... * ... | 1302.0 | -| test.c:519:14:519:25 | ... + ... | 1302.0 | -| test.c:519:19:519:20 | 14 | 1.0 | -| test.c:519:19:519:20 | (unsigned int)... | 1.0 | -| test.c:519:24:519:25 | 64 | 1.0 | -| test.c:519:24:519:25 | (unsigned int)... | 1.0 | -| test.c:520:9:524:22 | (...) | 1.7677595125E10 | -| test.c:520:10:520:21 | (...) | 1302.0 | -| test.c:520:10:520:26 | ... * ... | 1302.0 | -| test.c:520:10:520:80 | ... > ... | 1.0 | -| test.c:520:10:524:21 | ... ? ... : ... | 1.7677595125E10 | -| test.c:520:11:520:11 | 2 | 1.0 | -| test.c:520:11:520:11 | (unsigned int)... | 1.0 | -| test.c:520:11:520:16 | ... * ... | 1302.0 | -| test.c:520:11:520:20 | ... + ... | 1302.0 | -| test.c:520:15:520:16 | ip | 1302.0 | -| test.c:520:20:520:20 | 1 | 1.0 | -| test.c:520:20:520:20 | (unsigned int)... | 1.0 | -| test.c:520:25:520:26 | 14 | 1.0 | -| test.c:520:25:520:26 | (unsigned int)... | 1.0 | -| test.c:520:30:520:80 | (...) | 1695204.0 | -| test.c:520:31:520:32 | 17 | 1.0 | -| test.c:520:31:520:32 | (unsigned int)... | 1.0 | -| test.c:520:31:520:43 | ... * ... | 1302.0 | -| test.c:520:31:520:53 | ... > ... | 1.0 | -| test.c:520:31:520:79 | ... ? ... : ... | 1695204.0 | -| test.c:520:36:520:43 | (...) | 1302.0 | -| test.c:520:37:520:37 | 2 | 1.0 | -| test.c:520:37:520:37 | (unsigned int)... | 1.0 | -| test.c:520:37:520:42 | ... * ... | 1302.0 | -| test.c:520:41:520:42 | ip | 1302.0 | -| test.c:520:47:520:48 | 17 | 1.0 | -| test.c:520:47:520:48 | (unsigned int)... | 1.0 | -| test.c:520:47:520:53 | ... * ... | 1302.0 | -| test.c:520:52:520:53 | ip | 1302.0 | -| test.c:520:57:520:58 | 17 | 1.0 | -| test.c:520:57:520:58 | (unsigned int)... | 1.0 | -| test.c:520:57:520:69 | ... * ... | 1302.0 | -| test.c:520:62:520:69 | (...) | 1302.0 | -| test.c:520:63:520:63 | 2 | 1.0 | -| test.c:520:63:520:63 | (unsigned int)... | 1.0 | -| test.c:520:63:520:68 | ... * ... | 1302.0 | -| test.c:520:67:520:68 | ip | 1302.0 | -| test.c:520:73:520:74 | 17 | 1.0 | -| test.c:520:73:520:74 | (unsigned int)... | 1.0 | -| test.c:520:73:520:79 | ... * ... | 1302.0 | -| test.c:520:78:520:79 | ip | 1302.0 | -| test.c:521:13:521:24 | (...) | 2605.0 | -| test.c:521:13:521:29 | ... * ... | 2605.0 | -| test.c:521:14:521:14 | 2 | 1.0 | -| test.c:521:14:521:14 | (unsigned int)... | 1.0 | -| test.c:521:14:521:19 | ... * ... | 2605.0 | -| test.c:521:14:521:23 | ... + ... | 2605.0 | -| test.c:521:18:521:19 | ip | 2605.0 | -| test.c:521:23:521:23 | 1 | 1.0 | -| test.c:521:23:521:23 | (unsigned int)... | 1.0 | -| test.c:521:28:521:29 | 14 | 1.0 | -| test.c:521:28:521:29 | (unsigned int)... | 1.0 | -| test.c:522:13:522:14 | 14 | 1.0 | -| test.c:522:13:522:14 | (unsigned int)... | 1.0 | -| test.c:522:13:522:25 | ... * ... | 2605.0 | -| test.c:522:13:522:35 | ... > ... | 1.0 | -| test.c:522:13:524:21 | ... ? ... : ... | 6786025.0 | -| test.c:522:18:522:25 | (...) | 2605.0 | -| test.c:522:19:522:19 | 2 | 1.0 | -| test.c:522:19:522:19 | (unsigned int)... | 1.0 | -| test.c:522:19:522:24 | ... * ... | 2605.0 | -| test.c:522:23:522:24 | ip | 2605.0 | -| test.c:522:29:522:30 | 17 | 1.0 | -| test.c:522:29:522:30 | (unsigned int)... | 1.0 | -| test.c:522:29:522:35 | ... * ... | 2605.0 | -| test.c:522:34:522:35 | ip | 2605.0 | -| test.c:523:15:523:16 | 14 | 1.0 | -| test.c:523:15:523:16 | (unsigned int)... | 1.0 | -| test.c:523:15:523:27 | ... * ... | 2605.0 | -| test.c:523:20:523:27 | (...) | 2605.0 | -| test.c:523:21:523:21 | 2 | 1.0 | -| test.c:523:21:523:21 | (unsigned int)... | 1.0 | -| test.c:523:21:523:26 | ... * ... | 2605.0 | -| test.c:523:25:523:26 | ip | 2605.0 | -| test.c:524:15:524:16 | 14 | 1.0 | -| test.c:524:15:524:16 | (unsigned int)... | 1.0 | -| test.c:524:15:524:21 | ... * ... | 2605.0 | -| test.c:524:20:524:21 | ip | 2605.0 | -| test.c:525:9:525:10 | 14 | 1.0 | -| test.c:525:9:525:10 | (unsigned int)... | 1.0 | -| test.c:525:9:525:15 | ... * ... | 1302.0 | -| test.c:525:9:525:31 | ... > ... | 1.0 | -| test.c:525:9:527:23 | ... ? ... : ... | 1695204.0 | -| test.c:525:14:525:15 | ip | 1302.0 | -| test.c:525:19:525:26 | (...) | 1302.0 | -| test.c:525:19:525:31 | ... * ... | 1302.0 | -| test.c:525:20:525:21 | ip | 1302.0 | -| test.c:525:20:525:25 | ... + ... | 1302.0 | -| test.c:525:25:525:25 | 1 | 1.0 | -| test.c:525:25:525:25 | (unsigned int)... | 1.0 | -| test.c:525:30:525:31 | 17 | 1.0 | -| test.c:525:30:525:31 | (unsigned int)... | 1.0 | -| test.c:526:11:526:12 | 14 | 1.0 | -| test.c:526:11:526:12 | (unsigned int)... | 1.0 | -| test.c:526:11:526:17 | ... * ... | 1302.0 | -| test.c:526:16:526:17 | ip | 1302.0 | -| test.c:527:11:527:18 | (...) | 1302.0 | -| test.c:527:11:527:23 | ... * ... | 1302.0 | -| test.c:527:12:527:13 | ip | 1302.0 | -| test.c:527:12:527:17 | ... + ... | 1302.0 | -| test.c:527:17:527:17 | 1 | 1.0 | -| test.c:527:17:527:17 | (unsigned int)... | 1.0 | -| test.c:527:22:527:23 | 14 | 1.0 | -| test.c:527:22:527:23 | (unsigned int)... | 1.0 | -| test.c:528:9:528:9 | 2 | 1.0 | -| test.c:528:9:528:9 | (unsigned int)... | 1.0 | -| test.c:528:9:528:26 | ... * ... | 10419.0 | -| test.c:528:9:548:44 | ... + ... | 1.9449636104972528E43 | -| test.c:528:13:528:26 | (...) | 10419.0 | -| test.c:528:14:528:15 | ip | 10419.0 | -| test.c:528:14:528:20 | ... * ... | 10419.0 | -| test.c:528:14:528:25 | ... + ... | 10419.0 | -| test.c:528:19:528:20 | 14 | 1.0 | -| test.c:528:19:528:20 | (unsigned int)... | 1.0 | -| test.c:528:24:528:25 | 32 | 1.0 | -| test.c:528:24:528:25 | (unsigned int)... | 1.0 | -| test.c:529:9:548:44 | (...) | 1.8667469147684545E39 | -| test.c:529:10:529:10 | 4 | 1.0 | -| test.c:529:10:529:10 | (unsigned int)... | 1.0 | -| test.c:529:10:529:27 | ... * ... | 10419.0 | -| test.c:529:10:530:28 | ... + ... | 1.08555561E8 | -| test.c:529:10:531:28 | ... + ... | 1.131040390059E12 | -| test.c:529:10:537:24 | ... + ... | 1.0235492350954187E25 | -| test.c:529:10:538:39 | ... > ... | 1.0 | -| test.c:529:10:548:43 | ... ? ... : ... | 1.8667469147684545E39 | -| test.c:529:14:529:27 | (...) | 10419.0 | -| test.c:529:15:529:16 | ip | 10419.0 | -| test.c:529:15:529:21 | ... * ... | 10419.0 | -| test.c:529:15:529:26 | ... + ... | 10419.0 | -| test.c:529:20:529:21 | 14 | 1.0 | -| test.c:529:20:529:21 | (unsigned int)... | 1.0 | -| test.c:529:25:529:26 | 32 | 1.0 | -| test.c:529:25:529:26 | (unsigned int)... | 1.0 | -| test.c:530:11:530:28 | (...) | 10419.0 | -| test.c:530:12:530:12 | 2 | 1.0 | -| test.c:530:12:530:12 | (unsigned int)... | 1.0 | -| test.c:530:12:530:17 | ... * ... | 10419.0 | -| test.c:530:12:530:22 | ... * ... | 10419.0 | -| test.c:530:12:530:27 | ... + ... | 10419.0 | -| test.c:530:16:530:17 | ip | 10419.0 | -| test.c:530:21:530:22 | 14 | 1.0 | -| test.c:530:21:530:22 | (unsigned int)... | 1.0 | -| test.c:530:26:530:27 | 32 | 1.0 | -| test.c:530:26:530:27 | (unsigned int)... | 1.0 | -| test.c:531:11:531:11 | 2 | 1.0 | -| test.c:531:11:531:11 | (unsigned int)... | 1.0 | -| test.c:531:11:531:28 | ... * ... | 10419.0 | -| test.c:531:15:531:28 | (...) | 10419.0 | -| test.c:531:16:531:17 | ip | 10419.0 | -| test.c:531:16:531:22 | ... * ... | 10419.0 | -| test.c:531:16:531:27 | ... + ... | 10419.0 | -| test.c:531:21:531:22 | 14 | 1.0 | -| test.c:531:21:531:22 | (unsigned int)... | 1.0 | -| test.c:531:26:531:27 | 64 | 1.0 | -| test.c:531:26:531:27 | (unsigned int)... | 1.0 | -| test.c:532:11:537:24 | (...) | 9.049625849719E12 | -| test.c:532:12:532:23 | (...) | 10419.0 | -| test.c:532:12:532:28 | ... * ... | 10419.0 | -| test.c:532:12:533:61 | ... > ... | 1.0 | -| test.c:532:12:537:23 | ... ? ... : ... | 9.049625849719E12 | -| test.c:532:13:532:13 | 2 | 1.0 | -| test.c:532:13:532:13 | (unsigned int)... | 1.0 | -| test.c:532:13:532:18 | ... * ... | 10419.0 | -| test.c:532:13:532:22 | ... + ... | 10419.0 | -| test.c:532:17:532:18 | ip | 10419.0 | -| test.c:532:22:532:22 | 1 | 1.0 | -| test.c:532:22:532:22 | (unsigned int)... | 1.0 | -| test.c:532:27:532:28 | 14 | 1.0 | -| test.c:532:27:532:28 | (unsigned int)... | 1.0 | -| test.c:533:11:533:61 | (...) | 1.08555561E8 | -| test.c:533:12:533:13 | 14 | 1.0 | -| test.c:533:12:533:13 | (unsigned int)... | 1.0 | -| test.c:533:12:533:24 | ... * ... | 10419.0 | -| test.c:533:12:533:34 | ... > ... | 1.0 | -| test.c:533:12:533:60 | ... ? ... : ... | 1.08555561E8 | -| test.c:533:17:533:24 | (...) | 10419.0 | -| test.c:533:18:533:18 | 2 | 1.0 | -| test.c:533:18:533:18 | (unsigned int)... | 1.0 | -| test.c:533:18:533:23 | ... * ... | 10419.0 | -| test.c:533:22:533:23 | ip | 10419.0 | -| test.c:533:28:533:29 | 17 | 1.0 | -| test.c:533:28:533:29 | (unsigned int)... | 1.0 | -| test.c:533:28:533:34 | ... * ... | 10419.0 | -| test.c:533:33:533:34 | ip | 10419.0 | -| test.c:533:38:533:39 | 17 | 1.0 | -| test.c:533:38:533:39 | (unsigned int)... | 1.0 | -| test.c:533:38:533:50 | ... * ... | 10419.0 | -| test.c:533:43:533:50 | (...) | 10419.0 | -| test.c:533:44:533:44 | 2 | 1.0 | -| test.c:533:44:533:44 | (unsigned int)... | 1.0 | -| test.c:533:44:533:49 | ... * ... | 10419.0 | -| test.c:533:48:533:49 | ip | 10419.0 | -| test.c:533:54:533:55 | 17 | 1.0 | -| test.c:533:54:533:55 | (unsigned int)... | 1.0 | -| test.c:533:54:533:60 | ... * ... | 10419.0 | -| test.c:533:59:533:60 | ip | 10419.0 | -| test.c:534:15:534:26 | (...) | 20839.0 | -| test.c:534:15:534:31 | ... * ... | 20839.0 | -| test.c:534:16:534:16 | 2 | 1.0 | -| test.c:534:16:534:16 | (unsigned int)... | 1.0 | -| test.c:534:16:534:21 | ... * ... | 20839.0 | -| test.c:534:16:534:25 | ... + ... | 20839.0 | -| test.c:534:20:534:21 | ip | 20839.0 | -| test.c:534:25:534:25 | 1 | 1.0 | -| test.c:534:25:534:25 | (unsigned int)... | 1.0 | -| test.c:534:30:534:31 | 14 | 1.0 | -| test.c:534:30:534:31 | (unsigned int)... | 1.0 | -| test.c:535:15:535:16 | 14 | 1.0 | -| test.c:535:15:535:16 | (unsigned int)... | 1.0 | -| test.c:535:15:535:27 | ... * ... | 20839.0 | -| test.c:535:15:535:37 | ... > ... | 1.0 | -| test.c:535:15:537:23 | ... ? ... : ... | 4.34263921E8 | -| test.c:535:20:535:27 | (...) | 20839.0 | -| test.c:535:21:535:21 | 2 | 1.0 | -| test.c:535:21:535:21 | (unsigned int)... | 1.0 | -| test.c:535:21:535:26 | ... * ... | 20839.0 | -| test.c:535:25:535:26 | ip | 20839.0 | -| test.c:535:31:535:32 | 17 | 1.0 | -| test.c:535:31:535:32 | (unsigned int)... | 1.0 | -| test.c:535:31:535:37 | ... * ... | 20839.0 | -| test.c:535:36:535:37 | ip | 20839.0 | -| test.c:536:17:536:18 | 14 | 1.0 | -| test.c:536:17:536:18 | (unsigned int)... | 1.0 | -| test.c:536:17:536:29 | ... * ... | 20839.0 | -| test.c:536:22:536:29 | (...) | 20839.0 | -| test.c:536:23:536:23 | 2 | 1.0 | -| test.c:536:23:536:23 | (unsigned int)... | 1.0 | -| test.c:536:23:536:28 | ... * ... | 20839.0 | -| test.c:536:27:536:28 | ip | 20839.0 | -| test.c:537:17:537:18 | 14 | 1.0 | -| test.c:537:17:537:18 | (unsigned int)... | 1.0 | -| test.c:537:17:537:23 | ... * ... | 20839.0 | -| test.c:537:22:537:23 | ip | 20839.0 | -| test.c:538:9:538:9 | 2 | 1.0 | -| test.c:538:9:538:9 | (unsigned int)... | 1.0 | -| test.c:538:9:538:14 | ... * ... | 62517.0 | -| test.c:538:9:538:19 | ... * ... | 62517.0 | -| test.c:538:9:538:39 | ... + ... | 3.908375289E9 | -| test.c:538:13:538:14 | ip | 62517.0 | -| test.c:538:18:538:19 | 14 | 1.0 | -| test.c:538:18:538:19 | (unsigned int)... | 1.0 | -| test.c:538:23:538:34 | (...) | 62517.0 | -| test.c:538:23:538:39 | ... * ... | 62517.0 | -| test.c:538:24:538:24 | 2 | 1.0 | -| test.c:538:24:538:24 | (unsigned int)... | 1.0 | -| test.c:538:24:538:29 | ... * ... | 62517.0 | -| test.c:538:24:538:33 | ... + ... | 62517.0 | -| test.c:538:28:538:29 | ip | 62517.0 | -| test.c:538:33:538:33 | 1 | 1.0 | -| test.c:538:33:538:33 | (unsigned int)... | 1.0 | -| test.c:538:38:538:39 | 17 | 1.0 | -| test.c:538:38:538:39 | (unsigned int)... | 1.0 | -| test.c:539:13:539:13 | 4 | 1.0 | -| test.c:539:13:539:13 | (unsigned int)... | 1.0 | -| test.c:539:13:539:30 | ... * ... | 62517.0 | -| test.c:539:13:540:30 | ... + ... | 3.908375289E9 | -| test.c:539:13:541:30 | ... + ... | 2.44339897942413E14 | -| test.c:539:13:547:26 | ... + ... | 4.7762734556795386E29 | -| test.c:539:17:539:30 | (...) | 62517.0 | -| test.c:539:18:539:19 | ip | 62517.0 | -| test.c:539:18:539:24 | ... * ... | 62517.0 | -| test.c:539:18:539:29 | ... + ... | 62517.0 | -| test.c:539:23:539:24 | 14 | 1.0 | -| test.c:539:23:539:24 | (unsigned int)... | 1.0 | -| test.c:539:28:539:29 | 32 | 1.0 | -| test.c:539:28:539:29 | (unsigned int)... | 1.0 | -| test.c:540:13:540:30 | (...) | 62517.0 | -| test.c:540:14:540:14 | 2 | 1.0 | -| test.c:540:14:540:14 | (unsigned int)... | 1.0 | -| test.c:540:14:540:19 | ... * ... | 62517.0 | -| test.c:540:14:540:24 | ... * ... | 62517.0 | -| test.c:540:14:540:29 | ... + ... | 62517.0 | -| test.c:540:18:540:19 | ip | 62517.0 | -| test.c:540:23:540:24 | 14 | 1.0 | -| test.c:540:23:540:24 | (unsigned int)... | 1.0 | -| test.c:540:28:540:29 | 32 | 1.0 | -| test.c:540:28:540:29 | (unsigned int)... | 1.0 | -| test.c:541:13:541:13 | 2 | 1.0 | -| test.c:541:13:541:13 | (unsigned int)... | 1.0 | -| test.c:541:13:541:30 | ... * ... | 62517.0 | -| test.c:541:17:541:30 | (...) | 62517.0 | -| test.c:541:18:541:19 | ip | 62517.0 | -| test.c:541:18:541:24 | ... * ... | 62517.0 | -| test.c:541:18:541:29 | ... + ... | 62517.0 | -| test.c:541:23:541:24 | 14 | 1.0 | -| test.c:541:23:541:24 | (unsigned int)... | 1.0 | -| test.c:541:28:541:29 | 64 | 1.0 | -| test.c:541:28:541:29 | (unsigned int)... | 1.0 | -| test.c:542:13:547:26 | (...) | 1.954766084417875E15 | -| test.c:542:14:542:25 | (...) | 62517.0 | -| test.c:542:14:542:30 | ... * ... | 62517.0 | -| test.c:542:14:543:63 | ... > ... | 1.0 | -| test.c:542:14:547:25 | ... ? ... : ... | 1.954766084417875E15 | -| test.c:542:15:542:15 | 2 | 1.0 | -| test.c:542:15:542:15 | (unsigned int)... | 1.0 | -| test.c:542:15:542:20 | ... * ... | 62517.0 | -| test.c:542:15:542:24 | ... + ... | 62517.0 | -| test.c:542:19:542:20 | ip | 62517.0 | -| test.c:542:24:542:24 | 1 | 1.0 | -| test.c:542:24:542:24 | (unsigned int)... | 1.0 | -| test.c:542:29:542:30 | 14 | 1.0 | -| test.c:542:29:542:30 | (unsigned int)... | 1.0 | -| test.c:543:13:543:63 | (...) | 3.908375289E9 | -| test.c:543:14:543:15 | 14 | 1.0 | -| test.c:543:14:543:15 | (unsigned int)... | 1.0 | -| test.c:543:14:543:26 | ... * ... | 62517.0 | -| test.c:543:14:543:36 | ... > ... | 1.0 | -| test.c:543:14:543:62 | ... ? ... : ... | 3.908375289E9 | -| test.c:543:19:543:26 | (...) | 62517.0 | -| test.c:543:20:543:20 | 2 | 1.0 | -| test.c:543:20:543:20 | (unsigned int)... | 1.0 | -| test.c:543:20:543:25 | ... * ... | 62517.0 | -| test.c:543:24:543:25 | ip | 62517.0 | -| test.c:543:30:543:31 | 17 | 1.0 | -| test.c:543:30:543:31 | (unsigned int)... | 1.0 | -| test.c:543:30:543:36 | ... * ... | 62517.0 | -| test.c:543:35:543:36 | ip | 62517.0 | -| test.c:543:40:543:41 | 17 | 1.0 | -| test.c:543:40:543:41 | (unsigned int)... | 1.0 | -| test.c:543:40:543:52 | ... * ... | 62517.0 | -| test.c:543:45:543:52 | (...) | 62517.0 | -| test.c:543:46:543:46 | 2 | 1.0 | -| test.c:543:46:543:46 | (unsigned int)... | 1.0 | -| test.c:543:46:543:51 | ... * ... | 62517.0 | -| test.c:543:50:543:51 | ip | 62517.0 | -| test.c:543:56:543:57 | 17 | 1.0 | -| test.c:543:56:543:57 | (unsigned int)... | 1.0 | -| test.c:543:56:543:62 | ... * ... | 62517.0 | -| test.c:543:61:543:62 | ip | 62517.0 | -| test.c:544:17:544:28 | (...) | 125035.0 | -| test.c:544:17:544:33 | ... * ... | 125035.0 | -| test.c:544:18:544:18 | 2 | 1.0 | -| test.c:544:18:544:18 | (unsigned int)... | 1.0 | -| test.c:544:18:544:23 | ... * ... | 125035.0 | -| test.c:544:18:544:27 | ... + ... | 125035.0 | -| test.c:544:22:544:23 | ip | 125035.0 | -| test.c:544:27:544:27 | 1 | 1.0 | -| test.c:544:27:544:27 | (unsigned int)... | 1.0 | -| test.c:544:32:544:33 | 14 | 1.0 | -| test.c:544:32:544:33 | (unsigned int)... | 1.0 | -| test.c:545:17:545:18 | 14 | 1.0 | -| test.c:545:17:545:18 | (unsigned int)... | 1.0 | -| test.c:545:17:545:29 | ... * ... | 125035.0 | -| test.c:545:17:545:39 | ... > ... | 1.0 | -| test.c:545:17:547:25 | ... ? ... : ... | 1.5633751225E10 | -| test.c:545:22:545:29 | (...) | 125035.0 | -| test.c:545:23:545:23 | 2 | 1.0 | -| test.c:545:23:545:23 | (unsigned int)... | 1.0 | -| test.c:545:23:545:28 | ... * ... | 125035.0 | -| test.c:545:27:545:28 | ip | 125035.0 | -| test.c:545:33:545:34 | 17 | 1.0 | -| test.c:545:33:545:34 | (unsigned int)... | 1.0 | -| test.c:545:33:545:39 | ... * ... | 125035.0 | -| test.c:545:38:545:39 | ip | 125035.0 | -| test.c:546:19:546:20 | 14 | 1.0 | -| test.c:546:19:546:20 | (unsigned int)... | 1.0 | -| test.c:546:19:546:31 | ... * ... | 125035.0 | -| test.c:546:24:546:31 | (...) | 125035.0 | -| test.c:546:25:546:25 | 2 | 1.0 | -| test.c:546:25:546:25 | (unsigned int)... | 1.0 | -| test.c:546:25:546:30 | ... * ... | 125035.0 | -| test.c:546:29:546:30 | ip | 125035.0 | -| test.c:547:19:547:20 | 14 | 1.0 | -| test.c:547:19:547:20 | (unsigned int)... | 1.0 | -| test.c:547:19:547:25 | ... * ... | 125035.0 | -| test.c:547:24:547:25 | ip | 125035.0 | -| test.c:548:13:548:13 | 2 | 1.0 | -| test.c:548:13:548:13 | (unsigned int)... | 1.0 | -| test.c:548:13:548:18 | ... * ... | 62517.0 | -| test.c:548:13:548:23 | ... * ... | 62517.0 | -| test.c:548:13:548:43 | ... + ... | 3.908375289E9 | -| test.c:548:17:548:18 | ip | 62517.0 | -| test.c:548:22:548:23 | 14 | 1.0 | -| test.c:548:22:548:23 | (unsigned int)... | 1.0 | -| test.c:548:27:548:38 | (...) | 62517.0 | -| test.c:548:27:548:43 | ... * ... | 62517.0 | -| test.c:548:28:548:28 | 2 | 1.0 | -| test.c:548:28:548:28 | (unsigned int)... | 1.0 | -| test.c:548:28:548:33 | ... * ... | 62517.0 | -| test.c:548:28:548:37 | ... + ... | 62517.0 | -| test.c:548:32:548:33 | ip | 62517.0 | -| test.c:548:37:548:37 | 1 | 1.0 | -| test.c:548:37:548:37 | (unsigned int)... | 1.0 | -| test.c:548:42:548:43 | 17 | 1.0 | -| test.c:548:42:548:43 | (unsigned int)... | 1.0 | -| test.c:549:9:549:9 | 4 | 1.0 | -| test.c:549:9:549:9 | (unsigned int)... | 1.0 | -| test.c:549:9:549:26 | ... * ... | 10419.0 | -| test.c:549:9:550:30 | ... + ... | 1.08555561E8 | -| test.c:549:9:551:30 | ... + ... | 1.131040390059E12 | -| test.c:549:9:557:26 | ... + ... | 1.0235492350954187E25 | -| test.c:549:9:558:61 | ... > ... | 1.0 | -| test.c:549:9:570:25 | ... ? ... : ... | 4.778814771623795E41 | -| test.c:549:13:549:26 | (...) | 10419.0 | -| test.c:549:14:549:15 | ip | 10419.0 | -| test.c:549:14:549:20 | ... * ... | 10419.0 | -| test.c:549:14:549:25 | ... + ... | 10419.0 | -| test.c:549:19:549:20 | 14 | 1.0 | -| test.c:549:19:549:20 | (unsigned int)... | 1.0 | -| test.c:549:24:549:25 | 32 | 1.0 | -| test.c:549:24:549:25 | (unsigned int)... | 1.0 | -| test.c:550:13:550:30 | (...) | 10419.0 | -| test.c:550:14:550:14 | 2 | 1.0 | -| test.c:550:14:550:14 | (unsigned int)... | 1.0 | -| test.c:550:14:550:19 | ... * ... | 10419.0 | -| test.c:550:14:550:24 | ... * ... | 10419.0 | -| test.c:550:14:550:29 | ... + ... | 10419.0 | -| test.c:550:18:550:19 | ip | 10419.0 | -| test.c:550:23:550:24 | 14 | 1.0 | -| test.c:550:23:550:24 | (unsigned int)... | 1.0 | -| test.c:550:28:550:29 | 32 | 1.0 | -| test.c:550:28:550:29 | (unsigned int)... | 1.0 | -| test.c:551:13:551:13 | 2 | 1.0 | -| test.c:551:13:551:13 | (unsigned int)... | 1.0 | -| test.c:551:13:551:30 | ... * ... | 10419.0 | -| test.c:551:17:551:30 | (...) | 10419.0 | -| test.c:551:18:551:19 | ip | 10419.0 | -| test.c:551:18:551:24 | ... * ... | 10419.0 | -| test.c:551:18:551:29 | ... + ... | 10419.0 | -| test.c:551:23:551:24 | 14 | 1.0 | -| test.c:551:23:551:24 | (unsigned int)... | 1.0 | -| test.c:551:28:551:29 | 64 | 1.0 | -| test.c:551:28:551:29 | (unsigned int)... | 1.0 | -| test.c:552:13:557:26 | (...) | 9.049625849719E12 | -| test.c:552:14:552:25 | (...) | 10419.0 | -| test.c:552:14:552:30 | ... * ... | 10419.0 | -| test.c:552:14:553:63 | ... > ... | 1.0 | -| test.c:552:14:557:25 | ... ? ... : ... | 9.049625849719E12 | -| test.c:552:15:552:15 | 2 | 1.0 | -| test.c:552:15:552:15 | (unsigned int)... | 1.0 | -| test.c:552:15:552:20 | ... * ... | 10419.0 | -| test.c:552:15:552:24 | ... + ... | 10419.0 | -| test.c:552:19:552:20 | ip | 10419.0 | -| test.c:552:24:552:24 | 1 | 1.0 | -| test.c:552:24:552:24 | (unsigned int)... | 1.0 | -| test.c:552:29:552:30 | 14 | 1.0 | -| test.c:552:29:552:30 | (unsigned int)... | 1.0 | -| test.c:553:13:553:63 | (...) | 1.08555561E8 | -| test.c:553:14:553:15 | 14 | 1.0 | -| test.c:553:14:553:15 | (unsigned int)... | 1.0 | -| test.c:553:14:553:26 | ... * ... | 10419.0 | -| test.c:553:14:553:36 | ... > ... | 1.0 | -| test.c:553:14:553:62 | ... ? ... : ... | 1.08555561E8 | -| test.c:553:19:553:26 | (...) | 10419.0 | -| test.c:553:20:553:20 | 2 | 1.0 | -| test.c:553:20:553:20 | (unsigned int)... | 1.0 | -| test.c:553:20:553:25 | ... * ... | 10419.0 | -| test.c:553:24:553:25 | ip | 10419.0 | -| test.c:553:30:553:31 | 17 | 1.0 | -| test.c:553:30:553:31 | (unsigned int)... | 1.0 | -| test.c:553:30:553:36 | ... * ... | 10419.0 | -| test.c:553:35:553:36 | ip | 10419.0 | -| test.c:553:40:553:41 | 17 | 1.0 | -| test.c:553:40:553:41 | (unsigned int)... | 1.0 | -| test.c:553:40:553:52 | ... * ... | 10419.0 | -| test.c:553:45:553:52 | (...) | 10419.0 | -| test.c:553:46:553:46 | 2 | 1.0 | -| test.c:553:46:553:46 | (unsigned int)... | 1.0 | -| test.c:553:46:553:51 | ... * ... | 10419.0 | -| test.c:553:50:553:51 | ip | 10419.0 | -| test.c:553:56:553:57 | 17 | 1.0 | -| test.c:553:56:553:57 | (unsigned int)... | 1.0 | -| test.c:553:56:553:62 | ... * ... | 10419.0 | -| test.c:553:61:553:62 | ip | 10419.0 | -| test.c:554:17:554:28 | (...) | 20839.0 | -| test.c:554:17:554:33 | ... * ... | 20839.0 | -| test.c:554:18:554:18 | 2 | 1.0 | -| test.c:554:18:554:18 | (unsigned int)... | 1.0 | -| test.c:554:18:554:23 | ... * ... | 20839.0 | -| test.c:554:18:554:27 | ... + ... | 20839.0 | -| test.c:554:22:554:23 | ip | 20839.0 | -| test.c:554:27:554:27 | 1 | 1.0 | -| test.c:554:27:554:27 | (unsigned int)... | 1.0 | -| test.c:554:32:554:33 | 14 | 1.0 | -| test.c:554:32:554:33 | (unsigned int)... | 1.0 | -| test.c:555:17:555:18 | 14 | 1.0 | -| test.c:555:17:555:18 | (unsigned int)... | 1.0 | -| test.c:555:17:555:29 | ... * ... | 20839.0 | -| test.c:555:17:555:39 | ... > ... | 1.0 | -| test.c:555:17:557:25 | ... ? ... : ... | 4.34263921E8 | -| test.c:555:22:555:29 | (...) | 20839.0 | -| test.c:555:23:555:23 | 2 | 1.0 | -| test.c:555:23:555:23 | (unsigned int)... | 1.0 | -| test.c:555:23:555:28 | ... * ... | 20839.0 | -| test.c:555:27:555:28 | ip | 20839.0 | -| test.c:555:33:555:34 | 17 | 1.0 | -| test.c:555:33:555:34 | (unsigned int)... | 1.0 | -| test.c:555:33:555:39 | ... * ... | 20839.0 | -| test.c:555:38:555:39 | ip | 20839.0 | -| test.c:556:19:556:20 | 14 | 1.0 | -| test.c:556:19:556:20 | (unsigned int)... | 1.0 | -| test.c:556:19:556:31 | ... * ... | 20839.0 | -| test.c:556:24:556:31 | (...) | 20839.0 | -| test.c:556:25:556:25 | 2 | 1.0 | -| test.c:556:25:556:25 | (unsigned int)... | 1.0 | -| test.c:556:25:556:30 | ... * ... | 20839.0 | -| test.c:556:29:556:30 | ip | 20839.0 | -| test.c:557:19:557:20 | 14 | 1.0 | -| test.c:557:19:557:20 | (unsigned int)... | 1.0 | -| test.c:557:19:557:25 | ... * ... | 20839.0 | -| test.c:557:24:557:25 | ip | 20839.0 | -| test.c:558:11:558:61 | (...) | 3.908375289E9 | -| test.c:558:12:558:13 | 14 | 1.0 | -| test.c:558:12:558:13 | (unsigned int)... | 1.0 | -| test.c:558:12:558:18 | ... * ... | 62517.0 | -| test.c:558:12:558:34 | ... > ... | 1.0 | -| test.c:558:12:558:60 | ... ? ... : ... | 3.908375289E9 | -| test.c:558:17:558:18 | ip | 62517.0 | -| test.c:558:22:558:29 | (...) | 62517.0 | -| test.c:558:22:558:34 | ... * ... | 62517.0 | -| test.c:558:23:558:24 | ip | 62517.0 | -| test.c:558:23:558:28 | ... + ... | 62517.0 | -| test.c:558:28:558:28 | 1 | 1.0 | -| test.c:558:28:558:28 | (unsigned int)... | 1.0 | -| test.c:558:33:558:34 | 17 | 1.0 | -| test.c:558:33:558:34 | (unsigned int)... | 1.0 | -| test.c:558:38:558:39 | 17 | 1.0 | -| test.c:558:38:558:39 | (unsigned int)... | 1.0 | -| test.c:558:38:558:44 | ... * ... | 62517.0 | -| test.c:558:43:558:44 | ip | 62517.0 | -| test.c:558:48:558:55 | (...) | 62517.0 | -| test.c:558:48:558:60 | ... * ... | 62517.0 | -| test.c:558:49:558:50 | ip | 62517.0 | -| test.c:558:49:558:54 | ... + ... | 62517.0 | -| test.c:558:54:558:54 | 1 | 1.0 | -| test.c:558:54:558:54 | (unsigned int)... | 1.0 | -| test.c:558:59:558:60 | 17 | 1.0 | -| test.c:558:59:558:60 | (unsigned int)... | 1.0 | -| test.c:559:11:559:11 | 4 | 1.0 | -| test.c:559:11:559:11 | (unsigned int)... | 1.0 | -| test.c:559:11:559:28 | ... * ... | 125034.0 | -| test.c:559:11:560:28 | ... + ... | 1.5633501156E10 | -| test.c:559:11:561:28 | ... + ... | 1.954719183539304E15 | -| test.c:559:11:567:24 | ... + ... | 3.056778340269433E31 | -| test.c:559:15:559:28 | (...) | 125034.0 | -| test.c:559:16:559:17 | ip | 125034.0 | -| test.c:559:16:559:22 | ... * ... | 125034.0 | -| test.c:559:16:559:27 | ... + ... | 125034.0 | -| test.c:559:21:559:22 | 14 | 1.0 | -| test.c:559:21:559:22 | (unsigned int)... | 1.0 | -| test.c:559:26:559:27 | 32 | 1.0 | -| test.c:559:26:559:27 | (unsigned int)... | 1.0 | -| test.c:560:11:560:28 | (...) | 125034.0 | -| test.c:560:12:560:12 | 2 | 1.0 | -| test.c:560:12:560:12 | (unsigned int)... | 1.0 | -| test.c:560:12:560:17 | ... * ... | 125034.0 | -| test.c:560:12:560:22 | ... * ... | 125034.0 | -| test.c:560:12:560:27 | ... + ... | 125034.0 | -| test.c:560:16:560:17 | ip | 125034.0 | -| test.c:560:21:560:22 | 14 | 1.0 | -| test.c:560:21:560:22 | (unsigned int)... | 1.0 | -| test.c:560:26:560:27 | 32 | 1.0 | -| test.c:560:26:560:27 | (unsigned int)... | 1.0 | -| test.c:561:11:561:11 | 2 | 1.0 | -| test.c:561:11:561:11 | (unsigned int)... | 1.0 | -| test.c:561:11:561:28 | ... * ... | 125034.0 | -| test.c:561:15:561:28 | (...) | 125034.0 | -| test.c:561:16:561:17 | ip | 125034.0 | -| test.c:561:16:561:22 | ... * ... | 125034.0 | -| test.c:561:16:561:27 | ... + ... | 125034.0 | -| test.c:561:21:561:22 | 14 | 1.0 | -| test.c:561:21:561:22 | (unsigned int)... | 1.0 | -| test.c:561:26:561:27 | 64 | 1.0 | -| test.c:561:26:561:27 | (unsigned int)... | 1.0 | -| test.c:562:11:567:24 | (...) | 1.5637941071078508E16 | -| test.c:562:12:562:23 | (...) | 125034.0 | -| test.c:562:12:562:28 | ... * ... | 125034.0 | -| test.c:562:12:563:61 | ... > ... | 1.0 | -| test.c:562:12:567:23 | ... ? ... : ... | 1.5637941071078508E16 | -| test.c:562:13:562:13 | 2 | 1.0 | -| test.c:562:13:562:13 | (unsigned int)... | 1.0 | -| test.c:562:13:562:18 | ... * ... | 125034.0 | -| test.c:562:13:562:22 | ... + ... | 125034.0 | -| test.c:562:17:562:18 | ip | 125034.0 | -| test.c:562:22:562:22 | 1 | 1.0 | -| test.c:562:22:562:22 | (unsigned int)... | 1.0 | -| test.c:562:27:562:28 | 14 | 1.0 | -| test.c:562:27:562:28 | (unsigned int)... | 1.0 | -| test.c:563:11:563:61 | (...) | 1.5633501156E10 | -| test.c:563:12:563:13 | 14 | 1.0 | -| test.c:563:12:563:13 | (unsigned int)... | 1.0 | -| test.c:563:12:563:24 | ... * ... | 125034.0 | -| test.c:563:12:563:34 | ... > ... | 1.0 | -| test.c:563:12:563:60 | ... ? ... : ... | 1.5633501156E10 | -| test.c:563:17:563:24 | (...) | 125034.0 | -| test.c:563:18:563:18 | 2 | 1.0 | -| test.c:563:18:563:18 | (unsigned int)... | 1.0 | -| test.c:563:18:563:23 | ... * ... | 125034.0 | -| test.c:563:22:563:23 | ip | 125034.0 | -| test.c:563:28:563:29 | 17 | 1.0 | -| test.c:563:28:563:29 | (unsigned int)... | 1.0 | -| test.c:563:28:563:34 | ... * ... | 125034.0 | -| test.c:563:33:563:34 | ip | 125034.0 | -| test.c:563:38:563:39 | 17 | 1.0 | -| test.c:563:38:563:39 | (unsigned int)... | 1.0 | -| test.c:563:38:563:50 | ... * ... | 125034.0 | -| test.c:563:43:563:50 | (...) | 125034.0 | -| test.c:563:44:563:44 | 2 | 1.0 | -| test.c:563:44:563:44 | (unsigned int)... | 1.0 | -| test.c:563:44:563:49 | ... * ... | 125034.0 | -| test.c:563:48:563:49 | ip | 125034.0 | -| test.c:563:54:563:55 | 17 | 1.0 | -| test.c:563:54:563:55 | (unsigned int)... | 1.0 | -| test.c:563:54:563:60 | ... * ... | 125034.0 | -| test.c:563:59:563:60 | ip | 125034.0 | -| test.c:564:15:564:26 | (...) | 250069.0 | -| test.c:564:15:564:31 | ... * ... | 250069.0 | -| test.c:564:16:564:16 | 2 | 1.0 | -| test.c:564:16:564:16 | (unsigned int)... | 1.0 | -| test.c:564:16:564:21 | ... * ... | 250069.0 | -| test.c:564:16:564:25 | ... + ... | 250069.0 | -| test.c:564:20:564:21 | ip | 250069.0 | -| test.c:564:25:564:25 | 1 | 1.0 | -| test.c:564:25:564:25 | (unsigned int)... | 1.0 | -| test.c:564:30:564:31 | 14 | 1.0 | -| test.c:564:30:564:31 | (unsigned int)... | 1.0 | -| test.c:565:15:565:16 | 14 | 1.0 | -| test.c:565:15:565:16 | (unsigned int)... | 1.0 | -| test.c:565:15:565:27 | ... * ... | 250069.0 | -| test.c:565:15:565:37 | ... > ... | 1.0 | -| test.c:565:15:567:23 | ... ? ... : ... | 6.2534504761E10 | -| test.c:565:20:565:27 | (...) | 250069.0 | -| test.c:565:21:565:21 | 2 | 1.0 | -| test.c:565:21:565:21 | (unsigned int)... | 1.0 | -| test.c:565:21:565:26 | ... * ... | 250069.0 | -| test.c:565:25:565:26 | ip | 250069.0 | -| test.c:565:31:565:32 | 17 | 1.0 | -| test.c:565:31:565:32 | (unsigned int)... | 1.0 | -| test.c:565:31:565:37 | ... * ... | 250069.0 | -| test.c:565:36:565:37 | ip | 250069.0 | -| test.c:566:17:566:18 | 14 | 1.0 | -| test.c:566:17:566:18 | (unsigned int)... | 1.0 | -| test.c:566:17:566:29 | ... * ... | 250069.0 | -| test.c:566:22:566:29 | (...) | 250069.0 | -| test.c:566:23:566:23 | 2 | 1.0 | -| test.c:566:23:566:23 | (unsigned int)... | 1.0 | -| test.c:566:23:566:28 | ... * ... | 250069.0 | -| test.c:566:27:566:28 | ip | 250069.0 | -| test.c:567:17:567:18 | 14 | 1.0 | -| test.c:567:17:567:18 | (unsigned int)... | 1.0 | -| test.c:567:17:567:23 | ... * ... | 250069.0 | -| test.c:567:22:567:23 | ip | 250069.0 | -| test.c:568:11:568:12 | 14 | 1.0 | -| test.c:568:11:568:12 | (unsigned int)... | 1.0 | -| test.c:568:11:568:17 | ... * ... | 125034.0 | -| test.c:568:11:568:33 | ... > ... | 1.0 | -| test.c:568:11:570:25 | ... ? ... : ... | 1.5633501156E10 | -| test.c:568:16:568:17 | ip | 125034.0 | -| test.c:568:21:568:28 | (...) | 125034.0 | -| test.c:568:21:568:33 | ... * ... | 125034.0 | -| test.c:568:22:568:23 | ip | 125034.0 | -| test.c:568:22:568:27 | ... + ... | 125034.0 | -| test.c:568:27:568:27 | 1 | 1.0 | -| test.c:568:27:568:27 | (unsigned int)... | 1.0 | -| test.c:568:32:568:33 | 17 | 1.0 | -| test.c:568:32:568:33 | (unsigned int)... | 1.0 | -| test.c:569:13:569:14 | 14 | 1.0 | -| test.c:569:13:569:14 | (unsigned int)... | 1.0 | -| test.c:569:13:569:19 | ... * ... | 125034.0 | -| test.c:569:18:569:19 | ip | 125034.0 | -| test.c:570:13:570:20 | (...) | 125034.0 | -| test.c:570:13:570:25 | ... * ... | 125034.0 | -| test.c:570:14:570:15 | ip | 125034.0 | -| test.c:570:14:570:19 | ... + ... | 125034.0 | -| test.c:570:19:570:19 | 1 | 1.0 | -| test.c:570:19:570:19 | (unsigned int)... | 1.0 | -| test.c:570:24:570:25 | 14 | 1.0 | -| test.c:570:24:570:25 | (unsigned int)... | 1.0 | -| test.c:571:9:571:10 | 14 | 1.0 | -| test.c:571:9:571:10 | (unsigned int)... | 1.0 | -| test.c:571:9:571:15 | ... * ... | 1437897.0 | -| test.c:571:9:571:59 | ... > ... | 1.0 | -| test.c:571:9:573:51 | ... ? ... : ... | 2.9729207539701335E18 | -| test.c:571:14:571:15 | ip | 1437897.0 | -| test.c:571:19:571:30 | (...) | 1437897.0 | -| test.c:571:19:571:35 | ... * ... | 1437897.0 | -| test.c:571:19:571:59 | ... + ... | 2.067547782609E12 | -| test.c:571:20:571:20 | 2 | 1.0 | -| test.c:571:20:571:20 | (unsigned int)... | 1.0 | -| test.c:571:20:571:25 | ... * ... | 1437897.0 | -| test.c:571:20:571:29 | ... + ... | 1437897.0 | -| test.c:571:24:571:25 | ip | 1437897.0 | -| test.c:571:29:571:29 | 1 | 1.0 | -| test.c:571:29:571:29 | (unsigned int)... | 1.0 | -| test.c:571:34:571:35 | 17 | 1.0 | -| test.c:571:34:571:35 | (unsigned int)... | 1.0 | -| test.c:571:39:571:54 | (...) | 1437897.0 | -| test.c:571:39:571:59 | ... * ... | 1437897.0 | -| test.c:571:40:571:40 | 2 | 1.0 | -| test.c:571:40:571:40 | (unsigned int)... | 1.0 | -| test.c:571:40:571:45 | ... * ... | 1437897.0 | -| test.c:571:40:571:49 | ... + ... | 1437897.0 | -| test.c:571:40:571:53 | ... + ... | 1437897.0 | -| test.c:571:44:571:45 | ip | 1437897.0 | -| test.c:571:49:571:49 | 1 | 1.0 | -| test.c:571:49:571:49 | (unsigned int)... | 1.0 | -| test.c:571:53:571:53 | 1 | 1.0 | -| test.c:571:53:571:53 | (unsigned int)... | 1.0 | -| test.c:571:58:571:59 | 17 | 1.0 | -| test.c:571:58:571:59 | (unsigned int)... | 1.0 | -| test.c:572:11:572:12 | 14 | 1.0 | -| test.c:572:11:572:12 | (unsigned int)... | 1.0 | -| test.c:572:11:572:17 | ... * ... | 1437897.0 | -| test.c:572:16:572:17 | ip | 1437897.0 | -| test.c:573:11:573:22 | (...) | 1437897.0 | -| test.c:573:11:573:27 | ... * ... | 1437897.0 | -| test.c:573:11:573:51 | ... + ... | 2.067547782609E12 | -| test.c:573:12:573:12 | 2 | 1.0 | -| test.c:573:12:573:12 | (unsigned int)... | 1.0 | -| test.c:573:12:573:17 | ... * ... | 1437897.0 | -| test.c:573:12:573:21 | ... + ... | 1437897.0 | -| test.c:573:16:573:17 | ip | 1437897.0 | -| test.c:573:21:573:21 | 1 | 1.0 | -| test.c:573:21:573:21 | (unsigned int)... | 1.0 | -| test.c:573:26:573:27 | 14 | 1.0 | -| test.c:573:26:573:27 | (unsigned int)... | 1.0 | -| test.c:573:31:573:46 | (...) | 1437897.0 | -| test.c:573:31:573:51 | ... * ... | 1437897.0 | -| test.c:573:32:573:32 | 2 | 1.0 | -| test.c:573:32:573:32 | (unsigned int)... | 1.0 | -| test.c:573:32:573:37 | ... * ... | 1437897.0 | -| test.c:573:32:573:41 | ... + ... | 1437897.0 | -| test.c:573:32:573:45 | ... + ... | 1437897.0 | -| test.c:573:36:573:37 | ip | 1437897.0 | -| test.c:573:41:573:41 | 1 | 1.0 | -| test.c:573:41:573:41 | (unsigned int)... | 1.0 | -| test.c:573:45:573:45 | 1 | 1.0 | -| test.c:573:45:573:45 | (unsigned int)... | 1.0 | -| test.c:573:50:573:51 | 17 | 1.0 | -| test.c:573:50:573:51 | (unsigned int)... | 1.0 | -| test.c:574:9:574:9 | 2 | 1.0 | -| test.c:574:9:574:9 | (unsigned int)... | 1.0 | -| test.c:574:9:574:26 | ... * ... | 1437897.0 | -| test.c:574:9:594:48 | ... + ... | 3.5306223994138077E62 | -| test.c:574:9:616:30 | ... > ... | 1.0 | -| test.c:574:9:659:27 | ... ? ... : ... | 4.3658022750663434E182 | -| test.c:574:13:574:26 | (...) | 1437897.0 | -| test.c:574:14:574:15 | ip | 1437897.0 | -| test.c:574:14:574:20 | ... * ... | 1437897.0 | -| test.c:574:14:574:25 | ... + ... | 1437897.0 | -| test.c:574:19:574:20 | 14 | 1.0 | -| test.c:574:19:574:20 | (unsigned int)... | 1.0 | -| test.c:574:24:574:25 | 32 | 1.0 | -| test.c:574:24:574:25 | (unsigned int)... | 1.0 | -| test.c:575:13:594:48 | (...) | 2.4554070280512497E56 | -| test.c:575:14:575:14 | 4 | 1.0 | -| test.c:575:14:575:14 | (unsigned int)... | 1.0 | -| test.c:575:14:575:31 | ... * ... | 1437897.0 | -| test.c:575:14:576:32 | ... + ... | 2.067547782609E12 | -| test.c:575:14:577:32 | ... + ... | 2.9729207539701335E18 | -| test.c:575:14:583:28 | ... + ... | 7.070613623498497E37 | -| test.c:575:14:584:43 | ... > ... | 1.0 | -| test.c:575:14:594:47 | ... ? ... : ... | 2.4554070280512497E56 | -| test.c:575:18:575:31 | (...) | 1437897.0 | -| test.c:575:19:575:20 | ip | 1437897.0 | -| test.c:575:19:575:25 | ... * ... | 1437897.0 | -| test.c:575:19:575:30 | ... + ... | 1437897.0 | -| test.c:575:24:575:25 | 14 | 1.0 | -| test.c:575:24:575:25 | (unsigned int)... | 1.0 | -| test.c:575:29:575:30 | 32 | 1.0 | -| test.c:575:29:575:30 | (unsigned int)... | 1.0 | -| test.c:576:15:576:32 | (...) | 1437897.0 | -| test.c:576:16:576:16 | 2 | 1.0 | -| test.c:576:16:576:16 | (unsigned int)... | 1.0 | -| test.c:576:16:576:21 | ... * ... | 1437897.0 | -| test.c:576:16:576:26 | ... * ... | 1437897.0 | -| test.c:576:16:576:31 | ... + ... | 1437897.0 | -| test.c:576:20:576:21 | ip | 1437897.0 | -| test.c:576:25:576:26 | 14 | 1.0 | -| test.c:576:25:576:26 | (unsigned int)... | 1.0 | -| test.c:576:30:576:31 | 32 | 1.0 | -| test.c:576:30:576:31 | (unsigned int)... | 1.0 | -| test.c:577:15:577:15 | 2 | 1.0 | -| test.c:577:15:577:15 | (unsigned int)... | 1.0 | -| test.c:577:15:577:32 | ... * ... | 1437897.0 | -| test.c:577:19:577:32 | (...) | 1437897.0 | -| test.c:577:20:577:21 | ip | 1437897.0 | -| test.c:577:20:577:26 | ... * ... | 1437897.0 | -| test.c:577:20:577:31 | ... + ... | 1437897.0 | -| test.c:577:25:577:26 | 14 | 1.0 | -| test.c:577:25:577:26 | (unsigned int)... | 1.0 | -| test.c:577:30:577:31 | 64 | 1.0 | -| test.c:577:30:577:31 | (unsigned int)... | 1.0 | -| test.c:578:15:583:28 | (...) | 2.3783390842343084E19 | -| test.c:578:16:578:27 | (...) | 1437897.0 | -| test.c:578:16:578:32 | ... * ... | 1437897.0 | -| test.c:578:16:579:65 | ... > ... | 1.0 | -| test.c:578:16:583:27 | ... ? ... : ... | 2.3783390842343084E19 | -| test.c:578:17:578:17 | 2 | 1.0 | -| test.c:578:17:578:17 | (unsigned int)... | 1.0 | -| test.c:578:17:578:22 | ... * ... | 1437897.0 | -| test.c:578:17:578:26 | ... + ... | 1437897.0 | -| test.c:578:21:578:22 | ip | 1437897.0 | -| test.c:578:26:578:26 | 1 | 1.0 | -| test.c:578:26:578:26 | (unsigned int)... | 1.0 | -| test.c:578:31:578:32 | 14 | 1.0 | -| test.c:578:31:578:32 | (unsigned int)... | 1.0 | -| test.c:579:15:579:65 | (...) | 2.067547782609E12 | -| test.c:579:16:579:17 | 14 | 1.0 | -| test.c:579:16:579:17 | (unsigned int)... | 1.0 | -| test.c:579:16:579:28 | ... * ... | 1437897.0 | -| test.c:579:16:579:38 | ... > ... | 1.0 | -| test.c:579:16:579:64 | ... ? ... : ... | 2.067547782609E12 | -| test.c:579:21:579:28 | (...) | 1437897.0 | -| test.c:579:22:579:22 | 2 | 1.0 | -| test.c:579:22:579:22 | (unsigned int)... | 1.0 | -| test.c:579:22:579:27 | ... * ... | 1437897.0 | -| test.c:579:26:579:27 | ip | 1437897.0 | -| test.c:579:32:579:33 | 17 | 1.0 | -| test.c:579:32:579:33 | (unsigned int)... | 1.0 | -| test.c:579:32:579:38 | ... * ... | 1437897.0 | -| test.c:579:37:579:38 | ip | 1437897.0 | -| test.c:579:42:579:43 | 17 | 1.0 | -| test.c:579:42:579:43 | (unsigned int)... | 1.0 | -| test.c:579:42:579:54 | ... * ... | 1437897.0 | -| test.c:579:47:579:54 | (...) | 1437897.0 | -| test.c:579:48:579:48 | 2 | 1.0 | -| test.c:579:48:579:48 | (unsigned int)... | 1.0 | -| test.c:579:48:579:53 | ... * ... | 1437897.0 | -| test.c:579:52:579:53 | ip | 1437897.0 | -| test.c:579:58:579:59 | 17 | 1.0 | -| test.c:579:58:579:59 | (unsigned int)... | 1.0 | -| test.c:579:58:579:64 | ... * ... | 1437897.0 | -| test.c:579:63:579:64 | ip | 1437897.0 | -| test.c:580:19:580:30 | (...) | 2875795.0 | -| test.c:580:19:580:35 | ... * ... | 2875795.0 | -| test.c:580:20:580:20 | 2 | 1.0 | -| test.c:580:20:580:20 | (unsigned int)... | 1.0 | -| test.c:580:20:580:25 | ... * ... | 2875795.0 | -| test.c:580:20:580:29 | ... + ... | 2875795.0 | -| test.c:580:24:580:25 | ip | 2875795.0 | -| test.c:580:29:580:29 | 1 | 1.0 | -| test.c:580:29:580:29 | (unsigned int)... | 1.0 | -| test.c:580:34:580:35 | 14 | 1.0 | -| test.c:580:34:580:35 | (unsigned int)... | 1.0 | -| test.c:581:19:581:20 | 14 | 1.0 | -| test.c:581:19:581:20 | (unsigned int)... | 1.0 | -| test.c:581:19:581:31 | ... * ... | 2875795.0 | -| test.c:581:19:581:41 | ... > ... | 1.0 | -| test.c:581:19:583:27 | ... ? ... : ... | 8.270196882025E12 | -| test.c:581:24:581:31 | (...) | 2875795.0 | -| test.c:581:25:581:25 | 2 | 1.0 | -| test.c:581:25:581:25 | (unsigned int)... | 1.0 | -| test.c:581:25:581:30 | ... * ... | 2875795.0 | -| test.c:581:29:581:30 | ip | 2875795.0 | -| test.c:581:35:581:36 | 17 | 1.0 | -| test.c:581:35:581:36 | (unsigned int)... | 1.0 | -| test.c:581:35:581:41 | ... * ... | 2875795.0 | -| test.c:581:40:581:41 | ip | 2875795.0 | -| test.c:582:21:582:22 | 14 | 1.0 | -| test.c:582:21:582:22 | (unsigned int)... | 1.0 | -| test.c:582:21:582:33 | ... * ... | 2875795.0 | -| test.c:582:26:582:33 | (...) | 2875795.0 | -| test.c:582:27:582:27 | 2 | 1.0 | -| test.c:582:27:582:27 | (unsigned int)... | 1.0 | -| test.c:582:27:582:32 | ... * ... | 2875795.0 | -| test.c:582:31:582:32 | ip | 2875795.0 | -| test.c:583:21:583:22 | 14 | 1.0 | -| test.c:583:21:583:22 | (unsigned int)... | 1.0 | -| test.c:583:21:583:27 | ... * ... | 2875795.0 | -| test.c:583:26:583:27 | ip | 2875795.0 | -| test.c:584:13:584:13 | 2 | 1.0 | -| test.c:584:13:584:13 | (unsigned int)... | 1.0 | -| test.c:584:13:584:18 | ... * ... | 8627385.0 | -| test.c:584:13:584:23 | ... * ... | 8627385.0 | -| test.c:584:13:584:43 | ... + ... | 7.4431771938225E13 | -| test.c:584:17:584:18 | ip | 8627385.0 | -| test.c:584:22:584:23 | 14 | 1.0 | -| test.c:584:22:584:23 | (unsigned int)... | 1.0 | -| test.c:584:27:584:38 | (...) | 8627385.0 | -| test.c:584:27:584:43 | ... * ... | 8627385.0 | -| test.c:584:28:584:28 | 2 | 1.0 | -| test.c:584:28:584:28 | (unsigned int)... | 1.0 | -| test.c:584:28:584:33 | ... * ... | 8627385.0 | -| test.c:584:28:584:37 | ... + ... | 8627385.0 | -| test.c:584:32:584:33 | ip | 8627385.0 | -| test.c:584:37:584:37 | 1 | 1.0 | -| test.c:584:37:584:37 | (unsigned int)... | 1.0 | -| test.c:584:42:584:43 | 17 | 1.0 | -| test.c:584:42:584:43 | (unsigned int)... | 1.0 | -| test.c:585:17:585:17 | 4 | 1.0 | -| test.c:585:17:585:17 | (unsigned int)... | 1.0 | -| test.c:585:17:585:34 | ... * ... | 8627385.0 | -| test.c:585:17:586:34 | ... + ... | 7.4431771938225E13 | -| test.c:585:17:587:34 | ... + ... | 6.421515527432633E20 | -| test.c:585:17:593:30 | ... + ... | 3.298869507082441E42 | -| test.c:585:21:585:34 | (...) | 8627385.0 | -| test.c:585:22:585:23 | ip | 8627385.0 | -| test.c:585:22:585:28 | ... * ... | 8627385.0 | -| test.c:585:22:585:33 | ... + ... | 8627385.0 | -| test.c:585:27:585:28 | 14 | 1.0 | -| test.c:585:27:585:28 | (unsigned int)... | 1.0 | -| test.c:585:32:585:33 | 32 | 1.0 | -| test.c:585:32:585:33 | (unsigned int)... | 1.0 | -| test.c:586:17:586:34 | (...) | 8627385.0 | -| test.c:586:18:586:18 | 2 | 1.0 | -| test.c:586:18:586:18 | (unsigned int)... | 1.0 | -| test.c:586:18:586:23 | ... * ... | 8627385.0 | -| test.c:586:18:586:28 | ... * ... | 8627385.0 | -| test.c:586:18:586:33 | ... + ... | 8627385.0 | -| test.c:586:22:586:23 | ip | 8627385.0 | -| test.c:586:27:586:28 | 14 | 1.0 | -| test.c:586:27:586:28 | (unsigned int)... | 1.0 | -| test.c:586:32:586:33 | 32 | 1.0 | -| test.c:586:32:586:33 | (unsigned int)... | 1.0 | -| test.c:587:17:587:17 | 2 | 1.0 | -| test.c:587:17:587:17 | (unsigned int)... | 1.0 | -| test.c:587:17:587:34 | ... * ... | 8627385.0 | -| test.c:587:21:587:34 | (...) | 8627385.0 | -| test.c:587:22:587:23 | ip | 8627385.0 | -| test.c:587:22:587:28 | ... * ... | 8627385.0 | -| test.c:587:22:587:33 | ... + ... | 8627385.0 | -| test.c:587:27:587:28 | 14 | 1.0 | -| test.c:587:27:587:28 | (unsigned int)... | 1.0 | -| test.c:587:32:587:33 | 64 | 1.0 | -| test.c:587:32:587:33 | (unsigned int)... | 1.0 | -| test.c:588:17:593:30 | (...) | 5.137213315127421E21 | -| test.c:588:18:588:29 | (...) | 8627385.0 | -| test.c:588:18:588:34 | ... * ... | 8627385.0 | -| test.c:588:18:589:67 | ... > ... | 1.0 | -| test.c:588:18:593:29 | ... ? ... : ... | 5.137213315127421E21 | -| test.c:588:19:588:19 | 2 | 1.0 | -| test.c:588:19:588:19 | (unsigned int)... | 1.0 | -| test.c:588:19:588:24 | ... * ... | 8627385.0 | -| test.c:588:19:588:28 | ... + ... | 8627385.0 | -| test.c:588:23:588:24 | ip | 8627385.0 | -| test.c:588:28:588:28 | 1 | 1.0 | -| test.c:588:28:588:28 | (unsigned int)... | 1.0 | -| test.c:588:33:588:34 | 14 | 1.0 | -| test.c:588:33:588:34 | (unsigned int)... | 1.0 | -| test.c:589:17:589:67 | (...) | 7.4431771938225E13 | -| test.c:589:18:589:19 | 14 | 1.0 | -| test.c:589:18:589:19 | (unsigned int)... | 1.0 | -| test.c:589:18:589:30 | ... * ... | 8627385.0 | -| test.c:589:18:589:40 | ... > ... | 1.0 | -| test.c:589:18:589:66 | ... ? ... : ... | 7.4431771938225E13 | -| test.c:589:23:589:30 | (...) | 8627385.0 | -| test.c:589:24:589:24 | 2 | 1.0 | -| test.c:589:24:589:24 | (unsigned int)... | 1.0 | -| test.c:589:24:589:29 | ... * ... | 8627385.0 | -| test.c:589:28:589:29 | ip | 8627385.0 | -| test.c:589:34:589:35 | 17 | 1.0 | -| test.c:589:34:589:35 | (unsigned int)... | 1.0 | -| test.c:589:34:589:40 | ... * ... | 8627385.0 | -| test.c:589:39:589:40 | ip | 8627385.0 | -| test.c:589:44:589:45 | 17 | 1.0 | -| test.c:589:44:589:45 | (unsigned int)... | 1.0 | -| test.c:589:44:589:56 | ... * ... | 8627385.0 | -| test.c:589:49:589:56 | (...) | 8627385.0 | -| test.c:589:50:589:50 | 2 | 1.0 | -| test.c:589:50:589:50 | (unsigned int)... | 1.0 | -| test.c:589:50:589:55 | ... * ... | 8627385.0 | -| test.c:589:54:589:55 | ip | 8627385.0 | -| test.c:589:60:589:61 | 17 | 1.0 | -| test.c:589:60:589:61 | (unsigned int)... | 1.0 | -| test.c:589:60:589:66 | ... * ... | 8627385.0 | -| test.c:589:65:589:66 | ip | 8627385.0 | -| test.c:590:21:590:32 | (...) | 1.7254771E7 | -| test.c:590:21:590:37 | ... * ... | 1.7254771E7 | -| test.c:590:22:590:22 | 2 | 1.0 | -| test.c:590:22:590:22 | (unsigned int)... | 1.0 | -| test.c:590:22:590:27 | ... * ... | 1.7254771E7 | -| test.c:590:22:590:31 | ... + ... | 1.7254771E7 | -| test.c:590:26:590:27 | ip | 1.7254771E7 | -| test.c:590:31:590:31 | 1 | 1.0 | -| test.c:590:31:590:31 | (unsigned int)... | 1.0 | -| test.c:590:36:590:37 | 14 | 1.0 | -| test.c:590:36:590:37 | (unsigned int)... | 1.0 | -| test.c:591:21:591:22 | 14 | 1.0 | -| test.c:591:21:591:22 | (unsigned int)... | 1.0 | -| test.c:591:21:591:33 | ... * ... | 1.7254771E7 | -| test.c:591:21:591:43 | ... > ... | 1.0 | -| test.c:591:21:593:29 | ... ? ... : ... | 2.97727122262441E14 | -| test.c:591:26:591:33 | (...) | 1.7254771E7 | -| test.c:591:27:591:27 | 2 | 1.0 | -| test.c:591:27:591:27 | (unsigned int)... | 1.0 | -| test.c:591:27:591:32 | ... * ... | 1.7254771E7 | -| test.c:591:31:591:32 | ip | 1.7254771E7 | -| test.c:591:37:591:38 | 17 | 1.0 | -| test.c:591:37:591:38 | (unsigned int)... | 1.0 | -| test.c:591:37:591:43 | ... * ... | 1.7254771E7 | -| test.c:591:42:591:43 | ip | 1.7254771E7 | -| test.c:592:23:592:24 | 14 | 1.0 | -| test.c:592:23:592:24 | (unsigned int)... | 1.0 | -| test.c:592:23:592:35 | ... * ... | 1.7254771E7 | -| test.c:592:28:592:35 | (...) | 1.7254771E7 | -| test.c:592:29:592:29 | 2 | 1.0 | -| test.c:592:29:592:29 | (unsigned int)... | 1.0 | -| test.c:592:29:592:34 | ... * ... | 1.7254771E7 | -| test.c:592:33:592:34 | ip | 1.7254771E7 | -| test.c:593:23:593:24 | 14 | 1.0 | -| test.c:593:23:593:24 | (unsigned int)... | 1.0 | -| test.c:593:23:593:29 | ... * ... | 1.7254771E7 | -| test.c:593:28:593:29 | ip | 1.7254771E7 | -| test.c:594:17:594:17 | 2 | 1.0 | -| test.c:594:17:594:17 | (unsigned int)... | 1.0 | -| test.c:594:17:594:22 | ... * ... | 8627385.0 | -| test.c:594:17:594:27 | ... * ... | 8627385.0 | -| test.c:594:17:594:47 | ... + ... | 7.4431771938225E13 | -| test.c:594:21:594:22 | ip | 8627385.0 | -| test.c:594:26:594:27 | 14 | 1.0 | -| test.c:594:26:594:27 | (unsigned int)... | 1.0 | -| test.c:594:31:594:42 | (...) | 8627385.0 | -| test.c:594:31:594:47 | ... * ... | 8627385.0 | -| test.c:594:32:594:32 | 2 | 1.0 | -| test.c:594:32:594:32 | (unsigned int)... | 1.0 | -| test.c:594:32:594:37 | ... * ... | 8627385.0 | -| test.c:594:32:594:41 | ... + ... | 8627385.0 | -| test.c:594:36:594:37 | ip | 8627385.0 | -| test.c:594:41:594:41 | 1 | 1.0 | -| test.c:594:41:594:41 | (unsigned int)... | 1.0 | -| test.c:594:46:594:47 | 17 | 1.0 | -| test.c:594:46:594:47 | (unsigned int)... | 1.0 | -| test.c:595:11:616:30 | (...) | 6.08636382738973E71 | -| test.c:595:12:595:12 | 4 | 1.0 | -| test.c:595:12:595:12 | (unsigned int)... | 1.0 | -| test.c:595:12:595:29 | ... * ... | 6.0391698E7 | -| test.c:595:12:596:30 | ... + ... | 3.647157187323204E15 | -| test.c:595:12:597:30 | ... + ... | 2.2025801541535236E23 | -| test.c:595:12:603:26 | ... + ... | 3.881087564774641E47 | -| test.c:595:12:604:61 | ... > ... | 1.0 | -| test.c:595:12:616:29 | ... ? ... : ... | 6.08636382738973E71 | -| test.c:595:16:595:29 | (...) | 6.0391698E7 | -| test.c:595:17:595:18 | ip | 6.0391698E7 | -| test.c:595:17:595:23 | ... * ... | 6.0391698E7 | -| test.c:595:17:595:28 | ... + ... | 6.0391698E7 | -| test.c:595:22:595:23 | 14 | 1.0 | -| test.c:595:22:595:23 | (unsigned int)... | 1.0 | -| test.c:595:27:595:28 | 32 | 1.0 | -| test.c:595:27:595:28 | (unsigned int)... | 1.0 | -| test.c:596:13:596:30 | (...) | 6.0391698E7 | -| test.c:596:14:596:14 | 2 | 1.0 | -| test.c:596:14:596:14 | (unsigned int)... | 1.0 | -| test.c:596:14:596:19 | ... * ... | 6.0391698E7 | -| test.c:596:14:596:24 | ... * ... | 6.0391698E7 | -| test.c:596:14:596:29 | ... + ... | 6.0391698E7 | -| test.c:596:18:596:19 | ip | 6.0391698E7 | -| test.c:596:23:596:24 | 14 | 1.0 | -| test.c:596:23:596:24 | (unsigned int)... | 1.0 | -| test.c:596:28:596:29 | 32 | 1.0 | -| test.c:596:28:596:29 | (unsigned int)... | 1.0 | -| test.c:597:13:597:13 | 2 | 1.0 | -| test.c:597:13:597:13 | (unsigned int)... | 1.0 | -| test.c:597:13:597:30 | ... * ... | 6.0391698E7 | -| test.c:597:17:597:30 | (...) | 6.0391698E7 | -| test.c:597:18:597:19 | ip | 6.0391698E7 | -| test.c:597:18:597:24 | ... * ... | 6.0391698E7 | -| test.c:597:18:597:29 | ... + ... | 6.0391698E7 | -| test.c:597:23:597:24 | 14 | 1.0 | -| test.c:597:23:597:24 | (unsigned int)... | 1.0 | -| test.c:597:28:597:29 | 64 | 1.0 | -| test.c:597:28:597:29 | (unsigned int)... | 1.0 | -| test.c:598:13:603:26 | (...) | 1.7620641670887053E24 | -| test.c:598:14:598:25 | (...) | 6.0391698E7 | -| test.c:598:14:598:30 | ... * ... | 6.0391698E7 | -| test.c:598:14:599:63 | ... > ... | 1.0 | -| test.c:598:14:603:25 | ... ? ... : ... | 1.7620641670887053E24 | -| test.c:598:15:598:15 | 2 | 1.0 | -| test.c:598:15:598:15 | (unsigned int)... | 1.0 | -| test.c:598:15:598:20 | ... * ... | 6.0391698E7 | -| test.c:598:15:598:24 | ... + ... | 6.0391698E7 | -| test.c:598:19:598:20 | ip | 6.0391698E7 | -| test.c:598:24:598:24 | 1 | 1.0 | -| test.c:598:24:598:24 | (unsigned int)... | 1.0 | -| test.c:598:29:598:30 | 14 | 1.0 | -| test.c:598:29:598:30 | (unsigned int)... | 1.0 | -| test.c:599:13:599:63 | (...) | 3.647157187323204E15 | -| test.c:599:14:599:15 | 14 | 1.0 | -| test.c:599:14:599:15 | (unsigned int)... | 1.0 | -| test.c:599:14:599:26 | ... * ... | 6.0391698E7 | -| test.c:599:14:599:36 | ... > ... | 1.0 | -| test.c:599:14:599:62 | ... ? ... : ... | 3.647157187323204E15 | -| test.c:599:19:599:26 | (...) | 6.0391698E7 | -| test.c:599:20:599:20 | 2 | 1.0 | -| test.c:599:20:599:20 | (unsigned int)... | 1.0 | -| test.c:599:20:599:25 | ... * ... | 6.0391698E7 | -| test.c:599:24:599:25 | ip | 6.0391698E7 | -| test.c:599:30:599:31 | 17 | 1.0 | -| test.c:599:30:599:31 | (unsigned int)... | 1.0 | -| test.c:599:30:599:36 | ... * ... | 6.0391698E7 | -| test.c:599:35:599:36 | ip | 6.0391698E7 | -| test.c:599:40:599:41 | 17 | 1.0 | -| test.c:599:40:599:41 | (unsigned int)... | 1.0 | -| test.c:599:40:599:52 | ... * ... | 6.0391698E7 | -| test.c:599:45:599:52 | (...) | 6.0391698E7 | -| test.c:599:46:599:46 | 2 | 1.0 | -| test.c:599:46:599:46 | (unsigned int)... | 1.0 | -| test.c:599:46:599:51 | ... * ... | 6.0391698E7 | -| test.c:599:50:599:51 | ip | 6.0391698E7 | -| test.c:599:56:599:57 | 17 | 1.0 | -| test.c:599:56:599:57 | (unsigned int)... | 1.0 | -| test.c:599:56:599:62 | ... * ... | 6.0391698E7 | -| test.c:599:61:599:62 | ip | 6.0391698E7 | -| test.c:600:17:600:28 | (...) | 1.20783397E8 | -| test.c:600:17:600:33 | ... * ... | 1.20783397E8 | -| test.c:600:18:600:18 | 2 | 1.0 | -| test.c:600:18:600:18 | (unsigned int)... | 1.0 | -| test.c:600:18:600:23 | ... * ... | 1.20783397E8 | -| test.c:600:18:600:27 | ... + ... | 1.20783397E8 | -| test.c:600:22:600:23 | ip | 1.20783397E8 | -| test.c:600:27:600:27 | 1 | 1.0 | -| test.c:600:27:600:27 | (unsigned int)... | 1.0 | -| test.c:600:32:600:33 | 14 | 1.0 | -| test.c:600:32:600:33 | (unsigned int)... | 1.0 | -| test.c:601:17:601:18 | 14 | 1.0 | -| test.c:601:17:601:18 | (unsigned int)... | 1.0 | -| test.c:601:17:601:29 | ... * ... | 1.20783397E8 | -| test.c:601:17:601:39 | ... > ... | 1.0 | -| test.c:601:17:603:25 | ... ? ... : ... | 1.4588628990859608E16 | -| test.c:601:22:601:29 | (...) | 1.20783397E8 | -| test.c:601:23:601:23 | 2 | 1.0 | -| test.c:601:23:601:23 | (unsigned int)... | 1.0 | -| test.c:601:23:601:28 | ... * ... | 1.20783397E8 | -| test.c:601:27:601:28 | ip | 1.20783397E8 | -| test.c:601:33:601:34 | 17 | 1.0 | -| test.c:601:33:601:34 | (unsigned int)... | 1.0 | -| test.c:601:33:601:39 | ... * ... | 1.20783397E8 | -| test.c:601:38:601:39 | ip | 1.20783397E8 | -| test.c:602:19:602:20 | 14 | 1.0 | -| test.c:602:19:602:20 | (unsigned int)... | 1.0 | -| test.c:602:19:602:31 | ... * ... | 1.20783397E8 | -| test.c:602:24:602:31 | (...) | 1.20783397E8 | -| test.c:602:25:602:25 | 2 | 1.0 | -| test.c:602:25:602:25 | (unsigned int)... | 1.0 | -| test.c:602:25:602:30 | ... * ... | 1.20783397E8 | -| test.c:602:29:602:30 | ip | 1.20783397E8 | -| test.c:603:19:603:20 | 14 | 1.0 | -| test.c:603:19:603:20 | (unsigned int)... | 1.0 | -| test.c:603:19:603:25 | ... * ... | 1.20783397E8 | -| test.c:603:24:603:25 | ip | 1.20783397E8 | -| test.c:604:11:604:61 | (...) | 1.3129766091773648E17 | -| test.c:604:12:604:13 | 14 | 1.0 | -| test.c:604:12:604:13 | (unsigned int)... | 1.0 | -| test.c:604:12:604:18 | ... * ... | 3.62350191E8 | -| test.c:604:12:604:34 | ... > ... | 1.0 | -| test.c:604:12:604:60 | ... ? ... : ... | 1.3129766091773648E17 | -| test.c:604:17:604:18 | ip | 3.62350191E8 | -| test.c:604:22:604:29 | (...) | 3.62350191E8 | -| test.c:604:22:604:34 | ... * ... | 3.62350191E8 | -| test.c:604:23:604:24 | ip | 3.62350191E8 | -| test.c:604:23:604:28 | ... + ... | 3.62350191E8 | -| test.c:604:28:604:28 | 1 | 1.0 | -| test.c:604:28:604:28 | (unsigned int)... | 1.0 | -| test.c:604:33:604:34 | 17 | 1.0 | -| test.c:604:33:604:34 | (unsigned int)... | 1.0 | -| test.c:604:38:604:39 | 17 | 1.0 | -| test.c:604:38:604:39 | (unsigned int)... | 1.0 | -| test.c:604:38:604:44 | ... * ... | 3.62350191E8 | -| test.c:604:43:604:44 | ip | 3.62350191E8 | -| test.c:604:48:604:55 | (...) | 3.62350191E8 | -| test.c:604:48:604:60 | ... * ... | 3.62350191E8 | -| test.c:604:49:604:50 | ip | 3.62350191E8 | -| test.c:604:49:604:54 | ... + ... | 3.62350191E8 | -| test.c:604:54:604:54 | 1 | 1.0 | -| test.c:604:54:604:54 | (unsigned int)... | 1.0 | -| test.c:604:59:604:60 | 17 | 1.0 | -| test.c:604:59:604:60 | (unsigned int)... | 1.0 | -| test.c:605:15:605:15 | 4 | 1.0 | -| test.c:605:15:605:15 | (unsigned int)... | 1.0 | -| test.c:605:15:605:32 | ... * ... | 7.24700382E8 | -| test.c:605:15:606:32 | ... + ... | 5.251906436709459E17 | -| test.c:605:15:607:32 | ... + ... | 3.806058600911604E26 | -| test.c:605:15:613:28 | ... + ... | 1.1588865682845433E54 | -| test.c:605:19:605:32 | (...) | 7.24700382E8 | -| test.c:605:20:605:21 | ip | 7.24700382E8 | -| test.c:605:20:605:26 | ... * ... | 7.24700382E8 | -| test.c:605:20:605:31 | ... + ... | 7.24700382E8 | -| test.c:605:25:605:26 | 14 | 1.0 | -| test.c:605:25:605:26 | (unsigned int)... | 1.0 | -| test.c:605:30:605:31 | 32 | 1.0 | -| test.c:605:30:605:31 | (unsigned int)... | 1.0 | -| test.c:606:15:606:32 | (...) | 7.24700382E8 | -| test.c:606:16:606:16 | 2 | 1.0 | -| test.c:606:16:606:16 | (unsigned int)... | 1.0 | -| test.c:606:16:606:21 | ... * ... | 7.24700382E8 | -| test.c:606:16:606:26 | ... * ... | 7.24700382E8 | -| test.c:606:16:606:31 | ... + ... | 7.24700382E8 | -| test.c:606:20:606:21 | ip | 7.24700382E8 | -| test.c:606:25:606:26 | 14 | 1.0 | -| test.c:606:25:606:26 | (unsigned int)... | 1.0 | -| test.c:606:30:606:31 | 32 | 1.0 | -| test.c:606:30:606:31 | (unsigned int)... | 1.0 | -| test.c:607:15:607:15 | 2 | 1.0 | -| test.c:607:15:607:15 | (unsigned int)... | 1.0 | -| test.c:607:15:607:32 | ... * ... | 7.24700382E8 | -| test.c:607:19:607:32 | (...) | 7.24700382E8 | -| test.c:607:20:607:21 | ip | 7.24700382E8 | -| test.c:607:20:607:26 | ... * ... | 7.24700382E8 | -| test.c:607:20:607:31 | ... + ... | 7.24700382E8 | -| test.c:607:25:607:26 | 14 | 1.0 | -| test.c:607:25:607:26 | (unsigned int)... | 1.0 | -| test.c:607:30:607:31 | 64 | 1.0 | -| test.c:607:30:607:31 | (unsigned int)... | 1.0 | -| test.c:608:15:613:28 | (...) | 3.044846887031571E27 | -| test.c:608:16:608:27 | (...) | 7.24700382E8 | -| test.c:608:16:608:32 | ... * ... | 7.24700382E8 | -| test.c:608:16:609:65 | ... > ... | 1.0 | -| test.c:608:16:613:27 | ... ? ... : ... | 3.044846887031571E27 | -| test.c:608:17:608:17 | 2 | 1.0 | -| test.c:608:17:608:17 | (unsigned int)... | 1.0 | -| test.c:608:17:608:22 | ... * ... | 7.24700382E8 | -| test.c:608:17:608:26 | ... + ... | 7.24700382E8 | -| test.c:608:21:608:22 | ip | 7.24700382E8 | -| test.c:608:26:608:26 | 1 | 1.0 | -| test.c:608:26:608:26 | (unsigned int)... | 1.0 | -| test.c:608:31:608:32 | 14 | 1.0 | -| test.c:608:31:608:32 | (unsigned int)... | 1.0 | -| test.c:609:15:609:65 | (...) | 5.251906436709459E17 | -| test.c:609:16:609:17 | 14 | 1.0 | -| test.c:609:16:609:17 | (unsigned int)... | 1.0 | -| test.c:609:16:609:28 | ... * ... | 7.24700382E8 | -| test.c:609:16:609:38 | ... > ... | 1.0 | -| test.c:609:16:609:64 | ... ? ... : ... | 5.251906436709459E17 | -| test.c:609:21:609:28 | (...) | 7.24700382E8 | -| test.c:609:22:609:22 | 2 | 1.0 | -| test.c:609:22:609:22 | (unsigned int)... | 1.0 | -| test.c:609:22:609:27 | ... * ... | 7.24700382E8 | -| test.c:609:26:609:27 | ip | 7.24700382E8 | -| test.c:609:32:609:33 | 17 | 1.0 | -| test.c:609:32:609:33 | (unsigned int)... | 1.0 | -| test.c:609:32:609:38 | ... * ... | 7.24700382E8 | -| test.c:609:37:609:38 | ip | 7.24700382E8 | -| test.c:609:42:609:43 | 17 | 1.0 | -| test.c:609:42:609:43 | (unsigned int)... | 1.0 | -| test.c:609:42:609:54 | ... * ... | 7.24700382E8 | -| test.c:609:47:609:54 | (...) | 7.24700382E8 | -| test.c:609:48:609:48 | 2 | 1.0 | -| test.c:609:48:609:48 | (unsigned int)... | 1.0 | -| test.c:609:48:609:53 | ... * ... | 7.24700382E8 | -| test.c:609:52:609:53 | ip | 7.24700382E8 | -| test.c:609:58:609:59 | 17 | 1.0 | -| test.c:609:58:609:59 | (unsigned int)... | 1.0 | -| test.c:609:58:609:64 | ... * ... | 7.24700382E8 | -| test.c:609:63:609:64 | ip | 7.24700382E8 | -| test.c:610:19:610:30 | (...) | 1.449400765E9 | -| test.c:610:19:610:35 | ... * ... | 1.449400765E9 | -| test.c:610:20:610:20 | 2 | 1.0 | -| test.c:610:20:610:20 | (unsigned int)... | 1.0 | -| test.c:610:20:610:25 | ... * ... | 1.449400765E9 | -| test.c:610:20:610:29 | ... + ... | 1.449400765E9 | -| test.c:610:24:610:25 | ip | 1.449400765E9 | -| test.c:610:29:610:29 | 1 | 1.0 | -| test.c:610:29:610:29 | (unsigned int)... | 1.0 | -| test.c:610:34:610:35 | 14 | 1.0 | -| test.c:610:34:610:35 | (unsigned int)... | 1.0 | -| test.c:611:19:611:20 | 14 | 1.0 | -| test.c:611:19:611:20 | (unsigned int)... | 1.0 | -| test.c:611:19:611:31 | ... * ... | 1.449400765E9 | -| test.c:611:19:611:41 | ... > ... | 1.0 | -| test.c:611:19:613:27 | ... ? ... : ... | 2.1007625775825853E18 | -| test.c:611:24:611:31 | (...) | 1.449400765E9 | -| test.c:611:25:611:25 | 2 | 1.0 | -| test.c:611:25:611:25 | (unsigned int)... | 1.0 | -| test.c:611:25:611:30 | ... * ... | 1.449400765E9 | -| test.c:611:29:611:30 | ip | 1.449400765E9 | -| test.c:611:35:611:36 | 17 | 1.0 | -| test.c:611:35:611:36 | (unsigned int)... | 1.0 | -| test.c:611:35:611:41 | ... * ... | 1.449400765E9 | -| test.c:611:40:611:41 | ip | 1.449400765E9 | -| test.c:612:21:612:22 | 14 | 1.0 | -| test.c:612:21:612:22 | (unsigned int)... | 1.0 | -| test.c:612:21:612:33 | ... * ... | 1.449400765E9 | -| test.c:612:26:612:33 | (...) | 1.449400765E9 | -| test.c:612:27:612:27 | 2 | 1.0 | -| test.c:612:27:612:27 | (unsigned int)... | 1.0 | -| test.c:612:27:612:32 | ... * ... | 1.449400765E9 | -| test.c:612:31:612:32 | ip | 1.449400765E9 | -| test.c:613:21:613:22 | 14 | 1.0 | -| test.c:613:21:613:22 | (unsigned int)... | 1.0 | -| test.c:613:21:613:27 | ... * ... | 1.449400765E9 | -| test.c:613:26:613:27 | ip | 1.449400765E9 | -| test.c:614:15:614:16 | 14 | 1.0 | -| test.c:614:15:614:16 | (unsigned int)... | 1.0 | -| test.c:614:15:614:21 | ... * ... | 7.24700382E8 | -| test.c:614:15:614:37 | ... > ... | 1.0 | -| test.c:614:15:616:29 | ... ? ... : ... | 5.251906436709459E17 | -| test.c:614:20:614:21 | ip | 7.24700382E8 | -| test.c:614:25:614:32 | (...) | 7.24700382E8 | -| test.c:614:25:614:37 | ... * ... | 7.24700382E8 | -| test.c:614:26:614:27 | ip | 7.24700382E8 | -| test.c:614:26:614:31 | ... + ... | 7.24700382E8 | -| test.c:614:31:614:31 | 1 | 1.0 | -| test.c:614:31:614:31 | (unsigned int)... | 1.0 | -| test.c:614:36:614:37 | 17 | 1.0 | -| test.c:614:36:614:37 | (unsigned int)... | 1.0 | -| test.c:615:17:615:18 | 14 | 1.0 | -| test.c:615:17:615:18 | (unsigned int)... | 1.0 | -| test.c:615:17:615:23 | ... * ... | 7.24700382E8 | -| test.c:615:22:615:23 | ip | 7.24700382E8 | -| test.c:616:17:616:24 | (...) | 7.24700382E8 | -| test.c:616:17:616:29 | ... * ... | 7.24700382E8 | -| test.c:616:18:616:19 | ip | 7.24700382E8 | -| test.c:616:18:616:23 | ... + ... | 7.24700382E8 | -| test.c:616:23:616:23 | 1 | 1.0 | -| test.c:616:23:616:23 | (unsigned int)... | 1.0 | -| test.c:616:28:616:29 | 14 | 1.0 | -| test.c:616:28:616:29 | (unsigned int)... | 1.0 | -| test.c:617:11:617:11 | 2 | 1.0 | -| test.c:617:11:617:11 | (unsigned int)... | 1.0 | -| test.c:617:11:617:28 | ... * ... | 5.797603059E9 | -| test.c:617:11:637:46 | ... + ... | 9.943431528813442E94 | -| test.c:617:15:617:28 | (...) | 5.797603059E9 | -| test.c:617:16:617:17 | ip | 5.797603059E9 | -| test.c:617:16:617:22 | ... * ... | 5.797603059E9 | -| test.c:617:16:617:27 | ... + ... | 5.797603059E9 | -| test.c:617:21:617:22 | 14 | 1.0 | -| test.c:617:21:617:22 | (unsigned int)... | 1.0 | -| test.c:617:26:617:27 | 32 | 1.0 | -| test.c:617:26:617:27 | (unsigned int)... | 1.0 | -| test.c:618:11:637:46 | (...) | 1.715093535659983E85 | -| test.c:618:12:618:12 | 4 | 1.0 | -| test.c:618:12:618:12 | (unsigned int)... | 1.0 | -| test.c:618:12:618:29 | ... * ... | 5.797603059E9 | -| test.c:618:12:619:30 | ... + ... | 3.361220122972616E19 | -| test.c:618:12:620:30 | ... + ... | 1.9487020066918396E29 | -| test.c:618:12:626:26 | ... + ... | 3.0379516094938436E59 | -| test.c:618:12:627:41 | ... > ... | 1.0 | -| test.c:618:12:637:45 | ... ? ... : ... | 1.715093535659983E85 | -| test.c:618:16:618:29 | (...) | 5.797603059E9 | -| test.c:618:17:618:18 | ip | 5.797603059E9 | -| test.c:618:17:618:23 | ... * ... | 5.797603059E9 | -| test.c:618:17:618:28 | ... + ... | 5.797603059E9 | -| test.c:618:22:618:23 | 14 | 1.0 | -| test.c:618:22:618:23 | (unsigned int)... | 1.0 | -| test.c:618:27:618:28 | 32 | 1.0 | -| test.c:618:27:618:28 | (unsigned int)... | 1.0 | -| test.c:619:13:619:30 | (...) | 5.797603059E9 | -| test.c:619:14:619:14 | 2 | 1.0 | -| test.c:619:14:619:14 | (unsigned int)... | 1.0 | -| test.c:619:14:619:19 | ... * ... | 5.797603059E9 | -| test.c:619:14:619:24 | ... * ... | 5.797603059E9 | -| test.c:619:14:619:29 | ... + ... | 5.797603059E9 | -| test.c:619:18:619:19 | ip | 5.797603059E9 | -| test.c:619:23:619:24 | 14 | 1.0 | -| test.c:619:23:619:24 | (unsigned int)... | 1.0 | -| test.c:619:28:619:29 | 32 | 1.0 | -| test.c:619:28:619:29 | (unsigned int)... | 1.0 | -| test.c:620:13:620:13 | 2 | 1.0 | -| test.c:620:13:620:13 | (unsigned int)... | 1.0 | -| test.c:620:13:620:30 | ... * ... | 5.797603059E9 | -| test.c:620:17:620:30 | (...) | 5.797603059E9 | -| test.c:620:18:620:19 | ip | 5.797603059E9 | -| test.c:620:18:620:24 | ... * ... | 5.797603059E9 | -| test.c:620:18:620:29 | ... + ... | 5.797603059E9 | -| test.c:620:23:620:24 | 14 | 1.0 | -| test.c:620:23:620:24 | (unsigned int)... | 1.0 | -| test.c:620:28:620:29 | 64 | 1.0 | -| test.c:620:28:620:29 | (unsigned int)... | 1.0 | -| test.c:621:13:626:26 | (...) | 1.558961605756818E30 | -| test.c:621:14:621:25 | (...) | 5.797603059E9 | -| test.c:621:14:621:30 | ... * ... | 5.797603059E9 | -| test.c:621:14:622:63 | ... > ... | 1.0 | -| test.c:621:14:626:25 | ... ? ... : ... | 1.558961605756818E30 | -| test.c:621:15:621:15 | 2 | 1.0 | -| test.c:621:15:621:15 | (unsigned int)... | 1.0 | -| test.c:621:15:621:20 | ... * ... | 5.797603059E9 | -| test.c:621:15:621:24 | ... + ... | 5.797603059E9 | -| test.c:621:19:621:20 | ip | 5.797603059E9 | -| test.c:621:24:621:24 | 1 | 1.0 | -| test.c:621:24:621:24 | (unsigned int)... | 1.0 | -| test.c:621:29:621:30 | 14 | 1.0 | -| test.c:621:29:621:30 | (unsigned int)... | 1.0 | -| test.c:622:13:622:63 | (...) | 3.361220122972616E19 | -| test.c:622:14:622:15 | 14 | 1.0 | -| test.c:622:14:622:15 | (unsigned int)... | 1.0 | -| test.c:622:14:622:26 | ... * ... | 5.797603059E9 | -| test.c:622:14:622:36 | ... > ... | 1.0 | -| test.c:622:14:622:62 | ... ? ... : ... | 3.361220122972616E19 | -| test.c:622:19:622:26 | (...) | 5.797603059E9 | -| test.c:622:20:622:20 | 2 | 1.0 | -| test.c:622:20:622:20 | (unsigned int)... | 1.0 | -| test.c:622:20:622:25 | ... * ... | 5.797603059E9 | -| test.c:622:24:622:25 | ip | 5.797603059E9 | -| test.c:622:30:622:31 | 17 | 1.0 | -| test.c:622:30:622:31 | (unsigned int)... | 1.0 | -| test.c:622:30:622:36 | ... * ... | 5.797603059E9 | -| test.c:622:35:622:36 | ip | 5.797603059E9 | -| test.c:622:40:622:41 | 17 | 1.0 | -| test.c:622:40:622:41 | (unsigned int)... | 1.0 | -| test.c:622:40:622:52 | ... * ... | 5.797603059E9 | -| test.c:622:45:622:52 | (...) | 5.797603059E9 | -| test.c:622:46:622:46 | 2 | 1.0 | -| test.c:622:46:622:46 | (unsigned int)... | 1.0 | -| test.c:622:46:622:51 | ... * ... | 5.797603059E9 | -| test.c:622:50:622:51 | ip | 5.797603059E9 | -| test.c:622:56:622:57 | 17 | 1.0 | -| test.c:622:56:622:57 | (unsigned int)... | 1.0 | -| test.c:622:56:622:62 | ... * ... | 5.797603059E9 | -| test.c:622:61:622:62 | ip | 5.797603059E9 | -| test.c:623:17:623:28 | (...) | 1.1595206119E10 | -| test.c:623:17:623:33 | ... * ... | 1.1595206119E10 | -| test.c:623:18:623:18 | 2 | 1.0 | -| test.c:623:18:623:18 | (unsigned int)... | 1.0 | -| test.c:623:18:623:23 | ... * ... | 1.1595206119E10 | -| test.c:623:18:623:27 | ... + ... | 1.1595206119E10 | -| test.c:623:22:623:23 | ip | 1.1595206119E10 | -| test.c:623:27:623:27 | 1 | 1.0 | -| test.c:623:27:623:27 | (unsigned int)... | 1.0 | -| test.c:623:32:623:33 | 14 | 1.0 | -| test.c:623:32:623:33 | (unsigned int)... | 1.0 | -| test.c:624:17:624:18 | 14 | 1.0 | -| test.c:624:17:624:18 | (unsigned int)... | 1.0 | -| test.c:624:17:624:29 | ... * ... | 1.1595206119E10 | -| test.c:624:17:624:39 | ... > ... | 1.0 | -| test.c:624:17:626:25 | ... ? ... : ... | 1.3444880494209504E20 | -| test.c:624:22:624:29 | (...) | 1.1595206119E10 | -| test.c:624:23:624:23 | 2 | 1.0 | -| test.c:624:23:624:23 | (unsigned int)... | 1.0 | -| test.c:624:23:624:28 | ... * ... | 1.1595206119E10 | -| test.c:624:27:624:28 | ip | 1.1595206119E10 | -| test.c:624:33:624:34 | 17 | 1.0 | -| test.c:624:33:624:34 | (unsigned int)... | 1.0 | -| test.c:624:33:624:39 | ... * ... | 1.1595206119E10 | -| test.c:624:38:624:39 | ip | 1.1595206119E10 | -| test.c:625:19:625:20 | 14 | 1.0 | -| test.c:625:19:625:20 | (unsigned int)... | 1.0 | -| test.c:625:19:625:31 | ... * ... | 1.1595206119E10 | -| test.c:625:24:625:31 | (...) | 1.1595206119E10 | -| test.c:625:25:625:25 | 2 | 1.0 | -| test.c:625:25:625:25 | (unsigned int)... | 1.0 | -| test.c:625:25:625:30 | ... * ... | 1.1595206119E10 | -| test.c:625:29:625:30 | ip | 1.1595206119E10 | -| test.c:626:19:626:20 | 14 | 1.0 | -| test.c:626:19:626:20 | (unsigned int)... | 1.0 | -| test.c:626:19:626:25 | ... * ... | 1.1595206119E10 | -| test.c:626:24:626:25 | ip | 1.1595206119E10 | -| test.c:627:11:627:11 | 2 | 1.0 | -| test.c:627:11:627:11 | (unsigned int)... | 1.0 | -| test.c:627:11:627:16 | ... * ... | 3.4785618357E10 | -| test.c:627:11:627:21 | ... * ... | 3.4785618357E10 | -| test.c:627:11:627:41 | ... + ... | 1.2100392444788552E21 | -| test.c:627:15:627:16 | ip | 3.4785618357E10 | -| test.c:627:20:627:21 | 14 | 1.0 | -| test.c:627:20:627:21 | (unsigned int)... | 1.0 | -| test.c:627:25:627:36 | (...) | 3.4785618357E10 | -| test.c:627:25:627:41 | ... * ... | 3.4785618357E10 | -| test.c:627:26:627:26 | 2 | 1.0 | -| test.c:627:26:627:26 | (unsigned int)... | 1.0 | -| test.c:627:26:627:31 | ... * ... | 3.4785618357E10 | -| test.c:627:26:627:35 | ... + ... | 3.4785618357E10 | -| test.c:627:30:627:31 | ip | 3.4785618357E10 | -| test.c:627:35:627:35 | 1 | 1.0 | -| test.c:627:35:627:35 | (unsigned int)... | 1.0 | -| test.c:627:40:627:41 | 17 | 1.0 | -| test.c:627:40:627:41 | (unsigned int)... | 1.0 | -| test.c:628:15:628:15 | 4 | 1.0 | -| test.c:628:15:628:15 | (unsigned int)... | 1.0 | -| test.c:628:15:628:32 | ... * ... | 3.4785618357E10 | -| test.c:628:15:629:32 | ... + ... | 1.2100392444788552E21 | -| test.c:628:15:630:32 | ... + ... | 4.209196335543408E31 | -| test.c:628:15:636:28 | ... + ... | 1.417386703353284E64 | -| test.c:628:19:628:32 | (...) | 3.4785618357E10 | -| test.c:628:20:628:21 | ip | 3.4785618357E10 | -| test.c:628:20:628:26 | ... * ... | 3.4785618357E10 | -| test.c:628:20:628:31 | ... + ... | 3.4785618357E10 | -| test.c:628:25:628:26 | 14 | 1.0 | -| test.c:628:25:628:26 | (unsigned int)... | 1.0 | -| test.c:628:30:628:31 | 32 | 1.0 | -| test.c:628:30:628:31 | (unsigned int)... | 1.0 | -| test.c:629:15:629:32 | (...) | 3.4785618357E10 | -| test.c:629:16:629:16 | 2 | 1.0 | -| test.c:629:16:629:16 | (unsigned int)... | 1.0 | -| test.c:629:16:629:21 | ... * ... | 3.4785618357E10 | -| test.c:629:16:629:26 | ... * ... | 3.4785618357E10 | -| test.c:629:16:629:31 | ... + ... | 3.4785618357E10 | -| test.c:629:20:629:21 | ip | 3.4785618357E10 | -| test.c:629:25:629:26 | 14 | 1.0 | -| test.c:629:25:629:26 | (unsigned int)... | 1.0 | -| test.c:629:30:629:31 | 32 | 1.0 | -| test.c:629:30:629:31 | (unsigned int)... | 1.0 | -| test.c:630:15:630:15 | 2 | 1.0 | -| test.c:630:15:630:15 | (unsigned int)... | 1.0 | -| test.c:630:15:630:32 | ... * ... | 3.4785618357E10 | -| test.c:630:19:630:32 | (...) | 3.4785618357E10 | -| test.c:630:20:630:21 | ip | 3.4785618357E10 | -| test.c:630:20:630:26 | ... * ... | 3.4785618357E10 | -| test.c:630:20:630:31 | ... + ... | 3.4785618357E10 | -| test.c:630:25:630:26 | 14 | 1.0 | -| test.c:630:25:630:26 | (unsigned int)... | 1.0 | -| test.c:630:30:630:31 | 64 | 1.0 | -| test.c:630:30:630:31 | (unsigned int)... | 1.0 | -| test.c:631:15:636:28 | (...) | 3.367357068579931E32 | -| test.c:631:16:631:27 | (...) | 3.4785618357E10 | -| test.c:631:16:631:32 | ... * ... | 3.4785618357E10 | -| test.c:631:16:632:65 | ... > ... | 1.0 | -| test.c:631:16:636:27 | ... ? ... : ... | 3.367357068579931E32 | -| test.c:631:17:631:17 | 2 | 1.0 | -| test.c:631:17:631:17 | (unsigned int)... | 1.0 | -| test.c:631:17:631:22 | ... * ... | 3.4785618357E10 | -| test.c:631:17:631:26 | ... + ... | 3.4785618357E10 | -| test.c:631:21:631:22 | ip | 3.4785618357E10 | -| test.c:631:26:631:26 | 1 | 1.0 | -| test.c:631:26:631:26 | (unsigned int)... | 1.0 | -| test.c:631:31:631:32 | 14 | 1.0 | -| test.c:631:31:631:32 | (unsigned int)... | 1.0 | -| test.c:632:15:632:65 | (...) | 1.2100392444788552E21 | -| test.c:632:16:632:17 | 14 | 1.0 | -| test.c:632:16:632:17 | (unsigned int)... | 1.0 | -| test.c:632:16:632:28 | ... * ... | 3.4785618357E10 | -| test.c:632:16:632:38 | ... > ... | 1.0 | -| test.c:632:16:632:64 | ... ? ... : ... | 1.2100392444788552E21 | -| test.c:632:21:632:28 | (...) | 3.4785618357E10 | -| test.c:632:22:632:22 | 2 | 1.0 | -| test.c:632:22:632:22 | (unsigned int)... | 1.0 | -| test.c:632:22:632:27 | ... * ... | 3.4785618357E10 | -| test.c:632:26:632:27 | ip | 3.4785618357E10 | -| test.c:632:32:632:33 | 17 | 1.0 | -| test.c:632:32:632:33 | (unsigned int)... | 1.0 | -| test.c:632:32:632:38 | ... * ... | 3.4785618357E10 | -| test.c:632:37:632:38 | ip | 3.4785618357E10 | -| test.c:632:42:632:43 | 17 | 1.0 | -| test.c:632:42:632:43 | (unsigned int)... | 1.0 | -| test.c:632:42:632:54 | ... * ... | 3.4785618357E10 | -| test.c:632:47:632:54 | (...) | 3.4785618357E10 | -| test.c:632:48:632:48 | 2 | 1.0 | -| test.c:632:48:632:48 | (unsigned int)... | 1.0 | -| test.c:632:48:632:53 | ... * ... | 3.4785618357E10 | -| test.c:632:52:632:53 | ip | 3.4785618357E10 | -| test.c:632:58:632:59 | 17 | 1.0 | -| test.c:632:58:632:59 | (unsigned int)... | 1.0 | -| test.c:632:58:632:64 | ... * ... | 3.4785618357E10 | -| test.c:632:63:632:64 | ip | 3.4785618357E10 | -| test.c:633:19:633:30 | (...) | 6.9571236715E10 | -| test.c:633:19:633:35 | ... * ... | 6.9571236715E10 | -| test.c:633:20:633:20 | 2 | 1.0 | -| test.c:633:20:633:20 | (unsigned int)... | 1.0 | -| test.c:633:20:633:25 | ... * ... | 6.9571236715E10 | -| test.c:633:20:633:29 | ... + ... | 6.9571236715E10 | -| test.c:633:24:633:25 | ip | 6.9571236715E10 | -| test.c:633:29:633:29 | 1 | 1.0 | -| test.c:633:29:633:29 | (unsigned int)... | 1.0 | -| test.c:633:34:633:35 | 14 | 1.0 | -| test.c:633:34:633:35 | (unsigned int)... | 1.0 | -| test.c:634:19:634:20 | 14 | 1.0 | -| test.c:634:19:634:20 | (unsigned int)... | 1.0 | -| test.c:634:19:634:31 | ... * ... | 6.9571236715E10 | -| test.c:634:19:634:41 | ... > ... | 1.0 | -| test.c:634:19:636:27 | ... ? ... : ... | 4.840156978054564E21 | -| test.c:634:24:634:31 | (...) | 6.9571236715E10 | -| test.c:634:25:634:25 | 2 | 1.0 | -| test.c:634:25:634:25 | (unsigned int)... | 1.0 | -| test.c:634:25:634:30 | ... * ... | 6.9571236715E10 | -| test.c:634:29:634:30 | ip | 6.9571236715E10 | -| test.c:634:35:634:36 | 17 | 1.0 | -| test.c:634:35:634:36 | (unsigned int)... | 1.0 | -| test.c:634:35:634:41 | ... * ... | 6.9571236715E10 | -| test.c:634:40:634:41 | ip | 6.9571236715E10 | -| test.c:635:21:635:22 | 14 | 1.0 | -| test.c:635:21:635:22 | (unsigned int)... | 1.0 | -| test.c:635:21:635:33 | ... * ... | 6.9571236715E10 | -| test.c:635:26:635:33 | (...) | 6.9571236715E10 | -| test.c:635:27:635:27 | 2 | 1.0 | -| test.c:635:27:635:27 | (unsigned int)... | 1.0 | -| test.c:635:27:635:32 | ... * ... | 6.9571236715E10 | -| test.c:635:31:635:32 | ip | 6.9571236715E10 | -| test.c:636:21:636:22 | 14 | 1.0 | -| test.c:636:21:636:22 | (unsigned int)... | 1.0 | -| test.c:636:21:636:27 | ... * ... | 6.9571236715E10 | -| test.c:636:26:636:27 | ip | 6.9571236715E10 | -| test.c:637:15:637:15 | 2 | 1.0 | -| test.c:637:15:637:15 | (unsigned int)... | 1.0 | -| test.c:637:15:637:20 | ... * ... | 3.4785618357E10 | -| test.c:637:15:637:25 | ... * ... | 3.4785618357E10 | -| test.c:637:15:637:45 | ... + ... | 1.2100392444788552E21 | -| test.c:637:19:637:20 | ip | 3.4785618357E10 | -| test.c:637:24:637:25 | 14 | 1.0 | -| test.c:637:24:637:25 | (unsigned int)... | 1.0 | -| test.c:637:29:637:40 | (...) | 3.4785618357E10 | -| test.c:637:29:637:45 | ... * ... | 3.4785618357E10 | -| test.c:637:30:637:30 | 2 | 1.0 | -| test.c:637:30:637:30 | (unsigned int)... | 1.0 | -| test.c:637:30:637:35 | ... * ... | 3.4785618357E10 | -| test.c:637:30:637:39 | ... + ... | 3.4785618357E10 | -| test.c:637:34:637:35 | ip | 3.4785618357E10 | -| test.c:637:39:637:39 | 1 | 1.0 | -| test.c:637:39:637:39 | (unsigned int)... | 1.0 | -| test.c:637:44:637:45 | 17 | 1.0 | -| test.c:637:44:637:45 | (unsigned int)... | 1.0 | -| test.c:638:11:638:11 | 4 | 1.0 | -| test.c:638:11:638:11 | (unsigned int)... | 1.0 | -| test.c:638:11:638:28 | ... * ... | 5.797603059E9 | -| test.c:638:11:639:32 | ... + ... | 3.361220122972616E19 | -| test.c:638:11:640:32 | ... + ... | 1.9487020066918396E29 | -| test.c:638:11:646:28 | ... + ... | 3.0379516094938436E59 | -| test.c:638:11:647:63 | ... > ... | 1.0 | -| test.c:638:11:659:27 | ... ? ... : ... | 4.390639451194891E87 | -| test.c:638:15:638:28 | (...) | 5.797603059E9 | -| test.c:638:16:638:17 | ip | 5.797603059E9 | -| test.c:638:16:638:22 | ... * ... | 5.797603059E9 | -| test.c:638:16:638:27 | ... + ... | 5.797603059E9 | -| test.c:638:21:638:22 | 14 | 1.0 | -| test.c:638:21:638:22 | (unsigned int)... | 1.0 | -| test.c:638:26:638:27 | 32 | 1.0 | -| test.c:638:26:638:27 | (unsigned int)... | 1.0 | -| test.c:639:15:639:32 | (...) | 5.797603059E9 | -| test.c:639:16:639:16 | 2 | 1.0 | -| test.c:639:16:639:16 | (unsigned int)... | 1.0 | -| test.c:639:16:639:21 | ... * ... | 5.797603059E9 | -| test.c:639:16:639:26 | ... * ... | 5.797603059E9 | -| test.c:639:16:639:31 | ... + ... | 5.797603059E9 | -| test.c:639:20:639:21 | ip | 5.797603059E9 | -| test.c:639:25:639:26 | 14 | 1.0 | -| test.c:639:25:639:26 | (unsigned int)... | 1.0 | -| test.c:639:30:639:31 | 32 | 1.0 | -| test.c:639:30:639:31 | (unsigned int)... | 1.0 | -| test.c:640:15:640:15 | 2 | 1.0 | -| test.c:640:15:640:15 | (unsigned int)... | 1.0 | -| test.c:640:15:640:32 | ... * ... | 5.797603059E9 | -| test.c:640:19:640:32 | (...) | 5.797603059E9 | -| test.c:640:20:640:21 | ip | 5.797603059E9 | -| test.c:640:20:640:26 | ... * ... | 5.797603059E9 | -| test.c:640:20:640:31 | ... + ... | 5.797603059E9 | -| test.c:640:25:640:26 | 14 | 1.0 | -| test.c:640:25:640:26 | (unsigned int)... | 1.0 | -| test.c:640:30:640:31 | 64 | 1.0 | -| test.c:640:30:640:31 | (unsigned int)... | 1.0 | -| test.c:641:15:646:28 | (...) | 1.558961605756818E30 | -| test.c:641:16:641:27 | (...) | 5.797603059E9 | -| test.c:641:16:641:32 | ... * ... | 5.797603059E9 | -| test.c:641:16:642:65 | ... > ... | 1.0 | -| test.c:641:16:646:27 | ... ? ... : ... | 1.558961605756818E30 | -| test.c:641:17:641:17 | 2 | 1.0 | -| test.c:641:17:641:17 | (unsigned int)... | 1.0 | -| test.c:641:17:641:22 | ... * ... | 5.797603059E9 | -| test.c:641:17:641:26 | ... + ... | 5.797603059E9 | -| test.c:641:21:641:22 | ip | 5.797603059E9 | -| test.c:641:26:641:26 | 1 | 1.0 | -| test.c:641:26:641:26 | (unsigned int)... | 1.0 | -| test.c:641:31:641:32 | 14 | 1.0 | -| test.c:641:31:641:32 | (unsigned int)... | 1.0 | -| test.c:642:15:642:65 | (...) | 3.361220122972616E19 | -| test.c:642:16:642:17 | 14 | 1.0 | -| test.c:642:16:642:17 | (unsigned int)... | 1.0 | -| test.c:642:16:642:28 | ... * ... | 5.797603059E9 | -| test.c:642:16:642:38 | ... > ... | 1.0 | -| test.c:642:16:642:64 | ... ? ... : ... | 3.361220122972616E19 | -| test.c:642:21:642:28 | (...) | 5.797603059E9 | -| test.c:642:22:642:22 | 2 | 1.0 | -| test.c:642:22:642:22 | (unsigned int)... | 1.0 | -| test.c:642:22:642:27 | ... * ... | 5.797603059E9 | -| test.c:642:26:642:27 | ip | 5.797603059E9 | -| test.c:642:32:642:33 | 17 | 1.0 | -| test.c:642:32:642:33 | (unsigned int)... | 1.0 | -| test.c:642:32:642:38 | ... * ... | 5.797603059E9 | -| test.c:642:37:642:38 | ip | 5.797603059E9 | -| test.c:642:42:642:43 | 17 | 1.0 | -| test.c:642:42:642:43 | (unsigned int)... | 1.0 | -| test.c:642:42:642:54 | ... * ... | 5.797603059E9 | -| test.c:642:47:642:54 | (...) | 5.797603059E9 | -| test.c:642:48:642:48 | 2 | 1.0 | -| test.c:642:48:642:48 | (unsigned int)... | 1.0 | -| test.c:642:48:642:53 | ... * ... | 5.797603059E9 | -| test.c:642:52:642:53 | ip | 5.797603059E9 | -| test.c:642:58:642:59 | 17 | 1.0 | -| test.c:642:58:642:59 | (unsigned int)... | 1.0 | -| test.c:642:58:642:64 | ... * ... | 5.797603059E9 | -| test.c:642:63:642:64 | ip | 5.797603059E9 | -| test.c:643:19:643:30 | (...) | 1.1595206119E10 | -| test.c:643:19:643:35 | ... * ... | 1.1595206119E10 | -| test.c:643:20:643:20 | 2 | 1.0 | -| test.c:643:20:643:20 | (unsigned int)... | 1.0 | -| test.c:643:20:643:25 | ... * ... | 1.1595206119E10 | -| test.c:643:20:643:29 | ... + ... | 1.1595206119E10 | -| test.c:643:24:643:25 | ip | 1.1595206119E10 | -| test.c:643:29:643:29 | 1 | 1.0 | -| test.c:643:29:643:29 | (unsigned int)... | 1.0 | -| test.c:643:34:643:35 | 14 | 1.0 | -| test.c:643:34:643:35 | (unsigned int)... | 1.0 | -| test.c:644:19:644:20 | 14 | 1.0 | -| test.c:644:19:644:20 | (unsigned int)... | 1.0 | -| test.c:644:19:644:31 | ... * ... | 1.1595206119E10 | -| test.c:644:19:644:41 | ... > ... | 1.0 | -| test.c:644:19:646:27 | ... ? ... : ... | 1.3444880494209504E20 | -| test.c:644:24:644:31 | (...) | 1.1595206119E10 | -| test.c:644:25:644:25 | 2 | 1.0 | -| test.c:644:25:644:25 | (unsigned int)... | 1.0 | -| test.c:644:25:644:30 | ... * ... | 1.1595206119E10 | -| test.c:644:29:644:30 | ip | 1.1595206119E10 | -| test.c:644:35:644:36 | 17 | 1.0 | -| test.c:644:35:644:36 | (unsigned int)... | 1.0 | -| test.c:644:35:644:41 | ... * ... | 1.1595206119E10 | -| test.c:644:40:644:41 | ip | 1.1595206119E10 | -| test.c:645:21:645:22 | 14 | 1.0 | -| test.c:645:21:645:22 | (unsigned int)... | 1.0 | -| test.c:645:21:645:33 | ... * ... | 1.1595206119E10 | -| test.c:645:26:645:33 | (...) | 1.1595206119E10 | -| test.c:645:27:645:27 | 2 | 1.0 | -| test.c:645:27:645:27 | (unsigned int)... | 1.0 | -| test.c:645:27:645:32 | ... * ... | 1.1595206119E10 | -| test.c:645:31:645:32 | ip | 1.1595206119E10 | -| test.c:646:21:646:22 | 14 | 1.0 | -| test.c:646:21:646:22 | (unsigned int)... | 1.0 | -| test.c:646:21:646:27 | ... * ... | 1.1595206119E10 | -| test.c:646:26:646:27 | ip | 1.1595206119E10 | -| test.c:647:13:647:63 | (...) | 1.2100392444788552E21 | -| test.c:647:14:647:15 | 14 | 1.0 | -| test.c:647:14:647:15 | (unsigned int)... | 1.0 | -| test.c:647:14:647:20 | ... * ... | 3.4785618357E10 | -| test.c:647:14:647:36 | ... > ... | 1.0 | -| test.c:647:14:647:62 | ... ? ... : ... | 1.2100392444788552E21 | -| test.c:647:19:647:20 | ip | 3.4785618357E10 | -| test.c:647:24:647:31 | (...) | 3.4785618357E10 | -| test.c:647:24:647:36 | ... * ... | 3.4785618357E10 | -| test.c:647:25:647:26 | ip | 3.4785618357E10 | -| test.c:647:25:647:30 | ... + ... | 3.4785618357E10 | -| test.c:647:30:647:30 | 1 | 1.0 | -| test.c:647:30:647:30 | (unsigned int)... | 1.0 | -| test.c:647:35:647:36 | 17 | 1.0 | -| test.c:647:35:647:36 | (unsigned int)... | 1.0 | -| test.c:647:40:647:41 | 17 | 1.0 | -| test.c:647:40:647:41 | (unsigned int)... | 1.0 | -| test.c:647:40:647:46 | ... * ... | 3.4785618357E10 | -| test.c:647:45:647:46 | ip | 3.4785618357E10 | -| test.c:647:50:647:57 | (...) | 3.4785618357E10 | -| test.c:647:50:647:62 | ... * ... | 3.4785618357E10 | -| test.c:647:51:647:52 | ip | 3.4785618357E10 | -| test.c:647:51:647:56 | ... + ... | 3.4785618357E10 | -| test.c:647:56:647:56 | 1 | 1.0 | -| test.c:647:56:647:56 | (unsigned int)... | 1.0 | -| test.c:647:61:647:62 | 17 | 1.0 | -| test.c:647:61:647:62 | (unsigned int)... | 1.0 | -| test.c:648:13:648:13 | 4 | 1.0 | -| test.c:648:13:648:13 | (unsigned int)... | 1.0 | -| test.c:648:13:648:30 | ... * ... | 6.9571236714E10 | -| test.c:648:13:649:30 | ... + ... | 4.840156977915421E21 | -| test.c:648:13:650:30 | ... + ... | 3.3673570684347266E32 | -| test.c:648:13:656:26 | ... + ... | 9.071274901265435E65 | -| test.c:648:17:648:30 | (...) | 6.9571236714E10 | -| test.c:648:18:648:19 | ip | 6.9571236714E10 | -| test.c:648:18:648:24 | ... * ... | 6.9571236714E10 | -| test.c:648:18:648:29 | ... + ... | 6.9571236714E10 | -| test.c:648:23:648:24 | 14 | 1.0 | -| test.c:648:23:648:24 | (unsigned int)... | 1.0 | -| test.c:648:28:648:29 | 32 | 1.0 | -| test.c:648:28:648:29 | (unsigned int)... | 1.0 | -| test.c:649:13:649:30 | (...) | 6.9571236714E10 | -| test.c:649:14:649:14 | 2 | 1.0 | -| test.c:649:14:649:14 | (unsigned int)... | 1.0 | -| test.c:649:14:649:19 | ... * ... | 6.9571236714E10 | -| test.c:649:14:649:24 | ... * ... | 6.9571236714E10 | -| test.c:649:14:649:29 | ... + ... | 6.9571236714E10 | -| test.c:649:18:649:19 | ip | 6.9571236714E10 | -| test.c:649:23:649:24 | 14 | 1.0 | -| test.c:649:23:649:24 | (unsigned int)... | 1.0 | -| test.c:649:28:649:29 | 32 | 1.0 | -| test.c:649:28:649:29 | (unsigned int)... | 1.0 | -| test.c:650:13:650:13 | 2 | 1.0 | -| test.c:650:13:650:13 | (unsigned int)... | 1.0 | -| test.c:650:13:650:30 | ... * ... | 6.9571236714E10 | -| test.c:650:17:650:30 | (...) | 6.9571236714E10 | -| test.c:650:18:650:19 | ip | 6.9571236714E10 | -| test.c:650:18:650:24 | ... * ... | 6.9571236714E10 | -| test.c:650:18:650:29 | ... + ... | 6.9571236714E10 | -| test.c:650:23:650:24 | 14 | 1.0 | -| test.c:650:23:650:24 | (unsigned int)... | 1.0 | -| test.c:650:28:650:29 | 64 | 1.0 | -| test.c:650:28:650:29 | (unsigned int)... | 1.0 | -| test.c:651:13:656:26 | (...) | 2.693885654805863E33 | -| test.c:651:14:651:25 | (...) | 6.9571236714E10 | -| test.c:651:14:651:30 | ... * ... | 6.9571236714E10 | -| test.c:651:14:652:63 | ... > ... | 1.0 | -| test.c:651:14:656:25 | ... ? ... : ... | 2.693885654805863E33 | -| test.c:651:15:651:15 | 2 | 1.0 | -| test.c:651:15:651:15 | (unsigned int)... | 1.0 | -| test.c:651:15:651:20 | ... * ... | 6.9571236714E10 | -| test.c:651:15:651:24 | ... + ... | 6.9571236714E10 | -| test.c:651:19:651:20 | ip | 6.9571236714E10 | -| test.c:651:24:651:24 | 1 | 1.0 | -| test.c:651:24:651:24 | (unsigned int)... | 1.0 | -| test.c:651:29:651:30 | 14 | 1.0 | -| test.c:651:29:651:30 | (unsigned int)... | 1.0 | -| test.c:652:13:652:63 | (...) | 4.840156977915421E21 | -| test.c:652:14:652:15 | 14 | 1.0 | -| test.c:652:14:652:15 | (unsigned int)... | 1.0 | -| test.c:652:14:652:26 | ... * ... | 6.9571236714E10 | -| test.c:652:14:652:36 | ... > ... | 1.0 | -| test.c:652:14:652:62 | ... ? ... : ... | 4.840156977915421E21 | -| test.c:652:19:652:26 | (...) | 6.9571236714E10 | -| test.c:652:20:652:20 | 2 | 1.0 | -| test.c:652:20:652:20 | (unsigned int)... | 1.0 | -| test.c:652:20:652:25 | ... * ... | 6.9571236714E10 | -| test.c:652:24:652:25 | ip | 6.9571236714E10 | -| test.c:652:30:652:31 | 17 | 1.0 | -| test.c:652:30:652:31 | (unsigned int)... | 1.0 | -| test.c:652:30:652:36 | ... * ... | 6.9571236714E10 | -| test.c:652:35:652:36 | ip | 6.9571236714E10 | -| test.c:652:40:652:41 | 17 | 1.0 | -| test.c:652:40:652:41 | (unsigned int)... | 1.0 | -| test.c:652:40:652:52 | ... * ... | 6.9571236714E10 | -| test.c:652:45:652:52 | (...) | 6.9571236714E10 | -| test.c:652:46:652:46 | 2 | 1.0 | -| test.c:652:46:652:46 | (unsigned int)... | 1.0 | -| test.c:652:46:652:51 | ... * ... | 6.9571236714E10 | -| test.c:652:50:652:51 | ip | 6.9571236714E10 | -| test.c:652:56:652:57 | 17 | 1.0 | -| test.c:652:56:652:57 | (unsigned int)... | 1.0 | -| test.c:652:56:652:62 | ... * ... | 6.9571236714E10 | -| test.c:652:61:652:62 | ip | 6.9571236714E10 | -| test.c:653:17:653:28 | (...) | 1.39142473429E11 | -| test.c:653:17:653:33 | ... * ... | 1.39142473429E11 | -| test.c:653:18:653:18 | 2 | 1.0 | -| test.c:653:18:653:18 | (unsigned int)... | 1.0 | -| test.c:653:18:653:23 | ... * ... | 1.39142473429E11 | -| test.c:653:18:653:27 | ... + ... | 1.39142473429E11 | -| test.c:653:22:653:23 | ip | 1.39142473429E11 | -| test.c:653:27:653:27 | 1 | 1.0 | -| test.c:653:27:653:27 | (unsigned int)... | 1.0 | -| test.c:653:32:653:33 | 14 | 1.0 | -| test.c:653:32:653:33 | (unsigned int)... | 1.0 | -| test.c:654:17:654:18 | 14 | 1.0 | -| test.c:654:17:654:18 | (unsigned int)... | 1.0 | -| test.c:654:17:654:29 | ... * ... | 1.39142473429E11 | -| test.c:654:17:654:39 | ... > ... | 1.0 | -| test.c:654:17:656:25 | ... ? ... : ... | 1.936062791193997E22 | -| test.c:654:22:654:29 | (...) | 1.39142473429E11 | -| test.c:654:23:654:23 | 2 | 1.0 | -| test.c:654:23:654:23 | (unsigned int)... | 1.0 | -| test.c:654:23:654:28 | ... * ... | 1.39142473429E11 | -| test.c:654:27:654:28 | ip | 1.39142473429E11 | -| test.c:654:33:654:34 | 17 | 1.0 | -| test.c:654:33:654:34 | (unsigned int)... | 1.0 | -| test.c:654:33:654:39 | ... * ... | 1.39142473429E11 | -| test.c:654:38:654:39 | ip | 1.39142473429E11 | -| test.c:655:19:655:20 | 14 | 1.0 | -| test.c:655:19:655:20 | (unsigned int)... | 1.0 | -| test.c:655:19:655:31 | ... * ... | 1.39142473429E11 | -| test.c:655:24:655:31 | (...) | 1.39142473429E11 | -| test.c:655:25:655:25 | 2 | 1.0 | -| test.c:655:25:655:25 | (unsigned int)... | 1.0 | -| test.c:655:25:655:30 | ... * ... | 1.39142473429E11 | -| test.c:655:29:655:30 | ip | 1.39142473429E11 | -| test.c:656:19:656:20 | 14 | 1.0 | -| test.c:656:19:656:20 | (unsigned int)... | 1.0 | -| test.c:656:19:656:25 | ... * ... | 1.39142473429E11 | -| test.c:656:24:656:25 | ip | 1.39142473429E11 | -| test.c:657:13:657:14 | 14 | 1.0 | -| test.c:657:13:657:14 | (unsigned int)... | 1.0 | -| test.c:657:13:657:19 | ... * ... | 6.9571236714E10 | -| test.c:657:13:657:35 | ... > ... | 1.0 | -| test.c:657:13:659:27 | ... ? ... : ... | 4.840156977915421E21 | -| test.c:657:18:657:19 | ip | 6.9571236714E10 | -| test.c:657:23:657:30 | (...) | 6.9571236714E10 | -| test.c:657:23:657:35 | ... * ... | 6.9571236714E10 | -| test.c:657:24:657:25 | ip | 6.9571236714E10 | -| test.c:657:24:657:29 | ... + ... | 6.9571236714E10 | -| test.c:657:29:657:29 | 1 | 1.0 | -| test.c:657:29:657:29 | (unsigned int)... | 1.0 | -| test.c:657:34:657:35 | 17 | 1.0 | -| test.c:657:34:657:35 | (unsigned int)... | 1.0 | -| test.c:658:15:658:16 | 14 | 1.0 | -| test.c:658:15:658:16 | (unsigned int)... | 1.0 | -| test.c:658:15:658:21 | ... * ... | 6.9571236714E10 | -| test.c:658:20:658:21 | ip | 6.9571236714E10 | -| test.c:659:15:659:22 | (...) | 6.9571236714E10 | -| test.c:659:15:659:27 | ... * ... | 6.9571236714E10 | -| test.c:659:16:659:17 | ip | 6.9571236714E10 | -| test.c:659:16:659:21 | ... + ... | 6.9571236714E10 | -| test.c:659:21:659:21 | 1 | 1.0 | -| test.c:659:21:659:21 | (unsigned int)... | 1.0 | -| test.c:659:26:659:27 | 14 | 1.0 | -| test.c:659:26:659:27 | (unsigned int)... | 1.0 | -| test.c:660:10:660:23 | special_number | 1.297918419127476E201 | -| test.c:667:10:667:11 | 0 | 1.0 | -| test.c:668:7:668:8 | c1 | 1.0 | -| test.c:668:13:668:13 | x | 1.0 | -| test.c:668:13:668:23 | ... += ... | 1.0 | -| test.c:668:18:668:23 | 748596 | 1.0 | -| test.c:669:7:669:8 | c2 | 1.0 | -| test.c:669:13:669:13 | x | 2.0 | -| test.c:669:13:669:25 | ... += ... | 2.0 | -| test.c:669:18:669:25 | 84652395 | 1.0 | -| test.c:670:7:670:8 | c3 | 1.0 | -| test.c:670:13:670:13 | x | 4.0 | -| test.c:670:13:670:24 | ... += ... | 4.0 | -| test.c:670:18:670:24 | 3675895 | 1.0 | -| test.c:671:7:671:8 | c4 | 1.0 | -| test.c:671:13:671:13 | x | 8.0 | -| test.c:671:13:671:22 | ... += ... | 8.0 | -| test.c:671:18:671:22 | 98634 | 1.0 | -| test.c:672:7:672:8 | c5 | 1.0 | -| test.c:672:13:672:13 | x | 16.0 | -| test.c:672:13:672:24 | ... += ... | 16.0 | -| test.c:672:18:672:24 | 7834985 | 1.0 | -| test.c:673:7:673:8 | c1 | 2.0 | -| test.c:673:7:673:14 | ... && ... | 1.0 | -| test.c:673:13:673:14 | c2 | 2.0 | -| test.c:673:19:673:19 | x | 32.0 | -| test.c:673:19:673:32 | ... += ... | 32.0 | -| test.c:673:24:673:32 | 938457398 | 1.0 | -| test.c:674:7:674:8 | c1 | 3.0 | -| test.c:674:7:674:14 | ... && ... | 1.0 | -| test.c:674:13:674:14 | c3 | 2.0 | -| test.c:674:19:674:19 | x | 64.0 | -| test.c:674:19:674:31 | ... += ... | 64.0 | -| test.c:674:24:674:31 | 73895648 | 1.0 | -| test.c:675:7:675:8 | c1 | 4.0 | -| test.c:675:7:675:14 | ... && ... | 1.0 | -| test.c:675:13:675:14 | c4 | 2.0 | -| test.c:675:19:675:19 | x | 128.0 | -| test.c:675:19:675:31 | ... += ... | 128.0 | -| test.c:675:24:675:31 | 12345432 | 1.0 | -| test.c:676:7:676:8 | c1 | 5.0 | -| test.c:676:7:676:14 | ... && ... | 1.0 | -| test.c:676:13:676:14 | c5 | 2.0 | -| test.c:676:19:676:19 | x | 256.0 | -| test.c:676:19:676:28 | ... += ... | 256.0 | -| test.c:676:24:676:28 | 38847 | 1.0 | -| test.c:677:7:677:8 | c2 | 5.0 | -| test.c:677:7:677:14 | ... && ... | 1.0 | -| test.c:677:13:677:14 | c3 | 5.0 | -| test.c:677:19:677:19 | x | 512.0 | -| test.c:677:19:677:26 | ... += ... | 512.0 | -| test.c:677:24:677:26 | 234 | 1.0 | -| test.c:679:11:679:11 | x | 1024.0 | -| test.c:679:11:679:15 | ... + ... | 1048576.0 | -| test.c:679:11:679:19 | ... + ... | 1.073741824E9 | -| test.c:679:11:679:23 | ... + ... | 1.099511627776E12 | -| test.c:679:11:679:27 | ... + ... | 1.125899906842624E15 | -| test.c:679:11:679:31 | ... + ... | 1.152921504606847E18 | -| test.c:679:11:679:35 | ... + ... | 1.1805916207174113E21 | -| test.c:679:11:679:39 | ... + ... | 1.2089258196146292E24 | -| test.c:679:11:679:43 | ... + ... | 1.2379400392853803E27 | -| test.c:679:11:679:47 | ... + ... | 1.2676506002282294E30 | -| test.c:679:11:679:51 | ... + ... | 1.298074214633707E33 | -| test.c:679:11:679:55 | ... + ... | 1.329227995784916E36 | -| test.c:679:15:679:15 | x | 1024.0 | -| test.c:679:19:679:19 | x | 1024.0 | -| test.c:679:23:679:23 | x | 1024.0 | -| test.c:679:27:679:27 | x | 1024.0 | -| test.c:679:31:679:31 | x | 1024.0 | -| test.c:679:35:679:35 | x | 1024.0 | -| test.c:679:39:679:39 | x | 1024.0 | -| test.c:679:43:679:43 | x | 1024.0 | -| test.c:679:47:679:47 | x | 1024.0 | -| test.c:679:51:679:51 | x | 1024.0 | -| test.c:679:55:679:55 | x | 1024.0 | -| test.c:680:10:680:10 | y | 1.329227995784916E36 | -| test.c:685:20:685:20 | x | 1.0 | -| test.c:685:20:685:26 | ... < ... | 1.0 | -| test.c:685:20:685:36 | ... ? ... : ... | 1.0 | -| test.c:685:24:685:26 | 100 | 1.0 | -| test.c:685:24:685:26 | (unsigned int)... | 1.0 | -| test.c:685:30:685:30 | x | 1.0 | -| test.c:685:34:685:36 | 100 | 1.0 | -| test.c:685:34:685:36 | (unsigned int)... | 1.0 | -| test.c:688:3:688:4 | y1 | 1.0 | -| test.c:688:9:688:11 | ++ ... | 1.0 | -| test.c:688:11:688:11 | y | 1.0 | -| test.c:689:3:689:4 | y2 | 1.0 | -| test.c:689:19:689:19 | 3 | 1.0 | -| test.c:689:19:689:19 | (unsigned int)... | 1.0 | -| test.c:698:3:698:3 | i | 1.0 | -| test.c:698:3:698:8 | ... = ... | 1.0 | -| test.c:698:7:698:8 | 10 | 1.0 | -| test.c:699:7:699:7 | i | 1.0 | -| test.c:701:3:701:3 | i | 1.0 | -| test.c:701:3:701:8 | ... = ... | 1.0 | -| test.c:701:7:701:8 | 10 | 1.0 | -| test.c:702:3:702:3 | i | 1.0 | -| test.c:702:3:702:9 | ... += ... | 1.0 | -| test.c:702:8:702:9 | 10 | 1.0 | -| test.c:703:7:703:7 | i | 1.0 | -| test.c:705:3:705:3 | i | 1.0 | -| test.c:705:3:705:8 | ... = ... | 1.0 | -| test.c:705:7:705:8 | 40 | 1.0 | -| test.c:706:3:706:3 | i | 1.0 | -| test.c:706:3:706:9 | ... -= ... | 1.0 | -| test.c:706:8:706:9 | 10 | 1.0 | -| test.c:707:7:707:7 | i | 1.0 | -| test.c:709:3:709:3 | i | 1.0 | -| test.c:709:3:709:12 | ... = ... | 1.0 | -| test.c:709:7:709:7 | j | 1.0 | -| test.c:709:7:709:12 | ... = ... | 1.0 | -| test.c:709:11:709:12 | 40 | 1.0 | -| test.c:710:7:710:7 | i | 1.0 | -| test.c:712:3:712:3 | i | 1.0 | -| test.c:712:3:712:15 | ... = ... | 1.0 | -| test.c:712:7:712:15 | (...) | 1.0 | -| test.c:712:8:712:8 | j | 1.0 | -| test.c:712:8:712:14 | ... += ... | 1.0 | -| test.c:712:13:712:14 | 10 | 1.0 | -| test.c:713:7:713:7 | i | 1.0 | -| test.c:715:3:715:3 | i | 1.0 | -| test.c:715:3:715:20 | ... = ... | 1.0 | -| test.c:715:7:715:8 | 20 | 1.0 | -| test.c:715:7:715:20 | ... + ... | 1.0 | -| test.c:715:12:715:20 | (...) | 1.0 | -| test.c:715:13:715:13 | j | 1.0 | -| test.c:715:13:715:19 | ... -= ... | 1.0 | -| test.c:715:18:715:19 | 10 | 1.0 | -| test.c:716:7:716:7 | i | 1.0 | -| test.c:721:14:721:15 | 0 | 1.0 | -| test.c:723:7:723:7 | 3 | 1.0 | -| test.c:723:7:723:7 | (unsigned int)... | 1.0 | -| test.c:723:7:723:12 | ... <= ... | 1.0 | -| test.c:723:7:723:23 | ... && ... | 1.0 | -| test.c:723:7:723:33 | ... && ... | 1.0 | -| test.c:723:7:723:44 | ... && ... | 1.0 | -| test.c:723:12:723:12 | a | 1.0 | -| test.c:723:17:723:17 | a | 1.0 | -| test.c:723:17:723:23 | ... <= ... | 1.0 | -| test.c:723:22:723:23 | 11 | 1.0 | -| test.c:723:22:723:23 | (unsigned int)... | 1.0 | -| test.c:723:28:723:28 | 5 | 1.0 | -| test.c:723:28:723:28 | (unsigned int)... | 1.0 | -| test.c:723:28:723:33 | ... <= ... | 1.0 | -| test.c:723:33:723:33 | b | 1.0 | -| test.c:723:38:723:38 | b | 1.0 | -| test.c:723:38:723:44 | ... <= ... | 1.0 | -| test.c:723:43:723:44 | 23 | 1.0 | -| test.c:723:43:723:44 | (unsigned int)... | 1.0 | -| test.c:724:13:724:13 | a | 1.0 | -| test.c:724:13:724:15 | (int)... | 1.0 | -| test.c:724:13:724:15 | ... * ... | 1.0 | -| test.c:724:15:724:15 | b | 1.0 | -| test.c:725:5:725:9 | total | 1.0 | -| test.c:725:5:725:14 | ... += ... | 1.0 | -| test.c:725:14:725:14 | r | 1.0 | -| test.c:727:7:727:7 | 3 | 1.0 | -| test.c:727:7:727:7 | (unsigned int)... | 1.0 | -| test.c:727:7:727:12 | ... <= ... | 1.0 | -| test.c:727:7:727:23 | ... && ... | 1.0 | -| test.c:727:7:727:33 | ... && ... | 1.0 | -| test.c:727:7:727:44 | ... && ... | 1.0 | -| test.c:727:12:727:12 | a | 2.0 | -| test.c:727:17:727:17 | a | 2.0 | -| test.c:727:17:727:23 | ... <= ... | 1.0 | -| test.c:727:22:727:23 | 11 | 1.0 | -| test.c:727:22:727:23 | (unsigned int)... | 1.0 | -| test.c:727:28:727:28 | 0 | 1.0 | -| test.c:727:28:727:28 | (unsigned int)... | 1.0 | -| test.c:727:28:727:33 | ... <= ... | 1.0 | -| test.c:727:33:727:33 | b | 3.0 | -| test.c:727:38:727:38 | b | 3.0 | -| test.c:727:38:727:44 | ... <= ... | 1.0 | -| test.c:727:43:727:44 | 23 | 1.0 | -| test.c:727:43:727:44 | (unsigned int)... | 1.0 | -| test.c:728:13:728:13 | a | 2.0 | -| test.c:728:13:728:15 | (int)... | 6.0 | -| test.c:728:13:728:15 | ... * ... | 6.0 | -| test.c:728:15:728:15 | b | 3.0 | -| test.c:729:5:729:9 | total | 2.0 | -| test.c:729:5:729:14 | ... += ... | 12.0 | -| test.c:729:14:729:14 | r | 6.0 | -| test.c:731:7:731:7 | 3 | 1.0 | -| test.c:731:7:731:7 | (unsigned int)... | 1.0 | -| test.c:731:7:731:12 | ... <= ... | 1.0 | -| test.c:731:7:731:23 | ... && ... | 1.0 | -| test.c:731:7:731:34 | ... && ... | 1.0 | -| test.c:731:7:731:45 | ... && ... | 1.0 | -| test.c:731:12:731:12 | a | 3.0 | -| test.c:731:17:731:17 | a | 3.0 | -| test.c:731:17:731:23 | ... <= ... | 1.0 | -| test.c:731:22:731:23 | 11 | 1.0 | -| test.c:731:22:731:23 | (unsigned int)... | 1.0 | -| test.c:731:28:731:29 | 13 | 1.0 | -| test.c:731:28:731:29 | (unsigned int)... | 1.0 | -| test.c:731:28:731:34 | ... <= ... | 1.0 | -| test.c:731:34:731:34 | b | 7.0 | -| test.c:731:39:731:39 | b | 7.0 | -| test.c:731:39:731:45 | ... <= ... | 1.0 | -| test.c:731:44:731:45 | 23 | 1.0 | -| test.c:731:44:731:45 | (unsigned int)... | 1.0 | -| test.c:732:13:732:13 | a | 3.0 | -| test.c:732:13:732:15 | (int)... | 21.0 | -| test.c:732:13:732:15 | ... * ... | 21.0 | -| test.c:732:15:732:15 | b | 7.0 | -| test.c:733:5:733:9 | total | 14.0 | -| test.c:733:5:733:14 | ... += ... | 294.0 | -| test.c:733:14:733:14 | r | 21.0 | -| test.c:736:10:736:14 | total | 308.0 | -| test.c:740:14:740:15 | 0 | 1.0 | -| test.c:742:7:742:7 | 5 | 1.0 | -| test.c:742:7:742:7 | (unsigned int)... | 1.0 | -| test.c:742:7:742:12 | ... <= ... | 1.0 | -| test.c:742:7:742:23 | ... && ... | 1.0 | -| test.c:742:12:742:12 | b | 1.0 | -| test.c:742:17:742:17 | b | 1.0 | -| test.c:742:17:742:23 | ... <= ... | 1.0 | -| test.c:742:22:742:23 | 23 | 1.0 | -| test.c:742:22:742:23 | (unsigned int)... | 1.0 | -| test.c:743:13:743:14 | 11 | 1.0 | -| test.c:743:13:743:14 | (unsigned int)... | 1.0 | -| test.c:743:13:743:16 | (int)... | 1.0 | -| test.c:743:13:743:16 | ... * ... | 1.0 | -| test.c:743:16:743:16 | b | 1.0 | -| test.c:744:5:744:9 | total | 1.0 | -| test.c:744:5:744:14 | ... += ... | 1.0 | -| test.c:744:14:744:14 | r | 1.0 | -| test.c:746:7:746:7 | 0 | 1.0 | -| test.c:746:7:746:7 | (unsigned int)... | 1.0 | -| test.c:746:7:746:12 | ... <= ... | 1.0 | -| test.c:746:7:746:23 | ... && ... | 1.0 | -| test.c:746:12:746:12 | b | 2.0 | -| test.c:746:17:746:17 | b | 2.0 | -| test.c:746:17:746:23 | ... <= ... | 1.0 | -| test.c:746:22:746:23 | 23 | 1.0 | -| test.c:746:22:746:23 | (unsigned int)... | 1.0 | -| test.c:747:13:747:14 | 11 | 1.0 | -| test.c:747:13:747:14 | (unsigned int)... | 1.0 | -| test.c:747:13:747:16 | (int)... | 2.0 | -| test.c:747:13:747:16 | ... * ... | 2.0 | -| test.c:747:16:747:16 | b | 2.0 | -| test.c:748:5:748:9 | total | 2.0 | -| test.c:748:5:748:14 | ... += ... | 4.0 | -| test.c:748:14:748:14 | r | 2.0 | -| test.c:750:7:750:8 | 13 | 1.0 | -| test.c:750:7:750:8 | (unsigned int)... | 1.0 | -| test.c:750:7:750:13 | ... <= ... | 1.0 | -| test.c:750:7:750:24 | ... && ... | 1.0 | -| test.c:750:13:750:13 | b | 3.0 | -| test.c:750:18:750:18 | b | 3.0 | -| test.c:750:18:750:24 | ... <= ... | 1.0 | -| test.c:750:23:750:24 | 23 | 1.0 | -| test.c:750:23:750:24 | (unsigned int)... | 1.0 | -| test.c:751:13:751:14 | 11 | 1.0 | -| test.c:751:13:751:14 | (unsigned int)... | 1.0 | -| test.c:751:13:751:16 | (int)... | 3.0 | -| test.c:751:13:751:16 | ... * ... | 3.0 | -| test.c:751:16:751:16 | b | 3.0 | -| test.c:752:5:752:9 | total | 6.0 | -| test.c:752:5:752:14 | ... += ... | 18.0 | -| test.c:752:14:752:14 | r | 3.0 | -| test.c:755:10:755:14 | total | 24.0 | -| test.c:760:3:760:3 | x | 1.0 | -| test.c:760:3:760:22 | ... = ... | 1.0 | -| test.c:760:7:760:7 | y | 1.0 | -| test.c:760:7:760:22 | ... = ... | 1.0 | -| test.c:760:11:760:22 | 1000000003 | 1.0 | -| test.c:761:3:761:4 | xy | 1.0 | -| test.c:761:3:761:12 | ... = ... | 1.0 | -| test.c:761:8:761:8 | x | 1.0 | -| test.c:761:8:761:12 | ... * ... | 1.0 | -| test.c:761:12:761:12 | y | 1.0 | -| test.c:762:10:762:11 | xy | 1.0 | -| test.c:767:3:767:3 | x | 1.0 | -| test.c:767:3:767:14 | ... = ... | 1.0 | -| test.c:767:7:767:14 | 274177 | 1.0 | -| test.c:768:3:768:3 | y | 1.0 | -| test.c:768:3:768:22 | ... = ... | 1.0 | -| test.c:768:7:768:22 | 67280421310721 | 1.0 | -| test.c:769:3:769:4 | xy | 1.0 | -| test.c:769:3:769:12 | ... = ... | 1.0 | -| test.c:769:8:769:8 | x | 1.0 | -| test.c:769:8:769:12 | ... * ... | 1.0 | -| test.c:769:12:769:12 | y | 1.0 | -| test.c:770:10:770:11 | xy | 1.0 | -| test.c:774:7:774:8 | ui | 1.0 | -| test.c:774:7:774:14 | ... >= ... | 1.0 | -| test.c:774:13:774:14 | 10 | 1.0 | -| test.c:774:13:774:14 | (unsigned int)... | 1.0 | -| test.c:775:28:775:44 | (unsigned long)... | 1.0 | -| test.c:775:28:775:49 | ... * ... | 1.0 | -| test.c:775:43:775:44 | ui | 1.0 | -| test.c:775:48:775:49 | (unsigned long)... | 1.0 | -| test.c:775:48:775:49 | ui | 1.0 | -| test.c:776:12:776:17 | result | 1.0 | -| test.c:778:7:778:8 | ul | 1.0 | -| test.c:778:7:778:14 | ... >= ... | 1.0 | -| test.c:778:13:778:14 | 10 | 1.0 | -| test.c:778:13:778:14 | (unsigned long)... | 1.0 | -| test.c:779:28:779:29 | ul | 1.0 | -| test.c:779:28:779:34 | ... * ... | 1.0 | -| test.c:779:33:779:34 | ul | 1.0 | -| test.c:780:12:780:17 | result | 1.0 | -| test.c:782:10:782:10 | 0 | 1.0 | -| test.c:782:10:782:10 | (unsigned long)... | 1.0 | -| test.c:786:7:786:8 | ui | 1.0 | -| test.c:786:7:786:14 | ... <= ... | 1.0 | -| test.c:786:7:786:25 | ... && ... | 1.0 | -| test.c:786:13:786:14 | 10 | 1.0 | -| test.c:786:13:786:14 | (unsigned int)... | 1.0 | -| test.c:786:19:786:20 | ui | 1.0 | -| test.c:786:19:786:25 | ... >= ... | 1.0 | -| test.c:786:25:786:25 | 2 | 1.0 | -| test.c:786:25:786:25 | (unsigned int)... | 1.0 | -| test.c:787:5:787:6 | ui | 1.0 | -| test.c:787:5:787:16 | ... *= ... | 1.0 | -| test.c:787:11:787:12 | ui | 1.0 | -| test.c:787:11:787:16 | ... + ... | 1.0 | -| test.c:787:16:787:16 | 0 | 1.0 | -| test.c:787:16:787:16 | (unsigned int)... | 1.0 | -| test.c:788:12:788:13 | (unsigned long)... | 1.0 | -| test.c:788:12:788:13 | ui | 1.0 | -| test.c:791:26:791:27 | 10 | 1.0 | -| test.c:791:26:791:27 | (unsigned int)... | 1.0 | -| test.c:792:3:792:9 | uiconst | 1.0 | -| test.c:792:3:792:14 | ... *= ... | 1.0 | -| test.c:792:14:792:14 | 4 | 1.0 | -| test.c:792:14:792:14 | (unsigned int)... | 1.0 | -| test.c:794:27:794:28 | 10 | 1.0 | -| test.c:794:27:794:28 | (unsigned long)... | 1.0 | -| test.c:795:3:795:9 | ulconst | 1.0 | -| test.c:795:3:795:14 | ... *= ... | 1.0 | -| test.c:795:14:795:14 | 4 | 1.0 | -| test.c:795:14:795:14 | (unsigned long)... | 1.0 | -| test.c:796:10:796:16 | (unsigned long)... | 1.0 | -| test.c:796:10:796:16 | uiconst | 1.0 | -| test.c:796:10:796:26 | ... + ... | 1.0 | -| test.c:796:20:796:26 | ulconst | 1.0 | -| test.c:800:7:800:7 | i | 1.0 | -| test.c:800:7:800:13 | ... >= ... | 1.0 | -| test.c:800:7:800:23 | ... && ... | 1.0 | -| test.c:800:12:800:13 | - ... | 1.0 | -| test.c:800:13:800:13 | 1 | 1.0 | -| test.c:800:18:800:18 | i | 1.0 | -| test.c:800:18:800:23 | ... <= ... | 1.0 | -| test.c:800:23:800:23 | 2 | 1.0 | -| test.c:801:5:801:5 | i | 1.0 | -| test.c:801:5:801:13 | ... = ... | 1.0 | -| test.c:801:9:801:9 | 5 | 1.0 | -| test.c:801:9:801:13 | ... * ... | 1.0 | -| test.c:801:13:801:13 | i | 1.0 | -| test.c:802:9:802:9 | i | 1.0 | -| test.c:804:5:804:5 | i | 1.0 | -| test.c:804:5:804:14 | ... = ... | 1.0 | -| test.c:804:9:804:9 | i | 1.0 | -| test.c:804:9:804:14 | ... * ... | 1.0 | -| test.c:804:13:804:14 | - ... | 1.0 | -| test.c:804:14:804:14 | 3 | 1.0 | -| test.c:805:9:805:9 | i | 1.0 | -| test.c:807:5:807:5 | i | 1.0 | -| test.c:807:5:807:10 | ... *= ... | 1.0 | -| test.c:807:10:807:10 | 7 | 1.0 | -| test.c:808:9:808:9 | i | 1.0 | -| test.c:810:5:810:5 | i | 1.0 | -| test.c:810:5:810:12 | ... *= ... | 1.0 | -| test.c:810:10:810:12 | - ... | 1.0 | -| test.c:810:11:810:12 | 11 | 1.0 | -| test.c:811:9:811:9 | i | 1.0 | -| test.c:813:7:813:7 | i | 2.0 | -| test.c:813:7:813:13 | ... == ... | 1.0 | -| test.c:813:12:813:13 | - ... | 1.0 | -| test.c:813:13:813:13 | 1 | 1.0 | -| test.c:814:5:814:5 | i | 1.0 | -| test.c:814:5:814:27 | ... = ... | 2.0 | -| test.c:814:9:814:9 | i | 2.0 | -| test.c:814:9:814:27 | ... * ... | 2.0 | -| test.c:814:13:814:27 | (int)... | 1.0 | -| test.c:814:18:814:27 | 4294967295 | 1.0 | -| test.c:815:9:815:9 | i | 2.0 | -| test.c:817:3:817:3 | i | 1.0 | -| test.c:817:3:817:12 | ... = ... | 4.0 | -| test.c:817:7:817:7 | i | 4.0 | -| test.c:817:7:817:12 | ... * ... | 4.0 | -| test.c:817:11:817:12 | - ... | 1.0 | -| test.c:817:12:817:12 | 1 | 1.0 | -| test.c:818:10:818:10 | i | 4.0 | -| test.c:820:20:820:20 | 1 | 1.0 | -| test.c:820:20:820:20 | (signed char)... | 1.0 | -| test.c:821:3:821:3 | i | 1.0 | -| test.c:821:3:821:17 | ... = ... | 1.0 | -| test.c:821:7:821:17 | (...) | 1.0 | -| test.c:821:7:821:17 | (int)... | 1.0 | -| test.c:821:8:821:11 | * ... | 1.0 | -| test.c:821:8:821:16 | ... *= ... | 1.0 | -| test.c:821:10:821:11 | sc | 1.0 | -| test.c:821:16:821:16 | 2 | 1.0 | -| test.c:823:7:823:7 | i | 1.0 | -| test.c:825:10:825:10 | 0 | 1.0 | -| test.c:830:7:830:7 | (int)... | 1.0 | -| test.c:830:7:830:7 | n | 1.0 | -| test.c:832:7:832:7 | n | 1.0 | -| test.c:832:7:832:11 | ... > ... | 1.0 | -| test.c:832:11:832:11 | 0 | 1.0 | -| test.c:832:11:832:11 | (unsigned int)... | 1.0 | -| test.c:833:9:833:9 | (int)... | 1.0 | -| test.c:833:9:833:9 | n | 1.0 | -| test.c:836:7:836:7 | n | 2.0 | -| test.c:836:7:836:12 | ... != ... | 1.0 | -| test.c:836:12:836:12 | 0 | 1.0 | -| test.c:836:12:836:12 | (unsigned int)... | 1.0 | -| test.c:837:9:837:9 | (int)... | 2.0 | -| test.c:837:9:837:9 | n | 2.0 | -| test.c:839:9:839:9 | (int)... | 2.0 | -| test.c:839:9:839:9 | n | 2.0 | -| test.c:842:7:842:8 | ! ... | 1.0 | -| test.c:842:8:842:8 | n | 4.0 | -| test.c:843:9:843:9 | (int)... | 4.0 | -| test.c:843:9:843:9 | n | 4.0 | -| test.c:845:9:845:9 | (int)... | 4.0 | -| test.c:845:9:845:9 | n | 4.0 | -| test.c:848:10:848:10 | n | 13.0 | -| test.c:848:10:848:15 | ... != ... | 1.0 | -| test.c:848:15:848:15 | 0 | 1.0 | -| test.c:848:15:848:15 | (unsigned int)... | 1.0 | -| test.c:849:5:849:5 | n | 13.0 | -| test.c:849:5:849:7 | ... -- | 13.0 | -| test.c:852:7:852:7 | (int)... | 13.0 | -| test.c:852:7:852:7 | n | 13.0 | -| test.c:856:7:856:7 | (int)... | 1.0 | -| test.c:856:7:856:7 | n | 1.0 | -| test.c:856:7:856:11 | ... < ... | 1.0 | -| test.c:856:11:856:11 | 0 | 1.0 | -| test.c:859:7:859:7 | (int)... | 1.0 | -| test.c:859:7:859:7 | n | 1.0 | -| test.c:859:7:859:12 | ... == ... | 1.0 | -| test.c:859:12:859:12 | 0 | 1.0 | -| test.c:860:9:860:9 | (int)... | 1.0 | -| test.c:860:9:860:9 | n | 1.0 | -| test.c:862:9:862:9 | (int)... | 1.0 | -| test.c:862:9:862:9 | n | 1.0 | -| test.c:865:7:865:7 | n | 2.0 | -| test.c:866:9:866:9 | (int)... | 2.0 | -| test.c:866:9:866:9 | n | 2.0 | -| test.c:868:9:868:9 | (int)... | 2.0 | -| test.c:868:9:868:9 | n | 2.0 | -| test.c:871:10:871:10 | (int)... | 13.0 | -| test.c:871:10:871:10 | n | 12.0 | -| test.c:871:10:871:15 | ... != ... | 1.0 | -| test.c:871:15:871:15 | 0 | 1.0 | -| test.c:872:5:872:5 | n | 12.0 | -| test.c:872:5:872:7 | ... -- | 12.0 | -| test.c:875:7:875:7 | (int)... | 12.0 | -| test.c:875:7:875:7 | n | 12.0 | -| test.c:879:7:879:7 | (int)... | 1.0 | -| test.c:879:7:879:7 | n | 1.0 | -| test.c:879:7:879:12 | ... != ... | 1.0 | -| test.c:879:12:879:12 | 0 | 1.0 | -| test.c:880:9:880:9 | (int)... | 1.0 | -| test.c:880:9:880:9 | n | 1.0 | -| test.c:880:9:880:14 | ... >= ... | 1.0 | -| test.c:880:14:880:14 | 0 | 1.0 | -| test.c:881:11:881:11 | (int)... | 1.0 | -| test.c:881:11:881:11 | n | 1.0 | -| test.c:885:7:885:7 | (int)... | 2.0 | -| test.c:885:7:885:7 | n | 2.0 | -| test.c:885:7:885:12 | ... >= ... | 1.0 | -| test.c:885:12:885:12 | 5 | 1.0 | -| test.c:886:9:886:9 | 2 | 1.0 | -| test.c:886:9:886:13 | ... * ... | 2.0 | -| test.c:886:9:886:18 | ... - ... | 2.0 | -| test.c:886:9:886:23 | ... == ... | 1.0 | -| test.c:886:13:886:13 | (int)... | 2.0 | -| test.c:886:13:886:13 | n | 2.0 | -| test.c:886:17:886:18 | 10 | 1.0 | -| test.c:886:23:886:23 | 0 | 1.0 | -| test.c:889:9:889:9 | (int)... | 2.0 | -| test.c:889:9:889:9 | n | 2.0 | -| test.c:892:7:892:7 | (int)... | 3.0 | -| test.c:892:7:892:7 | n | 3.0 | -| test.c:892:7:892:17 | ... != ... | 1.0 | -| test.c:892:7:892:32 | ... && ... | 1.0 | -| test.c:892:12:892:17 | - ... | 1.0 | -| test.c:892:13:892:17 | 32768 | 1.0 | -| test.c:892:22:892:22 | (int)... | 3.0 | -| test.c:892:22:892:22 | n | 3.0 | -| test.c:892:22:892:32 | ... != ... | 1.0 | -| test.c:892:27:892:32 | - ... | 1.0 | -| test.c:892:28:892:32 | 32767 | 1.0 | -| test.c:893:9:893:9 | (int)... | 3.0 | -| test.c:893:9:893:9 | n | 3.0 | -| test.c:896:7:896:7 | (int)... | 4.0 | -| test.c:896:7:896:7 | n | 4.0 | -| test.c:896:7:896:12 | ... >= ... | 1.0 | -| test.c:896:12:896:12 | 0 | 1.0 | -| test.c:897:5:897:5 | n | 4.0 | -| test.c:897:5:897:14 | ... ? ... : ... | 16.0 | -| test.c:897:10:897:10 | (int)... | 4.0 | -| test.c:897:10:897:10 | n | 4.0 | -| test.c:897:14:897:14 | (int)... | 4.0 | -| test.c:897:14:897:14 | n | 4.0 | -| test.c:898:5:898:6 | ! ... | 1.0 | -| test.c:898:5:898:14 | ... ? ... : ... | 64.0 | -| test.c:898:6:898:6 | n | 8.0 | -| test.c:898:10:898:10 | (int)... | 8.0 | -| test.c:898:10:898:10 | n | 8.0 | -| test.c:898:14:898:14 | (int)... | 8.0 | -| test.c:898:14:898:14 | n | 8.0 | -| test.c:909:7:909:8 | (unsigned long)... | 1.0 | -| test.c:909:7:909:8 | ss | 1.0 | -| test.c:909:7:909:22 | ... < ... | 1.0 | -| test.c:909:12:909:22 | sizeof(int) | 1.0 | -| test.c:910:9:910:10 | (int)... | 1.0 | -| test.c:910:9:910:10 | ss | 1.0 | -| test.c:913:7:913:8 | (int)... | 2.0 | -| test.c:913:7:913:8 | ss | 2.0 | -| test.c:913:7:913:17 | ... < ... | 1.0 | -| test.c:913:12:913:17 | 32769 | 1.0 | -| test.c:914:9:914:10 | (int)... | 2.0 | -| test.c:914:9:914:10 | ss | 2.0 | -| test.c:917:7:917:15 | (int)... | 1.0 | -| test.c:917:7:917:15 | (short)... | 1.0 | -| test.c:917:7:917:20 | ... >= ... | 1.0 | -| test.c:917:14:917:15 | us | 1.0 | -| test.c:917:20:917:20 | 0 | 1.0 | -| test.c:918:9:918:10 | (int)... | 1.0 | -| test.c:918:9:918:10 | us | 1.0 | -| test.c:921:7:921:15 | (int)... | 2.0 | -| test.c:921:7:921:15 | (short)... | 2.0 | -| test.c:921:7:921:21 | ... >= ... | 1.0 | -| test.c:921:14:921:15 | us | 2.0 | -| test.c:921:20:921:21 | - ... | 1.0 | -| test.c:921:21:921:21 | 1 | 1.0 | -| test.c:922:9:922:10 | (int)... | 2.0 | -| test.c:922:9:922:10 | us | 2.0 | -| test.c:925:7:925:8 | (unsigned long)... | 3.0 | -| test.c:925:7:925:8 | ss | 3.0 | -| test.c:925:7:925:23 | ... >= ... | 1.0 | -| test.c:925:13:925:23 | sizeof(int) | 1.0 | -| test.c:926:9:926:10 | (int)... | 3.0 | -| test.c:926:9:926:10 | ss | 3.0 | -| test.c:929:7:929:8 | (int)... | 4.0 | -| test.c:929:7:929:8 | ss | 4.0 | -| test.c:929:7:929:12 | (unsigned long)... | 4.0 | -| test.c:929:7:929:12 | ... + ... | 4.0 | -| test.c:929:7:929:26 | ... < ... | 1.0 | -| test.c:929:12:929:12 | 1 | 1.0 | -| test.c:929:16:929:26 | sizeof(int) | 1.0 | -| test.c:930:9:930:10 | (int)... | 4.0 | -| test.c:930:9:930:10 | ss | 4.0 | -| test.c:936:8:936:8 | s | 1.0 | -| test.c:936:8:936:12 | ... = ... | 1.0 | -| test.c:936:12:936:12 | 0 | 1.0 | -| test.c:936:15:936:15 | s | 13.0 | -| test.c:936:15:936:20 | ... < ... | 1.0 | -| test.c:936:19:936:20 | 10 | 1.0 | -| test.c:936:23:936:23 | s | 13.0 | -| test.c:936:23:936:25 | ... ++ | 13.0 | -| test.c:937:18:937:18 | s | 13.0 | -| test.c:937:18:937:22 | ... + ... | 13.0 | -| test.c:937:22:937:22 | s | 13.0 | -| test.c:938:9:938:14 | result | 13.0 | -| test.c:943:10:943:11 | 0 | 1.0 | -| test.c:944:7:944:7 | i | 1.0 | -| test.c:944:7:944:11 | ... < ... | 1.0 | -| test.c:944:11:944:11 | 0 | 1.0 | -| test.c:945:9:945:9 | i | 1.0 | -| test.c:948:20:948:20 | 0 | 1.0 | -| test.c:948:20:948:20 | (unsigned int)... | 1.0 | -| test.c:949:7:949:7 | u | 1.0 | -| test.c:949:7:949:11 | ... < ... | 1.0 | -| test.c:949:11:949:11 | 0 | 1.0 | -| test.c:949:11:949:11 | (unsigned int)... | 1.0 | -| test.c:950:9:950:9 | (int)... | 1.0 | -| test.c:950:9:950:9 | u | 1.0 | -| test.c:955:12:955:12 | s | 1.0 | -| test.c:955:12:955:16 | ... % ... | 1.0 | -| test.c:955:16:955:16 | 5 | 1.0 | -| test.c:956:7:956:8 | s2 | 1.0 | -| test.c:961:7:961:7 | x | 1.0 | -| test.c:962:9:962:9 | y | 1.0 | -| test.c:962:9:962:14 | ... != ... | 1.0 | -| test.c:962:14:962:14 | 0 | 1.0 | -| test.c:963:12:963:12 | 0 | 1.0 | -| test.c:966:7:966:7 | y | 2.0 | -| test.c:975:7:975:7 | x | 1.0 | -| test.c:975:7:975:13 | ... >= ... | 1.0 | -| test.c:975:12:975:13 | 10 | 1.0 | -| test.c:980:7:980:7 | x | 13.0 | -| test.c:985:16:985:26 | 2147483647 | 1.0 | -| test.c:986:16:986:19 | 256 | 1.0 | -| test.c:987:7:987:13 | (...) | 1.0 | -| test.c:987:7:987:20 | ... <= ... | 1.0 | -| test.c:987:8:987:8 | x | 1.0 | -| test.c:987:8:987:12 | ... + ... | 1.0 | -| test.c:987:12:987:12 | y | 1.0 | -| test.c:987:18:987:20 | 512 | 1.0 | -| test.c:988:9:988:9 | x | 1.0 | -| test.c:989:9:989:9 | y | 1.0 | -| test.c:994:9:994:11 | 1 | 1.0 | -| test.c:995:9:995:11 | 2 | 1.0 | -| test.c:996:9:996:11 | 4 | 1.0 | -| test.c:997:9:997:11 | 8 | 1.0 | -| test.c:998:9:998:12 | 16 | 1.0 | -| test.c:1002:7:1002:7 | (int)... | 1.0 | -| test.c:1002:7:1002:7 | e | 1.0 | -| test.cpp:9:11:9:12 | - ... | 1.0 | -| test.cpp:9:12:9:12 | 1 | 1.0 | -| test.cpp:10:7:10:7 | (bool)... | 1.0 | -| test.cpp:10:7:10:7 | b | 1.0 | -| test.cpp:11:5:11:5 | x | 1.0 | -| test.cpp:11:5:11:14 | ... = ... | 1.0 | -| test.cpp:11:12:11:12 | call to operator[] | 1.0 | -| test.cpp:11:12:11:14 | (reference dereference) | 1.0 | -| test.cpp:11:13:11:13 | 3 | 1.0 | -| test.cpp:13:10:13:10 | x | 2.0 | -| test.cpp:18:12:18:31 | (int)... | 1.0 | -| test.cpp:18:12:18:31 | static_cast... | 1.0 | -| test.cpp:18:30:18:30 | x | 1.0 | -| test.cpp:19:10:19:11 | x0 | 1.0 | -| test.cpp:27:7:27:7 | y | 1.0 | -| test.cpp:27:7:27:12 | ... == ... | 1.0 | -| test.cpp:27:12:27:12 | 0 | 1.0 | -| test.cpp:28:5:28:5 | x | 1.0 | -| test.cpp:28:5:28:9 | ... = ... | 1.0 | -| test.cpp:28:9:28:9 | 0 | 1.0 | -| test.cpp:30:7:30:7 | y | 2.0 | -| test.cpp:30:7:30:13 | ... == ... | 1.0 | -| test.cpp:30:12:30:13 | - ... | 1.0 | -| test.cpp:30:13:30:13 | 1 | 1.0 | -| test.cpp:31:5:31:5 | x | 1.0 | -| test.cpp:31:5:31:10 | ... = ... | 1.0 | -| test.cpp:31:9:31:10 | - ... | 1.0 | -| test.cpp:31:10:31:10 | 1 | 1.0 | -| test.cpp:33:7:33:7 | y | 4.0 | -| test.cpp:33:7:33:12 | ... == ... | 1.0 | -| test.cpp:33:12:33:12 | 1 | 1.0 | -| test.cpp:34:5:34:5 | x | 1.0 | -| test.cpp:34:5:34:9 | ... = ... | 1.0 | -| test.cpp:34:9:34:9 | 1 | 1.0 | -| test.cpp:36:7:36:7 | y | 8.0 | -| test.cpp:36:7:36:15 | ... == ... | 1.0 | -| test.cpp:36:12:36:15 | - ... | 1.0 | -| test.cpp:36:13:36:15 | 128 | 1.0 | -| test.cpp:37:5:37:5 | x | 1.0 | -| test.cpp:37:5:37:12 | ... = ... | 1.0 | -| test.cpp:37:9:37:12 | - ... | 1.0 | -| test.cpp:37:10:37:12 | 128 | 1.0 | -| test.cpp:39:7:39:7 | y | 16.0 | -| test.cpp:39:7:39:14 | ... == ... | 1.0 | -| test.cpp:39:12:39:14 | 128 | 1.0 | -| test.cpp:40:5:40:5 | x | 1.0 | -| test.cpp:40:5:40:11 | ... = ... | 1.0 | -| test.cpp:40:9:40:11 | 128 | 1.0 | -| test.cpp:42:7:42:7 | y | 32.0 | -| test.cpp:42:7:42:16 | ... == ... | 1.0 | -| test.cpp:42:12:42:16 | - ... | 1.0 | -| test.cpp:42:13:42:16 | 1024 | 1.0 | -| test.cpp:43:5:43:5 | x | 1.0 | -| test.cpp:43:5:43:13 | ... = ... | 1.0 | -| test.cpp:43:9:43:13 | - ... | 1.0 | -| test.cpp:43:10:43:13 | 1024 | 1.0 | -| test.cpp:45:7:45:7 | y | 64.0 | -| test.cpp:45:7:45:15 | ... == ... | 1.0 | -| test.cpp:45:12:45:15 | 1024 | 1.0 | -| test.cpp:46:5:46:5 | x | 1.0 | -| test.cpp:46:5:46:12 | ... = ... | 1.0 | -| test.cpp:46:9:46:12 | 1024 | 1.0 | -| test.cpp:49:10:49:11 | 0 | 1.0 | -| test.cpp:51:7:51:7 | x | 8.0 | -| test.cpp:51:7:51:12 | ... == ... | 1.0 | -| test.cpp:51:12:51:12 | 0 | 1.0 | -| test.cpp:52:15:52:21 | (bool)... | 1.0 | -| test.cpp:52:21:52:21 | x | 8.0 | -| test.cpp:53:5:53:5 | t | 1.0 | -| test.cpp:53:5:53:16 | ... += ... | 8.0 | -| test.cpp:53:10:53:16 | (int)... | 8.0 | -| test.cpp:53:15:53:16 | xb | 8.0 | -| test.cpp:56:7:56:7 | x | 16.0 | -| test.cpp:56:7:56:11 | ... > ... | 1.0 | -| test.cpp:56:11:56:11 | 0 | 1.0 | -| test.cpp:57:15:57:21 | (bool)... | 1.0 | -| test.cpp:57:21:57:21 | x | 16.0 | -| test.cpp:58:5:58:5 | t | 9.0 | -| test.cpp:58:5:58:16 | ... += ... | 144.0 | -| test.cpp:58:10:58:16 | (int)... | 16.0 | -| test.cpp:58:15:58:16 | xb | 16.0 | -| test.cpp:61:7:61:7 | x | 17.0 | -| test.cpp:61:7:61:11 | ... < ... | 1.0 | -| test.cpp:61:11:61:11 | 0 | 1.0 | -| test.cpp:62:15:62:21 | (bool)... | 1.0 | -| test.cpp:62:21:62:21 | x | 17.0 | -| test.cpp:63:5:63:5 | t | 153.0 | -| test.cpp:63:5:63:16 | ... += ... | 2601.0 | -| test.cpp:63:10:63:16 | (int)... | 17.0 | -| test.cpp:63:15:63:16 | xb | 17.0 | -| test.cpp:66:13:66:19 | (bool)... | 1.0 | -| test.cpp:66:19:66:19 | x | 18.0 | -| test.cpp:67:3:67:3 | t | 2754.0 | -| test.cpp:67:3:67:14 | ... += ... | 49572.0 | -| test.cpp:67:8:67:14 | (int)... | 18.0 | -| test.cpp:67:13:67:14 | xb | 18.0 | -| test.cpp:69:10:69:10 | b | 1.0 | -| test.cpp:69:10:69:21 | ... \|\| ... | 1.0 | -| test.cpp:69:15:69:21 | (bool)... | 1.0 | -| test.cpp:69:21:69:21 | t | 49572.0 | -| test.cpp:74:30:74:30 | (int)... | 1.0 | -| test.cpp:74:30:74:30 | c | 1.0 | -| test.cpp:74:30:74:34 | (unsigned short)... | 1.0 | -| test.cpp:74:30:74:34 | ... + ... | 1.0 | -| test.cpp:74:34:74:34 | (int)... | 1.0 | -| test.cpp:74:34:74:34 | c | 1.0 | -| test.cpp:75:7:75:30 | (int)... | 1.0 | -| test.cpp:75:7:75:30 | (unsigned char)... | 1.0 | -| test.cpp:75:7:75:35 | ... == ... | 1.0 | -| test.cpp:75:22:75:30 | c_times_2 | 1.0 | -| test.cpp:75:35:75:35 | 0 | 1.0 | -| test.cpp:77:5:77:13 | c_times_2 | 1.0 | -| test.cpp:79:3:79:11 | c_times_2 | 1.0 | -| test.cpp:83:16:83:22 | (reference dereference) | 1.0 | -| test.cpp:83:16:83:22 | (reference to) | 1.0 | -| test.cpp:83:16:83:22 | aliased | 1.0 | -| test.cpp:85:7:85:7 | (reference dereference) | 1.0 | -| test.cpp:85:7:85:7 | i | 1.0 | -| test.cpp:85:7:85:12 | ... >= ... | 1.0 | -| test.cpp:85:12:85:12 | 2 | 1.0 | -| test.cpp:86:12:86:12 | (reference dereference) | 1.0 | -| test.cpp:86:12:86:12 | i | 1.0 | -| test.cpp:88:7:88:8 | (reference dereference) | 1.0 | -| test.cpp:88:7:88:8 | ci | 1.0 | -| test.cpp:88:7:88:13 | ... >= ... | 1.0 | -| test.cpp:88:13:88:13 | 2 | 1.0 | -| test.cpp:89:12:89:13 | (reference dereference) | 1.0 | -| test.cpp:89:12:89:13 | ci | 1.0 | -| test.cpp:91:7:91:13 | (reference dereference) | 1.0 | -| test.cpp:91:7:91:13 | aliased | 1.0 | -| test.cpp:91:7:91:18 | ... >= ... | 1.0 | -| test.cpp:91:18:91:18 | 2 | 1.0 | -| test.cpp:92:12:92:18 | (reference dereference) | 1.0 | -| test.cpp:92:12:92:18 | aliased | 1.0 | -| test.cpp:94:7:94:11 | (reference dereference) | 1.0 | -| test.cpp:94:7:94:11 | alias | 1.0 | -| test.cpp:94:7:94:16 | ... >= ... | 1.0 | -| test.cpp:94:16:94:16 | 2 | 1.0 | -| test.cpp:95:12:95:16 | (reference dereference) | 1.0 | -| test.cpp:95:12:95:16 | alias | 1.0 | -| test.cpp:97:10:97:10 | (reference dereference) | 13.0 | -| test.cpp:97:10:97:19 | ... <= ... | 1.0 | -| test.cpp:97:15:97:19 | 12345 | 1.0 | -| test.cpp:97:22:97:22 | (reference dereference) | 13.0 | -| test.cpp:97:22:97:24 | ... ++ | 13.0 | -| test.cpp:98:5:98:5 | (reference dereference) | 1.0 | -| test.cpp:98:5:98:5 | i | 1.0 | -| test.cpp:98:5:98:9 | ... = ... | 13.0 | -| test.cpp:98:9:98:9 | (reference dereference) | 13.0 | -| test.cpp:99:5:99:5 | (reference dereference) | 13.0 | -| test.cpp:102:10:102:10 | 0 | 1.0 | -| test.cpp:106:7:106:7 | (int)... | 1.0 | -| test.cpp:106:7:106:7 | n | 1.0 | -| test.cpp:106:7:106:11 | ... < ... | 1.0 | -| test.cpp:106:11:106:11 | 0 | 1.0 | -| test.cpp:109:7:109:7 | (bool)... | 1.0 | -| test.cpp:109:7:109:7 | n | 1.0 | -| test.cpp:110:5:110:5 | n | 1.0 | -| test.cpp:112:5:112:5 | n | 1.0 | -| test.cpp:115:7:115:8 | ! ... | 1.0 | -| test.cpp:115:8:115:8 | (bool)... | 1.0 | -| test.cpp:115:8:115:8 | n | 2.0 | -| test.cpp:116:5:116:5 | n | 2.0 | -| test.cpp:118:5:118:5 | n | 2.0 | -| test.cpp:121:3:121:3 | (bool)... | 1.0 | -| test.cpp:121:3:121:3 | n | 4.0 | -| test.cpp:121:3:121:12 | ... ? ... : ... | 16.0 | -| test.cpp:121:8:121:8 | n | 4.0 | -| test.cpp:121:12:121:12 | n | 4.0 | -| test.cpp:122:3:122:4 | ! ... | 1.0 | -| test.cpp:122:3:122:12 | ... ? ... : ... | 64.0 | -| test.cpp:122:4:122:4 | (bool)... | 1.0 | -| test.cpp:122:4:122:4 | n | 8.0 | -| test.cpp:122:8:122:8 | n | 8.0 | -| test.cpp:122:12:122:12 | n | 8.0 | -| test_nr_of_bounds.cpp:2:9:2:11 | 1 | 1.0 | -| test_nr_of_bounds.cpp:3:9:3:11 | 2 | 1.0 | -| test_nr_of_bounds.cpp:4:9:4:11 | 4 | 1.0 | -| test_nr_of_bounds.cpp:5:9:5:11 | 8 | 1.0 | -| test_nr_of_bounds.cpp:6:9:6:12 | 16 | 1.0 | -| test_nr_of_bounds.cpp:7:9:7:12 | 32 | 1.0 | -| test_nr_of_bounds.cpp:8:9:8:12 | 64 | 1.0 | -| test_nr_of_bounds.cpp:9:9:9:12 | 128 | 1.0 | -| test_nr_of_bounds.cpp:10:9:10:13 | 256 | 1.0 | -| test_nr_of_bounds.cpp:11:9:11:13 | 512 | 1.0 | -| test_nr_of_bounds.cpp:12:9:12:13 | 1024 | 1.0 | -| test_nr_of_bounds.cpp:13:9:13:13 | 2048 | 1.0 | -| test_nr_of_bounds.cpp:14:9:14:14 | 4096 | 1.0 | -| test_nr_of_bounds.cpp:15:9:15:14 | 8192 | 1.0 | -| test_nr_of_bounds.cpp:16:9:16:14 | 16384 | 1.0 | -| test_nr_of_bounds.cpp:17:9:17:14 | 32768 | 1.0 | -| test_nr_of_bounds.cpp:18:9:18:15 | 65536 | 1.0 | -| test_nr_of_bounds.cpp:19:9:19:15 | 131072 | 1.0 | -| test_nr_of_bounds.cpp:20:9:20:15 | 262144 | 1.0 | -| test_nr_of_bounds.cpp:21:9:21:15 | 524288 | 1.0 | -| test_nr_of_bounds.cpp:22:9:22:16 | 1048576 | 1.0 | -| test_nr_of_bounds.cpp:23:9:23:16 | 2097152 | 1.0 | -| test_nr_of_bounds.cpp:24:9:24:16 | 4194304 | 1.0 | -| test_nr_of_bounds.cpp:25:9:25:16 | 8388608 | 1.0 | -| test_nr_of_bounds.cpp:26:9:26:17 | 16777216 | 1.0 | -| test_nr_of_bounds.cpp:27:10:27:18 | 33554432 | 1.0 | -| test_nr_of_bounds.cpp:28:10:28:18 | 67108864 | 1.0 | -| test_nr_of_bounds.cpp:29:10:29:18 | 134217728 | 1.0 | -| test_nr_of_bounds.cpp:30:10:30:19 | 268435456 | 1.0 | -| test_nr_of_bounds.cpp:31:10:31:19 | 536870912 | 1.0 | -| test_nr_of_bounds.cpp:40:5:40:19 | ... & ... | 1.0 | -| test_nr_of_bounds.cpp:40:5:40:19 | ... -= ... | 1.0 | -| test_nr_of_bounds.cpp:40:5:40:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:40:5:40:20 | (...) | 1.0 | -| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 | -| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 | -| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -| test_nr_of_bounds.cpp:41:5:41:19 | ... & ... | 2.0 | -| test_nr_of_bounds.cpp:41:5:41:19 | ... -= ... | 2.0 | -| test_nr_of_bounds.cpp:41:5:41:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:41:5:41:20 | (...) | 2.0 | -| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 | -| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 | -| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -| test_nr_of_bounds.cpp:42:5:42:19 | ... & ... | 4.0 | -| test_nr_of_bounds.cpp:42:5:42:19 | ... -= ... | 4.0 | -| test_nr_of_bounds.cpp:42:5:42:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:42:5:42:20 | (...) | 4.0 | -| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 | -| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 | -| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -| test_nr_of_bounds.cpp:43:5:43:19 | ... & ... | 8.0 | -| test_nr_of_bounds.cpp:43:5:43:19 | ... -= ... | 8.0 | -| test_nr_of_bounds.cpp:43:5:43:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:43:5:43:20 | (...) | 8.0 | -| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 | -| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 | -| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -| test_nr_of_bounds.cpp:44:5:44:19 | ... & ... | 16.0 | -| test_nr_of_bounds.cpp:44:5:44:19 | ... -= ... | 16.0 | -| test_nr_of_bounds.cpp:44:5:44:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:44:5:44:20 | (...) | 16.0 | -| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 | -| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 | -| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -| test_nr_of_bounds.cpp:45:5:45:19 | ... & ... | 32.0 | -| test_nr_of_bounds.cpp:45:5:45:19 | ... -= ... | 32.0 | -| test_nr_of_bounds.cpp:45:5:45:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:45:5:45:20 | (...) | 32.0 | -| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 | -| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 | -| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -| test_nr_of_bounds.cpp:46:5:46:19 | ... & ... | 64.0 | -| test_nr_of_bounds.cpp:46:5:46:19 | ... -= ... | 64.0 | -| test_nr_of_bounds.cpp:46:5:46:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:46:5:46:20 | (...) | 64.0 | -| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 | -| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 | -| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -| test_nr_of_bounds.cpp:47:5:47:19 | ... & ... | 128.0 | -| test_nr_of_bounds.cpp:47:5:47:19 | ... -= ... | 128.0 | -| test_nr_of_bounds.cpp:47:5:47:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:47:5:47:20 | (...) | 128.0 | -| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 | -| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 | -| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -| test_nr_of_bounds.cpp:48:5:48:19 | ... & ... | 256.0 | -| test_nr_of_bounds.cpp:48:5:48:19 | ... -= ... | 256.0 | -| test_nr_of_bounds.cpp:48:5:48:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:48:5:48:20 | (...) | 256.0 | -| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 | -| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 | -| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -| test_nr_of_bounds.cpp:49:5:49:19 | ... & ... | 512.0 | -| test_nr_of_bounds.cpp:49:5:49:19 | ... -= ... | 512.0 | -| test_nr_of_bounds.cpp:49:5:49:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:49:5:49:20 | (...) | 512.0 | -| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 | -| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 | -| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -| test_nr_of_bounds.cpp:50:5:50:19 | ... & ... | 1024.0 | -| test_nr_of_bounds.cpp:50:5:50:19 | ... -= ... | 1024.0 | -| test_nr_of_bounds.cpp:50:5:50:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:50:5:50:20 | (...) | 1024.0 | -| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 | -| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 | -| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -| test_nr_of_bounds.cpp:51:5:51:19 | ... & ... | 2048.0 | -| test_nr_of_bounds.cpp:51:5:51:19 | ... -= ... | 2048.0 | -| test_nr_of_bounds.cpp:51:5:51:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:51:5:51:20 | (...) | 2048.0 | -| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 | -| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 | -| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -| test_nr_of_bounds.cpp:52:5:52:19 | ... & ... | 4096.0 | -| test_nr_of_bounds.cpp:52:5:52:19 | ... -= ... | 4096.0 | -| test_nr_of_bounds.cpp:52:5:52:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:52:5:52:20 | (...) | 4096.0 | -| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 | -| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 | -| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -| test_nr_of_bounds.cpp:53:5:53:19 | ... & ... | 8192.0 | -| test_nr_of_bounds.cpp:53:5:53:19 | ... -= ... | 8192.0 | -| test_nr_of_bounds.cpp:53:5:53:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:53:5:53:20 | (...) | 8192.0 | -| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 | -| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 | -| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -| test_nr_of_bounds.cpp:54:5:54:19 | ... & ... | 16384.0 | -| test_nr_of_bounds.cpp:54:5:54:19 | ... -= ... | 16384.0 | -| test_nr_of_bounds.cpp:54:5:54:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:54:5:54:20 | (...) | 16384.0 | -| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 | -| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 | -| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -| test_nr_of_bounds.cpp:55:5:55:19 | ... & ... | 32768.0 | -| test_nr_of_bounds.cpp:55:5:55:19 | ... -= ... | 32768.0 | -| test_nr_of_bounds.cpp:55:5:55:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:55:5:55:20 | (...) | 32768.0 | -| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 | -| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 | -| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -| test_nr_of_bounds.cpp:56:5:56:19 | ... & ... | 65536.0 | -| test_nr_of_bounds.cpp:56:5:56:19 | ... -= ... | 65536.0 | -| test_nr_of_bounds.cpp:56:5:56:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:56:5:56:20 | (...) | 65536.0 | -| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 | -| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 | -| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -| test_nr_of_bounds.cpp:57:5:57:19 | ... & ... | 131072.0 | -| test_nr_of_bounds.cpp:57:5:57:19 | ... -= ... | 131072.0 | -| test_nr_of_bounds.cpp:57:5:57:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:57:5:57:20 | (...) | 131072.0 | -| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 | -| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 | -| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -| test_nr_of_bounds.cpp:58:5:58:19 | ... & ... | 262144.0 | -| test_nr_of_bounds.cpp:58:5:58:19 | ... -= ... | 262144.0 | -| test_nr_of_bounds.cpp:58:5:58:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:58:5:58:20 | (...) | 262144.0 | -| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 | -| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 | -| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -| test_nr_of_bounds.cpp:59:5:59:19 | ... & ... | 524288.0 | -| test_nr_of_bounds.cpp:59:5:59:19 | ... -= ... | 524288.0 | -| test_nr_of_bounds.cpp:59:5:59:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:59:5:59:20 | (...) | 524288.0 | -| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 | -| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 | -| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -| test_nr_of_bounds.cpp:60:5:60:19 | ... & ... | 1048576.0 | -| test_nr_of_bounds.cpp:60:5:60:19 | ... -= ... | 1048576.0 | -| test_nr_of_bounds.cpp:60:5:60:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:60:5:60:20 | (...) | 1048576.0 | -| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 | -| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 | -| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -| test_nr_of_bounds.cpp:61:5:61:19 | ... & ... | 2097152.0 | -| test_nr_of_bounds.cpp:61:5:61:19 | ... -= ... | 2097152.0 | -| test_nr_of_bounds.cpp:61:5:61:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:61:5:61:20 | (...) | 2097152.0 | -| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 | -| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 | -| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -| test_nr_of_bounds.cpp:62:5:62:19 | ... & ... | 4194304.0 | -| test_nr_of_bounds.cpp:62:5:62:19 | ... -= ... | 4194304.0 | -| test_nr_of_bounds.cpp:62:5:62:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:62:5:62:20 | (...) | 4194304.0 | -| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 | -| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 | -| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -| test_nr_of_bounds.cpp:63:5:63:19 | ... & ... | 8388608.0 | -| test_nr_of_bounds.cpp:63:5:63:19 | ... -= ... | 8388608.0 | -| test_nr_of_bounds.cpp:63:5:63:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:63:5:63:20 | (...) | 8388608.0 | -| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 | -| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 | -| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -| test_nr_of_bounds.cpp:64:5:64:19 | ... & ... | 1.6777216E7 | -| test_nr_of_bounds.cpp:64:5:64:19 | ... -= ... | 1.6777216E7 | -| test_nr_of_bounds.cpp:64:5:64:19 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:64:5:64:20 | (...) | 1.6777216E7 | -| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 | -| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 | -| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -| test_nr_of_bounds.cpp:65:5:65:20 | ... & ... | 3.3554432E7 | -| test_nr_of_bounds.cpp:65:5:65:20 | ... -= ... | 3.3554432E7 | -| test_nr_of_bounds.cpp:65:5:65:20 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:65:5:65:21 | (...) | 3.3554432E7 | -| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 | -| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 | -| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -| test_nr_of_bounds.cpp:66:5:66:20 | ... & ... | 6.7108864E7 | -| test_nr_of_bounds.cpp:66:5:66:20 | ... -= ... | 6.7108864E7 | -| test_nr_of_bounds.cpp:66:5:66:20 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:66:5:66:21 | (...) | 6.7108864E7 | -| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 | -| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 | -| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -| test_nr_of_bounds.cpp:67:5:67:20 | ... & ... | 1.34217728E8 | -| test_nr_of_bounds.cpp:67:5:67:20 | ... -= ... | 1.34217728E8 | -| test_nr_of_bounds.cpp:67:5:67:20 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:67:5:67:21 | (...) | 1.34217728E8 | -| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 | -| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 | -| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -| test_nr_of_bounds.cpp:68:5:68:20 | ... & ... | 2.68435456E8 | -| test_nr_of_bounds.cpp:68:5:68:20 | ... -= ... | 2.68435456E8 | -| test_nr_of_bounds.cpp:68:5:68:20 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:68:5:68:21 | (...) | 2.68435456E8 | -| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 | -| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 | -| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -| test_nr_of_bounds.cpp:69:5:69:20 | ... & ... | 5.36870912E8 | -| test_nr_of_bounds.cpp:69:5:69:20 | ... -= ... | 5.36870912E8 | -| test_nr_of_bounds.cpp:69:5:69:20 | ... == ... | 1.0 | -| test_nr_of_bounds.cpp:69:5:69:21 | (...) | 5.36870912E8 | -| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 | -| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 | -| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | -| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -| test_nr_of_bounds.cpp:72:12:72:12 | x | 1.073741824E9 | +| inline_assembly.c:9:20:9:20 | 0 | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:9:20:9:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:10:3:10:3 | y | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:10:3:10:7 | ... = ... | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:10:7:10:7 | 1 | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:10:7:10:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:12:3:12:8 | call to printf | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:12:29:12:29 | x | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:12:32:12:32 | y | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:16:25:16:25 | x | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:16:35:16:35 | y | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:21:3:21:8 | call to printf | 1.0 | -1.0 | -1.0 | +| inline_assembly.c:21:29:21:29 | x | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:21:32:21:32 | y | 1.0 | 1.0 | 1.0 | +| inline_assembly.c:23:10:23:10 | 0 | 1.0 | -1.0 | -1.0 | +| minmax.c:16:9:16:10 | 1 | 1.0 | -1.0 | -1.0 | +| minmax.c:16:16:16:17 | 2 | 1.0 | -1.0 | -1.0 | +| minmax.c:16:23:16:24 | 3 | 1.0 | -1.0 | -1.0 | +| minmax.c:18:2:18:7 | call to printf | 1.0 | -1.0 | -1.0 | +| minmax.c:18:37:18:37 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:18:40:18:40 | y | 1.0 | 1.0 | 1.0 | +| minmax.c:18:43:18:43 | z | 1.0 | 1.0 | 1.0 | +| minmax.c:20:2:20:2 | z | 1.0 | -1.0 | -1.0 | +| minmax.c:20:2:24:3 | ... = ... | 2.0 | 2.0 | 2.0 | +| minmax.c:20:6:24:3 | (statement expression) | 2.0 | 2.0 | 2.0 | +| minmax.c:21:10:21:11 | 0 | 1.0 | -1.0 | -1.0 | +| minmax.c:22:7:22:14 | ... != ... | 1.0 | -1.0 | -1.0 | +| minmax.c:22:8:22:8 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:22:14:22:14 | y | 1.0 | 1.0 | 1.0 | +| minmax.c:22:18:22:18 | t | 1.0 | -1.0 | -1.0 | +| minmax.c:22:18:22:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| minmax.c:22:22:22:22 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:23:3:23:3 | t | 2.0 | 2.0 | 2.0 | +| minmax.c:26:2:26:7 | call to printf | 1.0 | -1.0 | -1.0 | +| minmax.c:26:37:26:37 | x | 1.0 | 1.0 | 1.0 | +| minmax.c:26:40:26:40 | y | 1.0 | 1.0 | 1.0 | +| minmax.c:26:43:26:43 | z | 2.0 | 2.0 | 2.0 | +| test.c:6:14:6:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:8:5:8:9 | count | 1.0 | -1.0 | -1.0 | +| test.c:8:5:8:19 | ... = ... | 13.0 | 5.0 | 10.0 | +| test.c:8:13:8:17 | count | 13.0 | 4.0 | 10.0 | +| test.c:8:13:8:19 | ... + ... | 13.0 | 4.0 | 10.0 | +| test.c:8:19:8:19 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:10:10:10:14 | count | 13.0 | 4.0 | 10.0 | +| test.c:14:14:14:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:16:5:16:9 | count | 1.0 | -1.0 | -1.0 | +| test.c:16:5:16:26 | ... = ... | 13.0 | 1.0 | 1.0 | +| test.c:16:13:16:21 | (...) | 13.0 | 1.0 | 2.0 | +| test.c:16:13:16:26 | ... % ... | 13.0 | 1.0 | 1.0 | +| test.c:16:14:16:18 | count | 13.0 | 1.0 | 2.0 | +| test.c:16:14:16:20 | ... + ... | 13.0 | 1.0 | 2.0 | +| test.c:16:20:16:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:16:25:16:26 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:18:10:18:14 | count | 13.0 | 1.0 | 2.0 | +| test.c:22:14:22:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:24:5:24:9 | count | 13.0 | 1.0 | 2.0 | +| test.c:24:5:24:11 | ... ++ | 13.0 | 1.0 | 2.0 | +| test.c:25:5:25:9 | count | 1.0 | -1.0 | -1.0 | +| test.c:25:5:25:22 | ... = ... | 13.0 | 1.0 | 1.0 | +| test.c:25:13:25:17 | count | 13.0 | 1.0 | 2.0 | +| test.c:25:13:25:22 | ... % ... | 13.0 | 1.0 | 1.0 | +| test.c:25:21:25:22 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:27:10:27:14 | count | 13.0 | 1.0 | 2.0 | +| test.c:31:10:31:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:32:14:32:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:33:8:33:8 | i | 1.0 | -1.0 | -1.0 | +| test.c:33:8:33:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:33:12:33:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:33:15:33:15 | i | 13.0 | 3.0 | 3.0 | +| test.c:33:15:33:19 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:33:19:33:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:33:22:33:22 | i | 1.0 | -1.0 | -1.0 | +| test.c:33:22:33:28 | ... = ... | 13.0 | 3.0 | 2.0 | +| test.c:33:26:33:26 | i | 13.0 | 3.0 | 2.0 | +| test.c:33:26:33:28 | ... + ... | 13.0 | 3.0 | 2.0 | +| test.c:33:28:33:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:34:5:34:9 | total | 13.0 | 4.0 | 10.0 | +| test.c:34:5:34:14 | ... += ... | 13.0 | 8.0 | 18.0 | +| test.c:34:14:34:14 | i | 13.0 | 3.0 | 2.0 | +| test.c:36:10:36:14 | total | 13.0 | 4.0 | 10.0 | +| test.c:36:10:36:18 | ... + ... | 13.0 | 4.0 | 26.0 | +| test.c:36:18:36:18 | i | 13.0 | 1.0 | 3.0 | +| test.c:40:10:40:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:41:14:41:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:42:8:42:8 | i | 1.0 | -1.0 | -1.0 | +| test.c:42:8:42:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:42:12:42:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:42:15:42:15 | i | 13.0 | 3.0 | 3.0 | +| test.c:42:15:42:19 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:42:19:42:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:42:22:42:22 | i | 13.0 | 3.0 | 2.0 | +| test.c:42:22:42:24 | ... ++ | 13.0 | 3.0 | 2.0 | +| test.c:43:5:43:9 | total | 13.0 | 4.0 | 10.0 | +| test.c:43:5:43:14 | ... += ... | 13.0 | 8.0 | 18.0 | +| test.c:43:14:43:14 | i | 13.0 | 3.0 | 2.0 | +| test.c:45:10:45:14 | total | 13.0 | 4.0 | 10.0 | +| test.c:45:10:45:18 | ... + ... | 13.0 | 4.0 | 26.0 | +| test.c:45:18:45:18 | i | 13.0 | 1.0 | 3.0 | +| test.c:49:10:49:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:50:14:50:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:51:8:51:8 | i | 1.0 | -1.0 | -1.0 | +| test.c:51:8:51:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:51:12:51:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:51:15:51:15 | i | 13.0 | 3.0 | 3.0 | +| test.c:51:15:51:17 | ... + ... | 13.0 | 3.0 | 3.0 | +| test.c:51:15:51:21 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:51:17:51:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:51:21:51:21 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:51:24:51:24 | i | 1.0 | -1.0 | -1.0 | +| test.c:51:24:51:30 | ... = ... | 13.0 | 3.0 | 2.0 | +| test.c:51:28:51:28 | i | 13.0 | 3.0 | 2.0 | +| test.c:51:28:51:30 | ... + ... | 13.0 | 3.0 | 2.0 | +| test.c:51:30:51:30 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:52:5:52:9 | total | 13.0 | 4.0 | 10.0 | +| test.c:52:5:52:14 | ... += ... | 13.0 | 8.0 | 18.0 | +| test.c:52:14:52:14 | i | 13.0 | 3.0 | 2.0 | +| test.c:54:10:54:14 | total | 13.0 | 4.0 | 10.0 | +| test.c:54:10:54:18 | ... + ... | 13.0 | 4.0 | 26.0 | +| test.c:54:18:54:18 | i | 13.0 | 1.0 | 3.0 | +| test.c:58:7:58:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:58:7:58:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:58:11:58:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:59:9:59:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:59:9:59:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:59:13:59:13 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:60:14:60:14 | i | 1.0 | 1.0 | 1.0 | +| test.c:63:10:63:10 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:67:7:67:11 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:67:7:67:15 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:67:7:67:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:67:8:67:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:67:15:67:15 | y | 1.0 | 1.0 | 1.0 | +| test.c:67:20:67:20 | y | 1.0 | 1.0 | 1.0 | +| test.c:67:20:67:25 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:67:24:67:25 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:68:9:68:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:68:9:68:15 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:68:13:68:13 | y | 1.0 | 1.0 | 1.0 | +| test.c:68:13:68:15 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:68:15:68:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:69:14:69:14 | x | 1.0 | 1.0 | 1.0 | +| test.c:72:10:72:10 | y | 1.0 | 3.0 | 3.0 | +| test.c:76:7:76:7 | y | 1.0 | 1.0 | 1.0 | +| test.c:76:7:76:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:76:12:76:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:77:9:77:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:77:9:77:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:77:13:77:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:78:14:78:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:81:9:81:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:81:9:81:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:81:13:81:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:82:14:82:14 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:85:10:85:10 | x | 1.0 | 1.0 | 1.0 | +| test.c:89:7:89:7 | y | 1.0 | 1.0 | 1.0 | +| test.c:89:7:89:11 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:89:11:89:11 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:90:9:90:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:90:9:90:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:90:13:90:13 | y | 1.0 | 1.0 | 1.0 | +| test.c:91:14:91:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:93:12:93:12 | x | 1.0 | 1.0 | 1.0 | +| test.c:95:10:95:10 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:100:3:100:3 | c | 1.0 | -1.0 | -1.0 | +| test.c:100:3:100:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:100:7:100:8 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:101:7:101:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:101:7:101:7 | c | 1.0 | 1.0 | 1.0 | +| test.c:101:7:101:15 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:101:12:101:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:102:5:102:8 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:102:5:102:15 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:102:12:102:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:102:12:102:15 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:104:7:104:7 | (int)... | 2.0 | 2.0 | 2.0 | +| test.c:104:7:104:7 | c | 2.0 | 2.0 | 2.0 | +| test.c:104:7:104:14 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:104:12:104:14 | 58 | 1.0 | -1.0 | -1.0 | +| test.c:105:5:105:5 | c | 1.0 | -1.0 | -1.0 | +| test.c:105:5:105:10 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:105:9:105:10 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:106:9:106:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:106:9:106:9 | c | 1.0 | 1.0 | 1.0 | +| test.c:106:9:106:17 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:106:14:106:17 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:107:7:107:10 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:107:7:107:17 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:107:14:107:17 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:107:14:107:17 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:109:9:109:9 | (int)... | 2.0 | 2.0 | 2.0 | +| test.c:109:9:109:9 | c | 2.0 | 2.0 | 2.0 | +| test.c:109:9:109:16 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:109:14:109:16 | 44 | 1.0 | -1.0 | -1.0 | +| test.c:110:14:110:14 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:112:10:112:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:118:24:118:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:118:24:118:24 | (size_type)... | 1.0 | 1.0 | 1.0 | +| test.c:119:10:119:10 | n | 1.0 | -1.0 | -1.0 | +| test.c:119:10:119:12 | ... ++ | 1.0 | 1.0 | 1.0 | +| test.c:123:22:123:22 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:123:22:123:22 | (size_type)... | 1.0 | 1.0 | 1.0 | +| test.c:124:11:124:15 | Start | 13.0 | 1.0 | 2.0 | +| test.c:124:11:124:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:124:20:124:32 | call to test12_helper | 1.0 | -1.0 | -1.0 | +| test.c:124:20:124:36 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:124:36:124:36 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:124:36:124:36 | (unsigned long long)... | 1.0 | 1.0 | 1.0 | +| test.c:126:31:126:43 | call to test12_helper | 1.0 | -1.0 | -1.0 | +| test.c:127:6:127:10 | Start | 13.0 | 1.0 | 2.0 | +| test.c:127:6:127:24 | ... += ... | 13.0 | 1.0 | 2.0 | +| test.c:127:15:127:20 | Length | 1.0 | 1.0 | 1.0 | +| test.c:127:15:127:24 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:127:24:127:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:127:24:127:24 | (unsigned long long)... | 1.0 | 1.0 | 1.0 | +| test.c:130:11:130:11 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:135:22:135:22 | (unsigned char)... | 1.0 | 1.0 | 1.0 | +| test.c:135:22:135:22 | c | 1.0 | 1.0 | 1.0 | +| test.c:136:20:136:20 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:136:20:136:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:137:20:137:20 | x | 1.0 | 1.0 | 1.0 | +| test.c:137:20:137:22 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:137:22:137:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:137:22:137:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:138:11:138:11 | i | 1.0 | 1.0 | 1.0 | +| test.c:138:11:138:13 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:138:13:138:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:139:10:139:41 | (double)... | 1.0 | 1.0 | 1.0 | +| test.c:139:10:139:41 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:18:139:41 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:19 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:19 | c | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:23 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:19:139:28 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:19:139:32 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:19:139:36 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:19:139:40 | ... + ... | 1.0 | 1.0 | 2.0 | +| test.c:139:23:139:23 | i | 1.0 | 1.0 | 1.0 | +| test.c:139:27:139:28 | (int)... | 1.0 | 1.0 | 2.0 | +| test.c:139:27:139:28 | uc | 1.0 | 1.0 | 2.0 | +| test.c:139:32:139:32 | x | 1.0 | 1.0 | 1.0 | +| test.c:139:36:139:36 | y | 1.0 | 1.0 | 1.0 | +| test.c:139:40:139:40 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:139:40:139:40 | z | 1.0 | 1.0 | 1.0 | +| test.c:144:12:144:23 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:144:17:144:23 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:144:23:144:23 | x | 1.0 | 1.0 | 1.0 | +| test.c:145:12:145:32 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:145:17:145:32 | (unsigned char)... | 1.0 | 1.0 | 1.0 | +| test.c:145:32:145:32 | x | 1.0 | 1.0 | 1.0 | +| test.c:146:12:146:33 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:146:17:146:33 | (unsigned short)... | 1.0 | 1.0 | 1.0 | +| test.c:146:33:146:33 | x | 1.0 | 1.0 | 1.0 | +| test.c:147:12:147:31 | (int)... | 1.0 | 1.0 | 2.0 | +| test.c:147:17:147:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:147:31:147:31 | x | 1.0 | 1.0 | 1.0 | +| test.c:148:13:148:13 | (char)... | 1.0 | 1.0 | 1.0 | +| test.c:148:13:148:13 | x | 1.0 | 1.0 | 1.0 | +| test.c:149:23:149:23 | (unsigned short)... | 1.0 | 1.0 | 1.0 | +| test.c:149:23:149:23 | x | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:11 | x0 | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:16 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:21 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:26 | ... + ... | 1.0 | 2.0 | 1.0 | +| test.c:150:10:150:31 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:10:150:36 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:150:15:150:16 | x1 | 1.0 | 1.0 | 1.0 | +| test.c:150:20:150:21 | x2 | 1.0 | 1.0 | 1.0 | +| test.c:150:25:150:26 | x3 | 1.0 | 2.0 | 1.0 | +| test.c:150:30:150:31 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:150:30:150:31 | c0 | 1.0 | 1.0 | 1.0 | +| test.c:150:35:150:36 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:150:35:150:36 | s0 | 1.0 | 1.0 | 1.0 | +| test.c:154:10:154:31 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:154:10:154:40 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:154:11:154:11 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:11:154:15 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:154:11:154:30 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:154:15:154:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:154:15:154:15 | (long long)... | 1.0 | 1.0 | 1.0 | +| test.c:154:20:154:20 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:20:154:30 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:154:25:154:30 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:154:25:154:30 | (long long)... | 1.0 | 1.0 | 1.0 | +| test.c:154:30:154:30 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:35:154:35 | x | 1.0 | 1.0 | 1.0 | +| test.c:154:39:154:40 | (long long)... | 1.0 | 1.0 | 1.0 | +| test.c:154:39:154:40 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:154:40:154:40 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:159:14:159:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:161:7:161:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:161:7:161:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:161:7:161:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:161:12:161:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:161:17:161:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:161:17:161:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:161:22:161:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:162:13:162:14 | + ... | 1.0 | 1.0 | 1.0 | +| test.c:162:14:162:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:163:13:163:14 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:163:14:163:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:164:5:164:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:164:5:164:16 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:164:14:164:14 | b | 1.0 | 1.0 | 1.0 | +| test.c:164:14:164:16 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:164:16:164:16 | c | 1.0 | 1.0 | 1.0 | +| test.c:166:7:166:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:166:7:166:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:166:7:166:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:166:12:166:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:166:17:166:17 | a | 2.0 | 3.0 | 3.0 | +| test.c:166:17:166:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:166:22:166:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:167:13:167:14 | + ... | 2.0 | 3.0 | 2.0 | +| test.c:167:14:167:14 | a | 2.0 | 3.0 | 2.0 | +| test.c:168:13:168:14 | - ... | 2.0 | 2.0 | 3.0 | +| test.c:168:14:168:14 | a | 2.0 | 3.0 | 2.0 | +| test.c:169:5:169:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:169:5:169:16 | ... += ... | 8.0 | 10.0 | 10.0 | +| test.c:169:14:169:14 | b | 2.0 | 3.0 | 2.0 | +| test.c:169:14:169:16 | ... + ... | 4.0 | 5.0 | 5.0 | +| test.c:169:16:169:16 | c | 2.0 | 2.0 | 3.0 | +| test.c:171:7:171:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:171:7:171:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:171:7:171:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:171:8:171:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:171:13:171:13 | a | 3.0 | 4.0 | 4.0 | +| test.c:171:18:171:18 | a | 3.0 | 4.0 | 4.0 | +| test.c:171:18:171:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:171:23:171:24 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:172:13:172:14 | + ... | 3.0 | 4.0 | 3.0 | +| test.c:172:14:172:14 | a | 3.0 | 4.0 | 3.0 | +| test.c:173:13:173:14 | - ... | 3.0 | 3.0 | 4.0 | +| test.c:173:14:173:14 | a | 3.0 | 4.0 | 3.0 | +| test.c:174:5:174:9 | total | 10.0 | 11.0 | 11.0 | +| test.c:174:5:174:16 | ... += ... | 90.0 | 47.0 | 47.0 | +| test.c:174:14:174:14 | b | 3.0 | 4.0 | 3.0 | +| test.c:174:14:174:16 | ... + ... | 9.0 | 10.0 | 10.0 | +| test.c:174:16:174:16 | c | 3.0 | 3.0 | 4.0 | +| test.c:176:7:176:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:176:7:176:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:176:7:176:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:176:8:176:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:176:13:176:13 | a | 4.0 | 5.0 | 5.0 | +| test.c:176:18:176:18 | a | 4.0 | 4.0 | 5.0 | +| test.c:176:18:176:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:176:23:176:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:177:13:177:14 | + ... | 4.0 | 4.0 | 3.0 | +| test.c:177:14:177:14 | a | 4.0 | 4.0 | 3.0 | +| test.c:178:13:178:14 | - ... | 4.0 | 3.0 | 4.0 | +| test.c:178:14:178:14 | a | 4.0 | 4.0 | 3.0 | +| test.c:179:5:179:9 | total | 100.0 | 47.0 | 47.0 | +| test.c:179:5:179:16 | ... += ... | 1600.0 | 80.0 | 80.0 | +| test.c:179:14:179:14 | b | 4.0 | 4.0 | 3.0 | +| test.c:179:14:179:16 | ... + ... | 16.0 | 10.0 | 10.0 | +| test.c:179:16:179:16 | c | 4.0 | 3.0 | 4.0 | +| test.c:181:7:181:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:181:7:181:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:181:7:181:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:181:8:181:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:181:13:181:13 | a | 5.0 | 6.0 | 6.0 | +| test.c:181:18:181:18 | a | 5.0 | 5.0 | 6.0 | +| test.c:181:18:181:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:181:23:181:23 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:182:13:182:14 | + ... | 5.0 | 5.0 | 3.0 | +| test.c:182:14:182:14 | a | 5.0 | 5.0 | 3.0 | +| test.c:183:13:183:14 | - ... | 5.0 | 3.0 | 5.0 | +| test.c:183:14:183:14 | a | 5.0 | 5.0 | 3.0 | +| test.c:184:5:184:9 | total | 1700.0 | 80.0 | 80.0 | +| test.c:184:5:184:16 | ... += ... | 42500.0 | 111.0 | 111.0 | +| test.c:184:14:184:14 | b | 5.0 | 5.0 | 3.0 | +| test.c:184:14:184:16 | ... + ... | 25.0 | 13.0 | 13.0 | +| test.c:184:16:184:16 | c | 5.0 | 3.0 | 5.0 | +| test.c:186:7:186:8 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:186:7:186:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:186:7:186:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:186:8:186:8 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:186:13:186:13 | a | 6.0 | 7.0 | 7.0 | +| test.c:186:18:186:18 | a | 6.0 | 6.0 | 7.0 | +| test.c:186:18:186:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:186:23:186:24 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:186:24:186:24 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:187:13:187:14 | + ... | 6.0 | 6.0 | 2.0 | +| test.c:187:14:187:14 | a | 6.0 | 6.0 | 2.0 | +| test.c:188:13:188:14 | - ... | 6.0 | 2.0 | 6.0 | +| test.c:188:14:188:14 | a | 6.0 | 6.0 | 2.0 | +| test.c:189:5:189:9 | total | 44200.0 | 111.0 | 111.0 | +| test.c:189:5:189:16 | ... += ... | 1591200.0 | 137.0 | 137.0 | +| test.c:189:14:189:14 | b | 6.0 | 6.0 | 2.0 | +| test.c:189:14:189:16 | ... + ... | 36.0 | 12.0 | 12.0 | +| test.c:189:16:189:16 | c | 6.0 | 2.0 | 6.0 | +| test.c:192:10:192:14 | total | 1635400.0 | 137.0 | 137.0 | +| test.c:198:14:198:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:200:7:200:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:200:12:200:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:200:17:200:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:200:17:200:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:22:200:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:200:28:200:28 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:200:28:200:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:33:200:33 | b | 1.0 | 1.0 | 1.0 | +| test.c:200:38:200:38 | b | 1.0 | 1.0 | 1.0 | +| test.c:200:38:200:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:200:43:200:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:201:13:201:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:201:13:201:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:201:15:201:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:202:5:202:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:202:5:202:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:202:14:202:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:204:7:204:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:204:7:204:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:204:12:204:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:204:17:204:17 | a | 2.0 | 2.0 | 3.0 | +| test.c:204:17:204:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:22:204:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:204:28:204:28 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:204:28:204:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:33:204:33 | b | 3.0 | 3.0 | 3.0 | +| test.c:204:38:204:38 | b | 3.0 | 3.0 | 3.0 | +| test.c:204:38:204:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:204:43:204:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:205:13:205:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:205:13:205:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:205:15:205:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:206:5:206:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:206:5:206:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:206:14:206:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:208:7:208:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:208:7:208:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:208:12:208:12 | a | 3.0 | 3.0 | 3.0 | +| test.c:208:17:208:17 | a | 3.0 | 2.0 | 3.0 | +| test.c:208:17:208:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:22:208:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:208:28:208:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:208:28:208:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:29:208:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:208:35:208:35 | b | 7.0 | 4.0 | 4.0 | +| test.c:208:40:208:40 | b | 7.0 | 4.0 | 4.0 | +| test.c:208:40:208:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:208:45:208:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:209:13:209:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:209:13:209:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:209:15:209:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:210:5:210:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:210:5:210:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:210:14:210:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:212:7:212:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:212:7:212:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:212:12:212:12 | a | 4.0 | 3.0 | 3.0 | +| test.c:212:17:212:17 | a | 4.0 | 2.0 | 3.0 | +| test.c:212:17:212:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:22:212:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:212:28:212:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:212:28:212:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:29:212:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:212:35:212:35 | b | 15.0 | 5.0 | 5.0 | +| test.c:212:40:212:40 | b | 15.0 | 4.0 | 5.0 | +| test.c:212:40:212:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:212:45:212:45 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:213:13:213:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:213:13:213:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:213:15:213:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:214:5:214:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:214:5:214:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:214:14:214:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:216:7:216:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:216:7:216:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:216:12:216:12 | a | 5.0 | 3.0 | 3.0 | +| test.c:216:17:216:17 | a | 5.0 | 2.0 | 3.0 | +| test.c:216:17:216:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:22:216:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:216:28:216:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:216:28:216:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:29:216:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:216:35:216:35 | b | 31.0 | 6.0 | 6.0 | +| test.c:216:40:216:40 | b | 31.0 | 5.0 | 6.0 | +| test.c:216:40:216:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:216:45:216:46 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:216:46:216:46 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:217:13:217:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:217:13:217:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:217:15:217:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:218:5:218:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:218:5:218:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:218:14:218:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:221:10:221:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:226:14:226:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:228:7:228:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:228:12:228:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:228:17:228:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:228:17:228:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:22:228:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:228:28:228:28 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:228:28:228:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:33:228:33 | b | 1.0 | 1.0 | 1.0 | +| test.c:228:38:228:38 | b | 1.0 | 1.0 | 1.0 | +| test.c:228:38:228:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:228:43:228:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:229:13:229:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:229:13:229:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:229:15:229:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:230:5:230:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:230:5:230:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:230:14:230:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:232:7:232:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:232:7:232:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:232:12:232:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:232:17:232:17 | a | 2.0 | 2.0 | 3.0 | +| test.c:232:17:232:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:22:232:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:232:28:232:28 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:232:28:232:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:33:232:33 | b | 3.0 | 3.0 | 3.0 | +| test.c:232:38:232:38 | b | 3.0 | 3.0 | 3.0 | +| test.c:232:38:232:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:232:43:232:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:233:13:233:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:233:13:233:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:233:15:233:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:234:5:234:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:234:5:234:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:234:14:234:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:236:7:236:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:236:7:236:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:236:12:236:12 | a | 3.0 | 3.0 | 3.0 | +| test.c:236:17:236:17 | a | 3.0 | 2.0 | 3.0 | +| test.c:236:17:236:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:22:236:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:236:28:236:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:236:28:236:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:29:236:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:236:35:236:35 | b | 7.0 | 4.0 | 4.0 | +| test.c:236:40:236:40 | b | 7.0 | 4.0 | 4.0 | +| test.c:236:40:236:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:236:45:236:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:237:13:237:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:237:13:237:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:237:15:237:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:238:5:238:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:238:5:238:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:238:14:238:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:240:7:240:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:240:7:240:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:240:12:240:12 | a | 4.0 | 3.0 | 3.0 | +| test.c:240:17:240:17 | a | 4.0 | 2.0 | 3.0 | +| test.c:240:17:240:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:22:240:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:240:28:240:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:240:28:240:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:29:240:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:240:35:240:35 | b | 15.0 | 5.0 | 5.0 | +| test.c:240:40:240:40 | b | 15.0 | 4.0 | 5.0 | +| test.c:240:40:240:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:240:45:240:45 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:241:13:241:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:241:13:241:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:241:15:241:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:242:5:242:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:242:5:242:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:242:14:242:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:244:7:244:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:244:7:244:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:244:12:244:12 | a | 5.0 | 3.0 | 3.0 | +| test.c:244:17:244:17 | a | 5.0 | 2.0 | 3.0 | +| test.c:244:17:244:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:22:244:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:244:28:244:30 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:244:28:244:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:29:244:30 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:244:35:244:35 | b | 31.0 | 6.0 | 6.0 | +| test.c:244:40:244:40 | b | 31.0 | 5.0 | 6.0 | +| test.c:244:40:244:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:244:45:244:46 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:244:46:244:46 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:245:13:245:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:245:13:245:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:245:15:245:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:246:5:246:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:246:5:246:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:246:14:246:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:249:10:249:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:254:14:254:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:256:7:256:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:256:7:256:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:256:8:256:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:256:14:256:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:256:19:256:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:256:19:256:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:24:256:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:256:30:256:30 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:256:30:256:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:35:256:35 | b | 1.0 | 1.0 | 1.0 | +| test.c:256:40:256:40 | b | 1.0 | 1.0 | 1.0 | +| test.c:256:40:256:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:256:45:256:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:257:13:257:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:257:13:257:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:257:15:257:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:258:5:258:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:258:5:258:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:258:14:258:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:260:7:260:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:260:7:260:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:7:260:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:260:7:260:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:260:7:260:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:260:8:260:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:260:14:260:14 | a | 2.0 | 3.0 | 3.0 | +| test.c:260:19:260:19 | a | 2.0 | 2.0 | 3.0 | +| test.c:260:19:260:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:24:260:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:260:30:260:30 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:260:30:260:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:35:260:35 | b | 3.0 | 3.0 | 3.0 | +| test.c:260:40:260:40 | b | 3.0 | 3.0 | 3.0 | +| test.c:260:40:260:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:260:45:260:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:261:13:261:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:261:13:261:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:261:15:261:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:262:5:262:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:262:5:262:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:262:14:262:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:264:7:264:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:264:7:264:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:7:264:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:264:7:264:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:264:7:264:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:264:8:264:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:264:14:264:14 | a | 3.0 | 3.0 | 3.0 | +| test.c:264:19:264:19 | a | 3.0 | 2.0 | 3.0 | +| test.c:264:19:264:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:24:264:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:264:30:264:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:264:30:264:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:31:264:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:264:37:264:37 | b | 7.0 | 4.0 | 4.0 | +| test.c:264:42:264:42 | b | 7.0 | 4.0 | 4.0 | +| test.c:264:42:264:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:264:47:264:48 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:265:13:265:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:265:13:265:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:265:15:265:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:266:5:266:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:266:5:266:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:266:14:266:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:268:7:268:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:268:7:268:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:7:268:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:268:7:268:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:268:7:268:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:268:8:268:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:268:14:268:14 | a | 4.0 | 3.0 | 3.0 | +| test.c:268:19:268:19 | a | 4.0 | 2.0 | 3.0 | +| test.c:268:19:268:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:24:268:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:268:30:268:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:268:30:268:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:31:268:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:268:37:268:37 | b | 15.0 | 5.0 | 5.0 | +| test.c:268:42:268:42 | b | 15.0 | 4.0 | 5.0 | +| test.c:268:42:268:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:268:47:268:47 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:269:13:269:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:269:13:269:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:269:15:269:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:270:5:270:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:270:5:270:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:270:14:270:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:272:7:272:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:272:7:272:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:7:272:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:272:7:272:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:272:7:272:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:272:8:272:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:272:14:272:14 | a | 5.0 | 3.0 | 3.0 | +| test.c:272:19:272:19 | a | 5.0 | 2.0 | 3.0 | +| test.c:272:19:272:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:24:272:25 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:272:30:272:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:272:30:272:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:31:272:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:272:37:272:37 | b | 31.0 | 6.0 | 6.0 | +| test.c:272:42:272:42 | b | 31.0 | 5.0 | 6.0 | +| test.c:272:42:272:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:272:47:272:48 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:272:48:272:48 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:273:13:273:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:273:13:273:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:273:15:273:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:274:5:274:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:274:5:274:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:274:14:274:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:277:10:277:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:282:14:282:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:284:7:284:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:34 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:284:7:284:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:284:8:284:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:284:14:284:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:284:19:284:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:284:19:284:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:24:284:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:284:29:284:29 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:284:29:284:34 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:34:284:34 | b | 1.0 | 1.0 | 1.0 | +| test.c:284:39:284:39 | b | 1.0 | 1.0 | 1.0 | +| test.c:284:39:284:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:284:44:284:45 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:285:13:285:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:285:13:285:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:285:15:285:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:286:5:286:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:286:5:286:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:286:14:286:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:288:7:288:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:288:7:288:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:7:288:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:288:7:288:34 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:288:7:288:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:288:8:288:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:288:14:288:14 | a | 2.0 | 3.0 | 3.0 | +| test.c:288:19:288:19 | a | 2.0 | 2.0 | 3.0 | +| test.c:288:19:288:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:24:288:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:288:29:288:29 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:288:29:288:34 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:34:288:34 | b | 3.0 | 3.0 | 3.0 | +| test.c:288:39:288:39 | b | 3.0 | 3.0 | 3.0 | +| test.c:288:39:288:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:288:44:288:45 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:289:13:289:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:289:13:289:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:289:15:289:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:290:5:290:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:290:5:290:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:290:14:290:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:292:7:292:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:292:7:292:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:7:292:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:292:7:292:36 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:292:7:292:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:292:8:292:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:292:14:292:14 | a | 3.0 | 3.0 | 3.0 | +| test.c:292:19:292:19 | a | 3.0 | 2.0 | 3.0 | +| test.c:292:19:292:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:24:292:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:292:29:292:31 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:292:29:292:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:30:292:31 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:292:36:292:36 | b | 7.0 | 4.0 | 4.0 | +| test.c:292:41:292:41 | b | 7.0 | 4.0 | 4.0 | +| test.c:292:41:292:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:292:46:292:47 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:293:13:293:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:293:13:293:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:293:15:293:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:294:5:294:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:294:5:294:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:294:14:294:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:296:7:296:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:296:7:296:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:7:296:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:296:7:296:36 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:296:7:296:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:296:8:296:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:296:14:296:14 | a | 4.0 | 3.0 | 3.0 | +| test.c:296:19:296:19 | a | 4.0 | 2.0 | 3.0 | +| test.c:296:19:296:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:24:296:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:296:29:296:31 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:296:29:296:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:30:296:31 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:296:36:296:36 | b | 15.0 | 5.0 | 5.0 | +| test.c:296:41:296:41 | b | 15.0 | 4.0 | 5.0 | +| test.c:296:41:296:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:296:46:296:46 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:297:13:297:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:297:13:297:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:297:15:297:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:298:5:298:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:298:5:298:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:298:14:298:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:300:7:300:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:300:7:300:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:7:300:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:300:7:300:36 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:300:7:300:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:300:8:300:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:300:14:300:14 | a | 5.0 | 3.0 | 3.0 | +| test.c:300:19:300:19 | a | 5.0 | 2.0 | 3.0 | +| test.c:300:19:300:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:24:300:24 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:300:29:300:31 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:300:29:300:36 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:30:300:31 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:300:36:300:36 | b | 31.0 | 6.0 | 6.0 | +| test.c:300:41:300:41 | b | 31.0 | 5.0 | 6.0 | +| test.c:300:41:300:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:300:46:300:47 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:300:47:300:47 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:301:13:301:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:301:13:301:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:301:15:301:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:302:5:302:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:302:5:302:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:302:14:302:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:305:10:305:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:310:14:310:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:312:7:312:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:312:7:312:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:312:8:312:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:312:14:312:14 | a | 1.0 | 1.0 | 1.0 | +| test.c:312:19:312:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:312:19:312:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:24:312:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:312:25:312:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:312:30:312:30 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:312:30:312:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:35:312:35 | b | 1.0 | 1.0 | 1.0 | +| test.c:312:40:312:40 | b | 1.0 | 1.0 | 1.0 | +| test.c:312:40:312:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:312:45:312:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:313:13:313:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:313:13:313:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:313:15:313:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:314:5:314:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:314:5:314:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:314:14:314:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:316:7:316:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:316:7:316:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:7:316:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:316:7:316:35 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:316:7:316:46 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:316:8:316:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:316:14:316:14 | a | 2.0 | 3.0 | 3.0 | +| test.c:316:19:316:19 | a | 2.0 | 2.0 | 3.0 | +| test.c:316:19:316:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:24:316:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:316:25:316:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:316:30:316:30 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:316:30:316:35 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:35:316:35 | b | 3.0 | 3.0 | 3.0 | +| test.c:316:40:316:40 | b | 3.0 | 3.0 | 3.0 | +| test.c:316:40:316:46 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:316:45:316:46 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:317:13:317:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:317:13:317:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:317:15:317:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:318:5:318:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:318:5:318:14 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:318:14:318:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:320:7:320:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:320:7:320:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:7:320:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:320:7:320:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:320:7:320:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:320:8:320:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:320:14:320:14 | a | 3.0 | 3.0 | 3.0 | +| test.c:320:19:320:19 | a | 3.0 | 2.0 | 3.0 | +| test.c:320:19:320:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:24:320:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:320:25:320:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:320:30:320:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:320:30:320:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:31:320:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:320:37:320:37 | b | 7.0 | 4.0 | 4.0 | +| test.c:320:42:320:42 | b | 7.0 | 4.0 | 4.0 | +| test.c:320:42:320:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:320:47:320:48 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:321:13:321:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:321:13:321:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:321:15:321:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:322:5:322:9 | total | 4.0 | 2.0 | 2.0 | +| test.c:322:5:322:14 | ... += ... | 4.0 | 2.0 | 2.0 | +| test.c:322:14:322:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:324:7:324:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:324:7:324:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:7:324:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:324:7:324:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:324:7:324:47 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:324:8:324:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:324:14:324:14 | a | 4.0 | 3.0 | 3.0 | +| test.c:324:19:324:19 | a | 4.0 | 2.0 | 3.0 | +| test.c:324:19:324:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:24:324:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:324:25:324:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:324:30:324:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:324:30:324:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:31:324:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:324:37:324:37 | b | 15.0 | 5.0 | 5.0 | +| test.c:324:42:324:42 | b | 15.0 | 4.0 | 5.0 | +| test.c:324:42:324:47 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:324:47:324:47 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:325:13:325:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:325:13:325:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:325:15:325:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:326:5:326:9 | total | 8.0 | 2.0 | 2.0 | +| test.c:326:5:326:14 | ... += ... | 8.0 | 2.0 | 2.0 | +| test.c:326:14:326:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:328:7:328:9 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:7:328:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:7:328:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:328:7:328:37 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:328:7:328:48 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:328:8:328:9 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:328:14:328:14 | a | 5.0 | 3.0 | 3.0 | +| test.c:328:19:328:19 | a | 5.0 | 2.0 | 3.0 | +| test.c:328:19:328:25 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:24:328:25 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:25:328:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:328:30:328:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:30:328:37 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:31:328:32 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:328:37:328:37 | b | 31.0 | 6.0 | 6.0 | +| test.c:328:42:328:42 | b | 31.0 | 5.0 | 6.0 | +| test.c:328:42:328:48 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:328:47:328:48 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:328:48:328:48 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:329:13:329:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:329:13:329:15 | ... * ... | 1.0 | -1.0 | -1.0 | +| test.c:329:15:329:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:330:5:330:9 | total | 16.0 | 2.0 | 2.0 | +| test.c:330:5:330:14 | ... += ... | 16.0 | 2.0 | 2.0 | +| test.c:330:14:330:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:333:10:333:14 | total | 32.0 | 2.0 | 2.0 | +| test.c:339:28:339:43 | 9007199254740992 | 1.0 | -1.0 | -1.0 | +| test.c:339:28:339:47 | (unsigned long long)... | 1.0 | 1.0 | 1.0 | +| test.c:339:28:339:47 | ... - ... | 1.0 | 1.0 | 1.0 | +| test.c:339:47:339:47 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:339:47:339:47 | (long)... | 1.0 | 1.0 | 1.0 | +| test.c:341:32:341:34 | odd | 1.0 | 1.0 | 1.0 | +| test.c:341:32:341:39 | ... >> ... | 1.0 | 1.0 | 1.0 | +| test.c:341:39:341:39 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:343:10:343:16 | shifted | 1.0 | 1.0 | 1.0 | +| test.c:348:22:348:32 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:348:22:348:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:348:22:348:44 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:348:23:348:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:348:23:348:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:348:23:348:27 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:348:23:348:31 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:348:27:348:27 | e | 1.0 | 1.0 | 1.0 | +| test.c:348:31:348:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:348:31:348:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:348:36:348:36 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:348:36:348:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:348:40:348:40 | e | 1.0 | 1.0 | 1.0 | +| test.c:348:44:348:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:348:44:348:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:20:349:30 | (...) | 2.0 | 2.0 | 1.0 | +| test.c:349:20:349:35 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:349:20:349:43 | (signed int)... | 2.0 | 1.0 | 1.0 | +| test.c:349:20:349:43 | ... ? ... : ... | 2.0 | 1.0 | 1.0 | +| test.c:349:21:349:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:349:21:349:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:21:349:25 | ... * ... | 2.0 | 1.0 | 2.0 | +| test.c:349:21:349:29 | ... + ... | 2.0 | 1.0 | 2.0 | +| test.c:349:25:349:25 | e | 2.0 | 1.0 | 2.0 | +| test.c:349:29:349:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:349:29:349:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:35:349:35 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:349:35:349:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:349:39:349:39 | e | 2.0 | 1.0 | 1.0 | +| test.c:349:43:349:43 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:349:43:349:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:22:350:32 | (...) | 4.0 | 1.0 | 1.0 | +| test.c:350:22:350:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:350:22:350:44 | ... ? ... : ... | 4.0 | 1.0 | 1.0 | +| test.c:350:23:350:23 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:350:23:350:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:23:350:27 | ... * ... | 4.0 | 1.0 | 2.0 | +| test.c:350:23:350:31 | ... + ... | 4.0 | 1.0 | 1.0 | +| test.c:350:27:350:27 | e | 4.0 | 1.0 | 2.0 | +| test.c:350:31:350:31 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:350:31:350:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:36:350:36 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:350:36:350:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:350:40:350:40 | e | 4.0 | 1.0 | 1.0 | +| test.c:350:44:350:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:350:44:350:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:22:351:32 | (...) | 8.0 | 2.0 | 2.0 | +| test.c:351:22:351:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:351:22:351:44 | ... ? ... : ... | 8.0 | 1.0 | 2.0 | +| test.c:351:23:351:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:351:23:351:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:23:351:27 | ... * ... | 8.0 | 1.0 | 2.0 | +| test.c:351:23:351:31 | ... + ... | 8.0 | 1.0 | 2.0 | +| test.c:351:27:351:27 | e | 8.0 | 1.0 | 2.0 | +| test.c:351:31:351:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:351:31:351:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:36:351:36 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:351:36:351:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:351:40:351:40 | e | 8.0 | 1.0 | 2.0 | +| test.c:351:44:351:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:351:44:351:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:22:352:32 | (...) | 16.0 | 2.0 | 2.0 | +| test.c:352:22:352:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:352:22:352:45 | ... ? ... : ... | 16.0 | 1.0 | 2.0 | +| test.c:352:23:352:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:352:23:352:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:23:352:27 | ... * ... | 16.0 | 1.0 | 3.0 | +| test.c:352:23:352:31 | ... + ... | 16.0 | 1.0 | 3.0 | +| test.c:352:27:352:27 | e | 16.0 | 1.0 | 3.0 | +| test.c:352:31:352:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:352:31:352:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:36:352:37 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:352:36:352:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:352:41:352:41 | e | 16.0 | 1.0 | 2.0 | +| test.c:352:45:352:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:352:45:352:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:354:10:354:12 | bi1 | 1.0 | 1.0 | 1.0 | +| test.c:354:10:354:18 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:354:10:354:24 | ... + ... | 8.0 | 1.0 | 1.0 | +| test.c:354:10:354:30 | ... + ... | 64.0 | 1.0 | 2.0 | +| test.c:354:10:354:36 | ... + ... | 1024.0 | 1.0 | 2.0 | +| test.c:354:16:354:18 | (unsigned int)... | 2.0 | 1.0 | 1.0 | +| test.c:354:16:354:18 | bi2 | 2.0 | 1.0 | 1.0 | +| test.c:354:22:354:24 | bi3 | 4.0 | 1.0 | 1.0 | +| test.c:354:28:354:30 | bi4 | 8.0 | 1.0 | 2.0 | +| test.c:354:34:354:36 | bi5 | 16.0 | 1.0 | 2.0 | +| test.c:358:13:358:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:359:7:359:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:359:7:359:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:359:11:359:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:360:12:360:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:360:13:360:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:363:10:363:10 | i | 13.0 | 3.0 | 4.0 | +| test.c:363:10:363:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:363:14:363:14 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:364:5:364:5 | i | 13.0 | 3.0 | 3.0 | +| test.c:364:5:364:7 | ... ++ | 13.0 | 3.0 | 3.0 | +| test.c:366:3:366:3 | d | 1.0 | -1.0 | -1.0 | +| test.c:366:3:366:7 | ... = ... | 13.0 | 1.0 | 4.0 | +| test.c:366:7:366:7 | i | 13.0 | 1.0 | 4.0 | +| test.c:367:7:367:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:367:7:367:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:367:11:367:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:368:9:368:9 | d | 13.0 | 1.0 | 4.0 | +| test.c:368:9:368:14 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:368:13:368:14 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:368:14:368:14 | x | 1.0 | 1.0 | 1.0 | +| test.c:369:14:369:14 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:372:10:372:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:378:3:378:4 | y1 | 1.0 | -1.0 | -1.0 | +| test.c:378:3:378:23 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:378:8:378:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:378:8:378:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:378:8:378:23 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:378:12:378:14 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:378:12:378:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:378:18:378:18 | x | 1.0 | 1.0 | 1.0 | +| test.c:378:22:378:23 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:378:22:378:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:379:3:379:4 | y2 | 1.0 | -1.0 | -1.0 | +| test.c:379:3:379:24 | ... = ... | 2.0 | 2.0 | 1.0 | +| test.c:379:8:379:8 | x | 2.0 | 2.0 | 2.0 | +| test.c:379:8:379:15 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:379:8:379:24 | ... ? ... : ... | 2.0 | 2.0 | 1.0 | +| test.c:379:13:379:15 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:379:13:379:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:379:19:379:20 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:379:19:379:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:379:24:379:24 | x | 2.0 | 2.0 | 1.0 | +| test.c:380:3:380:4 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:380:3:380:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:380:8:380:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:380:8:380:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:381:3:381:4 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:381:3:381:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:381:8:381:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:381:8:381:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:382:3:382:4 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:382:3:382:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:382:8:382:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:382:8:382:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:383:3:383:4 | y6 | 1.0 | -1.0 | -1.0 | +| test.c:383:3:383:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:383:8:383:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:383:8:383:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:384:3:384:4 | y7 | 1.0 | -1.0 | -1.0 | +| test.c:384:3:384:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:384:8:384:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:384:8:384:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:385:3:385:4 | y8 | 1.0 | -1.0 | -1.0 | +| test.c:385:3:385:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:385:8:385:8 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:385:8:385:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:386:7:386:7 | x | 4.0 | 2.0 | 2.0 | +| test.c:386:7:386:13 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:386:11:386:13 | 300 | 1.0 | -1.0 | -1.0 | +| test.c:386:11:386:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:387:5:387:6 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:387:5:387:15 | ... = ... | 4.0 | 3.0 | 3.0 | +| test.c:387:10:387:10 | x | 4.0 | 2.0 | 2.0 | +| test.c:387:10:387:15 | ... ? ... : ... | 4.0 | 3.0 | 3.0 | +| test.c:387:15:387:15 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:387:15:387:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:388:5:388:6 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:388:5:388:17 | ... = ... | 4.0 | 3.0 | 3.0 | +| test.c:388:10:388:10 | x | 4.0 | 2.0 | 2.0 | +| test.c:388:10:388:17 | ... ? ... : ... | 4.0 | 3.0 | 3.0 | +| test.c:388:15:388:17 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:388:15:388:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:389:5:389:6 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:389:5:389:21 | ... = ... | 4.0 | 2.0 | 2.0 | +| test.c:389:10:389:14 | (...) | 4.0 | 2.0 | 2.0 | +| test.c:389:10:389:21 | ... ? ... : ... | 4.0 | 2.0 | 2.0 | +| test.c:389:11:389:11 | x | 4.0 | 2.0 | 2.0 | +| test.c:389:11:389:13 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:389:13:389:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:389:13:389:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:389:19:389:21 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:389:19:389:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:390:5:390:6 | y6 | 1.0 | -1.0 | -1.0 | +| test.c:390:5:390:36 | ... = ... | 4.0 | 4.0 | 3.0 | +| test.c:390:10:390:31 | (...) | 4.0 | 3.0 | 2.0 | +| test.c:390:10:390:36 | (unsigned int)... | 4.0 | 4.0 | 3.0 | +| test.c:390:10:390:36 | ... ? ... : ... | 4.0 | 4.0 | 3.0 | +| test.c:390:11:390:30 | (unsigned char)... | 4.0 | 2.0 | 2.0 | +| test.c:390:26:390:30 | (...) | 4.0 | 2.0 | 2.0 | +| test.c:390:27:390:27 | x | 4.0 | 2.0 | 2.0 | +| test.c:390:27:390:29 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:390:29:390:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:390:29:390:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:390:36:390:36 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:391:5:391:6 | y7 | 1.0 | -1.0 | -1.0 | +| test.c:391:5:391:38 | ... = ... | 4.0 | 4.0 | 3.0 | +| test.c:391:10:391:31 | (...) | 4.0 | 3.0 | 2.0 | +| test.c:391:10:391:38 | (unsigned int)... | 4.0 | 4.0 | 3.0 | +| test.c:391:10:391:38 | ... ? ... : ... | 4.0 | 4.0 | 3.0 | +| test.c:391:11:391:30 | (unsigned char)... | 4.0 | 2.0 | 2.0 | +| test.c:391:26:391:30 | (...) | 4.0 | 2.0 | 2.0 | +| test.c:391:27:391:27 | x | 4.0 | 2.0 | 2.0 | +| test.c:391:27:391:29 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:391:29:391:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:391:29:391:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:391:36:391:38 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:392:5:392:6 | y8 | 1.0 | -1.0 | -1.0 | +| test.c:392:5:392:39 | ... = ... | 4.0 | 2.0 | 2.0 | +| test.c:392:10:392:32 | (...) | 4.0 | 2.0 | 2.0 | +| test.c:392:10:392:39 | (unsigned int)... | 4.0 | 2.0 | 2.0 | +| test.c:392:10:392:39 | ... ? ... : ... | 4.0 | 2.0 | 2.0 | +| test.c:392:11:392:31 | (unsigned short)... | 4.0 | 2.0 | 2.0 | +| test.c:392:27:392:31 | (...) | 4.0 | 2.0 | 2.0 | +| test.c:392:28:392:28 | x | 4.0 | 2.0 | 2.0 | +| test.c:392:28:392:30 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:392:30:392:30 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:392:30:392:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:392:37:392:39 | 500 | 1.0 | -1.0 | -1.0 | +| test.c:394:10:394:11 | y1 | 1.0 | 1.0 | 1.0 | +| test.c:394:10:394:16 | ... + ... | 2.0 | 2.0 | 1.0 | +| test.c:394:10:394:21 | ... + ... | 10.0 | 6.0 | 4.0 | +| test.c:394:10:394:26 | ... + ... | 50.0 | 16.0 | 13.0 | +| test.c:394:10:394:31 | ... + ... | 250.0 | 40.0 | 33.0 | +| test.c:394:10:394:36 | ... + ... | 1250.0 | 88.0 | 102.0 | +| test.c:394:10:394:41 | ... + ... | 6250.0 | 186.0 | 214.0 | +| test.c:394:10:394:46 | ... + ... | 31250.0 | 265.0 | 276.0 | +| test.c:394:15:394:16 | y2 | 2.0 | 2.0 | 1.0 | +| test.c:394:20:394:21 | y3 | 5.0 | 3.0 | 4.0 | +| test.c:394:25:394:26 | y4 | 5.0 | 3.0 | 4.0 | +| test.c:394:30:394:31 | y5 | 5.0 | 3.0 | 3.0 | +| test.c:394:35:394:36 | y6 | 5.0 | 4.0 | 4.0 | +| test.c:394:40:394:41 | y7 | 5.0 | 4.0 | 4.0 | +| test.c:394:45:394:46 | y8 | 5.0 | 3.0 | 3.0 | +| test.c:400:3:400:4 | y1 | 1.0 | -1.0 | -1.0 | +| test.c:400:3:400:24 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:400:8:400:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:400:8:400:14 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:400:8:400:24 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:400:12:400:14 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:400:12:400:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:400:18:400:18 | x | 1.0 | 1.0 | 1.0 | +| test.c:400:22:400:24 | 110 | 1.0 | -1.0 | -1.0 | +| test.c:400:22:400:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:401:3:401:4 | y2 | 1.0 | -1.0 | -1.0 | +| test.c:401:3:401:25 | ... = ... | 2.0 | 1.0 | 2.0 | +| test.c:401:8:401:8 | x | 2.0 | 2.0 | 2.0 | +| test.c:401:8:401:15 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:401:8:401:25 | ... ? ... : ... | 2.0 | 1.0 | 2.0 | +| test.c:401:13:401:15 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:401:13:401:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:401:19:401:21 | 110 | 1.0 | -1.0 | -1.0 | +| test.c:401:19:401:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:401:25:401:25 | x | 2.0 | 1.0 | 2.0 | +| test.c:402:3:402:4 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:402:3:402:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:402:8:402:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:402:8:402:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:403:3:403:4 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:403:3:403:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:403:8:403:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:403:8:403:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:404:3:404:4 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:404:3:404:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:404:8:404:11 | 1000 | 1.0 | -1.0 | -1.0 | +| test.c:404:8:404:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:405:7:405:7 | x | 4.0 | 2.0 | 2.0 | +| test.c:405:7:405:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:405:12:405:14 | 300 | 1.0 | -1.0 | -1.0 | +| test.c:405:12:405:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:406:5:406:6 | y3 | 1.0 | -1.0 | -1.0 | +| test.c:406:5:406:21 | ... = ... | 4.0 | 2.0 | 3.0 | +| test.c:406:10:406:16 | (...) | 4.0 | 1.0 | 2.0 | +| test.c:406:10:406:21 | ... ? ... : ... | 4.0 | 2.0 | 3.0 | +| test.c:406:11:406:11 | x | 4.0 | 1.0 | 2.0 | +| test.c:406:11:406:15 | ... - ... | 4.0 | 1.0 | 2.0 | +| test.c:406:13:406:15 | 300 | 1.0 | -1.0 | -1.0 | +| test.c:406:13:406:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:406:21:406:21 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:406:21:406:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:407:5:407:6 | y4 | 1.0 | -1.0 | -1.0 | +| test.c:407:5:407:21 | ... = ... | 4.0 | 1.0 | 2.0 | +| test.c:407:10:407:16 | (...) | 4.0 | 1.0 | 2.0 | +| test.c:407:10:407:21 | ... ? ... : ... | 4.0 | 1.0 | 2.0 | +| test.c:407:11:407:11 | x | 4.0 | 1.0 | 2.0 | +| test.c:407:11:407:15 | ... - ... | 4.0 | 1.0 | 2.0 | +| test.c:407:13:407:15 | 200 | 1.0 | -1.0 | -1.0 | +| test.c:407:13:407:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:407:21:407:21 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:407:21:407:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:408:5:408:6 | y5 | 1.0 | -1.0 | -1.0 | +| test.c:408:5:408:38 | ... = ... | 4.0 | 2.0 | 2.0 | +| test.c:408:10:408:33 | (...) | 4.0 | 1.0 | 1.0 | +| test.c:408:10:408:38 | (unsigned int)... | 4.0 | 2.0 | 2.0 | +| test.c:408:10:408:38 | ... ? ... : ... | 4.0 | 2.0 | 2.0 | +| test.c:408:11:408:32 | (unsigned char)... | 4.0 | 1.0 | 2.0 | +| test.c:408:26:408:32 | (...) | 4.0 | 1.0 | 2.0 | +| test.c:408:27:408:27 | x | 4.0 | 1.0 | 2.0 | +| test.c:408:27:408:31 | ... - ... | 4.0 | 1.0 | 2.0 | +| test.c:408:29:408:31 | 200 | 1.0 | -1.0 | -1.0 | +| test.c:408:29:408:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:408:38:408:38 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:410:10:410:11 | y1 | 1.0 | 1.0 | 1.0 | +| test.c:410:10:410:16 | ... + ... | 2.0 | 1.0 | 2.0 | +| test.c:410:10:410:21 | ... + ... | 10.0 | 3.0 | 4.0 | +| test.c:410:10:410:26 | ... + ... | 50.0 | 2.0 | 3.0 | +| test.c:410:10:410:31 | ... + ... | 250.0 | 3.0 | 3.0 | +| test.c:410:15:410:16 | y2 | 2.0 | 1.0 | 2.0 | +| test.c:410:20:410:21 | y3 | 5.0 | 3.0 | 4.0 | +| test.c:410:25:410:26 | y4 | 5.0 | 2.0 | 3.0 | +| test.c:410:30:410:31 | y5 | 5.0 | 3.0 | 3.0 | +| test.c:415:14:415:14 | m | 1.0 | 1.0 | 1.0 | +| test.c:415:14:415:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:18:415:18 | n | 1.0 | 1.0 | 1.0 | +| test.c:415:18:415:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:22:415:22 | o | 1.0 | 1.0 | 1.0 | +| test.c:415:22:415:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:26:415:26 | p | 1.0 | 1.0 | 1.0 | +| test.c:415:26:415:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:30:415:30 | q | 1.0 | 1.0 | 1.0 | +| test.c:415:30:415:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:415:34:415:43 | 0.4743882700000000008 | 1.0 | -1.0 | -1.0 | +| test.c:415:47:415:56 | 0.1433388700000000071 | 1.0 | -1.0 | -1.0 | +| test.c:415:60:415:69 | 0.3527920299999999787 | 1.0 | -1.0 | -1.0 | +| test.c:415:73:415:82 | 0.3920645799999999959 | 1.0 | -1.0 | -1.0 | +| test.c:415:86:415:95 | 0.2154022499999999896 | 1.0 | -1.0 | -1.0 | +| test.c:415:99:415:108 | 0.4049680500000000238 | 1.0 | -1.0 | -1.0 | +| test.c:416:14:416:14 | m | 2.0 | 1.0 | 1.0 | +| test.c:416:14:416:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:18:416:18 | n | 3.0 | 1.0 | 1.0 | +| test.c:416:18:416:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:22:416:22 | o | 3.0 | 1.0 | 1.0 | +| test.c:416:22:416:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:26:416:26 | p | 3.0 | 1.0 | 1.0 | +| test.c:416:26:416:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:30:416:30 | q | 3.0 | 1.0 | 1.0 | +| test.c:416:30:416:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:416:34:416:43 | 0.3418334800000000229 | 1.0 | -1.0 | -1.0 | +| test.c:416:47:416:56 | 0.3533464000000000049 | 1.0 | -1.0 | -1.0 | +| test.c:416:60:416:69 | 0.2224785300000000077 | 1.0 | -1.0 | -1.0 | +| test.c:416:73:416:82 | 0.326618929999999974 | 1.0 | -1.0 | -1.0 | +| test.c:416:86:416:95 | 0.5927046500000000551 | 1.0 | -1.0 | -1.0 | +| test.c:416:99:416:108 | 0.5297741000000000255 | 1.0 | -1.0 | -1.0 | +| test.c:417:14:417:14 | m | 4.0 | 1.0 | 1.0 | +| test.c:417:14:417:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:18:417:18 | n | 9.0 | 1.0 | 1.0 | +| test.c:417:18:417:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:22:417:22 | o | 9.0 | 1.0 | 1.0 | +| test.c:417:22:417:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:26:417:26 | p | 9.0 | 1.0 | 1.0 | +| test.c:417:26:417:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:30:417:30 | q | 9.0 | 1.0 | 1.0 | +| test.c:417:30:417:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:417:34:417:43 | 0.774296030000000024 | 1.0 | -1.0 | -1.0 | +| test.c:417:47:417:56 | 0.3147808400000000062 | 1.0 | -1.0 | -1.0 | +| test.c:417:60:417:69 | 0.3123551399999999756 | 1.0 | -1.0 | -1.0 | +| test.c:417:73:417:82 | 0.05121255999999999725 | 1.0 | -1.0 | -1.0 | +| test.c:417:86:417:95 | 0.7931074500000000471 | 1.0 | -1.0 | -1.0 | +| test.c:417:99:417:108 | 0.6798145100000000385 | 1.0 | -1.0 | -1.0 | +| test.c:418:14:418:14 | m | 8.0 | 1.0 | 1.0 | +| test.c:418:14:418:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:18:418:18 | n | 27.0 | 1.0 | 1.0 | +| test.c:418:18:418:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:22:418:22 | o | 27.0 | 1.0 | 1.0 | +| test.c:418:22:418:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:26:418:26 | p | 27.0 | 1.0 | 1.0 | +| test.c:418:26:418:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:30:418:30 | q | 27.0 | 1.0 | 1.0 | +| test.c:418:30:418:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:418:34:418:43 | 0.4472955599999999809 | 1.0 | -1.0 | -1.0 | +| test.c:418:47:418:56 | 0.8059920200000000312 | 1.0 | -1.0 | -1.0 | +| test.c:418:60:418:69 | 0.9899726199999999698 | 1.0 | -1.0 | -1.0 | +| test.c:418:73:418:82 | 0.5995273199999999747 | 1.0 | -1.0 | -1.0 | +| test.c:418:86:418:95 | 0.3697694799999999837 | 1.0 | -1.0 | -1.0 | +| test.c:418:99:418:108 | 0.8386683499999999514 | 1.0 | -1.0 | -1.0 | +| test.c:419:14:419:14 | m | 16.0 | 1.0 | 1.0 | +| test.c:419:14:419:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:18:419:18 | n | 81.0 | 1.0 | 1.0 | +| test.c:419:18:419:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:22:419:22 | o | 81.0 | 1.0 | 1.0 | +| test.c:419:22:419:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:26:419:26 | p | 81.0 | 1.0 | 1.0 | +| test.c:419:26:419:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:30:419:30 | q | 81.0 | 1.0 | 1.0 | +| test.c:419:30:419:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:419:34:419:43 | 0.4931182800000000199 | 1.0 | -1.0 | -1.0 | +| test.c:419:47:419:56 | 0.9038991100000000056 | 1.0 | -1.0 | -1.0 | +| test.c:419:60:419:69 | 0.1059771199999999941 | 1.0 | -1.0 | -1.0 | +| test.c:419:73:419:82 | 0.2177842600000000073 | 1.0 | -1.0 | -1.0 | +| test.c:419:86:419:95 | 0.7248596600000000167 | 1.0 | -1.0 | -1.0 | +| test.c:419:99:419:108 | 0.6873487400000000136 | 1.0 | -1.0 | -1.0 | +| test.c:420:14:420:14 | m | 32.0 | 1.0 | 1.0 | +| test.c:420:14:420:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:18:420:18 | n | 243.0 | 1.0 | 1.0 | +| test.c:420:18:420:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:22:420:22 | o | 243.0 | 1.0 | 1.0 | +| test.c:420:22:420:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:26:420:26 | p | 243.0 | 1.0 | 1.0 | +| test.c:420:26:420:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:30:420:30 | q | 243.0 | 1.0 | 1.0 | +| test.c:420:30:420:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:420:34:420:43 | 0.4745284799999999747 | 1.0 | -1.0 | -1.0 | +| test.c:420:47:420:56 | 0.107866500000000004 | 1.0 | -1.0 | -1.0 | +| test.c:420:60:420:69 | 0.1188457599999999947 | 1.0 | -1.0 | -1.0 | +| test.c:420:73:420:82 | 0.7616405200000000431 | 1.0 | -1.0 | -1.0 | +| test.c:420:86:420:95 | 0.3480889200000000239 | 1.0 | -1.0 | -1.0 | +| test.c:420:99:420:108 | 0.584408649999999974 | 1.0 | -1.0 | -1.0 | +| test.c:421:14:421:14 | m | 64.0 | 1.0 | 1.0 | +| test.c:421:14:421:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:18:421:18 | n | 729.0 | 1.0 | 1.0 | +| test.c:421:18:421:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:22:421:22 | o | 729.0 | 1.0 | 1.0 | +| test.c:421:22:421:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:26:421:26 | p | 729.0 | 1.0 | 1.0 | +| test.c:421:26:421:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:30:421:30 | q | 729.0 | 1.0 | 1.0 | +| test.c:421:30:421:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:421:34:421:43 | 0.02524326 | 1.0 | -1.0 | -1.0 | +| test.c:421:47:421:56 | 0.8290504600000000446 | 1.0 | -1.0 | -1.0 | +| test.c:421:60:421:69 | 0.95823075000000002 | 1.0 | -1.0 | -1.0 | +| test.c:421:73:421:82 | 0.1251655799999999985 | 1.0 | -1.0 | -1.0 | +| test.c:421:86:421:95 | 0.8523517900000000536 | 1.0 | -1.0 | -1.0 | +| test.c:421:99:421:108 | 0.3623238400000000081 | 1.0 | -1.0 | -1.0 | +| test.c:422:14:422:14 | m | 128.0 | 1.0 | 1.0 | +| test.c:422:14:422:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:18:422:18 | n | 2187.0 | 1.0 | 1.0 | +| test.c:422:18:422:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:22:422:22 | o | 2187.0 | 1.0 | 1.0 | +| test.c:422:22:422:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:26:422:26 | p | 2187.0 | 1.0 | 1.0 | +| test.c:422:26:422:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:30:422:30 | q | 2187.0 | 1.0 | 1.0 | +| test.c:422:30:422:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:422:34:422:43 | 0.3870862600000000153 | 1.0 | -1.0 | -1.0 | +| test.c:422:47:422:56 | 0.3287604399999999871 | 1.0 | -1.0 | -1.0 | +| test.c:422:60:422:69 | 0.1496348500000000137 | 1.0 | -1.0 | -1.0 | +| test.c:422:73:422:82 | 0.4504110800000000192 | 1.0 | -1.0 | -1.0 | +| test.c:422:86:422:95 | 0.4864090899999999884 | 1.0 | -1.0 | -1.0 | +| test.c:422:99:422:108 | 0.8433127200000000157 | 1.0 | -1.0 | -1.0 | +| test.c:423:14:423:14 | m | 256.0 | 1.0 | 1.0 | +| test.c:423:14:423:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:18:423:18 | n | 6561.0 | 1.0 | 1.0 | +| test.c:423:18:423:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:22:423:22 | o | 6561.0 | 1.0 | 1.0 | +| test.c:423:22:423:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:26:423:26 | p | 6561.0 | 1.0 | 1.0 | +| test.c:423:26:423:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:30:423:30 | q | 6561.0 | 1.0 | 1.0 | +| test.c:423:30:423:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:423:34:423:43 | 0.1575506299999999971 | 1.0 | -1.0 | -1.0 | +| test.c:423:47:423:56 | 0.7708683299999999905 | 1.0 | -1.0 | -1.0 | +| test.c:423:60:423:69 | 0.2642848099999999811 | 1.0 | -1.0 | -1.0 | +| test.c:423:73:423:82 | 0.1480050800000000111 | 1.0 | -1.0 | -1.0 | +| test.c:423:86:423:95 | 0.374281430000000026 | 1.0 | -1.0 | -1.0 | +| test.c:423:99:423:108 | 0.05328182000000000057 | 1.0 | -1.0 | -1.0 | +| test.c:424:14:424:14 | m | 512.0 | 1.0 | 1.0 | +| test.c:424:14:424:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:18:424:18 | n | 19683.0 | 1.0 | 1.0 | +| test.c:424:18:424:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:22:424:22 | o | 19683.0 | 1.0 | 1.0 | +| test.c:424:22:424:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:26:424:26 | p | 19683.0 | 1.0 | 1.0 | +| test.c:424:26:424:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:30:424:30 | q | 19683.0 | 1.0 | 1.0 | +| test.c:424:30:424:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:424:34:424:43 | 0.4173653600000000186 | 1.0 | -1.0 | -1.0 | +| test.c:424:47:424:56 | 0.7682662799999999681 | 1.0 | -1.0 | -1.0 | +| test.c:424:60:424:69 | 0.2764323799999999776 | 1.0 | -1.0 | -1.0 | +| test.c:424:73:424:82 | 0.5567927400000000082 | 1.0 | -1.0 | -1.0 | +| test.c:424:86:424:95 | 0.3946885700000000163 | 1.0 | -1.0 | -1.0 | +| test.c:424:99:424:108 | 0.6907214400000000198 | 1.0 | -1.0 | -1.0 | +| test.c:425:14:425:14 | m | 1024.0 | 1.0 | 1.0 | +| test.c:425:14:425:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:18:425:18 | n | 59049.0 | 1.0 | 1.0 | +| test.c:425:18:425:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:22:425:22 | o | 59049.0 | 1.0 | 1.0 | +| test.c:425:22:425:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:26:425:26 | p | 59049.0 | 1.0 | 1.0 | +| test.c:425:26:425:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:30:425:30 | q | 59049.0 | 1.0 | 1.0 | +| test.c:425:30:425:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:425:34:425:43 | 0.8895534499999999678 | 1.0 | -1.0 | -1.0 | +| test.c:425:47:425:56 | 0.2990482400000000207 | 1.0 | -1.0 | -1.0 | +| test.c:425:60:425:69 | 0.7624258299999999711 | 1.0 | -1.0 | -1.0 | +| test.c:425:73:425:82 | 0.2051910999999999874 | 1.0 | -1.0 | -1.0 | +| test.c:425:86:425:95 | 0.8874555899999999609 | 1.0 | -1.0 | -1.0 | +| test.c:425:99:425:108 | 0.8137279800000000174 | 1.0 | -1.0 | -1.0 | +| test.c:426:14:426:14 | m | 2048.0 | 1.0 | 1.0 | +| test.c:426:14:426:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:18:426:18 | n | 177147.0 | 1.0 | 1.0 | +| test.c:426:18:426:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:22:426:22 | o | 177147.0 | 1.0 | 1.0 | +| test.c:426:22:426:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:26:426:26 | p | 177147.0 | 1.0 | 1.0 | +| test.c:426:26:426:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:30:426:30 | q | 177147.0 | 1.0 | 1.0 | +| test.c:426:30:426:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:426:34:426:43 | 0.4218627600000000033 | 1.0 | -1.0 | -1.0 | +| test.c:426:47:426:56 | 0.5384335799999999672 | 1.0 | -1.0 | -1.0 | +| test.c:426:60:426:69 | 0.4499667900000000054 | 1.0 | -1.0 | -1.0 | +| test.c:426:73:426:82 | 0.1320411400000000013 | 1.0 | -1.0 | -1.0 | +| test.c:426:86:426:95 | 0.5203124099999999475 | 1.0 | -1.0 | -1.0 | +| test.c:426:99:426:108 | 0.4276264699999999808 | 1.0 | -1.0 | -1.0 | +| test.c:432:19:432:19 | a | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:23 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:27 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:31 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:35 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:39 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:43 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:47 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:51 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:55 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:59 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:19:432:63 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:432:23:432:23 | b | 1.0 | 1.0 | 1.0 | +| test.c:432:27:432:27 | c | 1.0 | 1.0 | 1.0 | +| test.c:432:31:432:31 | d | 1.0 | 1.0 | 1.0 | +| test.c:432:35:432:35 | e | 1.0 | 1.0 | 1.0 | +| test.c:432:39:432:39 | f | 1.0 | 1.0 | 1.0 | +| test.c:432:43:432:43 | g | 1.0 | 1.0 | 1.0 | +| test.c:432:47:432:47 | h | 1.0 | 1.0 | 1.0 | +| test.c:432:51:432:51 | i | 1.0 | 1.0 | 1.0 | +| test.c:432:55:432:55 | j | 1.0 | 1.0 | 1.0 | +| test.c:432:59:432:59 | k | 1.0 | 1.0 | 1.0 | +| test.c:432:63:432:63 | l | 1.0 | 1.0 | 1.0 | +| test.c:434:10:434:15 | output | 1.0 | 1.0 | 1.0 | +| test.c:441:7:441:9 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:441:7:441:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:441:13:441:14 | 12 | 1.0 | -1.0 | -1.0 | +| test.c:441:13:441:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:441:19:441:21 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:441:19:441:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:441:26:441:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:442:7:442:9 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:442:7:442:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:442:13:442:14 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:442:13:442:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:442:19:442:21 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:442:19:442:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:442:26:442:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:443:7:443:9 | rhs | 3.0 | 3.0 | 3.0 | +| test.c:443:7:443:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:443:13:443:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:443:13:443:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:443:19:443:21 | rhs | 3.0 | 3.0 | 3.0 | +| test.c:443:19:443:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:443:26:443:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:444:7:444:9 | rhs | 4.0 | 4.0 | 4.0 | +| test.c:444:7:444:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:444:13:444:14 | 15 | 1.0 | -1.0 | -1.0 | +| test.c:444:13:444:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:444:19:444:21 | rhs | 4.0 | 4.0 | 4.0 | +| test.c:444:19:444:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:444:26:444:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:445:7:445:9 | rhs | 5.0 | 5.0 | 5.0 | +| test.c:445:7:445:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:445:13:445:14 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:445:13:445:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:445:19:445:21 | rhs | 5.0 | 5.0 | 5.0 | +| test.c:445:19:445:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:445:26:445:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:446:10:446:12 | (int)... | 6.0 | 6.0 | 6.0 | +| test.c:446:10:446:12 | rhs | 6.0 | 6.0 | 6.0 | +| test.c:452:7:452:9 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:452:7:452:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:452:13:452:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:452:13:452:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:452:19:452:21 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:452:19:452:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:452:26:452:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:452:38:452:40 | rhs | 1.0 | 1.0 | 1.0 | +| test.c:452:38:452:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:452:45:452:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:453:7:453:9 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:453:7:453:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:453:13:453:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:453:13:453:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:453:19:453:21 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:453:19:453:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:453:26:453:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:453:38:453:40 | rhs | 2.0 | 1.0 | 2.0 | +| test.c:453:38:453:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:453:45:453:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:454:7:454:9 | rhs | 4.0 | 3.0 | 3.0 | +| test.c:454:7:454:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:454:13:454:14 | 12 | 1.0 | -1.0 | -1.0 | +| test.c:454:13:454:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:454:19:454:21 | rhs | 4.0 | 3.0 | 3.0 | +| test.c:454:19:454:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:454:26:454:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:454:38:454:40 | rhs | 4.0 | 1.0 | 3.0 | +| test.c:454:38:454:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:454:45:454:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:455:7:455:9 | rhs | 8.0 | 4.0 | 4.0 | +| test.c:455:7:455:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:455:13:455:14 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:455:13:455:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:455:19:455:21 | rhs | 8.0 | 4.0 | 4.0 | +| test.c:455:19:455:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:455:26:455:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:455:38:455:40 | rhs | 8.0 | 1.0 | 4.0 | +| test.c:455:38:455:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:455:45:455:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:456:7:456:9 | rhs | 16.0 | 5.0 | 5.0 | +| test.c:456:7:456:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:456:13:456:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:456:13:456:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:456:19:456:21 | rhs | 16.0 | 5.0 | 5.0 | +| test.c:456:19:456:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:456:26:456:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:456:38:456:40 | rhs | 16.0 | 1.0 | 5.0 | +| test.c:456:38:456:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:456:45:456:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:457:7:457:9 | rhs | 32.0 | 6.0 | 6.0 | +| test.c:457:7:457:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:457:13:457:14 | 15 | 1.0 | -1.0 | -1.0 | +| test.c:457:13:457:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:457:19:457:21 | rhs | 32.0 | 6.0 | 6.0 | +| test.c:457:19:457:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:457:26:457:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:457:38:457:40 | rhs | 32.0 | 1.0 | 6.0 | +| test.c:457:38:457:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:457:45:457:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:458:7:458:9 | rhs | 64.0 | 7.0 | 7.0 | +| test.c:458:7:458:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:458:13:458:14 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:458:13:458:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:458:19:458:21 | rhs | 64.0 | 7.0 | 7.0 | +| test.c:458:19:458:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:458:26:458:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:458:38:458:40 | rhs | 64.0 | 1.0 | 7.0 | +| test.c:458:38:458:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:458:45:458:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:459:7:459:9 | rhs | 128.0 | 8.0 | 8.0 | +| test.c:459:7:459:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:459:13:459:14 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:459:13:459:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:459:19:459:21 | rhs | 128.0 | 8.0 | 8.0 | +| test.c:459:19:459:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:459:26:459:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:459:38:459:40 | rhs | 128.0 | 1.0 | 8.0 | +| test.c:459:38:459:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:459:45:459:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:460:7:460:9 | rhs | 256.0 | 9.0 | 9.0 | +| test.c:460:7:460:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:460:13:460:14 | 18 | 1.0 | -1.0 | -1.0 | +| test.c:460:13:460:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:460:19:460:21 | rhs | 256.0 | 9.0 | 9.0 | +| test.c:460:19:460:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:460:26:460:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:460:38:460:40 | rhs | 256.0 | 1.0 | 9.0 | +| test.c:460:38:460:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:460:45:460:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:461:7:461:9 | rhs | 512.0 | 10.0 | 10.0 | +| test.c:461:7:461:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:461:13:461:14 | 19 | 1.0 | -1.0 | -1.0 | +| test.c:461:13:461:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:461:19:461:21 | rhs | 512.0 | 10.0 | 10.0 | +| test.c:461:19:461:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:461:26:461:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:461:38:461:40 | rhs | 512.0 | 1.0 | 10.0 | +| test.c:461:38:461:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:461:45:461:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:462:7:462:9 | rhs | 1024.0 | 11.0 | 11.0 | +| test.c:462:7:462:14 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:462:13:462:14 | 20 | 1.0 | -1.0 | -1.0 | +| test.c:462:13:462:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:462:19:462:21 | rhs | 1024.0 | 11.0 | 11.0 | +| test.c:462:19:462:26 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:462:26:462:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:462:38:462:40 | rhs | 1024.0 | 1.0 | 11.0 | +| test.c:462:38:462:45 | ... << ... | 1.0 | -1.0 | -1.0 | +| test.c:462:45:462:45 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:463:10:463:12 | (int)... | 2048.0 | 12.0 | 12.0 | +| test.c:463:10:463:12 | rhs | 2048.0 | 12.0 | 12.0 | +| test.c:467:7:467:7 | a | 1.0 | 1.0 | 1.0 | +| test.c:467:7:467:13 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:467:12:467:13 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:468:9:468:9 | b | 1.0 | 1.0 | 1.0 | +| test.c:468:9:468:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:468:14:468:15 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:469:7:469:7 | a | 1.0 | 1.0 | 1.0 | +| test.c:469:7:469:12 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:469:12:469:12 | b | 1.0 | 1.0 | 1.0 | +| test.c:471:9:471:9 | a | 2.0 | 2.0 | 2.0 | +| test.c:471:9:471:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:471:14:471:15 | 18 | 1.0 | -1.0 | -1.0 | +| test.c:472:7:472:7 | b | 1.0 | -1.0 | -1.0 | +| test.c:472:7:472:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:472:11:472:12 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:477:11:477:11 | a | 4.0 | 4.0 | 4.0 | +| test.c:477:11:477:15 | ... + ... | 16.0 | 12.0 | 12.0 | +| test.c:477:15:477:15 | b | 4.0 | 3.0 | 3.0 | +| test.c:478:10:478:10 | a | 4.0 | 4.0 | 4.0 | +| test.c:478:10:478:14 | ... + ... | 16.0 | 12.0 | 12.0 | +| test.c:478:14:478:14 | b | 4.0 | 3.0 | 3.0 | +| test.c:485:4:487:50 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:485:4:570:26 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 1.297918419127476E201 | 1.0 | 1.0 | +| test.c:485:5:485:6 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:485:5:485:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:5:485:11 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:5:485:55 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:485:5:487:49 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:485:10:485:11 | ip | 1.0 | 1.0 | 1.0 | +| test.c:485:15:485:26 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:485:15:485:31 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:15:485:55 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:16:485:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:485:16:485:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:16:485:21 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:16:485:25 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:20:485:21 | ip | 1.0 | 1.0 | 1.0 | +| test.c:485:25:485:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:485:25:485:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:30:485:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:485:30:485:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:35:485:50 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:485:35:485:55 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:36 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:485:36:485:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:41 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:45 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:36:485:49 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:485:40:485:41 | ip | 1.0 | 1.0 | 1.0 | +| test.c:485:45:485:45 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:485:45:485:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:49:485:49 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:485:49:485:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:485:54:485:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:485:54:485:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:486:9:486:10 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:486:9:486:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:486:9:486:15 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:486:14:486:15 | ip | 1.0 | 1.0 | 1.0 | +| test.c:487:9:487:20 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:487:9:487:25 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:9:487:49 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:10:487:10 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:487:10:487:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:10:487:15 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:10:487:19 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:14:487:15 | ip | 1.0 | 1.0 | 1.0 | +| test.c:487:19:487:19 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:487:19:487:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:24:487:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:487:24:487:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:29:487:44 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:487:29:487:49 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:30 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:487:30:487:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:35 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:39 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:30:487:43 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:487:34:487:35 | ip | 1.0 | 1.0 | 1.0 | +| test.c:487:39:487:39 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:487:39:487:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:43:487:43 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:487:43:487:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:487:48:487:49 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:487:48:487:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:488:5:570:26 | (...) | 9.29462083211502E84 | 1.0 | 1.0 | +| test.c:488:6:488:6 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:488:6:488:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:488:6:488:23 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:488:6:507:42 | ... + ... | 4.524508125E10 | 1.0 | 1.0 | +| test.c:488:6:527:24 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:488:6:570:25 | ... ? ... : ... | 9.29462083211502E84 | 1.0 | 1.0 | +| test.c:488:10:488:23 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:488:11:488:12 | ip | 2.0 | 2.0 | 1.0 | +| test.c:488:11:488:17 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:488:11:488:22 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:488:16:488:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:488:16:488:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:488:21:488:22 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:488:21:488:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:489:7:507:42 | (...) | 2.2622540625E10 | 1.0 | 1.0 | +| test.c:489:8:489:8 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:489:8:489:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:489:8:489:25 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:489:8:490:26 | ... + ... | 4.0 | 1.0 | 1.0 | +| test.c:489:8:491:26 | ... + ... | 8.0 | 1.0 | 1.0 | +| test.c:489:8:496:22 | ... + ... | 1000.0 | 1.0 | 1.0 | +| test.c:489:8:497:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:489:8:507:41 | ... ? ... : ... | 2.2622540625E10 | 1.0 | 1.0 | +| test.c:489:12:489:25 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:489:13:489:14 | ip | 2.0 | 2.0 | 1.0 | +| test.c:489:13:489:19 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:489:13:489:24 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:489:18:489:19 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:489:18:489:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:489:23:489:24 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:489:23:489:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:490:9:490:26 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:490:10:490:10 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:490:10:490:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:490:10:490:15 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:490:10:490:20 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:490:10:490:25 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:490:14:490:15 | ip | 2.0 | 2.0 | 1.0 | +| test.c:490:19:490:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:490:19:490:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:490:24:490:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:490:24:490:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:491:9:491:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:491:9:491:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:491:9:491:26 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:491:13:491:26 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:491:14:491:15 | ip | 2.0 | 2.0 | 1.0 | +| test.c:491:14:491:20 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:491:14:491:25 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:491:19:491:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:491:19:491:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:491:24:491:25 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:491:24:491:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:9:496:22 | (...) | 125.0 | 1.0 | 1.0 | +| test.c:492:10:492:21 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:492:10:492:26 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:492:10:492:80 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:492:10:496:21 | ... ? ... : ... | 125.0 | 1.0 | 1.0 | +| test.c:492:11:492:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:492:11:492:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:11:492:16 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:11:492:20 | ... + ... | 2.0 | 1.0 | 1.0 | +| test.c:492:15:492:16 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:20:492:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:492:20:492:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:25:492:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:492:25:492:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:30:492:80 | (...) | 4.0 | 1.0 | 1.0 | +| test.c:492:31:492:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:31:492:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:31:492:43 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:492:31:492:53 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:492:31:492:79 | ... ? ... : ... | 4.0 | 1.0 | 1.0 | +| test.c:492:36:492:43 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:492:37:492:37 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:492:37:492:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:37:492:42 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:41:492:42 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:47:492:48 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:47:492:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:47:492:53 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:52:492:53 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:57:492:58 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:57:492:58 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:57:492:69 | ... * ... | 2.0 | 1.0 | 1.0 | +| test.c:492:62:492:69 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:492:63:492:63 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:492:63:492:63 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:63:492:68 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:67:492:68 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:73:492:74 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:492:73:492:74 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:492:73:492:79 | ... * ... | 2.0 | 2.0 | 1.0 | +| test.c:492:78:492:79 | ip | 2.0 | 2.0 | 1.0 | +| test.c:493:13:493:24 | (...) | 5.0 | 1.0 | 1.0 | +| test.c:493:13:493:29 | ... * ... | 5.0 | 1.0 | 1.0 | +| test.c:493:14:493:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:493:14:493:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:493:14:493:19 | ... * ... | 5.0 | 2.0 | 1.0 | +| test.c:493:14:493:23 | ... + ... | 5.0 | 1.0 | 1.0 | +| test.c:493:18:493:19 | ip | 5.0 | 2.0 | 1.0 | +| test.c:493:23:493:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:493:23:493:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:493:28:493:29 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:493:28:493:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:13:494:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:494:13:494:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:13:494:25 | ... * ... | 5.0 | 1.0 | 1.0 | +| test.c:494:13:494:35 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:494:13:496:21 | ... ? ... : ... | 25.0 | 1.0 | 1.0 | +| test.c:494:18:494:25 | (...) | 5.0 | 1.0 | 1.0 | +| test.c:494:19:494:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:494:19:494:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:19:494:24 | ... * ... | 5.0 | 2.0 | 1.0 | +| test.c:494:23:494:24 | ip | 5.0 | 2.0 | 1.0 | +| test.c:494:29:494:30 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:494:29:494:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:494:29:494:35 | ... * ... | 5.0 | 2.0 | 1.0 | +| test.c:494:34:494:35 | ip | 5.0 | 2.0 | 1.0 | +| test.c:495:15:495:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:495:15:495:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:495:15:495:27 | ... * ... | 5.0 | 1.0 | 1.0 | +| test.c:495:20:495:27 | (...) | 5.0 | 1.0 | 1.0 | +| test.c:495:21:495:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:495:21:495:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:495:21:495:26 | ... * ... | 5.0 | 2.0 | 1.0 | +| test.c:495:25:495:26 | ip | 5.0 | 2.0 | 1.0 | +| test.c:496:15:496:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:496:15:496:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:496:15:496:21 | ... * ... | 5.0 | 2.0 | 1.0 | +| test.c:496:20:496:21 | ip | 5.0 | 2.0 | 1.0 | +| test.c:497:7:497:7 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:497:7:497:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:7:497:12 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:497:7:497:17 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:497:7:497:37 | ... + ... | 225.0 | 1.0 | 1.0 | +| test.c:497:11:497:12 | ip | 15.0 | 2.0 | 1.0 | +| test.c:497:16:497:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:497:16:497:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:21:497:32 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:497:21:497:37 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:497:22:497:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:497:22:497:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:22:497:27 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:497:22:497:31 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:497:26:497:27 | ip | 15.0 | 2.0 | 1.0 | +| test.c:497:31:497:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:497:31:497:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:497:36:497:37 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:497:36:497:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:498:11:498:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:498:11:498:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:498:11:498:28 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:498:11:499:28 | ... + ... | 225.0 | 1.0 | 1.0 | +| test.c:498:11:500:28 | ... + ... | 3375.0 | 1.0 | 1.0 | +| test.c:498:11:506:24 | ... + ... | 1.00544625E8 | 1.0 | 1.0 | +| test.c:498:15:498:28 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:498:16:498:17 | ip | 15.0 | 2.0 | 1.0 | +| test.c:498:16:498:22 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:498:16:498:27 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:498:21:498:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:498:21:498:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:498:26:498:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:498:26:498:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:499:11:499:28 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:499:12:499:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:499:12:499:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:499:12:499:17 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:499:12:499:22 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:499:12:499:27 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:499:16:499:17 | ip | 15.0 | 2.0 | 1.0 | +| test.c:499:21:499:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:499:21:499:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:499:26:499:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:499:26:499:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:500:11:500:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:500:11:500:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:500:11:500:28 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:500:15:500:28 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:500:16:500:17 | ip | 15.0 | 2.0 | 1.0 | +| test.c:500:16:500:22 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:500:16:500:27 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:500:21:500:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:500:21:500:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:500:26:500:27 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:500:26:500:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:501:11:506:24 | (...) | 29791.0 | 1.0 | 1.0 | +| test.c:501:12:501:23 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:501:12:501:28 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:501:12:502:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:501:12:506:23 | ... ? ... : ... | 29791.0 | 1.0 | 1.0 | +| test.c:501:13:501:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:501:13:501:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:501:13:501:18 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:501:13:501:22 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:501:17:501:18 | ip | 15.0 | 2.0 | 1.0 | +| test.c:501:22:501:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:501:22:501:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:501:27:501:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:501:27:501:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:11:502:61 | (...) | 225.0 | 1.0 | 1.0 | +| test.c:502:12:502:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:502:12:502:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:12:502:24 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:502:12:502:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:502:12:502:60 | ... ? ... : ... | 225.0 | 1.0 | 1.0 | +| test.c:502:17:502:24 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:502:18:502:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:502:18:502:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:18:502:23 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:502:22:502:23 | ip | 15.0 | 2.0 | 1.0 | +| test.c:502:28:502:29 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:502:28:502:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:28:502:34 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:502:33:502:34 | ip | 15.0 | 2.0 | 1.0 | +| test.c:502:38:502:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:502:38:502:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:38:502:50 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:502:43:502:50 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:502:44:502:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:502:44:502:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:44:502:49 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:502:48:502:49 | ip | 15.0 | 2.0 | 1.0 | +| test.c:502:54:502:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:502:54:502:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:502:54:502:60 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:502:59:502:60 | ip | 15.0 | 2.0 | 1.0 | +| test.c:503:15:503:26 | (...) | 31.0 | 1.0 | 1.0 | +| test.c:503:15:503:31 | ... * ... | 31.0 | 1.0 | 1.0 | +| test.c:503:16:503:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:503:16:503:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:503:16:503:21 | ... * ... | 31.0 | 2.0 | 1.0 | +| test.c:503:16:503:25 | ... + ... | 31.0 | 1.0 | 1.0 | +| test.c:503:20:503:21 | ip | 31.0 | 2.0 | 1.0 | +| test.c:503:25:503:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:503:25:503:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:503:30:503:31 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:503:30:503:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:15:504:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:504:15:504:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:15:504:27 | ... * ... | 31.0 | 1.0 | 1.0 | +| test.c:504:15:504:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:504:15:506:23 | ... ? ... : ... | 961.0 | 1.0 | 1.0 | +| test.c:504:20:504:27 | (...) | 31.0 | 1.0 | 1.0 | +| test.c:504:21:504:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:504:21:504:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:21:504:26 | ... * ... | 31.0 | 2.0 | 1.0 | +| test.c:504:25:504:26 | ip | 31.0 | 2.0 | 1.0 | +| test.c:504:31:504:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:504:31:504:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:504:31:504:37 | ... * ... | 31.0 | 2.0 | 1.0 | +| test.c:504:36:504:37 | ip | 31.0 | 2.0 | 1.0 | +| test.c:505:17:505:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:505:17:505:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:505:17:505:29 | ... * ... | 31.0 | 1.0 | 1.0 | +| test.c:505:22:505:29 | (...) | 31.0 | 1.0 | 1.0 | +| test.c:505:23:505:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:505:23:505:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:505:23:505:28 | ... * ... | 31.0 | 2.0 | 1.0 | +| test.c:505:27:505:28 | ip | 31.0 | 2.0 | 1.0 | +| test.c:506:17:506:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:506:17:506:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:506:17:506:23 | ... * ... | 31.0 | 2.0 | 1.0 | +| test.c:506:22:506:23 | ip | 31.0 | 2.0 | 1.0 | +| test.c:507:11:507:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:507:11:507:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:11:507:16 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:507:11:507:21 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:507:11:507:41 | ... + ... | 225.0 | 1.0 | 1.0 | +| test.c:507:15:507:16 | ip | 15.0 | 2.0 | 1.0 | +| test.c:507:20:507:21 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:507:20:507:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:25:507:36 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:507:25:507:41 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:507:26:507:26 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:507:26:507:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:26:507:31 | ... * ... | 15.0 | 2.0 | 1.0 | +| test.c:507:26:507:35 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:507:30:507:31 | ip | 15.0 | 2.0 | 1.0 | +| test.c:507:35:507:35 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:507:35:507:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:507:40:507:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:507:40:507:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:508:5:527:24 | (...) | 6.6142118960740864E25 | 1.0 | 1.0 | +| test.c:508:6:508:6 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:508:6:508:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:508:6:508:23 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:508:6:509:24 | ... + ... | 11664.0 | 1.0 | 1.0 | +| test.c:508:6:510:24 | ... + ... | 1259712.0 | 1.0 | 1.0 | +| test.c:508:6:515:20 | ... + ... | 1.2872131505856E13 | 1.0 | 1.0 | +| test.c:508:6:516:55 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:508:6:527:23 | ... ? ... : ... | 6.6142118960740864E25 | 1.0 | 1.0 | +| test.c:508:10:508:23 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:508:11:508:12 | ip | 108.0 | 2.0 | 1.0 | +| test.c:508:11:508:17 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:508:11:508:22 | ... + ... | 108.0 | 1.0 | 1.0 | +| test.c:508:16:508:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:508:16:508:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:508:21:508:22 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:508:21:508:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:509:7:509:24 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:509:8:509:8 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:509:8:509:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:509:8:509:13 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:509:8:509:18 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:509:8:509:23 | ... + ... | 108.0 | 1.0 | 1.0 | +| test.c:509:12:509:13 | ip | 108.0 | 2.0 | 1.0 | +| test.c:509:17:509:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:509:17:509:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:509:22:509:23 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:509:22:509:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:510:7:510:7 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:510:7:510:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:510:7:510:24 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:510:11:510:24 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:510:12:510:13 | ip | 108.0 | 2.0 | 1.0 | +| test.c:510:12:510:18 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:510:12:510:23 | ... + ... | 108.0 | 1.0 | 1.0 | +| test.c:510:17:510:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:510:17:510:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:510:22:510:23 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:510:22:510:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:7:515:20 | (...) | 1.0218313E7 | 1.0 | 1.0 | +| test.c:511:8:511:19 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:511:8:511:24 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:511:8:511:78 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:511:8:515:19 | ... ? ... : ... | 1.0218313E7 | 1.0 | 1.0 | +| test.c:511:9:511:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:511:9:511:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:9:511:14 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:511:9:511:18 | ... + ... | 108.0 | 1.0 | 1.0 | +| test.c:511:13:511:14 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:18:511:18 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:511:18:511:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:23:511:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:511:23:511:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:28:511:78 | (...) | 11664.0 | 1.0 | 1.0 | +| test.c:511:29:511:30 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:29:511:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:29:511:41 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:511:29:511:51 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:511:29:511:77 | ... ? ... : ... | 11664.0 | 1.0 | 1.0 | +| test.c:511:34:511:41 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:511:35:511:35 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:511:35:511:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:35:511:40 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:511:39:511:40 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:45:511:46 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:45:511:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:45:511:51 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:511:50:511:51 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:55:511:56 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:55:511:56 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:55:511:67 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:511:60:511:67 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:511:61:511:61 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:511:61:511:61 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:61:511:66 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:511:65:511:66 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:71:511:72 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:511:71:511:72 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:511:71:511:77 | ... * ... | 108.0 | 2.0 | 1.0 | +| test.c:511:76:511:77 | ip | 108.0 | 2.0 | 1.0 | +| test.c:512:11:512:22 | (...) | 217.0 | 1.0 | 1.0 | +| test.c:512:11:512:27 | ... * ... | 217.0 | 1.0 | 1.0 | +| test.c:512:12:512:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:512:12:512:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:512:12:512:17 | ... * ... | 217.0 | 2.0 | 1.0 | +| test.c:512:12:512:21 | ... + ... | 217.0 | 1.0 | 1.0 | +| test.c:512:16:512:17 | ip | 217.0 | 2.0 | 1.0 | +| test.c:512:21:512:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:512:21:512:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:512:26:512:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:512:26:512:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:11:513:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:513:11:513:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:11:513:23 | ... * ... | 217.0 | 1.0 | 1.0 | +| test.c:513:11:513:33 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:513:11:515:19 | ... ? ... : ... | 47089.0 | 1.0 | 1.0 | +| test.c:513:16:513:23 | (...) | 217.0 | 1.0 | 1.0 | +| test.c:513:17:513:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:513:17:513:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:17:513:22 | ... * ... | 217.0 | 2.0 | 1.0 | +| test.c:513:21:513:22 | ip | 217.0 | 2.0 | 1.0 | +| test.c:513:27:513:28 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:513:27:513:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:513:27:513:33 | ... * ... | 217.0 | 2.0 | 1.0 | +| test.c:513:32:513:33 | ip | 217.0 | 2.0 | 1.0 | +| test.c:514:13:514:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:514:13:514:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:514:13:514:25 | ... * ... | 217.0 | 1.0 | 1.0 | +| test.c:514:18:514:25 | (...) | 217.0 | 1.0 | 1.0 | +| test.c:514:19:514:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:514:19:514:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:514:19:514:24 | ... * ... | 217.0 | 2.0 | 1.0 | +| test.c:514:23:514:24 | ip | 217.0 | 2.0 | 1.0 | +| test.c:515:13:515:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:515:13:515:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:515:13:515:19 | ... * ... | 217.0 | 2.0 | 1.0 | +| test.c:515:18:515:19 | ip | 217.0 | 2.0 | 1.0 | +| test.c:516:5:516:55 | (...) | 423801.0 | 1.0 | 1.0 | +| test.c:516:6:516:7 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:516:6:516:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:6:516:12 | ... * ... | 651.0 | 2.0 | 1.0 | +| test.c:516:6:516:28 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:516:6:516:54 | ... ? ... : ... | 423801.0 | 1.0 | 1.0 | +| test.c:516:11:516:12 | ip | 651.0 | 2.0 | 1.0 | +| test.c:516:16:516:23 | (...) | 651.0 | 1.0 | 1.0 | +| test.c:516:16:516:28 | ... * ... | 651.0 | 1.0 | 1.0 | +| test.c:516:17:516:18 | ip | 651.0 | 2.0 | 1.0 | +| test.c:516:17:516:22 | ... + ... | 651.0 | 2.0 | 1.0 | +| test.c:516:22:516:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:516:22:516:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:27:516:28 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:516:27:516:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:32:516:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:516:32:516:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:32:516:38 | ... * ... | 651.0 | 2.0 | 1.0 | +| test.c:516:37:516:38 | ip | 651.0 | 2.0 | 1.0 | +| test.c:516:42:516:49 | (...) | 651.0 | 1.0 | 1.0 | +| test.c:516:42:516:54 | ... * ... | 651.0 | 1.0 | 1.0 | +| test.c:516:43:516:44 | ip | 651.0 | 2.0 | 1.0 | +| test.c:516:43:516:48 | ... + ... | 651.0 | 2.0 | 1.0 | +| test.c:516:48:516:48 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:516:48:516:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:516:53:516:54 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:516:53:516:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:517:9:517:9 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:517:9:517:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:517:9:517:26 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:517:9:518:26 | ... + ... | 1695204.0 | 1.0 | 1.0 | +| test.c:517:9:519:26 | ... + ... | 2.207155608E9 | 1.0 | 1.0 | +| test.c:517:9:524:22 | ... + ... | 3.9017203216097214E19 | 1.0 | 1.0 | +| test.c:517:13:517:26 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:517:14:517:15 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:517:14:517:20 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:517:14:517:25 | ... + ... | 1302.0 | 1.0 | 1.0 | +| test.c:517:19:517:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:517:19:517:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:517:24:517:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:517:24:517:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:518:9:518:26 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:518:10:518:10 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:518:10:518:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:518:10:518:15 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:518:10:518:20 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:518:10:518:25 | ... + ... | 1302.0 | 1.0 | 1.0 | +| test.c:518:14:518:15 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:518:19:518:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:518:19:518:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:518:24:518:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:518:24:518:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:519:9:519:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:519:9:519:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:519:9:519:26 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:519:13:519:26 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:519:14:519:15 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:519:14:519:20 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:519:14:519:25 | ... + ... | 1302.0 | 1.0 | 1.0 | +| test.c:519:19:519:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:519:19:519:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:519:24:519:25 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:519:24:519:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:9:524:22 | (...) | 1.7677595125E10 | 1.0 | 1.0 | +| test.c:520:10:520:21 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:520:10:520:26 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:520:10:520:80 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:520:10:524:21 | ... ? ... : ... | 1.7677595125E10 | 1.0 | 1.0 | +| test.c:520:11:520:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:520:11:520:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:11:520:16 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:520:11:520:20 | ... + ... | 1302.0 | 1.0 | 1.0 | +| test.c:520:15:520:16 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:20:520:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:520:20:520:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:25:520:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:520:25:520:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:30:520:80 | (...) | 1695204.0 | 1.0 | 1.0 | +| test.c:520:31:520:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:31:520:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:31:520:43 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:520:31:520:53 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:520:31:520:79 | ... ? ... : ... | 1695204.0 | 1.0 | 1.0 | +| test.c:520:36:520:43 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:520:37:520:37 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:520:37:520:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:37:520:42 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:520:41:520:42 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:47:520:48 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:47:520:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:47:520:53 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:520:52:520:53 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:57:520:58 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:57:520:58 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:57:520:69 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:520:62:520:69 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:520:63:520:63 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:520:63:520:63 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:63:520:68 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:520:67:520:68 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:73:520:74 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:520:73:520:74 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:520:73:520:79 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:520:78:520:79 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:521:13:521:24 | (...) | 2605.0 | 1.0 | 1.0 | +| test.c:521:13:521:29 | ... * ... | 2605.0 | 1.0 | 1.0 | +| test.c:521:14:521:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:521:14:521:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:521:14:521:19 | ... * ... | 2605.0 | 2.0 | 1.0 | +| test.c:521:14:521:23 | ... + ... | 2605.0 | 1.0 | 1.0 | +| test.c:521:18:521:19 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:521:23:521:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:521:23:521:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:521:28:521:29 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:521:28:521:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:13:522:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:522:13:522:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:13:522:25 | ... * ... | 2605.0 | 1.0 | 1.0 | +| test.c:522:13:522:35 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:522:13:524:21 | ... ? ... : ... | 6786025.0 | 1.0 | 1.0 | +| test.c:522:18:522:25 | (...) | 2605.0 | 1.0 | 1.0 | +| test.c:522:19:522:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:522:19:522:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:19:522:24 | ... * ... | 2605.0 | 2.0 | 1.0 | +| test.c:522:23:522:24 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:522:29:522:30 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:522:29:522:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:522:29:522:35 | ... * ... | 2605.0 | 2.0 | 1.0 | +| test.c:522:34:522:35 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:523:15:523:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:523:15:523:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:523:15:523:27 | ... * ... | 2605.0 | 1.0 | 1.0 | +| test.c:523:20:523:27 | (...) | 2605.0 | 1.0 | 1.0 | +| test.c:523:21:523:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:523:21:523:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:523:21:523:26 | ... * ... | 2605.0 | 2.0 | 1.0 | +| test.c:523:25:523:26 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:524:15:524:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:524:15:524:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:524:15:524:21 | ... * ... | 2605.0 | 2.0 | 1.0 | +| test.c:524:20:524:21 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:525:9:525:10 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:525:9:525:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:525:9:525:15 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:525:9:525:31 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:525:9:527:23 | ... ? ... : ... | 1695204.0 | 1.0 | 1.0 | +| test.c:525:14:525:15 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:525:19:525:26 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:525:19:525:31 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:525:20:525:21 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:525:20:525:25 | ... + ... | 1302.0 | 2.0 | 1.0 | +| test.c:525:25:525:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:525:25:525:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:525:30:525:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:525:30:525:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:526:11:526:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:526:11:526:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:526:11:526:17 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:526:16:526:17 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:527:11:527:18 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:527:11:527:23 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:527:12:527:13 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:527:12:527:17 | ... + ... | 1302.0 | 2.0 | 1.0 | +| test.c:527:17:527:17 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:527:17:527:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:527:22:527:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:527:22:527:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:528:9:528:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:528:9:528:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:528:9:528:26 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:528:9:548:44 | ... + ... | 1.9449636104972528E43 | 1.0 | 1.0 | +| test.c:528:13:528:26 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:528:14:528:15 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:528:14:528:20 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:528:14:528:25 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:528:19:528:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:528:19:528:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:528:24:528:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:528:24:528:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:529:9:548:44 | (...) | 1.8667469147684545E39 | 1.0 | 1.0 | +| test.c:529:10:529:10 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:529:10:529:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:529:10:529:27 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:529:10:530:28 | ... + ... | 1.08555561E8 | 1.0 | 1.0 | +| test.c:529:10:531:28 | ... + ... | 1.131040390059E12 | 1.0 | 1.0 | +| test.c:529:10:537:24 | ... + ... | 1.0235492350954187E25 | 1.0 | 1.0 | +| test.c:529:10:538:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:529:10:548:43 | ... ? ... : ... | 1.8667469147684545E39 | 1.0 | 1.0 | +| test.c:529:14:529:27 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:529:15:529:16 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:529:15:529:21 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:529:15:529:26 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:529:20:529:21 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:529:20:529:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:529:25:529:26 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:529:25:529:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:530:11:530:28 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:530:12:530:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:530:12:530:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:530:12:530:17 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:530:12:530:22 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:530:12:530:27 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:530:16:530:17 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:530:21:530:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:530:21:530:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:530:26:530:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:530:26:530:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:531:11:531:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:531:11:531:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:531:11:531:28 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:531:15:531:28 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:531:16:531:17 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:531:16:531:22 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:531:16:531:27 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:531:21:531:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:531:21:531:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:531:26:531:27 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:531:26:531:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:532:11:537:24 | (...) | 9.049625849719E12 | 1.0 | 1.0 | +| test.c:532:12:532:23 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:532:12:532:28 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:532:12:533:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:532:12:537:23 | ... ? ... : ... | 9.049625849719E12 | 1.0 | 1.0 | +| test.c:532:13:532:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:532:13:532:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:532:13:532:18 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:532:13:532:22 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:532:17:532:18 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:532:22:532:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:532:22:532:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:532:27:532:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:532:27:532:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:11:533:61 | (...) | 1.08555561E8 | 1.0 | 1.0 | +| test.c:533:12:533:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:533:12:533:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:12:533:24 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:533:12:533:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:533:12:533:60 | ... ? ... : ... | 1.08555561E8 | 1.0 | 1.0 | +| test.c:533:17:533:24 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:533:18:533:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:533:18:533:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:18:533:23 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:533:22:533:23 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:533:28:533:29 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:533:28:533:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:28:533:34 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:533:33:533:34 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:533:38:533:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:533:38:533:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:38:533:50 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:533:43:533:50 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:533:44:533:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:533:44:533:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:44:533:49 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:533:48:533:49 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:533:54:533:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:533:54:533:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:533:54:533:60 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:533:59:533:60 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:534:15:534:26 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:534:15:534:31 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:534:16:534:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:534:16:534:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:534:16:534:21 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:534:16:534:25 | ... + ... | 20839.0 | 1.0 | 1.0 | +| test.c:534:20:534:21 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:534:25:534:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:534:25:534:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:534:30:534:31 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:534:30:534:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:15:535:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:535:15:535:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:15:535:27 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:535:15:535:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:535:15:537:23 | ... ? ... : ... | 4.34263921E8 | 1.0 | 1.0 | +| test.c:535:20:535:27 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:535:21:535:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:535:21:535:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:21:535:26 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:535:25:535:26 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:535:31:535:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:535:31:535:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:535:31:535:37 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:535:36:535:37 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:536:17:536:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:536:17:536:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:536:17:536:29 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:536:22:536:29 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:536:23:536:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:536:23:536:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:536:23:536:28 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:536:27:536:28 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:537:17:537:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:537:17:537:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:537:17:537:23 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:537:22:537:23 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:538:9:538:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:538:9:538:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:9:538:14 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:538:9:538:19 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:538:9:538:39 | ... + ... | 3.908375289E9 | 1.0 | 1.0 | +| test.c:538:13:538:14 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:538:18:538:19 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:538:18:538:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:23:538:34 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:538:23:538:39 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:538:24:538:24 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:538:24:538:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:24:538:29 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:538:24:538:33 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:538:28:538:29 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:538:33:538:33 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:538:33:538:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:538:38:538:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:538:38:538:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:539:13:539:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:539:13:539:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:539:13:539:30 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:539:13:540:30 | ... + ... | 3.908375289E9 | 1.0 | 1.0 | +| test.c:539:13:541:30 | ... + ... | 2.44339897942413E14 | 1.0 | 1.0 | +| test.c:539:13:547:26 | ... + ... | 4.7762734556795386E29 | 1.0 | 1.0 | +| test.c:539:17:539:30 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:539:18:539:19 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:539:18:539:24 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:539:18:539:29 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:539:23:539:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:539:23:539:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:539:28:539:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:539:28:539:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:540:13:540:30 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:540:14:540:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:540:14:540:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:540:14:540:19 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:540:14:540:24 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:540:14:540:29 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:540:18:540:19 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:540:23:540:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:540:23:540:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:540:28:540:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:540:28:540:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:541:13:541:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:541:13:541:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:541:13:541:30 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:541:17:541:30 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:541:18:541:19 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:541:18:541:24 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:541:18:541:29 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:541:23:541:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:541:23:541:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:541:28:541:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:541:28:541:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:542:13:547:26 | (...) | 1.954766084417875E15 | 1.0 | 1.0 | +| test.c:542:14:542:25 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:542:14:542:30 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:542:14:543:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:542:14:547:25 | ... ? ... : ... | 1.954766084417875E15 | 1.0 | 1.0 | +| test.c:542:15:542:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:542:15:542:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:542:15:542:20 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:542:15:542:24 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:542:19:542:20 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:542:24:542:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:542:24:542:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:542:29:542:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:542:29:542:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:13:543:63 | (...) | 3.908375289E9 | 1.0 | 1.0 | +| test.c:543:14:543:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:543:14:543:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:14:543:26 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:543:14:543:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:543:14:543:62 | ... ? ... : ... | 3.908375289E9 | 1.0 | 1.0 | +| test.c:543:19:543:26 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:543:20:543:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:543:20:543:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:20:543:25 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:543:24:543:25 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:543:30:543:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:543:30:543:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:30:543:36 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:543:35:543:36 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:543:40:543:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:543:40:543:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:40:543:52 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:543:45:543:52 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:543:46:543:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:543:46:543:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:46:543:51 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:543:50:543:51 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:543:56:543:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:543:56:543:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:543:56:543:62 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:543:61:543:62 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:544:17:544:28 | (...) | 125035.0 | 1.0 | 1.0 | +| test.c:544:17:544:33 | ... * ... | 125035.0 | 1.0 | 1.0 | +| test.c:544:18:544:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:544:18:544:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:544:18:544:23 | ... * ... | 125035.0 | 2.0 | 1.0 | +| test.c:544:18:544:27 | ... + ... | 125035.0 | 1.0 | 1.0 | +| test.c:544:22:544:23 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:544:27:544:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:544:27:544:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:544:32:544:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:544:32:544:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:17:545:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:545:17:545:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:17:545:29 | ... * ... | 125035.0 | 1.0 | 1.0 | +| test.c:545:17:545:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:545:17:547:25 | ... ? ... : ... | 1.5633751225E10 | 1.0 | 1.0 | +| test.c:545:22:545:29 | (...) | 125035.0 | 1.0 | 1.0 | +| test.c:545:23:545:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:545:23:545:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:23:545:28 | ... * ... | 125035.0 | 2.0 | 1.0 | +| test.c:545:27:545:28 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:545:33:545:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:545:33:545:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:545:33:545:39 | ... * ... | 125035.0 | 2.0 | 1.0 | +| test.c:545:38:545:39 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:546:19:546:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:546:19:546:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:546:19:546:31 | ... * ... | 125035.0 | 1.0 | 1.0 | +| test.c:546:24:546:31 | (...) | 125035.0 | 1.0 | 1.0 | +| test.c:546:25:546:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:546:25:546:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:546:25:546:30 | ... * ... | 125035.0 | 2.0 | 1.0 | +| test.c:546:29:546:30 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:547:19:547:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:547:19:547:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:547:19:547:25 | ... * ... | 125035.0 | 2.0 | 1.0 | +| test.c:547:24:547:25 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:548:13:548:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:548:13:548:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:13:548:18 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:548:13:548:23 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:548:13:548:43 | ... + ... | 3.908375289E9 | 1.0 | 1.0 | +| test.c:548:17:548:18 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:548:22:548:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:548:22:548:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:27:548:38 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:548:27:548:43 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:548:28:548:28 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:548:28:548:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:28:548:33 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:548:28:548:37 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:548:32:548:33 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:548:37:548:37 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:548:37:548:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:548:42:548:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:548:42:548:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:549:9:549:9 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:549:9:549:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:549:9:549:26 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:549:9:550:30 | ... + ... | 1.08555561E8 | 1.0 | 1.0 | +| test.c:549:9:551:30 | ... + ... | 1.131040390059E12 | 1.0 | 1.0 | +| test.c:549:9:557:26 | ... + ... | 1.0235492350954187E25 | 1.0 | 1.0 | +| test.c:549:9:558:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:549:9:570:25 | ... ? ... : ... | 4.778814771623795E41 | 1.0 | 1.0 | +| test.c:549:13:549:26 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:549:14:549:15 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:549:14:549:20 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:549:14:549:25 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:549:19:549:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:549:19:549:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:549:24:549:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:549:24:549:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:550:13:550:30 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:550:14:550:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:550:14:550:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:550:14:550:19 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:550:14:550:24 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:550:14:550:29 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:550:18:550:19 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:550:23:550:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:550:23:550:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:550:28:550:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:550:28:550:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:551:13:551:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:551:13:551:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:551:13:551:30 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:551:17:551:30 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:551:18:551:19 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:551:18:551:24 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:551:18:551:29 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:551:23:551:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:551:23:551:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:551:28:551:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:551:28:551:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:552:13:557:26 | (...) | 9.049625849719E12 | 1.0 | 1.0 | +| test.c:552:14:552:25 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:552:14:552:30 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:552:14:553:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:552:14:557:25 | ... ? ... : ... | 9.049625849719E12 | 1.0 | 1.0 | +| test.c:552:15:552:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:552:15:552:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:552:15:552:20 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:552:15:552:24 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:552:19:552:20 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:552:24:552:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:552:24:552:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:552:29:552:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:552:29:552:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:13:553:63 | (...) | 1.08555561E8 | 1.0 | 1.0 | +| test.c:553:14:553:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:553:14:553:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:14:553:26 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:553:14:553:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:553:14:553:62 | ... ? ... : ... | 1.08555561E8 | 1.0 | 1.0 | +| test.c:553:19:553:26 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:553:20:553:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:553:20:553:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:20:553:25 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:553:24:553:25 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:553:30:553:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:553:30:553:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:30:553:36 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:553:35:553:36 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:553:40:553:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:553:40:553:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:40:553:52 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:553:45:553:52 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:553:46:553:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:553:46:553:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:46:553:51 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:553:50:553:51 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:553:56:553:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:553:56:553:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:553:56:553:62 | ... * ... | 10419.0 | 2.0 | 1.0 | +| test.c:553:61:553:62 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:554:17:554:28 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:554:17:554:33 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:554:18:554:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:554:18:554:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:554:18:554:23 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:554:18:554:27 | ... + ... | 20839.0 | 1.0 | 1.0 | +| test.c:554:22:554:23 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:554:27:554:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:554:27:554:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:554:32:554:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:554:32:554:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:17:555:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:555:17:555:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:17:555:29 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:555:17:555:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:555:17:557:25 | ... ? ... : ... | 4.34263921E8 | 1.0 | 1.0 | +| test.c:555:22:555:29 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:555:23:555:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:555:23:555:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:23:555:28 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:555:27:555:28 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:555:33:555:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:555:33:555:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:555:33:555:39 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:555:38:555:39 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:556:19:556:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:556:19:556:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:556:19:556:31 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:556:24:556:31 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:556:25:556:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:556:25:556:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:556:25:556:30 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:556:29:556:30 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:557:19:557:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:557:19:557:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:557:19:557:25 | ... * ... | 20839.0 | 2.0 | 1.0 | +| test.c:557:24:557:25 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:558:11:558:61 | (...) | 3.908375289E9 | 1.0 | 1.0 | +| test.c:558:12:558:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:558:12:558:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:12:558:18 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:558:12:558:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:558:12:558:60 | ... ? ... : ... | 3.908375289E9 | 1.0 | 1.0 | +| test.c:558:17:558:18 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:558:22:558:29 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:558:22:558:34 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:558:23:558:24 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:558:23:558:28 | ... + ... | 62517.0 | 2.0 | 1.0 | +| test.c:558:28:558:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:558:28:558:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:33:558:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:558:33:558:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:38:558:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:558:38:558:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:38:558:44 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:558:43:558:44 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:558:48:558:55 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:558:48:558:60 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:558:49:558:50 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:558:49:558:54 | ... + ... | 62517.0 | 2.0 | 1.0 | +| test.c:558:54:558:54 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:558:54:558:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:558:59:558:60 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:558:59:558:60 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:559:11:559:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:559:11:559:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:559:11:559:28 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:559:11:560:28 | ... + ... | 1.5633501156E10 | 1.0 | 1.0 | +| test.c:559:11:561:28 | ... + ... | 1.954719183539304E15 | 1.0 | 1.0 | +| test.c:559:11:567:24 | ... + ... | 3.056778340269433E31 | 1.0 | 1.0 | +| test.c:559:15:559:28 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:559:16:559:17 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:559:16:559:22 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:559:16:559:27 | ... + ... | 125034.0 | 1.0 | 1.0 | +| test.c:559:21:559:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:559:21:559:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:559:26:559:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:559:26:559:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:560:11:560:28 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:560:12:560:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:560:12:560:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:560:12:560:17 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:560:12:560:22 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:560:12:560:27 | ... + ... | 125034.0 | 1.0 | 1.0 | +| test.c:560:16:560:17 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:560:21:560:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:560:21:560:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:560:26:560:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:560:26:560:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:561:11:561:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:561:11:561:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:561:11:561:28 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:561:15:561:28 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:561:16:561:17 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:561:16:561:22 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:561:16:561:27 | ... + ... | 125034.0 | 1.0 | 1.0 | +| test.c:561:21:561:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:561:21:561:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:561:26:561:27 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:561:26:561:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:562:11:567:24 | (...) | 1.5637941071078508E16 | 1.0 | 1.0 | +| test.c:562:12:562:23 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:562:12:562:28 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:562:12:563:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:562:12:567:23 | ... ? ... : ... | 1.5637941071078508E16 | 1.0 | 1.0 | +| test.c:562:13:562:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:562:13:562:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:562:13:562:18 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:562:13:562:22 | ... + ... | 125034.0 | 1.0 | 1.0 | +| test.c:562:17:562:18 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:562:22:562:22 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:562:22:562:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:562:27:562:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:562:27:562:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:11:563:61 | (...) | 1.5633501156E10 | 1.0 | 1.0 | +| test.c:563:12:563:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:563:12:563:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:12:563:24 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:563:12:563:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:563:12:563:60 | ... ? ... : ... | 1.5633501156E10 | 1.0 | 1.0 | +| test.c:563:17:563:24 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:563:18:563:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:563:18:563:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:18:563:23 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:563:22:563:23 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:563:28:563:29 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:563:28:563:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:28:563:34 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:563:33:563:34 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:563:38:563:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:563:38:563:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:38:563:50 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:563:43:563:50 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:563:44:563:44 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:563:44:563:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:44:563:49 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:563:48:563:49 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:563:54:563:55 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:563:54:563:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:563:54:563:60 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:563:59:563:60 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:564:15:564:26 | (...) | 250069.0 | 1.0 | 1.0 | +| test.c:564:15:564:31 | ... * ... | 250069.0 | 1.0 | 1.0 | +| test.c:564:16:564:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:564:16:564:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:564:16:564:21 | ... * ... | 250069.0 | 2.0 | 1.0 | +| test.c:564:16:564:25 | ... + ... | 250069.0 | 1.0 | 1.0 | +| test.c:564:20:564:21 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:564:25:564:25 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:564:25:564:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:564:30:564:31 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:564:30:564:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:15:565:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:565:15:565:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:15:565:27 | ... * ... | 250069.0 | 1.0 | 1.0 | +| test.c:565:15:565:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:565:15:567:23 | ... ? ... : ... | 6.2534504761E10 | 1.0 | 1.0 | +| test.c:565:20:565:27 | (...) | 250069.0 | 1.0 | 1.0 | +| test.c:565:21:565:21 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:565:21:565:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:21:565:26 | ... * ... | 250069.0 | 2.0 | 1.0 | +| test.c:565:25:565:26 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:565:31:565:32 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:565:31:565:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:565:31:565:37 | ... * ... | 250069.0 | 2.0 | 1.0 | +| test.c:565:36:565:37 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:566:17:566:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:566:17:566:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:566:17:566:29 | ... * ... | 250069.0 | 1.0 | 1.0 | +| test.c:566:22:566:29 | (...) | 250069.0 | 1.0 | 1.0 | +| test.c:566:23:566:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:566:23:566:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:566:23:566:28 | ... * ... | 250069.0 | 2.0 | 1.0 | +| test.c:566:27:566:28 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:567:17:567:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:567:17:567:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:567:17:567:23 | ... * ... | 250069.0 | 2.0 | 1.0 | +| test.c:567:22:567:23 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:568:11:568:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:568:11:568:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:568:11:568:17 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:568:11:568:33 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:568:11:570:25 | ... ? ... : ... | 1.5633501156E10 | 1.0 | 1.0 | +| test.c:568:16:568:17 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:568:21:568:28 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:568:21:568:33 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:568:22:568:23 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:568:22:568:27 | ... + ... | 125034.0 | 2.0 | 1.0 | +| test.c:568:27:568:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:568:27:568:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:568:32:568:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:568:32:568:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:569:13:569:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:569:13:569:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:569:13:569:19 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:569:18:569:19 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:570:13:570:20 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:570:13:570:25 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:570:14:570:15 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:570:14:570:19 | ... + ... | 125034.0 | 2.0 | 1.0 | +| test.c:570:19:570:19 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:570:19:570:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:570:24:570:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:570:24:570:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:9:571:10 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:571:9:571:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:9:571:15 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:571:9:571:59 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:571:9:573:51 | ... ? ... : ... | 2.9729207539701335E18 | 1.0 | 1.0 | +| test.c:571:14:571:15 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:571:19:571:30 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:571:19:571:35 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:571:19:571:59 | ... + ... | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:571:20:571:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:571:20:571:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:20:571:25 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:571:20:571:29 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:571:24:571:25 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:571:29:571:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:571:29:571:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:34:571:35 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:571:34:571:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:39:571:54 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:571:39:571:59 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:571:40:571:40 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:571:40:571:40 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:40:571:45 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:571:40:571:49 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:571:40:571:53 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:571:44:571:45 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:571:49:571:49 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:571:49:571:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:53:571:53 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:571:53:571:53 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:571:58:571:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:571:58:571:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:572:11:572:12 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:572:11:572:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:572:11:572:17 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:572:16:572:17 | ip | 1437897.0 | 1.0 | 1.0 | +| test.c:573:11:573:22 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:573:11:573:27 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:573:11:573:51 | ... + ... | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:573:12:573:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:573:12:573:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:12:573:17 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:573:12:573:21 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:573:16:573:17 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:573:21:573:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:573:21:573:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:26:573:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:573:26:573:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:31:573:46 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:573:31:573:51 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:573:32:573:32 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:573:32:573:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:32:573:37 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:573:32:573:41 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:573:32:573:45 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:573:36:573:37 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:573:41:573:41 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:573:41:573:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:45:573:45 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:573:45:573:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:573:50:573:51 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:573:50:573:51 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:574:9:574:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:574:9:574:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:574:9:574:26 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:574:9:594:48 | ... + ... | 3.5306223994138077E62 | 1.0 | 1.0 | +| test.c:574:9:616:30 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:574:9:659:27 | ... ? ... : ... | 4.3658022750663434E182 | 1.0 | 1.0 | +| test.c:574:13:574:26 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:574:14:574:15 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:574:14:574:20 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:574:14:574:25 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:574:19:574:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:574:19:574:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:574:24:574:25 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:574:24:574:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:575:13:594:48 | (...) | 2.4554070280512497E56 | 1.0 | 1.0 | +| test.c:575:14:575:14 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:575:14:575:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:575:14:575:31 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:575:14:576:32 | ... + ... | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:575:14:577:32 | ... + ... | 2.9729207539701335E18 | 1.0 | 1.0 | +| test.c:575:14:583:28 | ... + ... | 7.070613623498497E37 | 1.0 | 1.0 | +| test.c:575:14:584:43 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:575:14:594:47 | ... ? ... : ... | 2.4554070280512497E56 | 1.0 | 1.0 | +| test.c:575:18:575:31 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:575:19:575:20 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:575:19:575:25 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:575:19:575:30 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:575:24:575:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:575:24:575:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:575:29:575:30 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:575:29:575:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:576:15:576:32 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:576:16:576:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:576:16:576:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:576:16:576:21 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:576:16:576:26 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:576:16:576:31 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:576:20:576:21 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:576:25:576:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:576:25:576:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:576:30:576:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:576:30:576:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:577:15:577:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:577:15:577:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:577:15:577:32 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:577:19:577:32 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:577:20:577:21 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:577:20:577:26 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:577:20:577:31 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:577:25:577:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:577:25:577:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:577:30:577:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:577:30:577:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:578:15:583:28 | (...) | 2.3783390842343084E19 | 1.0 | 1.0 | +| test.c:578:16:578:27 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:578:16:578:32 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:578:16:579:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:578:16:583:27 | ... ? ... : ... | 2.3783390842343084E19 | 1.0 | 1.0 | +| test.c:578:17:578:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:578:17:578:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:578:17:578:22 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:578:17:578:26 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:578:21:578:22 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:578:26:578:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:578:26:578:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:578:31:578:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:578:31:578:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:15:579:65 | (...) | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:579:16:579:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:579:16:579:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:16:579:28 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:579:16:579:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:579:16:579:64 | ... ? ... : ... | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:579:21:579:28 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:579:22:579:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:579:22:579:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:22:579:27 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:579:26:579:27 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:579:32:579:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:579:32:579:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:32:579:38 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:579:37:579:38 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:579:42:579:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:579:42:579:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:42:579:54 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:579:47:579:54 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:579:48:579:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:579:48:579:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:48:579:53 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:579:52:579:53 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:579:58:579:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:579:58:579:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:579:58:579:64 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:579:63:579:64 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:580:19:580:30 | (...) | 2875795.0 | 1.0 | 1.0 | +| test.c:580:19:580:35 | ... * ... | 2875795.0 | 1.0 | 1.0 | +| test.c:580:20:580:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:580:20:580:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:580:20:580:25 | ... * ... | 2875795.0 | 2.0 | 1.0 | +| test.c:580:20:580:29 | ... + ... | 2875795.0 | 1.0 | 1.0 | +| test.c:580:24:580:25 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:580:29:580:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:580:29:580:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:580:34:580:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:580:34:580:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:19:581:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:581:19:581:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:19:581:31 | ... * ... | 2875795.0 | 1.0 | 1.0 | +| test.c:581:19:581:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:581:19:583:27 | ... ? ... : ... | 8.270196882025E12 | 1.0 | 1.0 | +| test.c:581:24:581:31 | (...) | 2875795.0 | 1.0 | 1.0 | +| test.c:581:25:581:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:581:25:581:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:25:581:30 | ... * ... | 2875795.0 | 2.0 | 1.0 | +| test.c:581:29:581:30 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:581:35:581:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:581:35:581:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:581:35:581:41 | ... * ... | 2875795.0 | 2.0 | 1.0 | +| test.c:581:40:581:41 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:582:21:582:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:582:21:582:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:582:21:582:33 | ... * ... | 2875795.0 | 1.0 | 1.0 | +| test.c:582:26:582:33 | (...) | 2875795.0 | 1.0 | 1.0 | +| test.c:582:27:582:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:582:27:582:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:582:27:582:32 | ... * ... | 2875795.0 | 2.0 | 1.0 | +| test.c:582:31:582:32 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:583:21:583:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:583:21:583:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:583:21:583:27 | ... * ... | 2875795.0 | 2.0 | 1.0 | +| test.c:583:26:583:27 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:584:13:584:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:584:13:584:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:13:584:18 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:584:13:584:23 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:584:13:584:43 | ... + ... | 7.4431771938225E13 | 1.0 | 1.0 | +| test.c:584:17:584:18 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:584:22:584:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:584:22:584:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:27:584:38 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:584:27:584:43 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:584:28:584:28 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:584:28:584:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:28:584:33 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:584:28:584:37 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:584:32:584:33 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:584:37:584:37 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:584:37:584:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:584:42:584:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:584:42:584:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:585:17:585:17 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:585:17:585:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:585:17:585:34 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:585:17:586:34 | ... + ... | 7.4431771938225E13 | 1.0 | 1.0 | +| test.c:585:17:587:34 | ... + ... | 6.421515527432633E20 | 1.0 | 1.0 | +| test.c:585:17:593:30 | ... + ... | 3.298869507082441E42 | 1.0 | 1.0 | +| test.c:585:21:585:34 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:585:22:585:23 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:585:22:585:28 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:585:22:585:33 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:585:27:585:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:585:27:585:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:585:32:585:33 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:585:32:585:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:586:17:586:34 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:586:18:586:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:586:18:586:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:586:18:586:23 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:586:18:586:28 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:586:18:586:33 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:586:22:586:23 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:586:27:586:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:586:27:586:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:586:32:586:33 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:586:32:586:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:587:17:587:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:587:17:587:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:587:17:587:34 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:587:21:587:34 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:587:22:587:23 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:587:22:587:28 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:587:22:587:33 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:587:27:587:28 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:587:27:587:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:587:32:587:33 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:587:32:587:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:588:17:593:30 | (...) | 5.137213315127421E21 | 1.0 | 1.0 | +| test.c:588:18:588:29 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:588:18:588:34 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:588:18:589:67 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:588:18:593:29 | ... ? ... : ... | 5.137213315127421E21 | 1.0 | 1.0 | +| test.c:588:19:588:19 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:588:19:588:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:588:19:588:24 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:588:19:588:28 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:588:23:588:24 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:588:28:588:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:588:28:588:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:588:33:588:34 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:588:33:588:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:17:589:67 | (...) | 7.4431771938225E13 | 1.0 | 1.0 | +| test.c:589:18:589:19 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:589:18:589:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:18:589:30 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:589:18:589:40 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:589:18:589:66 | ... ? ... : ... | 7.4431771938225E13 | 1.0 | 1.0 | +| test.c:589:23:589:30 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:589:24:589:24 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:589:24:589:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:24:589:29 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:589:28:589:29 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:589:34:589:35 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:589:34:589:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:34:589:40 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:589:39:589:40 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:589:44:589:45 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:589:44:589:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:44:589:56 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:589:49:589:56 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:589:50:589:50 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:589:50:589:50 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:50:589:55 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:589:54:589:55 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:589:60:589:61 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:589:60:589:61 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:589:60:589:66 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:589:65:589:66 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:590:21:590:32 | (...) | 1.7254771E7 | 1.0 | 1.0 | +| test.c:590:21:590:37 | ... * ... | 1.7254771E7 | 1.0 | 1.0 | +| test.c:590:22:590:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:590:22:590:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:590:22:590:27 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | +| test.c:590:22:590:31 | ... + ... | 1.7254771E7 | 1.0 | 1.0 | +| test.c:590:26:590:27 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:590:31:590:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:590:31:590:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:590:36:590:37 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:590:36:590:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:21:591:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:591:21:591:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:21:591:33 | ... * ... | 1.7254771E7 | 1.0 | 1.0 | +| test.c:591:21:591:43 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:591:21:593:29 | ... ? ... : ... | 2.97727122262441E14 | 1.0 | 1.0 | +| test.c:591:26:591:33 | (...) | 1.7254771E7 | 1.0 | 1.0 | +| test.c:591:27:591:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:591:27:591:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:27:591:32 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | +| test.c:591:31:591:32 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:591:37:591:38 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:591:37:591:38 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:591:37:591:43 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | +| test.c:591:42:591:43 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:592:23:592:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:592:23:592:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:592:23:592:35 | ... * ... | 1.7254771E7 | 1.0 | 1.0 | +| test.c:592:28:592:35 | (...) | 1.7254771E7 | 1.0 | 1.0 | +| test.c:592:29:592:29 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:592:29:592:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:592:29:592:34 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | +| test.c:592:33:592:34 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:593:23:593:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:593:23:593:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:593:23:593:29 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | +| test.c:593:28:593:29 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:594:17:594:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:594:17:594:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:17:594:22 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:594:17:594:27 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:594:17:594:47 | ... + ... | 7.4431771938225E13 | 1.0 | 1.0 | +| test.c:594:21:594:22 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:594:26:594:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:594:26:594:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:31:594:42 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:594:31:594:47 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:594:32:594:32 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:594:32:594:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:32:594:37 | ... * ... | 8627385.0 | 2.0 | 1.0 | +| test.c:594:32:594:41 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:594:36:594:37 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:594:41:594:41 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:594:41:594:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:594:46:594:47 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:594:46:594:47 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:595:11:616:30 | (...) | 6.08636382738973E71 | 1.0 | 1.0 | +| test.c:595:12:595:12 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:595:12:595:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:595:12:595:29 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:595:12:596:30 | ... + ... | 3.647157187323204E15 | 1.0 | 1.0 | +| test.c:595:12:597:30 | ... + ... | 2.2025801541535236E23 | 1.0 | 1.0 | +| test.c:595:12:603:26 | ... + ... | 3.881087564774641E47 | 1.0 | 1.0 | +| test.c:595:12:604:61 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:595:12:616:29 | ... ? ... : ... | 6.08636382738973E71 | 1.0 | 1.0 | +| test.c:595:16:595:29 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:595:17:595:18 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:595:17:595:23 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:595:17:595:28 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:595:22:595:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:595:22:595:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:595:27:595:28 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:595:27:595:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:596:13:596:30 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:596:14:596:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:596:14:596:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:596:14:596:19 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:596:14:596:24 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:596:14:596:29 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:596:18:596:19 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:596:23:596:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:596:23:596:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:596:28:596:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:596:28:596:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:597:13:597:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:597:13:597:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:597:13:597:30 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:597:17:597:30 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:597:18:597:19 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:597:18:597:24 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:597:18:597:29 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:597:23:597:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:597:23:597:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:597:28:597:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:597:28:597:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:598:13:603:26 | (...) | 1.7620641670887053E24 | 1.0 | 1.0 | +| test.c:598:14:598:25 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:598:14:598:30 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:598:14:599:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:598:14:603:25 | ... ? ... : ... | 1.7620641670887053E24 | 1.0 | 1.0 | +| test.c:598:15:598:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:598:15:598:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:598:15:598:20 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:598:15:598:24 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:598:19:598:20 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:598:24:598:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:598:24:598:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:598:29:598:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:598:29:598:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:13:599:63 | (...) | 3.647157187323204E15 | 1.0 | 1.0 | +| test.c:599:14:599:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:599:14:599:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:14:599:26 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:599:14:599:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:599:14:599:62 | ... ? ... : ... | 3.647157187323204E15 | 1.0 | 1.0 | +| test.c:599:19:599:26 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:599:20:599:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:599:20:599:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:20:599:25 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:24:599:25 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:30:599:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:599:30:599:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:30:599:36 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:35:599:36 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:40:599:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:599:40:599:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:40:599:52 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:599:45:599:52 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:599:46:599:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:599:46:599:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:46:599:51 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:50:599:51 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:56:599:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:599:56:599:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:599:56:599:62 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:61:599:62 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:600:17:600:28 | (...) | 1.20783397E8 | 1.0 | 1.0 | +| test.c:600:17:600:33 | ... * ... | 1.20783397E8 | 1.0 | 1.0 | +| test.c:600:18:600:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:600:18:600:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:600:18:600:23 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | +| test.c:600:18:600:27 | ... + ... | 1.20783397E8 | 1.0 | 1.0 | +| test.c:600:22:600:23 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:600:27:600:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:600:27:600:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:600:32:600:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:600:32:600:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:17:601:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:601:17:601:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:17:601:29 | ... * ... | 1.20783397E8 | 1.0 | 1.0 | +| test.c:601:17:601:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:601:17:603:25 | ... ? ... : ... | 1.4588628990859608E16 | 1.0 | 1.0 | +| test.c:601:22:601:29 | (...) | 1.20783397E8 | 1.0 | 1.0 | +| test.c:601:23:601:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:601:23:601:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:23:601:28 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | +| test.c:601:27:601:28 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:601:33:601:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:601:33:601:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:601:33:601:39 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | +| test.c:601:38:601:39 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:602:19:602:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:602:19:602:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:602:19:602:31 | ... * ... | 1.20783397E8 | 1.0 | 1.0 | +| test.c:602:24:602:31 | (...) | 1.20783397E8 | 1.0 | 1.0 | +| test.c:602:25:602:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:602:25:602:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:602:25:602:30 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | +| test.c:602:29:602:30 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:603:19:603:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:603:19:603:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:603:19:603:25 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | +| test.c:603:24:603:25 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:604:11:604:61 | (...) | 1.3129766091773648E17 | 1.0 | 1.0 | +| test.c:604:12:604:13 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:604:12:604:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:12:604:18 | ... * ... | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:12:604:34 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:604:12:604:60 | ... ? ... : ... | 1.3129766091773648E17 | 1.0 | 1.0 | +| test.c:604:17:604:18 | ip | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:22:604:29 | (...) | 3.62350191E8 | 1.0 | 1.0 | +| test.c:604:22:604:34 | ... * ... | 3.62350191E8 | 1.0 | 1.0 | +| test.c:604:23:604:24 | ip | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:23:604:28 | ... + ... | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:28:604:28 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:604:28:604:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:33:604:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:604:33:604:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:38:604:39 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:604:38:604:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:38:604:44 | ... * ... | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:43:604:44 | ip | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:48:604:55 | (...) | 3.62350191E8 | 1.0 | 1.0 | +| test.c:604:48:604:60 | ... * ... | 3.62350191E8 | 1.0 | 1.0 | +| test.c:604:49:604:50 | ip | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:49:604:54 | ... + ... | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:54:604:54 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:604:54:604:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:604:59:604:60 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:604:59:604:60 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:605:15:605:15 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:605:15:605:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:605:15:605:32 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:605:15:606:32 | ... + ... | 5.251906436709459E17 | 1.0 | 1.0 | +| test.c:605:15:607:32 | ... + ... | 3.806058600911604E26 | 1.0 | 1.0 | +| test.c:605:15:613:28 | ... + ... | 1.1588865682845433E54 | 1.0 | 1.0 | +| test.c:605:19:605:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:605:20:605:21 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:605:20:605:26 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:605:20:605:31 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:605:25:605:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:605:25:605:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:605:30:605:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:605:30:605:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:606:15:606:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:606:16:606:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:606:16:606:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:606:16:606:21 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:606:16:606:26 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:606:16:606:31 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:606:20:606:21 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:606:25:606:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:606:25:606:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:606:30:606:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:606:30:606:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:607:15:607:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:607:15:607:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:607:15:607:32 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:607:19:607:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:607:20:607:21 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:607:20:607:26 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:607:20:607:31 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:607:25:607:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:607:25:607:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:607:30:607:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:607:30:607:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:608:15:613:28 | (...) | 3.044846887031571E27 | 1.0 | 1.0 | +| test.c:608:16:608:27 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:608:16:608:32 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:608:16:609:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:608:16:613:27 | ... ? ... : ... | 3.044846887031571E27 | 1.0 | 1.0 | +| test.c:608:17:608:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:608:17:608:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:608:17:608:22 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:608:17:608:26 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:608:21:608:22 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:608:26:608:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:608:26:608:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:608:31:608:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:608:31:608:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:15:609:65 | (...) | 5.251906436709459E17 | 1.0 | 1.0 | +| test.c:609:16:609:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:609:16:609:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:16:609:28 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:609:16:609:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:609:16:609:64 | ... ? ... : ... | 5.251906436709459E17 | 1.0 | 1.0 | +| test.c:609:21:609:28 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:609:22:609:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:609:22:609:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:22:609:27 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:26:609:27 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:32:609:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:609:32:609:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:32:609:38 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:37:609:38 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:42:609:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:609:42:609:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:42:609:54 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:609:47:609:54 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:609:48:609:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:609:48:609:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:48:609:53 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:52:609:53 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:58:609:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:609:58:609:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:609:58:609:64 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:63:609:64 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:610:19:610:30 | (...) | 1.449400765E9 | 1.0 | 1.0 | +| test.c:610:19:610:35 | ... * ... | 1.449400765E9 | 1.0 | 1.0 | +| test.c:610:20:610:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:610:20:610:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:610:20:610:25 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | +| test.c:610:20:610:29 | ... + ... | 1.449400765E9 | 1.0 | 1.0 | +| test.c:610:24:610:25 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:610:29:610:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:610:29:610:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:610:34:610:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:610:34:610:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:19:611:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:611:19:611:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:19:611:31 | ... * ... | 1.449400765E9 | 1.0 | 1.0 | +| test.c:611:19:611:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:611:19:613:27 | ... ? ... : ... | 2.1007625775825853E18 | 1.0 | 1.0 | +| test.c:611:24:611:31 | (...) | 1.449400765E9 | 1.0 | 1.0 | +| test.c:611:25:611:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:611:25:611:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:25:611:30 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | +| test.c:611:29:611:30 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:611:35:611:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:611:35:611:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:611:35:611:41 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | +| test.c:611:40:611:41 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:612:21:612:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:612:21:612:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:612:21:612:33 | ... * ... | 1.449400765E9 | 1.0 | 1.0 | +| test.c:612:26:612:33 | (...) | 1.449400765E9 | 1.0 | 1.0 | +| test.c:612:27:612:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:612:27:612:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:612:27:612:32 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | +| test.c:612:31:612:32 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:613:21:613:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:613:21:613:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:613:21:613:27 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | +| test.c:613:26:613:27 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:614:15:614:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:614:15:614:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:614:15:614:21 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:614:15:614:37 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:614:15:616:29 | ... ? ... : ... | 5.251906436709459E17 | 1.0 | 1.0 | +| test.c:614:20:614:21 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:614:25:614:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:614:25:614:37 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:614:26:614:27 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:614:26:614:31 | ... + ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:614:31:614:31 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:614:31:614:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:614:36:614:37 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:614:36:614:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:615:17:615:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:615:17:615:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:615:17:615:23 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:615:22:615:23 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:616:17:616:24 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:616:17:616:29 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:616:18:616:19 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:616:18:616:23 | ... + ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:616:23:616:23 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:616:23:616:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:616:28:616:29 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:616:28:616:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:617:11:617:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:617:11:617:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:617:11:617:28 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:617:11:637:46 | ... + ... | 9.943431528813442E94 | 1.0 | 1.0 | +| test.c:617:15:617:28 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:617:16:617:17 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:617:16:617:22 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:617:16:617:27 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:617:21:617:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:617:21:617:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:617:26:617:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:617:26:617:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:618:11:637:46 | (...) | 1.715093535659983E85 | 1.0 | 1.0 | +| test.c:618:12:618:12 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:618:12:618:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:618:12:618:29 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:618:12:619:30 | ... + ... | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:618:12:620:30 | ... + ... | 1.9487020066918396E29 | 1.0 | 1.0 | +| test.c:618:12:626:26 | ... + ... | 3.0379516094938436E59 | 1.0 | 1.0 | +| test.c:618:12:627:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:618:12:637:45 | ... ? ... : ... | 1.715093535659983E85 | 1.0 | 1.0 | +| test.c:618:16:618:29 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:618:17:618:18 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:618:17:618:23 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:618:17:618:28 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:618:22:618:23 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:618:22:618:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:618:27:618:28 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:618:27:618:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:619:13:619:30 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:619:14:619:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:619:14:619:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:619:14:619:19 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:619:14:619:24 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:619:14:619:29 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:619:18:619:19 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:619:23:619:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:619:23:619:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:619:28:619:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:619:28:619:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:620:13:620:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:620:13:620:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:620:13:620:30 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:620:17:620:30 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:620:18:620:19 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:620:18:620:24 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:620:18:620:29 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:620:23:620:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:620:23:620:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:620:28:620:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:620:28:620:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:621:13:626:26 | (...) | 1.558961605756818E30 | 1.0 | 1.0 | +| test.c:621:14:621:25 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:621:14:621:30 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:621:14:622:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:621:14:626:25 | ... ? ... : ... | 1.558961605756818E30 | 1.0 | 1.0 | +| test.c:621:15:621:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:621:15:621:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:621:15:621:20 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:621:15:621:24 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:621:19:621:20 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:621:24:621:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:621:24:621:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:621:29:621:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:621:29:621:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:13:622:63 | (...) | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:622:14:622:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:622:14:622:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:14:622:26 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:622:14:622:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:622:14:622:62 | ... ? ... : ... | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:622:19:622:26 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:622:20:622:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:622:20:622:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:20:622:25 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:24:622:25 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:30:622:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:622:30:622:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:30:622:36 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:35:622:36 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:40:622:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:622:40:622:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:40:622:52 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:622:45:622:52 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:622:46:622:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:622:46:622:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:46:622:51 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:50:622:51 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:56:622:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:622:56:622:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:622:56:622:62 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:61:622:62 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:623:17:623:28 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:623:17:623:33 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:623:18:623:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:623:18:623:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:623:18:623:23 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:623:18:623:27 | ... + ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:623:22:623:23 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:623:27:623:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:623:27:623:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:623:32:623:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:623:32:623:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:17:624:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:624:17:624:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:17:624:29 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:624:17:624:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:624:17:626:25 | ... ? ... : ... | 1.3444880494209504E20 | 1.0 | 1.0 | +| test.c:624:22:624:29 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:624:23:624:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:624:23:624:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:23:624:28 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:624:27:624:28 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:624:33:624:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:624:33:624:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:624:33:624:39 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:624:38:624:39 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:625:19:625:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:625:19:625:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:625:19:625:31 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:625:24:625:31 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:625:25:625:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:625:25:625:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:625:25:625:30 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:625:29:625:30 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:626:19:626:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:626:19:626:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:626:19:626:25 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:626:24:626:25 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:627:11:627:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:627:11:627:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:11:627:16 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:627:11:627:21 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:627:11:627:41 | ... + ... | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:627:15:627:16 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:627:20:627:21 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:627:20:627:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:25:627:36 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:627:25:627:41 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:627:26:627:26 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:627:26:627:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:26:627:31 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:627:26:627:35 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:627:30:627:31 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:627:35:627:35 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:627:35:627:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:627:40:627:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:627:40:627:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:628:15:628:15 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:628:15:628:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:628:15:628:32 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:628:15:629:32 | ... + ... | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:628:15:630:32 | ... + ... | 4.209196335543408E31 | 1.0 | 1.0 | +| test.c:628:15:636:28 | ... + ... | 1.417386703353284E64 | 1.0 | 1.0 | +| test.c:628:19:628:32 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:628:20:628:21 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:628:20:628:26 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:628:20:628:31 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:628:25:628:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:628:25:628:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:628:30:628:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:628:30:628:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:629:15:629:32 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:629:16:629:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:629:16:629:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:629:16:629:21 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:629:16:629:26 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:629:16:629:31 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:629:20:629:21 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:629:25:629:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:629:25:629:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:629:30:629:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:629:30:629:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:630:15:630:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:630:15:630:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:630:15:630:32 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:630:19:630:32 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:630:20:630:21 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:630:20:630:26 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:630:20:630:31 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:630:25:630:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:630:25:630:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:630:30:630:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:630:30:630:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:631:15:636:28 | (...) | 3.367357068579931E32 | 1.0 | 1.0 | +| test.c:631:16:631:27 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:631:16:631:32 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:631:16:632:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:631:16:636:27 | ... ? ... : ... | 3.367357068579931E32 | 1.0 | 1.0 | +| test.c:631:17:631:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:631:17:631:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:631:17:631:22 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:631:17:631:26 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:631:21:631:22 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:631:26:631:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:631:26:631:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:631:31:631:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:631:31:631:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:15:632:65 | (...) | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:632:16:632:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:632:16:632:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:16:632:28 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:632:16:632:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:632:16:632:64 | ... ? ... : ... | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:632:21:632:28 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:632:22:632:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:632:22:632:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:22:632:27 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:26:632:27 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:32:632:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:632:32:632:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:32:632:38 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:37:632:38 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:42:632:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:632:42:632:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:42:632:54 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:632:47:632:54 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:632:48:632:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:632:48:632:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:48:632:53 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:52:632:53 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:58:632:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:632:58:632:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:632:58:632:64 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:63:632:64 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:633:19:633:30 | (...) | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:633:19:633:35 | ... * ... | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:633:20:633:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:633:20:633:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:633:20:633:25 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:633:20:633:29 | ... + ... | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:633:24:633:25 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:633:29:633:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:633:29:633:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:633:34:633:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:633:34:633:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:19:634:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:634:19:634:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:19:634:31 | ... * ... | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:634:19:634:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:634:19:636:27 | ... ? ... : ... | 4.840156978054564E21 | 1.0 | 1.0 | +| test.c:634:24:634:31 | (...) | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:634:25:634:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:634:25:634:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:25:634:30 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:634:29:634:30 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:634:35:634:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:634:35:634:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:634:35:634:41 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:634:40:634:41 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:635:21:635:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:635:21:635:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:635:21:635:33 | ... * ... | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:635:26:635:33 | (...) | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:635:27:635:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:635:27:635:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:635:27:635:32 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:635:31:635:32 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:636:21:636:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:636:21:636:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:636:21:636:27 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:636:26:636:27 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:637:15:637:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:637:15:637:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:15:637:20 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:637:15:637:25 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:637:15:637:45 | ... + ... | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:637:19:637:20 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:637:24:637:25 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:637:24:637:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:29:637:40 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:637:29:637:45 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:637:30:637:30 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:637:30:637:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:30:637:35 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:637:30:637:39 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:637:34:637:35 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:637:39:637:39 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:637:39:637:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:637:44:637:45 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:637:44:637:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:638:11:638:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:638:11:638:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:638:11:638:28 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:638:11:639:32 | ... + ... | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:638:11:640:32 | ... + ... | 1.9487020066918396E29 | 1.0 | 1.0 | +| test.c:638:11:646:28 | ... + ... | 3.0379516094938436E59 | 1.0 | 1.0 | +| test.c:638:11:647:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:638:11:659:27 | ... ? ... : ... | 4.390639451194891E87 | 1.0 | 1.0 | +| test.c:638:15:638:28 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:638:16:638:17 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:638:16:638:22 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:638:16:638:27 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:638:21:638:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:638:21:638:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:638:26:638:27 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:638:26:638:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:639:15:639:32 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:639:16:639:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:639:16:639:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:639:16:639:21 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:639:16:639:26 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:639:16:639:31 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:639:20:639:21 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:639:25:639:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:639:25:639:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:639:30:639:31 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:639:30:639:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:640:15:640:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:640:15:640:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:640:15:640:32 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:640:19:640:32 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:640:20:640:21 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:640:20:640:26 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:640:20:640:31 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:640:25:640:26 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:640:25:640:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:640:30:640:31 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:640:30:640:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:641:15:646:28 | (...) | 1.558961605756818E30 | 1.0 | 1.0 | +| test.c:641:16:641:27 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:641:16:641:32 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:641:16:642:65 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:641:16:646:27 | ... ? ... : ... | 1.558961605756818E30 | 1.0 | 1.0 | +| test.c:641:17:641:17 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:641:17:641:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:641:17:641:22 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:641:17:641:26 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:641:21:641:22 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:641:26:641:26 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:641:26:641:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:641:31:641:32 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:641:31:641:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:15:642:65 | (...) | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:642:16:642:17 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:642:16:642:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:16:642:28 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:642:16:642:38 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:642:16:642:64 | ... ? ... : ... | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:642:21:642:28 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:642:22:642:22 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:642:22:642:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:22:642:27 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:26:642:27 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:32:642:33 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:642:32:642:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:32:642:38 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:37:642:38 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:42:642:43 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:642:42:642:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:42:642:54 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:642:47:642:54 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:642:48:642:48 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:642:48:642:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:48:642:53 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:52:642:53 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:58:642:59 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:642:58:642:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:642:58:642:64 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:63:642:64 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:643:19:643:30 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:643:19:643:35 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:643:20:643:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:643:20:643:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:643:20:643:25 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:643:20:643:29 | ... + ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:643:24:643:25 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:643:29:643:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:643:29:643:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:643:34:643:35 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:643:34:643:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:19:644:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:644:19:644:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:19:644:31 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:644:19:644:41 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:644:19:646:27 | ... ? ... : ... | 1.3444880494209504E20 | 1.0 | 1.0 | +| test.c:644:24:644:31 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:644:25:644:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:644:25:644:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:25:644:30 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:644:29:644:30 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:644:35:644:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:644:35:644:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:644:35:644:41 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:644:40:644:41 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:645:21:645:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:645:21:645:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:645:21:645:33 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:645:26:645:33 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:645:27:645:27 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:645:27:645:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:645:27:645:32 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:645:31:645:32 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:646:21:646:22 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:646:21:646:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:646:21:646:27 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:646:26:646:27 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:647:13:647:63 | (...) | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:647:14:647:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:647:14:647:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:14:647:20 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:14:647:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:647:14:647:62 | ... ? ... : ... | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:647:19:647:20 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:24:647:31 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:647:24:647:36 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:647:25:647:26 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:25:647:30 | ... + ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:30:647:30 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:647:30:647:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:35:647:36 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:647:35:647:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:40:647:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:647:40:647:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:40:647:46 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:45:647:46 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:50:647:57 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:647:50:647:62 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:647:51:647:52 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:51:647:56 | ... + ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:56:647:56 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:647:56:647:56 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:647:61:647:62 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:647:61:647:62 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:648:13:648:13 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:648:13:648:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:648:13:648:30 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:648:13:649:30 | ... + ... | 4.840156977915421E21 | 1.0 | 1.0 | +| test.c:648:13:650:30 | ... + ... | 3.3673570684347266E32 | 1.0 | 1.0 | +| test.c:648:13:656:26 | ... + ... | 9.071274901265435E65 | 1.0 | 1.0 | +| test.c:648:17:648:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:648:18:648:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:648:18:648:24 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:648:18:648:29 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:648:23:648:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:648:23:648:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:648:28:648:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:648:28:648:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:649:13:649:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:649:14:649:14 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:649:14:649:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:649:14:649:19 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:649:14:649:24 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:649:14:649:29 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:649:18:649:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:649:23:649:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:649:23:649:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:649:28:649:29 | 32 | 1.0 | -1.0 | -1.0 | +| test.c:649:28:649:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:650:13:650:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:650:13:650:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:650:13:650:30 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:650:17:650:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:650:18:650:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:650:18:650:24 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:650:18:650:29 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:650:23:650:24 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:650:23:650:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:650:28:650:29 | 64 | 1.0 | -1.0 | -1.0 | +| test.c:650:28:650:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:651:13:656:26 | (...) | 2.693885654805863E33 | 1.0 | 1.0 | +| test.c:651:14:651:25 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:651:14:651:30 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:651:14:652:63 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:651:14:656:25 | ... ? ... : ... | 2.693885654805863E33 | 1.0 | 1.0 | +| test.c:651:15:651:15 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:651:15:651:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:651:15:651:20 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:651:15:651:24 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:651:19:651:20 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:651:24:651:24 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:651:24:651:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:651:29:651:30 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:651:29:651:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:13:652:63 | (...) | 4.840156977915421E21 | 1.0 | 1.0 | +| test.c:652:14:652:15 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:652:14:652:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:14:652:26 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:652:14:652:36 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:652:14:652:62 | ... ? ... : ... | 4.840156977915421E21 | 1.0 | 1.0 | +| test.c:652:19:652:26 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:652:20:652:20 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:652:20:652:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:20:652:25 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:24:652:25 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:30:652:31 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:652:30:652:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:30:652:36 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:35:652:36 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:40:652:41 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:652:40:652:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:40:652:52 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:652:45:652:52 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:652:46:652:46 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:652:46:652:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:46:652:51 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:50:652:51 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:56:652:57 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:652:56:652:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:652:56:652:62 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:61:652:62 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:653:17:653:28 | (...) | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:653:17:653:33 | ... * ... | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:653:18:653:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:653:18:653:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:653:18:653:23 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:653:18:653:27 | ... + ... | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:653:22:653:23 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:653:27:653:27 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:653:27:653:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:653:32:653:33 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:653:32:653:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:17:654:18 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:654:17:654:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:17:654:29 | ... * ... | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:654:17:654:39 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:654:17:656:25 | ... ? ... : ... | 1.936062791193997E22 | 1.0 | 1.0 | +| test.c:654:22:654:29 | (...) | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:654:23:654:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:654:23:654:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:23:654:28 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:654:27:654:28 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:654:33:654:34 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:654:33:654:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:654:33:654:39 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:654:38:654:39 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:655:19:655:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:655:19:655:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:655:19:655:31 | ... * ... | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:655:24:655:31 | (...) | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:655:25:655:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:655:25:655:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:655:25:655:30 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:655:29:655:30 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:656:19:656:20 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:656:19:656:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:656:19:656:25 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:656:24:656:25 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:657:13:657:14 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:657:13:657:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:657:13:657:19 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:657:13:657:35 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:657:13:659:27 | ... ? ... : ... | 4.840156977915421E21 | 1.0 | 1.0 | +| test.c:657:18:657:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:657:23:657:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:657:23:657:35 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:657:24:657:25 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:657:24:657:29 | ... + ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:657:29:657:29 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:657:29:657:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:657:34:657:35 | 17 | 1.0 | -1.0 | -1.0 | +| test.c:657:34:657:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:658:15:658:16 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:658:15:658:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:658:15:658:21 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:658:20:658:21 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:659:15:659:22 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:659:15:659:27 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:659:16:659:17 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:659:16:659:21 | ... + ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:659:21:659:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:659:21:659:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:659:26:659:27 | 14 | 1.0 | -1.0 | -1.0 | +| test.c:659:26:659:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:660:10:660:23 | special_number | 1.297918419127476E201 | 1.0 | 1.0 | +| test.c:667:10:667:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:668:7:668:8 | c1 | 1.0 | 1.0 | 1.0 | +| test.c:668:13:668:13 | x | 1.0 | 1.0 | 1.0 | +| test.c:668:13:668:23 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:668:18:668:23 | 748596 | 1.0 | -1.0 | -1.0 | +| test.c:669:7:669:8 | c2 | 1.0 | 1.0 | 1.0 | +| test.c:669:13:669:13 | x | 2.0 | 2.0 | 2.0 | +| test.c:669:13:669:25 | ... += ... | 2.0 | 2.0 | 2.0 | +| test.c:669:18:669:25 | 84652395 | 1.0 | -1.0 | -1.0 | +| test.c:670:7:670:8 | c3 | 1.0 | 1.0 | 1.0 | +| test.c:670:13:670:13 | x | 4.0 | 4.0 | 4.0 | +| test.c:670:13:670:24 | ... += ... | 4.0 | 4.0 | 4.0 | +| test.c:670:18:670:24 | 3675895 | 1.0 | -1.0 | -1.0 | +| test.c:671:7:671:8 | c4 | 1.0 | 1.0 | 1.0 | +| test.c:671:13:671:13 | x | 8.0 | 8.0 | 8.0 | +| test.c:671:13:671:22 | ... += ... | 8.0 | 8.0 | 8.0 | +| test.c:671:18:671:22 | 98634 | 1.0 | -1.0 | -1.0 | +| test.c:672:7:672:8 | c5 | 1.0 | 1.0 | 1.0 | +| test.c:672:13:672:13 | x | 16.0 | 16.0 | 16.0 | +| test.c:672:13:672:24 | ... += ... | 16.0 | 16.0 | 16.0 | +| test.c:672:18:672:24 | 7834985 | 1.0 | -1.0 | -1.0 | +| test.c:673:7:673:8 | c1 | 2.0 | 2.0 | 2.0 | +| test.c:673:7:673:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:673:13:673:14 | c2 | 2.0 | 2.0 | 2.0 | +| test.c:673:19:673:19 | x | 32.0 | 32.0 | 32.0 | +| test.c:673:19:673:32 | ... += ... | 32.0 | 32.0 | 32.0 | +| test.c:673:24:673:32 | 938457398 | 1.0 | -1.0 | -1.0 | +| test.c:674:7:674:8 | c1 | 3.0 | 3.0 | 3.0 | +| test.c:674:7:674:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:674:13:674:14 | c3 | 2.0 | 2.0 | 2.0 | +| test.c:674:19:674:19 | x | 64.0 | 64.0 | 64.0 | +| test.c:674:19:674:31 | ... += ... | 64.0 | 64.0 | 64.0 | +| test.c:674:24:674:31 | 73895648 | 1.0 | -1.0 | -1.0 | +| test.c:675:7:675:8 | c1 | 4.0 | 3.0 | 3.0 | +| test.c:675:7:675:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:675:13:675:14 | c4 | 2.0 | 2.0 | 2.0 | +| test.c:675:19:675:19 | x | 128.0 | 128.0 | 128.0 | +| test.c:675:19:675:31 | ... += ... | 128.0 | 128.0 | 128.0 | +| test.c:675:24:675:31 | 12345432 | 1.0 | -1.0 | -1.0 | +| test.c:676:7:676:8 | c1 | 5.0 | 3.0 | 3.0 | +| test.c:676:7:676:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:676:13:676:14 | c5 | 2.0 | 2.0 | 2.0 | +| test.c:676:19:676:19 | x | 256.0 | 256.0 | 256.0 | +| test.c:676:19:676:28 | ... += ... | 256.0 | 256.0 | 256.0 | +| test.c:676:24:676:28 | 38847 | 1.0 | -1.0 | -1.0 | +| test.c:677:7:677:8 | c2 | 5.0 | 3.0 | 3.0 | +| test.c:677:7:677:14 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:677:13:677:14 | c3 | 5.0 | 3.0 | 3.0 | +| test.c:677:19:677:19 | x | 512.0 | 512.0 | 512.0 | +| test.c:677:19:677:26 | ... += ... | 512.0 | 512.0 | 512.0 | +| test.c:677:24:677:26 | 234 | 1.0 | -1.0 | -1.0 | +| test.c:679:11:679:11 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:11:679:15 | ... + ... | 1048576.0 | 3.0 | 10.0 | +| test.c:679:11:679:19 | ... + ... | 1.073741824E9 | 5.0 | 14.0 | +| test.c:679:11:679:23 | ... + ... | 1.099511627776E12 | 5.0 | 14.0 | +| test.c:679:11:679:27 | ... + ... | 1.125899906842624E15 | 5.0 | 14.0 | +| test.c:679:11:679:31 | ... + ... | 1.152921504606847E18 | 5.0 | 14.0 | +| test.c:679:11:679:35 | ... + ... | 1.1805916207174113E21 | 5.0 | 14.0 | +| test.c:679:11:679:39 | ... + ... | 1.2089258196146292E24 | 5.0 | 14.0 | +| test.c:679:11:679:43 | ... + ... | 1.2379400392853803E27 | 5.0 | 14.0 | +| test.c:679:11:679:47 | ... + ... | 1.2676506002282294E30 | 5.0 | 14.0 | +| test.c:679:11:679:51 | ... + ... | 1.298074214633707E33 | 5.0 | 14.0 | +| test.c:679:11:679:55 | ... + ... | 1.329227995784916E36 | 5.0 | 14.0 | +| test.c:679:15:679:15 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:19:679:19 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:23:679:23 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:27:679:27 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:31:679:31 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:35:679:35 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:39:679:39 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:43:679:43 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:47:679:47 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:51:679:51 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:679:55:679:55 | x | 1024.0 | 1024.0 | 1024.0 | +| test.c:680:10:680:10 | y | 1.329227995784916E36 | 3.0 | 5.0 | +| test.c:685:20:685:20 | x | 1.0 | 1.0 | 1.0 | +| test.c:685:20:685:26 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:685:20:685:36 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | +| test.c:685:24:685:26 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:685:24:685:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:685:30:685:30 | x | 1.0 | 1.0 | 1.0 | +| test.c:685:34:685:36 | 100 | 1.0 | -1.0 | -1.0 | +| test.c:685:34:685:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:688:3:688:4 | y1 | 1.0 | -1.0 | -1.0 | +| test.c:688:9:688:11 | ++ ... | 1.0 | 1.0 | 1.0 | +| test.c:688:11:688:11 | y | 1.0 | 1.0 | 1.0 | +| test.c:689:3:689:4 | y2 | 1.0 | -1.0 | -1.0 | +| test.c:689:19:689:19 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:689:19:689:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:698:3:698:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:698:3:698:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:698:7:698:8 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:699:7:699:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:701:3:701:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:701:3:701:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:701:7:701:8 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:702:3:702:3 | i | 1.0 | 1.0 | 1.0 | +| test.c:702:3:702:9 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:702:8:702:9 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:703:7:703:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:705:3:705:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:705:3:705:8 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:705:7:705:8 | 40 | 1.0 | -1.0 | -1.0 | +| test.c:706:3:706:3 | i | 1.0 | 1.0 | 1.0 | +| test.c:706:3:706:9 | ... -= ... | 1.0 | 1.0 | 1.0 | +| test.c:706:8:706:9 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:707:7:707:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:709:3:709:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:709:3:709:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:709:7:709:7 | j | 1.0 | -1.0 | -1.0 | +| test.c:709:7:709:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:709:11:709:12 | 40 | 1.0 | -1.0 | -1.0 | +| test.c:710:7:710:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:712:3:712:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:712:3:712:15 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:712:7:712:15 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:712:8:712:8 | j | 1.0 | 1.0 | 1.0 | +| test.c:712:8:712:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:712:13:712:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:713:7:713:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:715:3:715:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:715:3:715:20 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:715:7:715:8 | 20 | 1.0 | -1.0 | -1.0 | +| test.c:715:7:715:20 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:715:12:715:20 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:715:13:715:13 | j | 1.0 | 1.0 | 1.0 | +| test.c:715:13:715:19 | ... -= ... | 1.0 | 1.0 | 1.0 | +| test.c:715:18:715:19 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:716:7:716:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:721:14:721:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:723:7:723:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:723:7:723:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:723:12:723:12 | a | 1.0 | 1.0 | 1.0 | +| test.c:723:17:723:17 | a | 1.0 | 1.0 | 1.0 | +| test.c:723:17:723:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:22:723:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:723:22:723:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:723:28:723:28 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:723:28:723:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:723:28:723:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:33:723:33 | b | 1.0 | 1.0 | 1.0 | +| test.c:723:38:723:38 | b | 1.0 | 1.0 | 1.0 | +| test.c:723:38:723:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:723:43:723:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:723:43:723:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:724:13:724:13 | a | 1.0 | 1.0 | 1.0 | +| test.c:724:13:724:15 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:724:13:724:15 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:724:15:724:15 | b | 1.0 | 1.0 | 1.0 | +| test.c:725:5:725:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:725:5:725:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:725:14:725:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:727:7:727:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:727:7:727:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:33 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:727:7:727:44 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:727:12:727:12 | a | 2.0 | 3.0 | 3.0 | +| test.c:727:17:727:17 | a | 2.0 | 2.0 | 3.0 | +| test.c:727:17:727:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:22:727:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:727:22:727:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:727:28:727:28 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:727:28:727:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:727:28:727:33 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:33:727:33 | b | 3.0 | 3.0 | 3.0 | +| test.c:727:38:727:38 | b | 3.0 | 3.0 | 3.0 | +| test.c:727:38:727:44 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:727:43:727:44 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:727:43:727:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:728:13:728:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:728:13:728:15 | (int)... | 6.0 | 5.0 | 4.0 | +| test.c:728:13:728:15 | ... * ... | 6.0 | 5.0 | 4.0 | +| test.c:728:15:728:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:729:5:729:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:729:5:729:14 | ... += ... | 12.0 | 9.0 | 8.0 | +| test.c:729:14:729:14 | r | 6.0 | 5.0 | 4.0 | +| test.c:731:7:731:7 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:731:7:731:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:34 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:731:7:731:45 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:731:12:731:12 | a | 3.0 | 3.0 | 3.0 | +| test.c:731:17:731:17 | a | 3.0 | 2.0 | 3.0 | +| test.c:731:17:731:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:22:731:23 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:731:22:731:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:731:28:731:29 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:731:28:731:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:731:28:731:34 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:34:731:34 | b | 7.0 | 3.0 | 3.0 | +| test.c:731:39:731:39 | b | 7.0 | 2.0 | 3.0 | +| test.c:731:39:731:45 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:731:44:731:45 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:731:44:731:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:732:13:732:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:732:13:732:15 | (int)... | 21.0 | 4.0 | 4.0 | +| test.c:732:13:732:15 | ... * ... | 21.0 | 4.0 | 4.0 | +| test.c:732:15:732:15 | b | 7.0 | 2.0 | 2.0 | +| test.c:733:5:733:9 | total | 14.0 | 9.0 | 9.0 | +| test.c:733:5:733:14 | ... += ... | 294.0 | 34.0 | 24.0 | +| test.c:733:14:733:14 | r | 21.0 | 4.0 | 4.0 | +| test.c:736:10:736:14 | total | 308.0 | 39.0 | 25.0 | +| test.c:740:14:740:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:742:7:742:7 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:742:7:742:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:742:7:742:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:742:7:742:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:742:12:742:12 | b | 1.0 | 1.0 | 1.0 | +| test.c:742:17:742:17 | b | 1.0 | 1.0 | 1.0 | +| test.c:742:17:742:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:742:22:742:23 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:742:22:742:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:743:13:743:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:743:13:743:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:743:13:743:16 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:743:13:743:16 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:743:16:743:16 | b | 1.0 | 1.0 | 1.0 | +| test.c:744:5:744:9 | total | 1.0 | 1.0 | 1.0 | +| test.c:744:5:744:14 | ... += ... | 1.0 | 1.0 | 1.0 | +| test.c:744:14:744:14 | r | 1.0 | 1.0 | 1.0 | +| test.c:746:7:746:7 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:746:7:746:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:746:7:746:12 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:746:7:746:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:746:12:746:12 | b | 2.0 | 3.0 | 3.0 | +| test.c:746:17:746:17 | b | 2.0 | 3.0 | 3.0 | +| test.c:746:17:746:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:746:22:746:23 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:746:22:746:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:747:13:747:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:747:13:747:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:747:13:747:16 | (int)... | 2.0 | 3.0 | 2.0 | +| test.c:747:13:747:16 | ... * ... | 2.0 | 3.0 | 2.0 | +| test.c:747:16:747:16 | b | 2.0 | 3.0 | 2.0 | +| test.c:748:5:748:9 | total | 2.0 | 2.0 | 2.0 | +| test.c:748:5:748:14 | ... += ... | 4.0 | 5.0 | 4.0 | +| test.c:748:14:748:14 | r | 2.0 | 3.0 | 2.0 | +| test.c:750:7:750:8 | 13 | 1.0 | -1.0 | -1.0 | +| test.c:750:7:750:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:750:7:750:13 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:750:7:750:24 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:750:13:750:13 | b | 3.0 | 3.0 | 3.0 | +| test.c:750:18:750:18 | b | 3.0 | 2.0 | 3.0 | +| test.c:750:18:750:24 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:750:23:750:24 | 23 | 1.0 | -1.0 | -1.0 | +| test.c:750:23:750:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:751:13:751:14 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:751:13:751:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:751:13:751:16 | (int)... | 3.0 | 2.0 | 2.0 | +| test.c:751:13:751:16 | ... * ... | 3.0 | 2.0 | 2.0 | +| test.c:751:16:751:16 | b | 3.0 | 2.0 | 2.0 | +| test.c:752:5:752:9 | total | 6.0 | 5.0 | 5.0 | +| test.c:752:5:752:14 | ... += ... | 18.0 | 10.0 | 8.0 | +| test.c:752:14:752:14 | r | 3.0 | 2.0 | 2.0 | +| test.c:755:10:755:14 | total | 24.0 | 13.0 | 9.0 | +| test.c:760:3:760:3 | x | 1.0 | -1.0 | -1.0 | +| test.c:760:3:760:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:760:7:760:7 | y | 1.0 | -1.0 | -1.0 | +| test.c:760:7:760:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:760:11:760:22 | 1000000003 | 1.0 | -1.0 | -1.0 | +| test.c:761:3:761:4 | xy | 1.0 | -1.0 | -1.0 | +| test.c:761:3:761:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:761:8:761:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:761:8:761:12 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:761:12:761:12 | y | 1.0 | 1.0 | 1.0 | +| test.c:762:10:762:11 | xy | 1.0 | 1.0 | 1.0 | +| test.c:767:3:767:3 | x | 1.0 | -1.0 | -1.0 | +| test.c:767:3:767:14 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:767:7:767:14 | 274177 | 1.0 | -1.0 | -1.0 | +| test.c:768:3:768:3 | y | 1.0 | -1.0 | -1.0 | +| test.c:768:3:768:22 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:768:7:768:22 | 67280421310721 | 1.0 | -1.0 | -1.0 | +| test.c:769:3:769:4 | xy | 1.0 | -1.0 | -1.0 | +| test.c:769:3:769:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:769:8:769:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:769:8:769:12 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:769:12:769:12 | y | 1.0 | 1.0 | 1.0 | +| test.c:770:10:770:11 | xy | 1.0 | 1.0 | 1.0 | +| test.c:774:7:774:8 | ui | 1.0 | 1.0 | 1.0 | +| test.c:774:7:774:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:774:13:774:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:774:13:774:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:775:28:775:44 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:775:28:775:49 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:775:43:775:44 | ui | 1.0 | 1.0 | 1.0 | +| test.c:775:48:775:49 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:775:48:775:49 | ui | 1.0 | 1.0 | 1.0 | +| test.c:776:12:776:17 | result | 1.0 | 1.0 | 1.0 | +| test.c:778:7:778:8 | ul | 1.0 | 1.0 | 1.0 | +| test.c:778:7:778:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:778:13:778:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:778:13:778:14 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:779:28:779:29 | ul | 1.0 | 1.0 | 1.0 | +| test.c:779:28:779:34 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:779:33:779:34 | ul | 1.0 | 1.0 | 1.0 | +| test.c:780:12:780:17 | result | 1.0 | 1.0 | 1.0 | +| test.c:782:10:782:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:782:10:782:10 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:786:7:786:8 | ui | 1.0 | 1.0 | 1.0 | +| test.c:786:7:786:14 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:786:7:786:25 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:786:13:786:14 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:786:13:786:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:786:19:786:20 | ui | 1.0 | 1.0 | 1.0 | +| test.c:786:19:786:25 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:786:25:786:25 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:786:25:786:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:787:5:787:6 | ui | 1.0 | 1.0 | 1.0 | +| test.c:787:5:787:16 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:787:11:787:12 | ui | 1.0 | 1.0 | 1.0 | +| test.c:787:11:787:16 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:787:16:787:16 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:787:16:787:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:788:12:788:13 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:788:12:788:13 | ui | 1.0 | 1.0 | 1.0 | +| test.c:791:26:791:27 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:791:26:791:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:792:3:792:9 | uiconst | 1.0 | 1.0 | 1.0 | +| test.c:792:3:792:14 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:792:14:792:14 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:792:14:792:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:794:27:794:28 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:794:27:794:28 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:795:3:795:9 | ulconst | 1.0 | 1.0 | 1.0 | +| test.c:795:3:795:14 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:795:14:795:14 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:795:14:795:14 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:796:10:796:16 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:796:10:796:16 | uiconst | 1.0 | 1.0 | 1.0 | +| test.c:796:10:796:26 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:796:20:796:26 | ulconst | 1.0 | 1.0 | 1.0 | +| test.c:800:7:800:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:800:7:800:13 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:800:7:800:23 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:800:12:800:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:800:13:800:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:800:18:800:18 | i | 1.0 | 1.0 | 1.0 | +| test.c:800:18:800:23 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:800:23:800:23 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:801:5:801:5 | i | 1.0 | -1.0 | -1.0 | +| test.c:801:5:801:13 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:801:9:801:9 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:801:9:801:13 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:801:13:801:13 | i | 1.0 | 1.0 | 1.0 | +| test.c:802:9:802:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:804:5:804:5 | i | 1.0 | -1.0 | -1.0 | +| test.c:804:5:804:14 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:804:9:804:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:804:9:804:14 | ... * ... | 1.0 | 1.0 | 1.0 | +| test.c:804:13:804:14 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:804:14:804:14 | 3 | 1.0 | -1.0 | -1.0 | +| test.c:805:9:805:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:807:5:807:5 | i | 1.0 | 1.0 | 1.0 | +| test.c:807:5:807:10 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:807:10:807:10 | 7 | 1.0 | -1.0 | -1.0 | +| test.c:808:9:808:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:810:5:810:5 | i | 1.0 | 1.0 | 1.0 | +| test.c:810:5:810:12 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:810:10:810:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:810:11:810:12 | 11 | 1.0 | -1.0 | -1.0 | +| test.c:811:9:811:9 | i | 1.0 | 1.0 | 1.0 | +| test.c:813:7:813:7 | i | 2.0 | 3.0 | 3.0 | +| test.c:813:7:813:13 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:813:12:813:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:813:13:813:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:814:5:814:5 | i | 1.0 | -1.0 | -1.0 | +| test.c:814:5:814:27 | ... = ... | 2.0 | 2.0 | 2.0 | +| test.c:814:9:814:9 | i | 2.0 | 2.0 | 2.0 | +| test.c:814:9:814:27 | ... * ... | 2.0 | 2.0 | 2.0 | +| test.c:814:13:814:27 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:814:18:814:27 | 4294967295 | 1.0 | -1.0 | -1.0 | +| test.c:815:9:815:9 | i | 2.0 | 2.0 | 2.0 | +| test.c:817:3:817:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:817:3:817:12 | ... = ... | 4.0 | 6.0 | 5.0 | +| test.c:817:7:817:7 | i | 4.0 | 5.0 | 5.0 | +| test.c:817:7:817:12 | ... * ... | 4.0 | 5.0 | 5.0 | +| test.c:817:11:817:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:817:12:817:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:818:10:818:10 | i | 4.0 | 6.0 | 5.0 | +| test.c:820:20:820:20 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:820:20:820:20 | (signed char)... | 1.0 | 1.0 | 1.0 | +| test.c:821:3:821:3 | i | 1.0 | -1.0 | -1.0 | +| test.c:821:3:821:17 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:821:7:821:17 | (...) | 1.0 | 1.0 | 1.0 | +| test.c:821:7:821:17 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:821:8:821:11 | * ... | 1.0 | -1.0 | -1.0 | +| test.c:821:8:821:16 | ... *= ... | 1.0 | 1.0 | 1.0 | +| test.c:821:10:821:11 | sc | 1.0 | 1.0 | 1.0 | +| test.c:821:16:821:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:823:7:823:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:825:10:825:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:830:7:830:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:830:7:830:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:832:7:832:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:832:7:832:11 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.c:832:11:832:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:832:11:832:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:833:9:833:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:833:9:833:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:836:7:836:7 | n | 2.0 | 2.0 | 2.0 | +| test.c:836:7:836:12 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:836:12:836:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:836:12:836:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:837:9:837:9 | (int)... | 2.0 | 1.0 | 1.0 | +| test.c:837:9:837:9 | n | 2.0 | 1.0 | 1.0 | +| test.c:839:9:839:9 | (int)... | 2.0 | 2.0 | 1.0 | +| test.c:839:9:839:9 | n | 2.0 | 2.0 | 1.0 | +| test.c:842:7:842:8 | ! ... | 1.0 | -1.0 | -1.0 | +| test.c:842:8:842:8 | n | 4.0 | 2.0 | 2.0 | +| test.c:843:9:843:9 | (int)... | 4.0 | 2.0 | 1.0 | +| test.c:843:9:843:9 | n | 4.0 | 2.0 | 1.0 | +| test.c:845:9:845:9 | (int)... | 4.0 | 1.0 | 1.0 | +| test.c:845:9:845:9 | n | 4.0 | 1.0 | 1.0 | +| test.c:848:10:848:10 | n | 13.0 | 2.0 | 2.0 | +| test.c:848:10:848:15 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:848:15:848:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:848:15:848:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:849:5:849:5 | n | 13.0 | 1.0 | 1.0 | +| test.c:849:5:849:7 | ... -- | 13.0 | 1.0 | 1.0 | +| test.c:852:7:852:7 | (int)... | 13.0 | 2.0 | 1.0 | +| test.c:852:7:852:7 | n | 13.0 | 2.0 | 1.0 | +| test.c:856:7:856:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:856:7:856:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:856:7:856:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:856:11:856:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:859:7:859:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:859:7:859:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:859:7:859:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:859:12:859:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:860:9:860:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:860:9:860:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:862:9:862:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:862:9:862:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:865:7:865:7 | n | 2.0 | 2.0 | 2.0 | +| test.c:866:9:866:9 | (int)... | 2.0 | 1.0 | 2.0 | +| test.c:866:9:866:9 | n | 2.0 | 1.0 | 2.0 | +| test.c:868:9:868:9 | (int)... | 2.0 | 2.0 | 1.0 | +| test.c:868:9:868:9 | n | 2.0 | 2.0 | 1.0 | +| test.c:871:10:871:10 | (int)... | 13.0 | 2.0 | 4.0 | +| test.c:871:10:871:10 | n | 12.0 | 2.0 | 4.0 | +| test.c:871:10:871:15 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:871:15:871:15 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:872:5:872:5 | n | 12.0 | 1.0 | 3.0 | +| test.c:872:5:872:7 | ... -- | 12.0 | 1.0 | 3.0 | +| test.c:875:7:875:7 | (int)... | 12.0 | 2.0 | 3.0 | +| test.c:875:7:875:7 | n | 12.0 | 2.0 | 3.0 | +| test.c:879:7:879:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:879:7:879:7 | n | 1.0 | 1.0 | 1.0 | +| test.c:879:7:879:12 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:879:12:879:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:880:9:880:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:880:9:880:9 | n | 1.0 | 1.0 | 1.0 | +| test.c:880:9:880:14 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:880:14:880:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:881:11:881:11 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:881:11:881:11 | n | 1.0 | 1.0 | 1.0 | +| test.c:885:7:885:7 | (int)... | 2.0 | 2.0 | 3.0 | +| test.c:885:7:885:7 | n | 2.0 | 2.0 | 3.0 | +| test.c:885:7:885:12 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:885:12:885:12 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:886:9:886:9 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:886:9:886:13 | ... * ... | 2.0 | 1.0 | 3.0 | +| test.c:886:9:886:18 | ... - ... | 2.0 | 1.0 | 3.0 | +| test.c:886:9:886:23 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.c:886:13:886:13 | (int)... | 2.0 | 1.0 | 3.0 | +| test.c:886:13:886:13 | n | 2.0 | 1.0 | 3.0 | +| test.c:886:17:886:18 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:886:23:886:23 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:889:9:889:9 | (int)... | 2.0 | 1.0 | 3.0 | +| test.c:889:9:889:9 | n | 2.0 | 1.0 | 3.0 | +| test.c:892:7:892:7 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:892:7:892:7 | n | 3.0 | 3.0 | 4.0 | +| test.c:892:7:892:17 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:892:7:892:32 | ... && ... | 1.0 | -1.0 | -1.0 | +| test.c:892:12:892:17 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:892:13:892:17 | 32768 | 1.0 | -1.0 | -1.0 | +| test.c:892:22:892:22 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:892:22:892:22 | n | 3.0 | 3.0 | 4.0 | +| test.c:892:22:892:32 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:892:27:892:32 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:892:28:892:32 | 32767 | 1.0 | -1.0 | -1.0 | +| test.c:893:9:893:9 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:893:9:893:9 | n | 3.0 | 3.0 | 4.0 | +| test.c:896:7:896:7 | (int)... | 4.0 | 5.0 | 6.0 | +| test.c:896:7:896:7 | n | 4.0 | 5.0 | 6.0 | +| test.c:896:7:896:12 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:896:12:896:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:897:5:897:5 | n | 4.0 | 2.0 | 6.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 16.0 | 3.0 | 6.0 | +| test.c:897:10:897:10 | (int)... | 4.0 | 2.0 | 5.0 | +| test.c:897:10:897:10 | n | 4.0 | 2.0 | 5.0 | +| test.c:897:14:897:14 | (int)... | 4.0 | 2.0 | 4.0 | +| test.c:897:14:897:14 | n | 4.0 | 2.0 | 4.0 | +| test.c:898:5:898:6 | ! ... | 1.0 | -1.0 | -1.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 64.0 | 3.0 | 6.0 | +| test.c:898:6:898:6 | n | 8.0 | 3.0 | 6.0 | +| test.c:898:10:898:10 | (int)... | 8.0 | 3.0 | 4.0 | +| test.c:898:10:898:10 | n | 8.0 | 3.0 | 4.0 | +| test.c:898:14:898:14 | (int)... | 8.0 | 2.0 | 5.0 | +| test.c:898:14:898:14 | n | 8.0 | 2.0 | 5.0 | +| test.c:909:7:909:8 | (unsigned long)... | 1.0 | 1.0 | 1.0 | +| test.c:909:7:909:8 | ss | 1.0 | 1.0 | 1.0 | +| test.c:909:7:909:22 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:909:12:909:22 | sizeof(int) | 1.0 | -1.0 | -1.0 | +| test.c:910:9:910:10 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:910:9:910:10 | ss | 1.0 | 1.0 | 1.0 | +| test.c:913:7:913:8 | (int)... | 2.0 | 3.0 | 2.0 | +| test.c:913:7:913:8 | ss | 2.0 | 3.0 | 2.0 | +| test.c:913:7:913:17 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:913:12:913:17 | 32769 | 1.0 | -1.0 | -1.0 | +| test.c:914:9:914:10 | (int)... | 2.0 | 3.0 | 2.0 | +| test.c:914:9:914:10 | ss | 2.0 | 3.0 | 2.0 | +| test.c:917:7:917:15 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:917:7:917:15 | (short)... | 1.0 | 1.0 | 1.0 | +| test.c:917:7:917:20 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:917:14:917:15 | us | 1.0 | 1.0 | 1.0 | +| test.c:917:20:917:20 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:918:9:918:10 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:918:9:918:10 | us | 1.0 | 1.0 | 1.0 | +| test.c:921:7:921:15 | (int)... | 2.0 | 2.0 | 1.0 | +| test.c:921:7:921:15 | (short)... | 2.0 | 1.0 | 2.0 | +| test.c:921:7:921:21 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:921:14:921:15 | us | 2.0 | 1.0 | 2.0 | +| test.c:921:20:921:21 | - ... | 1.0 | 1.0 | 1.0 | +| test.c:921:21:921:21 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:922:9:922:10 | (int)... | 2.0 | 1.0 | 2.0 | +| test.c:922:9:922:10 | us | 2.0 | 1.0 | 2.0 | +| test.c:925:7:925:8 | (unsigned long)... | 3.0 | 3.0 | 2.0 | +| test.c:925:7:925:8 | ss | 3.0 | 3.0 | 2.0 | +| test.c:925:7:925:23 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:925:13:925:23 | sizeof(int) | 1.0 | -1.0 | -1.0 | +| test.c:926:9:926:10 | (int)... | 3.0 | 2.0 | 2.0 | +| test.c:926:9:926:10 | ss | 3.0 | 2.0 | 2.0 | +| test.c:929:7:929:8 | (int)... | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:8 | ss | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:12 | (unsigned long)... | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:12 | ... + ... | 4.0 | 3.0 | 2.0 | +| test.c:929:7:929:26 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:929:12:929:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:929:16:929:26 | sizeof(int) | 1.0 | -1.0 | -1.0 | +| test.c:930:9:930:10 | (int)... | 4.0 | 3.0 | 1.0 | +| test.c:930:9:930:10 | ss | 4.0 | 3.0 | 1.0 | +| test.c:936:8:936:8 | s | 1.0 | -1.0 | -1.0 | +| test.c:936:8:936:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.c:936:12:936:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:936:15:936:15 | s | 13.0 | 3.0 | 6.0 | +| test.c:936:15:936:20 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:936:19:936:20 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:936:23:936:23 | s | 13.0 | 3.0 | 5.0 | +| test.c:936:23:936:25 | ... ++ | 13.0 | 3.0 | 5.0 | +| test.c:937:18:937:18 | s | 13.0 | 3.0 | 5.0 | +| test.c:937:18:937:22 | ... + ... | 13.0 | 5.0 | 14.0 | +| test.c:937:22:937:22 | s | 13.0 | 3.0 | 5.0 | +| test.c:938:9:938:14 | result | 13.0 | 3.0 | 6.0 | +| test.c:943:10:943:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:944:7:944:7 | i | 1.0 | 1.0 | 1.0 | +| test.c:944:7:944:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:944:11:944:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:945:9:945:9 | i | 1.0 | -1.0 | -1.0 | +| test.c:948:20:948:20 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:948:20:948:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:949:7:949:7 | u | 1.0 | 1.0 | 1.0 | +| test.c:949:7:949:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.c:949:11:949:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:949:11:949:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test.c:950:9:950:9 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:950:9:950:9 | u | 1.0 | -1.0 | -1.0 | +| test.c:955:12:955:12 | s | 1.0 | 1.0 | 1.0 | +| test.c:955:12:955:16 | ... % ... | 1.0 | 3.0 | 1.0 | +| test.c:955:16:955:16 | 5 | 1.0 | -1.0 | -1.0 | +| test.c:956:7:956:8 | s2 | 1.0 | 3.0 | 1.0 | +| test.c:961:7:961:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:962:9:962:9 | y | 1.0 | 1.0 | 1.0 | +| test.c:962:9:962:14 | ... != ... | 1.0 | -1.0 | -1.0 | +| test.c:962:14:962:14 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:963:12:963:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.c:966:7:966:7 | y | 2.0 | 2.0 | 2.0 | +| test.c:975:7:975:7 | x | 1.0 | 1.0 | 1.0 | +| test.c:975:7:975:13 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.c:975:12:975:13 | 10 | 1.0 | -1.0 | -1.0 | +| test.c:980:7:980:7 | x | 13.0 | 1.0 | 1.0 | +| test.c:985:16:985:26 | 2147483647 | 1.0 | -1.0 | -1.0 | +| test.c:986:16:986:19 | 256 | 1.0 | -1.0 | -1.0 | +| test.c:987:7:987:13 | (...) | 1.0 | 2.0 | 1.0 | +| test.c:987:7:987:20 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.c:987:8:987:8 | x | 1.0 | 1.0 | 1.0 | +| test.c:987:8:987:12 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.c:987:12:987:12 | y | 1.0 | 1.0 | 1.0 | +| test.c:987:18:987:20 | 512 | 1.0 | -1.0 | -1.0 | +| test.c:988:9:988:9 | x | 1.0 | 1.0 | 1.0 | +| test.c:989:9:989:9 | y | 1.0 | 1.0 | 1.0 | +| test.c:994:9:994:11 | 1 | 1.0 | -1.0 | -1.0 | +| test.c:995:9:995:11 | 2 | 1.0 | -1.0 | -1.0 | +| test.c:996:9:996:11 | 4 | 1.0 | -1.0 | -1.0 | +| test.c:997:9:997:11 | 8 | 1.0 | -1.0 | -1.0 | +| test.c:998:9:998:12 | 16 | 1.0 | -1.0 | -1.0 | +| test.c:1002:7:1002:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.c:1002:7:1002:7 | e | 1.0 | 1.0 | 1.0 | +| test.cpp:9:11:9:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:9:12:9:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:10:7:10:7 | (bool)... | 1.0 | 1.0 | 1.0 | +| test.cpp:10:7:10:7 | b | 1.0 | 1.0 | 1.0 | +| test.cpp:11:5:11:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:11:5:11:14 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:11:12:11:12 | call to operator[] | 1.0 | -1.0 | -1.0 | +| test.cpp:11:12:11:14 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:11:13:11:13 | 3 | 1.0 | -1.0 | -1.0 | +| test.cpp:13:10:13:10 | x | 2.0 | 2.0 | 2.0 | +| test.cpp:18:12:18:31 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:18:12:18:31 | static_cast... | 1.0 | 1.0 | 1.0 | +| test.cpp:18:30:18:30 | x | 1.0 | 1.0 | 1.0 | +| test.cpp:19:10:19:11 | x0 | 1.0 | 1.0 | 1.0 | +| test.cpp:27:7:27:7 | y | 1.0 | 1.0 | 1.0 | +| test.cpp:27:7:27:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:27:12:27:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:28:5:28:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:28:5:28:9 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:28:9:28:9 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:30:7:30:7 | y | 2.0 | 2.0 | 2.0 | +| test.cpp:30:7:30:13 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:30:12:30:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:30:13:30:13 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:31:5:31:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:31:5:31:10 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:31:9:31:10 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:31:10:31:10 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:33:7:33:7 | y | 4.0 | 3.0 | 3.0 | +| test.cpp:33:7:33:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:33:12:33:12 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:34:5:34:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:34:5:34:9 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:34:9:34:9 | 1 | 1.0 | -1.0 | -1.0 | +| test.cpp:36:7:36:7 | y | 8.0 | 4.0 | 4.0 | +| test.cpp:36:7:36:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:36:12:36:15 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:36:13:36:15 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:37:5:37:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:37:5:37:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:37:9:37:12 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:37:10:37:12 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:39:7:39:7 | y | 16.0 | 5.0 | 5.0 | +| test.cpp:39:7:39:14 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:39:12:39:14 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:40:5:40:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:40:5:40:11 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:40:9:40:11 | 128 | 1.0 | -1.0 | -1.0 | +| test.cpp:42:7:42:7 | y | 32.0 | 6.0 | 6.0 | +| test.cpp:42:7:42:16 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:42:12:42:16 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:42:13:42:16 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:43:5:43:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:43:5:43:13 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:43:9:43:13 | - ... | 1.0 | 1.0 | 1.0 | +| test.cpp:43:10:43:13 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:45:7:45:7 | y | 64.0 | 7.0 | 7.0 | +| test.cpp:45:7:45:15 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:45:12:45:15 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:46:5:46:5 | x | 1.0 | -1.0 | -1.0 | +| test.cpp:46:5:46:12 | ... = ... | 1.0 | 1.0 | 1.0 | +| test.cpp:46:9:46:12 | 1024 | 1.0 | -1.0 | -1.0 | +| test.cpp:49:10:49:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:51:7:51:7 | x | 8.0 | 8.0 | 8.0 | +| test.cpp:51:7:51:12 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:51:12:51:12 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:52:15:52:21 | (bool)... | 1.0 | 2.0 | 1.0 | +| test.cpp:52:21:52:21 | x | 8.0 | 4.0 | 4.0 | +| test.cpp:53:5:53:5 | t | 1.0 | 1.0 | 1.0 | +| test.cpp:53:5:53:16 | ... += ... | 8.0 | 2.0 | 1.0 | +| test.cpp:53:10:53:16 | (int)... | 8.0 | 2.0 | 1.0 | +| test.cpp:53:15:53:16 | xb | 8.0 | 2.0 | 1.0 | +| test.cpp:56:7:56:7 | x | 16.0 | 8.0 | 8.0 | +| test.cpp:56:7:56:11 | ... > ... | 1.0 | -1.0 | -1.0 | +| test.cpp:56:11:56:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:57:15:57:21 | (bool)... | 1.0 | 1.0 | 2.0 | +| test.cpp:57:21:57:21 | x | 16.0 | 3.0 | 8.0 | +| test.cpp:58:5:58:5 | t | 9.0 | 2.0 | 1.0 | +| test.cpp:58:5:58:16 | ... += ... | 144.0 | 2.0 | 2.0 | +| test.cpp:58:10:58:16 | (int)... | 16.0 | 1.0 | 2.0 | +| test.cpp:58:15:58:16 | xb | 16.0 | 1.0 | 2.0 | +| test.cpp:61:7:61:7 | x | 17.0 | 8.0 | 8.0 | +| test.cpp:61:7:61:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.cpp:61:11:61:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:62:15:62:21 | (bool)... | 1.0 | 1.0 | 2.0 | +| test.cpp:62:21:62:21 | x | 17.0 | 8.0 | 3.0 | +| test.cpp:63:5:63:5 | t | 153.0 | 3.0 | 2.0 | +| test.cpp:63:5:63:16 | ... += ... | 2601.0 | 3.0 | 3.0 | +| test.cpp:63:10:63:16 | (int)... | 17.0 | 1.0 | 2.0 | +| test.cpp:63:15:63:16 | xb | 17.0 | 1.0 | 2.0 | +| test.cpp:66:13:66:19 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:66:19:66:19 | x | 18.0 | 8.0 | 8.0 | +| test.cpp:67:3:67:3 | t | 2754.0 | 4.0 | 3.0 | +| test.cpp:67:3:67:14 | ... += ... | 49572.0 | 5.0 | 4.0 | +| test.cpp:67:8:67:14 | (int)... | 18.0 | 2.0 | 2.0 | +| test.cpp:67:13:67:14 | xb | 18.0 | 2.0 | 2.0 | +| test.cpp:69:10:69:10 | b | 1.0 | 1.0 | 1.0 | +| test.cpp:69:10:69:21 | ... \|\| ... | 1.0 | -1.0 | -1.0 | +| test.cpp:69:15:69:21 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:69:21:69:21 | t | 49572.0 | 5.0 | 4.0 | +| test.cpp:74:30:74:30 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:30:74:30 | c | 1.0 | 1.0 | 1.0 | +| test.cpp:74:30:74:34 | (unsigned short)... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:30:74:34 | ... + ... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:34:74:34 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:74:34:74:34 | c | 1.0 | 1.0 | 1.0 | +| test.cpp:75:7:75:30 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:75:7:75:30 | (unsigned char)... | 1.0 | 1.0 | 1.0 | +| test.cpp:75:7:75:35 | ... == ... | 1.0 | -1.0 | -1.0 | +| test.cpp:75:22:75:30 | c_times_2 | 1.0 | 1.0 | 1.0 | +| test.cpp:75:35:75:35 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:77:5:77:13 | c_times_2 | 1.0 | 1.0 | 1.0 | +| test.cpp:79:3:79:11 | c_times_2 | 1.0 | 1.0 | 1.0 | +| test.cpp:83:16:83:22 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:83:16:83:22 | (reference to) | 1.0 | 1.0 | 1.0 | +| test.cpp:83:16:83:22 | aliased | 1.0 | 1.0 | 1.0 | +| test.cpp:85:7:85:7 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:85:7:85:7 | i | 1.0 | 1.0 | 1.0 | +| test.cpp:85:7:85:12 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:85:12:85:12 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:86:12:86:12 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:86:12:86:12 | i | 1.0 | 1.0 | 1.0 | +| test.cpp:88:7:88:8 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:88:7:88:8 | ci | 1.0 | 1.0 | 1.0 | +| test.cpp:88:7:88:13 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:88:13:88:13 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:89:12:89:13 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:89:12:89:13 | ci | 1.0 | 1.0 | 1.0 | +| test.cpp:91:7:91:13 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:91:7:91:13 | aliased | 1.0 | 1.0 | 1.0 | +| test.cpp:91:7:91:18 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:91:18:91:18 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:92:12:92:18 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:92:12:92:18 | aliased | 1.0 | 1.0 | 1.0 | +| test.cpp:94:7:94:11 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:94:7:94:11 | alias | 1.0 | 1.0 | 1.0 | +| test.cpp:94:7:94:16 | ... >= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:94:16:94:16 | 2 | 1.0 | -1.0 | -1.0 | +| test.cpp:95:12:95:16 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:95:12:95:16 | alias | 1.0 | 1.0 | 1.0 | +| test.cpp:97:10:97:10 | (reference dereference) | 13.0 | 1.0 | 8.0 | +| test.cpp:97:10:97:19 | ... <= ... | 1.0 | -1.0 | -1.0 | +| test.cpp:97:15:97:19 | 12345 | 1.0 | -1.0 | -1.0 | +| test.cpp:97:22:97:22 | (reference dereference) | 13.0 | 1.0 | 7.0 | +| test.cpp:97:22:97:24 | ... ++ | 13.0 | 1.0 | 7.0 | +| test.cpp:98:5:98:5 | (reference dereference) | 1.0 | 1.0 | 1.0 | +| test.cpp:98:5:98:5 | i | 1.0 | -1.0 | -1.0 | +| test.cpp:98:5:98:9 | ... = ... | 13.0 | 1.0 | 7.0 | +| test.cpp:98:9:98:9 | (reference dereference) | 13.0 | 1.0 | 7.0 | +| test.cpp:99:5:99:5 | (reference dereference) | 13.0 | 1.0 | 7.0 | +| test.cpp:102:10:102:10 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:106:7:106:7 | (int)... | 1.0 | 1.0 | 1.0 | +| test.cpp:106:7:106:7 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:106:7:106:11 | ... < ... | 1.0 | -1.0 | -1.0 | +| test.cpp:106:11:106:11 | 0 | 1.0 | -1.0 | -1.0 | +| test.cpp:109:7:109:7 | (bool)... | 1.0 | 1.0 | 2.0 | +| test.cpp:109:7:109:7 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:110:5:110:5 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:112:5:112:5 | n | 1.0 | 1.0 | 1.0 | +| test.cpp:115:7:115:8 | ! ... | 1.0 | -1.0 | -1.0 | +| test.cpp:115:8:115:8 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:115:8:115:8 | n | 2.0 | 2.0 | 2.0 | +| test.cpp:116:5:116:5 | n | 2.0 | 2.0 | 1.0 | +| test.cpp:118:5:118:5 | n | 2.0 | 1.0 | 2.0 | +| test.cpp:121:3:121:3 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:121:3:121:3 | n | 4.0 | 2.0 | 3.0 | +| test.cpp:121:3:121:12 | ... ? ... : ... | 16.0 | 2.0 | 3.0 | +| test.cpp:121:8:121:8 | n | 4.0 | 1.0 | 2.0 | +| test.cpp:121:12:121:12 | n | 4.0 | 2.0 | 1.0 | +| test.cpp:122:3:122:4 | ! ... | 1.0 | -1.0 | -1.0 | +| test.cpp:122:3:122:12 | ... ? ... : ... | 64.0 | 2.0 | 3.0 | +| test.cpp:122:4:122:4 | (bool)... | 1.0 | 2.0 | 2.0 | +| test.cpp:122:4:122:4 | n | 8.0 | 2.0 | 3.0 | +| test.cpp:122:8:122:8 | n | 8.0 | 2.0 | 1.0 | +| test.cpp:122:12:122:12 | n | 8.0 | 1.0 | 2.0 | +| test_nr_of_bounds.cpp:2:9:2:11 | 1 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:3:9:3:11 | 2 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:4:9:4:11 | 4 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:5:9:5:11 | 8 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:6:9:6:12 | 16 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:7:9:7:12 | 32 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:8:9:8:12 | 64 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:9:9:9:12 | 128 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:10:9:10:13 | 256 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:11:9:11:13 | 512 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:12:9:12:13 | 1024 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:13:9:13:13 | 2048 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:14:9:14:14 | 4096 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:15:9:15:14 | 8192 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:16:9:16:14 | 16384 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:17:9:17:14 | 32768 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:18:9:18:15 | 65536 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:19:9:19:15 | 131072 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:20:9:20:15 | 262144 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:21:9:21:15 | 524288 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:22:9:22:16 | 1048576 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:23:9:23:16 | 2097152 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:24:9:24:16 | 4194304 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:25:9:25:16 | 8388608 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:26:9:26:17 | 16777216 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:27:10:27:18 | 33554432 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:28:10:28:18 | 67108864 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:29:10:29:18 | 134217728 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:30:10:30:19 | 268435456 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:31:10:31:19 | 536870912 | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:5:40:19 | ... & ... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:19 | ... -= ... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:5:40:20 | (...) | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:5:40:20 | x | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:40:19:40:19 | A | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:5:41:19 | ... & ... | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:19 | ... -= ... | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:5:41:20 | (...) | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:5:41:20 | x | 2.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:41:19:41:19 | B | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:5:42:19 | ... & ... | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:19 | ... -= ... | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:5:42:20 | (...) | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:5:42:20 | x | 4.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:42:19:42:19 | C | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:5:43:19 | ... & ... | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:19 | ... -= ... | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:5:43:20 | (...) | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:5:43:20 | x | 8.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:43:19:43:19 | D | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:5:44:19 | ... & ... | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:19 | ... -= ... | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:5:44:20 | (...) | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:5:44:20 | x | 16.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:44:19:44:19 | E | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:5:45:19 | ... & ... | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:19 | ... -= ... | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:5:45:20 | (...) | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:5:45:20 | x | 32.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:45:19:45:19 | F | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:5:46:19 | ... & ... | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:19 | ... -= ... | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:5:46:20 | (...) | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:5:46:20 | x | 64.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:46:19:46:19 | G | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:5:47:19 | ... & ... | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:19 | ... -= ... | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:5:47:20 | (...) | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:5:47:20 | x | 128.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:47:19:47:19 | H | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:5:48:19 | ... & ... | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:19 | ... -= ... | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:5:48:20 | (...) | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:5:48:20 | x | 256.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:48:19:48:19 | I | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:5:49:19 | ... & ... | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:19 | ... -= ... | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:5:49:20 | (...) | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:5:49:20 | x | 512.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:49:19:49:19 | J | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:5:50:19 | ... & ... | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:19 | ... -= ... | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:5:50:20 | (...) | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:5:50:20 | x | 1024.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:50:19:50:19 | L | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:5:51:19 | ... & ... | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:19 | ... -= ... | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:5:51:20 | (...) | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:5:51:20 | x | 2048.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:51:19:51:19 | M | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:5:52:19 | ... & ... | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:19 | ... -= ... | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:5:52:20 | (...) | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:5:52:20 | x | 4096.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:52:19:52:19 | N | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:5:53:19 | ... & ... | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:19 | ... -= ... | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:5:53:20 | (...) | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:5:53:20 | x | 8192.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:53:19:53:19 | O | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:5:54:19 | ... & ... | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:19 | ... -= ... | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:5:54:20 | (...) | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:5:54:20 | x | 16384.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:54:19:54:19 | P | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:5:55:19 | ... & ... | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:19 | ... -= ... | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:5:55:20 | (...) | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:5:55:20 | x | 32768.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:55:19:55:19 | Q | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:5:56:19 | ... & ... | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:19 | ... -= ... | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:5:56:20 | (...) | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:5:56:20 | x | 65536.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:56:19:56:19 | R | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:5:57:19 | ... & ... | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:19 | ... -= ... | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:5:57:20 | (...) | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:5:57:20 | x | 131072.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:57:19:57:19 | S | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:5:58:19 | ... & ... | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:19 | ... -= ... | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:5:58:20 | (...) | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:5:58:20 | x | 262144.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:58:19:58:19 | T | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:5:59:19 | ... & ... | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:19 | ... -= ... | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:5:59:20 | (...) | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:5:59:20 | x | 524288.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:59:19:59:19 | U | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:5:60:19 | ... & ... | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:19 | ... -= ... | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:5:60:20 | (...) | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:5:60:20 | x | 1048576.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:60:19:60:19 | V | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:5:61:19 | ... & ... | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:19 | ... -= ... | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:5:61:20 | (...) | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:5:61:20 | x | 2097152.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:61:19:61:19 | W | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:5:62:19 | ... & ... | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:19 | ... -= ... | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:5:62:20 | (...) | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:5:62:20 | x | 4194304.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:62:19:62:19 | X | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:5:63:19 | ... & ... | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:19 | ... -= ... | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:5:63:20 | (...) | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:5:63:20 | x | 8388608.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:63:19:63:19 | Y | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:5:64:19 | ... & ... | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:19 | ... -= ... | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:19 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:5:64:20 | (...) | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:5:64:20 | x | 1.6777216E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:64:19:64:19 | Z | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:5:65:20 | ... & ... | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:20 | ... -= ... | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:5:65:21 | (...) | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:5:65:21 | x | 3.3554432E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:65:19:65:20 | AA | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:5:66:20 | ... & ... | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:20 | ... -= ... | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:5:66:21 | (...) | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:5:66:21 | x | 6.7108864E7 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:66:19:66:20 | AB | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:5:67:20 | ... & ... | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:20 | ... -= ... | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:5:67:21 | (...) | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:5:67:21 | x | 1.34217728E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:67:19:67:20 | AC | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:5:68:20 | ... & ... | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:20 | ... -= ... | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:5:68:21 | (...) | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:5:68:21 | x | 2.68435456E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:68:19:68:20 | AD | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:5:69:20 | ... & ... | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:20 | ... -= ... | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:20 | ... == ... | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:5:69:21 | (...) | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:5:69:21 | x | 5.36870912E8 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:69:19:69:20 | AE | 1.0 | -1.0 | -1.0 | +| test_nr_of_bounds.cpp:72:12:72:12 | x | 1.073741824E9 | 1.0 | 1.0 | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql index 5539dc0720ba..fabdba8f4b19 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.ql @@ -2,8 +2,20 @@ import cpp import utils.test.InlineExpectationsTest import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis -query predicate estimateNrOfBounds(Expr e, float nrOfBounds) { - nrOfBounds = SimpleRangeAnalysisInternal::estimateNrOfBounds(e) +query predicate estimateNrOfBounds( + Expr e, float nrOfBounds, float actualNrOfLowerBounds, float actualNrOfUpperBounds +) { + nrOfBounds = SimpleRangeAnalysisInternal::estimateNrOfBounds(e) and + ( + actualNrOfLowerBounds = SimpleRangeAnalysisInternal::countNrOfLowerBounds(e) + or + not exists(SimpleRangeAnalysisInternal::countNrOfLowerBounds(e)) and actualNrOfLowerBounds = -1 + ) and + ( + actualNrOfUpperBounds = SimpleRangeAnalysisInternal::countNrOfUpperBounds(e) + or + not exists(SimpleRangeAnalysisInternal::countNrOfUpperBounds(e)) and actualNrOfUpperBounds = -1 + ) } /** From d0681c6ffbae8387cbf0a0d82c58b5fdbab28760 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 16 Feb 2026 13:54:18 +0100 Subject: [PATCH 076/243] C++: Divide nr of bounds between branches for phi nodes --- .../cpp/rangeanalysis/SimpleRangeAnalysis.qll | 63 +- .../SimpleRangeAnalysis/nrOfBounds.expected | 3256 ++++++++--------- 2 files changed, 1666 insertions(+), 1653 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 6ff81e07f48d..3bf729836fc1 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -552,34 +552,47 @@ private module BoundsEstimate { private float nrOfBoundsPhiGuard(RangeSsaDefinition def, StackVariable v) { // If we have // - // if (x < c) { e1 } - // e2 + // if (x < c) { e1 } else { e2 } + // e3 // - // then `e2` is both a guard phi node (guarded by `x < c`) and a normal - // phi node (control is merged after the `if` statement). + // then `{ e1 }` and `{ e2 }` are both guard phi nodes guarded by `x < c`. + // The range analysis propagates bounds on `x` into both branches, filtered + // by the condition. In this case all lower bounds flow to `{ e1 }` and only + // lower bounds that are smaller than `c` flow to `{ e2 }`. // - // Assume `x` has `n` bounds. Then `n` bounds are propagated to the guard - // phi node `{ e1 }` and, since `{ e1 }` is input to `e2` as a normal phi - // node, `n` bounds are propagated to `e2`. If we also propagate the `n` - // bounds to `e2` as a guard phi node, then we square the number of - // bounds. + // The largest bound possible for `e3` is the number of bounds on `x` plus + // one. This happens when all bounds flow from `x` to `e1` to `e3` and the + // bound `c` can flow to `e2` to `e3`. // - // However in practice `x < c` is going to cut down the number of bounds: - // The tracked bounds can't flow to both branches as that would require - // them to simultaneously be greater and smaller than `c`. To approximate - // this better, the contribution from a guard phi node that is also a - // normal phi node is 1. - exists(def.getAPhiInput(v)) and - isGuardPhiWithBound(def, v, _) and - result = 1 - or - not exists(def.getAPhiInput(v)) and - // If there's different `access`es, then they refer to the same variable - // with the same lower bounds. Hence adding these guards make no sense (the - // implementation will take the union, but they'll be removed by - // deduplication). Hence we use `max` as an approximation. - result = - max(VariableAccess access | isGuardPhiWithBound(def, v, access) | nrOfBoundsExpr(access)) + // We want to optimize our bounds estimate for `e3`, as that is the estimate + // that can continue propagating forward. We don't know how the existing + // bounds will be split between the different branches. That depends on + // whether the range analysis is tracking lower bounds or upper bounds, and + // on the meaning of the condition. + // + // As a heuristic we divide the number of bounds on `x` by 2 to "average" + // the effect of the condition and add 1 to account for the bound from the + // condition itself. This will approximate estimates inside the branches, + // but will give a good estimate after the branches are merged. + // + // This also handles cases such as this one + // + // if (x < c) { e1 } + // e3 + // + // where `e3` is both a guard phi node (guarded by `x < c`) and a normal + // phi node (control is merged after the `if` statement). Here half of the + // bounds flow into the branch and then to `e3` as a normal phi node and the + // "other" half flow from the condition to `e3` as a guard phi node. + exists(float varBounds | + // If there's different `access`es, then they refer to the same + // variable with the same lower bounds. Hence adding these guards make no + // sense (the implementation will take the union, but they'll be removed by + // deduplication). Hence we use `max` as an approximation. + varBounds = + max(VariableAccess access | isGuardPhiWithBound(def, v, access) | nrOfBoundsExpr(access)) and + result = (varBounds + 1) / 2 + ) or def.isPhiNode(v) and not isGuardPhiWithBound(def, v, _) and diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected index cf4b2f342042..b8424b8f01ad 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected @@ -81,7 +81,7 @@ estimateNrOfBounds | test.c:34:14:34:14 | i | 13.0 | 3.0 | 2.0 | | test.c:36:10:36:14 | total | 13.0 | 4.0 | 10.0 | | test.c:36:10:36:18 | ... + ... | 13.0 | 4.0 | 26.0 | -| test.c:36:18:36:18 | i | 13.0 | 1.0 | 3.0 | +| test.c:36:18:36:18 | i | 7.0 | 1.0 | 3.0 | | test.c:40:10:40:11 | 0 | 1.0 | -1.0 | -1.0 | | test.c:41:14:41:15 | 0 | 1.0 | -1.0 | -1.0 | | test.c:42:8:42:8 | i | 1.0 | -1.0 | -1.0 | @@ -97,7 +97,7 @@ estimateNrOfBounds | test.c:43:14:43:14 | i | 13.0 | 3.0 | 2.0 | | test.c:45:10:45:14 | total | 13.0 | 4.0 | 10.0 | | test.c:45:10:45:18 | ... + ... | 13.0 | 4.0 | 26.0 | -| test.c:45:18:45:18 | i | 13.0 | 1.0 | 3.0 | +| test.c:45:18:45:18 | i | 7.0 | 1.0 | 3.0 | | test.c:49:10:49:11 | 0 | 1.0 | -1.0 | -1.0 | | test.c:50:14:50:15 | 0 | 1.0 | -1.0 | -1.0 | | test.c:51:8:51:8 | i | 1.0 | -1.0 | -1.0 | @@ -118,7 +118,7 @@ estimateNrOfBounds | test.c:52:14:52:14 | i | 13.0 | 3.0 | 2.0 | | test.c:54:10:54:14 | total | 13.0 | 4.0 | 10.0 | | test.c:54:10:54:18 | ... + ... | 13.0 | 4.0 | 26.0 | -| test.c:54:18:54:18 | i | 13.0 | 1.0 | 3.0 | +| test.c:54:18:54:18 | i | 7.0 | 1.0 | 3.0 | | test.c:58:7:58:7 | i | 1.0 | 1.0 | 1.0 | | test.c:58:7:58:11 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:58:11:58:11 | 4 | 1.0 | -1.0 | -1.0 | @@ -310,88 +310,88 @@ estimateNrOfBounds | test.c:166:7:166:12 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:166:7:166:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:166:12:166:12 | a | 2.0 | 3.0 | 3.0 | -| test.c:166:17:166:17 | a | 2.0 | 3.0 | 3.0 | +| test.c:166:17:166:17 | a | 1.5 | 3.0 | 3.0 | | test.c:166:17:166:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:166:22:166:23 | 11 | 1.0 | -1.0 | -1.0 | -| test.c:167:13:167:14 | + ... | 2.0 | 3.0 | 2.0 | -| test.c:167:14:167:14 | a | 2.0 | 3.0 | 2.0 | -| test.c:168:13:168:14 | - ... | 2.0 | 2.0 | 3.0 | -| test.c:168:14:168:14 | a | 2.0 | 3.0 | 2.0 | +| test.c:167:13:167:14 | + ... | 1.25 | 3.0 | 2.0 | +| test.c:167:14:167:14 | a | 1.25 | 3.0 | 2.0 | +| test.c:168:13:168:14 | - ... | 1.25 | 2.0 | 3.0 | +| test.c:168:14:168:14 | a | 1.25 | 3.0 | 2.0 | | test.c:169:5:169:9 | total | 2.0 | 2.0 | 2.0 | -| test.c:169:5:169:16 | ... += ... | 8.0 | 10.0 | 10.0 | -| test.c:169:14:169:14 | b | 2.0 | 3.0 | 2.0 | -| test.c:169:14:169:16 | ... + ... | 4.0 | 5.0 | 5.0 | -| test.c:169:16:169:16 | c | 2.0 | 2.0 | 3.0 | +| test.c:169:5:169:16 | ... += ... | 3.125 | 10.0 | 10.0 | +| test.c:169:14:169:14 | b | 1.25 | 3.0 | 2.0 | +| test.c:169:14:169:16 | ... + ... | 1.5625 | 5.0 | 5.0 | +| test.c:169:16:169:16 | c | 1.25 | 2.0 | 3.0 | | test.c:171:7:171:8 | - ... | 1.0 | 1.0 | 1.0 | | test.c:171:7:171:13 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:171:7:171:24 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:171:8:171:8 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:171:13:171:13 | a | 3.0 | 4.0 | 4.0 | -| test.c:171:18:171:18 | a | 3.0 | 4.0 | 4.0 | +| test.c:171:13:171:13 | a | 2.75 | 4.0 | 4.0 | +| test.c:171:18:171:18 | a | 1.875 | 4.0 | 4.0 | | test.c:171:18:171:24 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:171:23:171:24 | 11 | 1.0 | -1.0 | -1.0 | -| test.c:172:13:172:14 | + ... | 3.0 | 4.0 | 3.0 | -| test.c:172:14:172:14 | a | 3.0 | 4.0 | 3.0 | -| test.c:173:13:173:14 | - ... | 3.0 | 3.0 | 4.0 | -| test.c:173:14:173:14 | a | 3.0 | 4.0 | 3.0 | -| test.c:174:5:174:9 | total | 10.0 | 11.0 | 11.0 | -| test.c:174:5:174:16 | ... += ... | 90.0 | 47.0 | 47.0 | -| test.c:174:14:174:14 | b | 3.0 | 4.0 | 3.0 | -| test.c:174:14:174:16 | ... + ... | 9.0 | 10.0 | 10.0 | -| test.c:174:16:174:16 | c | 3.0 | 3.0 | 4.0 | +| test.c:172:13:172:14 | + ... | 1.4375 | 4.0 | 3.0 | +| test.c:172:14:172:14 | a | 1.4375 | 4.0 | 3.0 | +| test.c:173:13:173:14 | - ... | 1.4375 | 3.0 | 4.0 | +| test.c:173:14:173:14 | a | 1.4375 | 4.0 | 3.0 | +| test.c:174:5:174:9 | total | 5.125 | 11.0 | 11.0 | +| test.c:174:5:174:16 | ... += ... | 10.59033203125 | 47.0 | 47.0 | +| test.c:174:14:174:14 | b | 1.4375 | 4.0 | 3.0 | +| test.c:174:14:174:16 | ... + ... | 2.06640625 | 10.0 | 10.0 | +| test.c:174:16:174:16 | c | 1.4375 | 3.0 | 4.0 | | test.c:176:7:176:8 | - ... | 1.0 | 1.0 | 1.0 | | test.c:176:7:176:13 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:176:7:176:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:176:8:176:8 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:176:13:176:13 | a | 4.0 | 5.0 | 5.0 | -| test.c:176:18:176:18 | a | 4.0 | 4.0 | 5.0 | +| test.c:176:13:176:13 | a | 3.3125 | 5.0 | 5.0 | +| test.c:176:18:176:18 | a | 2.15625 | 4.0 | 5.0 | | test.c:176:18:176:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:176:23:176:23 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:177:13:177:14 | + ... | 4.0 | 4.0 | 3.0 | -| test.c:177:14:177:14 | a | 4.0 | 4.0 | 3.0 | -| test.c:178:13:178:14 | - ... | 4.0 | 3.0 | 4.0 | -| test.c:178:14:178:14 | a | 4.0 | 4.0 | 3.0 | -| test.c:179:5:179:9 | total | 100.0 | 47.0 | 47.0 | -| test.c:179:5:179:16 | ... += ... | 1600.0 | 80.0 | 80.0 | -| test.c:179:14:179:14 | b | 4.0 | 4.0 | 3.0 | -| test.c:179:14:179:16 | ... + ... | 16.0 | 10.0 | 10.0 | -| test.c:179:16:179:16 | c | 4.0 | 3.0 | 4.0 | +| test.c:177:13:177:14 | + ... | 1.578125 | 4.0 | 3.0 | +| test.c:177:14:177:14 | a | 1.578125 | 4.0 | 3.0 | +| test.c:178:13:178:14 | - ... | 1.578125 | 3.0 | 4.0 | +| test.c:178:14:178:14 | a | 1.578125 | 4.0 | 3.0 | +| test.c:179:5:179:9 | total | 15.71533203125 | 47.0 | 47.0 | +| test.c:179:5:179:16 | ... += ... | 39.138696789741516 | 80.0 | 80.0 | +| test.c:179:14:179:14 | b | 1.578125 | 4.0 | 3.0 | +| test.c:179:14:179:16 | ... + ... | 2.490478515625 | 10.0 | 10.0 | +| test.c:179:16:179:16 | c | 1.578125 | 3.0 | 4.0 | | test.c:181:7:181:8 | - ... | 1.0 | 1.0 | 1.0 | | test.c:181:7:181:13 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:181:7:181:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:181:8:181:8 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:181:13:181:13 | a | 5.0 | 6.0 | 6.0 | -| test.c:181:18:181:18 | a | 5.0 | 5.0 | 6.0 | +| test.c:181:13:181:13 | a | 3.734375 | 6.0 | 6.0 | +| test.c:181:18:181:18 | a | 2.3671875 | 5.0 | 6.0 | | test.c:181:18:181:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:181:23:181:23 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:182:13:182:14 | + ... | 5.0 | 5.0 | 3.0 | -| test.c:182:14:182:14 | a | 5.0 | 5.0 | 3.0 | -| test.c:183:13:183:14 | - ... | 5.0 | 3.0 | 5.0 | -| test.c:183:14:183:14 | a | 5.0 | 5.0 | 3.0 | -| test.c:184:5:184:9 | total | 1700.0 | 80.0 | 80.0 | -| test.c:184:5:184:16 | ... += ... | 42500.0 | 111.0 | 111.0 | -| test.c:184:14:184:14 | b | 5.0 | 5.0 | 3.0 | -| test.c:184:14:184:16 | ... + ... | 25.0 | 13.0 | 13.0 | -| test.c:184:16:184:16 | c | 5.0 | 3.0 | 5.0 | +| test.c:182:13:182:14 | + ... | 1.68359375 | 5.0 | 3.0 | +| test.c:182:14:182:14 | a | 1.68359375 | 5.0 | 3.0 | +| test.c:183:13:183:14 | - ... | 1.68359375 | 3.0 | 5.0 | +| test.c:183:14:183:14 | a | 1.68359375 | 5.0 | 3.0 | +| test.c:184:5:184:9 | total | 54.854028820991516 | 80.0 | 80.0 | +| test.c:184:5:184:16 | ... += ... | 155.4830817843049 | 111.0 | 111.0 | +| test.c:184:14:184:14 | b | 1.68359375 | 5.0 | 3.0 | +| test.c:184:14:184:16 | ... + ... | 2.8344879150390625 | 13.0 | 13.0 | +| test.c:184:16:184:16 | c | 1.68359375 | 3.0 | 5.0 | | test.c:186:7:186:8 | - ... | 1.0 | 1.0 | 1.0 | | test.c:186:7:186:13 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:186:7:186:24 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:186:8:186:8 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:186:13:186:13 | a | 6.0 | 7.0 | 7.0 | -| test.c:186:18:186:18 | a | 6.0 | 6.0 | 7.0 | +| test.c:186:13:186:13 | a | 4.05078125 | 7.0 | 7.0 | +| test.c:186:18:186:18 | a | 2.525390625 | 6.0 | 7.0 | | test.c:186:18:186:24 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:186:23:186:24 | - ... | 1.0 | 1.0 | 1.0 | | test.c:186:24:186:24 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:187:13:187:14 | + ... | 6.0 | 6.0 | 2.0 | -| test.c:187:14:187:14 | a | 6.0 | 6.0 | 2.0 | -| test.c:188:13:188:14 | - ... | 6.0 | 2.0 | 6.0 | -| test.c:188:14:188:14 | a | 6.0 | 6.0 | 2.0 | -| test.c:189:5:189:9 | total | 44200.0 | 111.0 | 111.0 | -| test.c:189:5:189:16 | ... += ... | 1591200.0 | 137.0 | 137.0 | -| test.c:189:14:189:14 | b | 6.0 | 6.0 | 2.0 | -| test.c:189:14:189:16 | ... + ... | 36.0 | 12.0 | 12.0 | -| test.c:189:16:189:16 | c | 6.0 | 2.0 | 6.0 | -| test.c:192:10:192:14 | total | 1635400.0 | 137.0 | 137.0 | +| test.c:187:13:187:14 | + ... | 1.7626953125 | 6.0 | 2.0 | +| test.c:187:14:187:14 | a | 1.7626953125 | 6.0 | 2.0 | +| test.c:188:13:188:14 | - ... | 1.7626953125 | 2.0 | 6.0 | +| test.c:188:14:188:14 | a | 1.7626953125 | 6.0 | 2.0 | +| test.c:189:5:189:9 | total | 210.3371106052964 | 111.0 | 111.0 | +| test.c:189:5:189:16 | ... += ... | 653.5373351858337 | 137.0 | 137.0 | +| test.c:189:14:189:14 | b | 1.7626953125 | 6.0 | 2.0 | +| test.c:189:14:189:16 | ... + ... | 3.1070947647094727 | 12.0 | 12.0 | +| test.c:189:16:189:16 | c | 1.7626953125 | 2.0 | 6.0 | +| test.c:192:10:192:14 | total | 863.8744457911301 | 137.0 | 137.0 | | test.c:198:14:198:15 | 0 | 1.0 | -1.0 | -1.0 | | test.c:200:7:200:7 | 3 | 1.0 | -1.0 | -1.0 | | test.c:200:7:200:12 | ... <= ... | 1.0 | -1.0 | -1.0 | @@ -420,18 +420,18 @@ estimateNrOfBounds | test.c:204:7:204:33 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:204:7:204:44 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:204:12:204:12 | a | 2.0 | 3.0 | 3.0 | -| test.c:204:17:204:17 | a | 2.0 | 2.0 | 3.0 | +| test.c:204:17:204:17 | a | 1.5 | 2.0 | 3.0 | | test.c:204:17:204:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:204:22:204:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:204:28:204:28 | 0 | 1.0 | -1.0 | -1.0 | | test.c:204:28:204:33 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:204:33:204:33 | b | 3.0 | 3.0 | 3.0 | -| test.c:204:38:204:38 | b | 3.0 | 3.0 | 3.0 | +| test.c:204:38:204:38 | b | 2.0 | 3.0 | 3.0 | | test.c:204:38:204:44 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:204:43:204:44 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:205:13:205:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:205:13:205:13 | a | 1.25 | 2.0 | 2.0 | | test.c:205:13:205:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:205:15:205:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:205:15:205:15 | b | 1.5 | 3.0 | 2.0 | | test.c:206:5:206:9 | total | 2.0 | 2.0 | 2.0 | | test.c:206:5:206:14 | ... += ... | 2.0 | 2.0 | 2.0 | | test.c:206:14:206:14 | r | 1.0 | 1.0 | 1.0 | @@ -440,20 +440,20 @@ estimateNrOfBounds | test.c:208:7:208:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:208:7:208:35 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:208:7:208:46 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:208:12:208:12 | a | 3.0 | 3.0 | 3.0 | -| test.c:208:17:208:17 | a | 3.0 | 2.0 | 3.0 | +| test.c:208:12:208:12 | a | 2.75 | 3.0 | 3.0 | +| test.c:208:17:208:17 | a | 1.875 | 2.0 | 3.0 | | test.c:208:17:208:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:208:22:208:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:208:28:208:30 | - ... | 1.0 | 1.0 | 1.0 | | test.c:208:28:208:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:208:29:208:30 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:208:35:208:35 | b | 7.0 | 4.0 | 4.0 | -| test.c:208:40:208:40 | b | 7.0 | 4.0 | 4.0 | +| test.c:208:35:208:35 | b | 6.5 | 4.0 | 4.0 | +| test.c:208:40:208:40 | b | 3.75 | 4.0 | 4.0 | | test.c:208:40:208:46 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:208:45:208:46 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:209:13:209:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:209:13:209:13 | a | 1.4375 | 2.0 | 2.0 | | test.c:209:13:209:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:209:15:209:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:209:15:209:15 | b | 2.375 | 4.0 | 3.0 | | test.c:210:5:210:9 | total | 4.0 | 2.0 | 2.0 | | test.c:210:5:210:14 | ... += ... | 4.0 | 2.0 | 2.0 | | test.c:210:14:210:14 | r | 1.0 | 1.0 | 1.0 | @@ -462,20 +462,20 @@ estimateNrOfBounds | test.c:212:7:212:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:212:7:212:35 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:212:7:212:45 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:212:12:212:12 | a | 4.0 | 3.0 | 3.0 | -| test.c:212:17:212:17 | a | 4.0 | 2.0 | 3.0 | +| test.c:212:12:212:12 | a | 3.3125 | 3.0 | 3.0 | +| test.c:212:17:212:17 | a | 2.15625 | 2.0 | 3.0 | | test.c:212:17:212:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:212:22:212:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:212:28:212:30 | - ... | 1.0 | 1.0 | 1.0 | | test.c:212:28:212:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:212:29:212:30 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:212:35:212:35 | b | 15.0 | 5.0 | 5.0 | -| test.c:212:40:212:40 | b | 15.0 | 4.0 | 5.0 | +| test.c:212:35:212:35 | b | 12.625 | 5.0 | 5.0 | +| test.c:212:40:212:40 | b | 6.8125 | 4.0 | 5.0 | | test.c:212:40:212:45 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:212:45:212:45 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:213:13:213:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:213:13:213:13 | a | 1.578125 | 2.0 | 2.0 | | test.c:213:13:213:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:213:15:213:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:213:15:213:15 | b | 3.90625 | 4.0 | 3.0 | | test.c:214:5:214:9 | total | 8.0 | 2.0 | 2.0 | | test.c:214:5:214:14 | ... += ... | 8.0 | 2.0 | 2.0 | | test.c:214:14:214:14 | r | 1.0 | 1.0 | 1.0 | @@ -484,21 +484,21 @@ estimateNrOfBounds | test.c:216:7:216:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:216:7:216:35 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:216:7:216:46 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:216:12:216:12 | a | 5.0 | 3.0 | 3.0 | -| test.c:216:17:216:17 | a | 5.0 | 2.0 | 3.0 | +| test.c:216:12:216:12 | a | 3.734375 | 3.0 | 3.0 | +| test.c:216:17:216:17 | a | 2.3671875 | 2.0 | 3.0 | | test.c:216:17:216:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:216:22:216:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:216:28:216:30 | - ... | 1.0 | 1.0 | 1.0 | | test.c:216:28:216:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:216:29:216:30 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:216:35:216:35 | b | 31.0 | 6.0 | 6.0 | -| test.c:216:40:216:40 | b | 31.0 | 5.0 | 6.0 | +| test.c:216:35:216:35 | b | 23.34375 | 6.0 | 6.0 | +| test.c:216:40:216:40 | b | 12.171875 | 5.0 | 6.0 | | test.c:216:40:216:46 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:216:45:216:46 | - ... | 1.0 | 1.0 | 1.0 | | test.c:216:46:216:46 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:217:13:217:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:217:13:217:13 | a | 1.68359375 | 2.0 | 2.0 | | test.c:217:13:217:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:217:15:217:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:217:15:217:15 | b | 6.5859375 | 5.0 | 2.0 | | test.c:218:5:218:9 | total | 16.0 | 2.0 | 2.0 | | test.c:218:5:218:14 | ... += ... | 16.0 | 2.0 | 2.0 | | test.c:218:14:218:14 | r | 1.0 | 1.0 | 1.0 | @@ -531,18 +531,18 @@ estimateNrOfBounds | test.c:232:7:232:33 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:232:7:232:44 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:232:12:232:12 | a | 2.0 | 3.0 | 3.0 | -| test.c:232:17:232:17 | a | 2.0 | 2.0 | 3.0 | +| test.c:232:17:232:17 | a | 1.5 | 2.0 | 3.0 | | test.c:232:17:232:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:232:22:232:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:232:28:232:28 | 0 | 1.0 | -1.0 | -1.0 | | test.c:232:28:232:33 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:232:33:232:33 | b | 3.0 | 3.0 | 3.0 | -| test.c:232:38:232:38 | b | 3.0 | 3.0 | 3.0 | +| test.c:232:38:232:38 | b | 2.0 | 3.0 | 3.0 | | test.c:232:38:232:44 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:232:43:232:44 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:233:13:233:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:233:13:233:13 | a | 1.25 | 2.0 | 2.0 | | test.c:233:13:233:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:233:15:233:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:233:15:233:15 | b | 1.5 | 3.0 | 2.0 | | test.c:234:5:234:9 | total | 2.0 | 2.0 | 2.0 | | test.c:234:5:234:14 | ... += ... | 2.0 | 2.0 | 2.0 | | test.c:234:14:234:14 | r | 1.0 | 1.0 | 1.0 | @@ -551,20 +551,20 @@ estimateNrOfBounds | test.c:236:7:236:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:236:7:236:35 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:236:7:236:46 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:236:12:236:12 | a | 3.0 | 3.0 | 3.0 | -| test.c:236:17:236:17 | a | 3.0 | 2.0 | 3.0 | +| test.c:236:12:236:12 | a | 2.75 | 3.0 | 3.0 | +| test.c:236:17:236:17 | a | 1.875 | 2.0 | 3.0 | | test.c:236:17:236:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:236:22:236:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:236:28:236:30 | - ... | 1.0 | 1.0 | 1.0 | | test.c:236:28:236:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:236:29:236:30 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:236:35:236:35 | b | 7.0 | 4.0 | 4.0 | -| test.c:236:40:236:40 | b | 7.0 | 4.0 | 4.0 | +| test.c:236:35:236:35 | b | 6.5 | 4.0 | 4.0 | +| test.c:236:40:236:40 | b | 3.75 | 4.0 | 4.0 | | test.c:236:40:236:46 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:236:45:236:46 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:237:13:237:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:237:13:237:13 | a | 1.4375 | 2.0 | 2.0 | | test.c:237:13:237:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:237:15:237:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:237:15:237:15 | b | 2.375 | 4.0 | 3.0 | | test.c:238:5:238:9 | total | 4.0 | 2.0 | 2.0 | | test.c:238:5:238:14 | ... += ... | 4.0 | 2.0 | 2.0 | | test.c:238:14:238:14 | r | 1.0 | 1.0 | 1.0 | @@ -573,20 +573,20 @@ estimateNrOfBounds | test.c:240:7:240:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:240:7:240:35 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:240:7:240:45 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:240:12:240:12 | a | 4.0 | 3.0 | 3.0 | -| test.c:240:17:240:17 | a | 4.0 | 2.0 | 3.0 | +| test.c:240:12:240:12 | a | 3.3125 | 3.0 | 3.0 | +| test.c:240:17:240:17 | a | 2.15625 | 2.0 | 3.0 | | test.c:240:17:240:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:240:22:240:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:240:28:240:30 | - ... | 1.0 | 1.0 | 1.0 | | test.c:240:28:240:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:240:29:240:30 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:240:35:240:35 | b | 15.0 | 5.0 | 5.0 | -| test.c:240:40:240:40 | b | 15.0 | 4.0 | 5.0 | +| test.c:240:35:240:35 | b | 12.625 | 5.0 | 5.0 | +| test.c:240:40:240:40 | b | 6.8125 | 4.0 | 5.0 | | test.c:240:40:240:45 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:240:45:240:45 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:241:13:241:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:241:13:241:13 | a | 1.578125 | 2.0 | 2.0 | | test.c:241:13:241:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:241:15:241:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:241:15:241:15 | b | 3.90625 | 4.0 | 3.0 | | test.c:242:5:242:9 | total | 8.0 | 2.0 | 2.0 | | test.c:242:5:242:14 | ... += ... | 8.0 | 2.0 | 2.0 | | test.c:242:14:242:14 | r | 1.0 | 1.0 | 1.0 | @@ -595,21 +595,21 @@ estimateNrOfBounds | test.c:244:7:244:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:244:7:244:35 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:244:7:244:46 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:244:12:244:12 | a | 5.0 | 3.0 | 3.0 | -| test.c:244:17:244:17 | a | 5.0 | 2.0 | 3.0 | +| test.c:244:12:244:12 | a | 3.734375 | 3.0 | 3.0 | +| test.c:244:17:244:17 | a | 2.3671875 | 2.0 | 3.0 | | test.c:244:17:244:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:244:22:244:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:244:28:244:30 | - ... | 1.0 | 1.0 | 1.0 | | test.c:244:28:244:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:244:29:244:30 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:244:35:244:35 | b | 31.0 | 6.0 | 6.0 | -| test.c:244:40:244:40 | b | 31.0 | 5.0 | 6.0 | +| test.c:244:35:244:35 | b | 23.34375 | 6.0 | 6.0 | +| test.c:244:40:244:40 | b | 12.171875 | 5.0 | 6.0 | | test.c:244:40:244:46 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:244:45:244:46 | - ... | 1.0 | 1.0 | 1.0 | | test.c:244:46:244:46 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:245:13:245:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:245:13:245:13 | a | 1.68359375 | 2.0 | 2.0 | | test.c:245:13:245:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:245:15:245:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:245:15:245:15 | b | 6.5859375 | 5.0 | 2.0 | | test.c:246:5:246:9 | total | 16.0 | 2.0 | 2.0 | | test.c:246:5:246:14 | ... += ... | 16.0 | 2.0 | 2.0 | | test.c:246:14:246:14 | r | 1.0 | 1.0 | 1.0 | @@ -644,18 +644,18 @@ estimateNrOfBounds | test.c:260:7:260:46 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:260:8:260:9 | 17 | 1.0 | -1.0 | -1.0 | | test.c:260:14:260:14 | a | 2.0 | 3.0 | 3.0 | -| test.c:260:19:260:19 | a | 2.0 | 2.0 | 3.0 | +| test.c:260:19:260:19 | a | 1.5 | 2.0 | 3.0 | | test.c:260:19:260:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:260:24:260:25 | 11 | 1.0 | -1.0 | -1.0 | | test.c:260:30:260:30 | 0 | 1.0 | -1.0 | -1.0 | | test.c:260:30:260:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:260:35:260:35 | b | 3.0 | 3.0 | 3.0 | -| test.c:260:40:260:40 | b | 3.0 | 3.0 | 3.0 | +| test.c:260:40:260:40 | b | 2.0 | 3.0 | 3.0 | | test.c:260:40:260:46 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:260:45:260:46 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:261:13:261:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:261:13:261:13 | a | 1.25 | 2.0 | 2.0 | | test.c:261:13:261:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:261:15:261:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:261:15:261:15 | b | 1.5 | 3.0 | 2.0 | | test.c:262:5:262:9 | total | 2.0 | 2.0 | 2.0 | | test.c:262:5:262:14 | ... += ... | 2.0 | 2.0 | 2.0 | | test.c:262:14:262:14 | r | 1.0 | 1.0 | 1.0 | @@ -665,20 +665,20 @@ estimateNrOfBounds | test.c:264:7:264:37 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:264:7:264:48 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:264:8:264:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:264:14:264:14 | a | 3.0 | 3.0 | 3.0 | -| test.c:264:19:264:19 | a | 3.0 | 2.0 | 3.0 | +| test.c:264:14:264:14 | a | 2.75 | 3.0 | 3.0 | +| test.c:264:19:264:19 | a | 1.875 | 2.0 | 3.0 | | test.c:264:19:264:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:264:24:264:25 | 11 | 1.0 | -1.0 | -1.0 | | test.c:264:30:264:32 | - ... | 1.0 | 1.0 | 1.0 | | test.c:264:30:264:37 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:264:31:264:32 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:264:37:264:37 | b | 7.0 | 4.0 | 4.0 | -| test.c:264:42:264:42 | b | 7.0 | 4.0 | 4.0 | +| test.c:264:37:264:37 | b | 6.5 | 4.0 | 4.0 | +| test.c:264:42:264:42 | b | 3.75 | 4.0 | 4.0 | | test.c:264:42:264:48 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:264:47:264:48 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:265:13:265:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:265:13:265:13 | a | 1.4375 | 2.0 | 2.0 | | test.c:265:13:265:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:265:15:265:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:265:15:265:15 | b | 2.375 | 4.0 | 3.0 | | test.c:266:5:266:9 | total | 4.0 | 2.0 | 2.0 | | test.c:266:5:266:14 | ... += ... | 4.0 | 2.0 | 2.0 | | test.c:266:14:266:14 | r | 1.0 | 1.0 | 1.0 | @@ -688,20 +688,20 @@ estimateNrOfBounds | test.c:268:7:268:37 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:268:7:268:47 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:268:8:268:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:268:14:268:14 | a | 4.0 | 3.0 | 3.0 | -| test.c:268:19:268:19 | a | 4.0 | 2.0 | 3.0 | +| test.c:268:14:268:14 | a | 3.3125 | 3.0 | 3.0 | +| test.c:268:19:268:19 | a | 2.15625 | 2.0 | 3.0 | | test.c:268:19:268:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:268:24:268:25 | 11 | 1.0 | -1.0 | -1.0 | | test.c:268:30:268:32 | - ... | 1.0 | 1.0 | 1.0 | | test.c:268:30:268:37 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:268:31:268:32 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:268:37:268:37 | b | 15.0 | 5.0 | 5.0 | -| test.c:268:42:268:42 | b | 15.0 | 4.0 | 5.0 | +| test.c:268:37:268:37 | b | 12.625 | 5.0 | 5.0 | +| test.c:268:42:268:42 | b | 6.8125 | 4.0 | 5.0 | | test.c:268:42:268:47 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:268:47:268:47 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:269:13:269:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:269:13:269:13 | a | 1.578125 | 2.0 | 2.0 | | test.c:269:13:269:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:269:15:269:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:269:15:269:15 | b | 3.90625 | 4.0 | 3.0 | | test.c:270:5:270:9 | total | 8.0 | 2.0 | 2.0 | | test.c:270:5:270:14 | ... += ... | 8.0 | 2.0 | 2.0 | | test.c:270:14:270:14 | r | 1.0 | 1.0 | 1.0 | @@ -711,21 +711,21 @@ estimateNrOfBounds | test.c:272:7:272:37 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:272:7:272:48 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:272:8:272:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:272:14:272:14 | a | 5.0 | 3.0 | 3.0 | -| test.c:272:19:272:19 | a | 5.0 | 2.0 | 3.0 | +| test.c:272:14:272:14 | a | 3.734375 | 3.0 | 3.0 | +| test.c:272:19:272:19 | a | 2.3671875 | 2.0 | 3.0 | | test.c:272:19:272:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:272:24:272:25 | 11 | 1.0 | -1.0 | -1.0 | | test.c:272:30:272:32 | - ... | 1.0 | 1.0 | 1.0 | | test.c:272:30:272:37 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:272:31:272:32 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:272:37:272:37 | b | 31.0 | 6.0 | 6.0 | -| test.c:272:42:272:42 | b | 31.0 | 5.0 | 6.0 | +| test.c:272:37:272:37 | b | 23.34375 | 6.0 | 6.0 | +| test.c:272:42:272:42 | b | 12.171875 | 5.0 | 6.0 | | test.c:272:42:272:48 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:272:47:272:48 | - ... | 1.0 | 1.0 | 1.0 | | test.c:272:48:272:48 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:273:13:273:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:273:13:273:13 | a | 1.68359375 | 2.0 | 2.0 | | test.c:273:13:273:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:273:15:273:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:273:15:273:15 | b | 6.5859375 | 5.0 | 2.0 | | test.c:274:5:274:9 | total | 16.0 | 2.0 | 2.0 | | test.c:274:5:274:14 | ... += ... | 16.0 | 2.0 | 2.0 | | test.c:274:14:274:14 | r | 1.0 | 1.0 | 1.0 | @@ -760,18 +760,18 @@ estimateNrOfBounds | test.c:288:7:288:45 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:288:8:288:9 | 17 | 1.0 | -1.0 | -1.0 | | test.c:288:14:288:14 | a | 2.0 | 3.0 | 3.0 | -| test.c:288:19:288:19 | a | 2.0 | 2.0 | 3.0 | +| test.c:288:19:288:19 | a | 1.5 | 2.0 | 3.0 | | test.c:288:19:288:24 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:288:24:288:24 | 0 | 1.0 | -1.0 | -1.0 | | test.c:288:29:288:29 | 0 | 1.0 | -1.0 | -1.0 | | test.c:288:29:288:34 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:288:34:288:34 | b | 3.0 | 3.0 | 3.0 | -| test.c:288:39:288:39 | b | 3.0 | 3.0 | 3.0 | +| test.c:288:39:288:39 | b | 2.0 | 3.0 | 3.0 | | test.c:288:39:288:45 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:288:44:288:45 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:289:13:289:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:289:13:289:13 | a | 1.25 | 2.0 | 2.0 | | test.c:289:13:289:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:289:15:289:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:289:15:289:15 | b | 1.5 | 3.0 | 2.0 | | test.c:290:5:290:9 | total | 2.0 | 2.0 | 2.0 | | test.c:290:5:290:14 | ... += ... | 2.0 | 2.0 | 2.0 | | test.c:290:14:290:14 | r | 1.0 | 1.0 | 1.0 | @@ -781,20 +781,20 @@ estimateNrOfBounds | test.c:292:7:292:36 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:292:7:292:47 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:292:8:292:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:292:14:292:14 | a | 3.0 | 3.0 | 3.0 | -| test.c:292:19:292:19 | a | 3.0 | 2.0 | 3.0 | +| test.c:292:14:292:14 | a | 2.75 | 3.0 | 3.0 | +| test.c:292:19:292:19 | a | 1.875 | 2.0 | 3.0 | | test.c:292:19:292:24 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:292:24:292:24 | 0 | 1.0 | -1.0 | -1.0 | | test.c:292:29:292:31 | - ... | 1.0 | 1.0 | 1.0 | | test.c:292:29:292:36 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:292:30:292:31 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:292:36:292:36 | b | 7.0 | 4.0 | 4.0 | -| test.c:292:41:292:41 | b | 7.0 | 4.0 | 4.0 | +| test.c:292:36:292:36 | b | 6.5 | 4.0 | 4.0 | +| test.c:292:41:292:41 | b | 3.75 | 4.0 | 4.0 | | test.c:292:41:292:47 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:292:46:292:47 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:293:13:293:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:293:13:293:13 | a | 1.4375 | 2.0 | 2.0 | | test.c:293:13:293:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:293:15:293:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:293:15:293:15 | b | 2.375 | 4.0 | 3.0 | | test.c:294:5:294:9 | total | 4.0 | 2.0 | 2.0 | | test.c:294:5:294:14 | ... += ... | 4.0 | 2.0 | 2.0 | | test.c:294:14:294:14 | r | 1.0 | 1.0 | 1.0 | @@ -804,20 +804,20 @@ estimateNrOfBounds | test.c:296:7:296:36 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:296:7:296:46 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:296:8:296:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:296:14:296:14 | a | 4.0 | 3.0 | 3.0 | -| test.c:296:19:296:19 | a | 4.0 | 2.0 | 3.0 | +| test.c:296:14:296:14 | a | 3.3125 | 3.0 | 3.0 | +| test.c:296:19:296:19 | a | 2.15625 | 2.0 | 3.0 | | test.c:296:19:296:24 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:296:24:296:24 | 0 | 1.0 | -1.0 | -1.0 | | test.c:296:29:296:31 | - ... | 1.0 | 1.0 | 1.0 | | test.c:296:29:296:36 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:296:30:296:31 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:296:36:296:36 | b | 15.0 | 5.0 | 5.0 | -| test.c:296:41:296:41 | b | 15.0 | 4.0 | 5.0 | +| test.c:296:36:296:36 | b | 12.625 | 5.0 | 5.0 | +| test.c:296:41:296:41 | b | 6.8125 | 4.0 | 5.0 | | test.c:296:41:296:46 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:296:46:296:46 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:297:13:297:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:297:13:297:13 | a | 1.578125 | 2.0 | 2.0 | | test.c:297:13:297:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:297:15:297:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:297:15:297:15 | b | 3.90625 | 4.0 | 3.0 | | test.c:298:5:298:9 | total | 8.0 | 2.0 | 2.0 | | test.c:298:5:298:14 | ... += ... | 8.0 | 2.0 | 2.0 | | test.c:298:14:298:14 | r | 1.0 | 1.0 | 1.0 | @@ -827,21 +827,21 @@ estimateNrOfBounds | test.c:300:7:300:36 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:300:7:300:47 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:300:8:300:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:300:14:300:14 | a | 5.0 | 3.0 | 3.0 | -| test.c:300:19:300:19 | a | 5.0 | 2.0 | 3.0 | +| test.c:300:14:300:14 | a | 3.734375 | 3.0 | 3.0 | +| test.c:300:19:300:19 | a | 2.3671875 | 2.0 | 3.0 | | test.c:300:19:300:24 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:300:24:300:24 | 0 | 1.0 | -1.0 | -1.0 | | test.c:300:29:300:31 | - ... | 1.0 | 1.0 | 1.0 | | test.c:300:29:300:36 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:300:30:300:31 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:300:36:300:36 | b | 31.0 | 6.0 | 6.0 | -| test.c:300:41:300:41 | b | 31.0 | 5.0 | 6.0 | +| test.c:300:36:300:36 | b | 23.34375 | 6.0 | 6.0 | +| test.c:300:41:300:41 | b | 12.171875 | 5.0 | 6.0 | | test.c:300:41:300:47 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:300:46:300:47 | - ... | 1.0 | 1.0 | 1.0 | | test.c:300:47:300:47 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:301:13:301:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:301:13:301:13 | a | 1.68359375 | 2.0 | 2.0 | | test.c:301:13:301:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:301:15:301:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:301:15:301:15 | b | 6.5859375 | 5.0 | 2.0 | | test.c:302:5:302:9 | total | 16.0 | 2.0 | 2.0 | | test.c:302:5:302:14 | ... += ... | 16.0 | 2.0 | 2.0 | | test.c:302:14:302:14 | r | 1.0 | 1.0 | 1.0 | @@ -877,19 +877,19 @@ estimateNrOfBounds | test.c:316:7:316:46 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:316:8:316:9 | 17 | 1.0 | -1.0 | -1.0 | | test.c:316:14:316:14 | a | 2.0 | 3.0 | 3.0 | -| test.c:316:19:316:19 | a | 2.0 | 2.0 | 3.0 | +| test.c:316:19:316:19 | a | 1.5 | 2.0 | 3.0 | | test.c:316:19:316:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:316:24:316:25 | - ... | 1.0 | 1.0 | 1.0 | | test.c:316:25:316:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:316:30:316:30 | 0 | 1.0 | -1.0 | -1.0 | | test.c:316:30:316:35 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:316:35:316:35 | b | 3.0 | 3.0 | 3.0 | -| test.c:316:40:316:40 | b | 3.0 | 3.0 | 3.0 | +| test.c:316:40:316:40 | b | 2.0 | 3.0 | 3.0 | | test.c:316:40:316:46 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:316:45:316:46 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:317:13:317:13 | a | 2.0 | 2.0 | 2.0 | +| test.c:317:13:317:13 | a | 1.25 | 2.0 | 2.0 | | test.c:317:13:317:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:317:15:317:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:317:15:317:15 | b | 1.5 | 3.0 | 2.0 | | test.c:318:5:318:9 | total | 2.0 | 2.0 | 2.0 | | test.c:318:5:318:14 | ... += ... | 2.0 | 2.0 | 2.0 | | test.c:318:14:318:14 | r | 1.0 | 1.0 | 1.0 | @@ -899,21 +899,21 @@ estimateNrOfBounds | test.c:320:7:320:37 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:320:7:320:48 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:320:8:320:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:320:14:320:14 | a | 3.0 | 3.0 | 3.0 | -| test.c:320:19:320:19 | a | 3.0 | 2.0 | 3.0 | +| test.c:320:14:320:14 | a | 2.75 | 3.0 | 3.0 | +| test.c:320:19:320:19 | a | 1.875 | 2.0 | 3.0 | | test.c:320:19:320:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:320:24:320:25 | - ... | 1.0 | 1.0 | 1.0 | | test.c:320:25:320:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:320:30:320:32 | - ... | 1.0 | 1.0 | 1.0 | | test.c:320:30:320:37 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:320:31:320:32 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:320:37:320:37 | b | 7.0 | 4.0 | 4.0 | -| test.c:320:42:320:42 | b | 7.0 | 4.0 | 4.0 | +| test.c:320:37:320:37 | b | 6.5 | 4.0 | 4.0 | +| test.c:320:42:320:42 | b | 3.75 | 4.0 | 4.0 | | test.c:320:42:320:48 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:320:47:320:48 | 23 | 1.0 | -1.0 | -1.0 | -| test.c:321:13:321:13 | a | 3.0 | 2.0 | 2.0 | +| test.c:321:13:321:13 | a | 1.4375 | 2.0 | 2.0 | | test.c:321:13:321:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:321:15:321:15 | b | 7.0 | 4.0 | 3.0 | +| test.c:321:15:321:15 | b | 2.375 | 4.0 | 3.0 | | test.c:322:5:322:9 | total | 4.0 | 2.0 | 2.0 | | test.c:322:5:322:14 | ... += ... | 4.0 | 2.0 | 2.0 | | test.c:322:14:322:14 | r | 1.0 | 1.0 | 1.0 | @@ -923,21 +923,21 @@ estimateNrOfBounds | test.c:324:7:324:37 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:324:7:324:47 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:324:8:324:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:324:14:324:14 | a | 4.0 | 3.0 | 3.0 | -| test.c:324:19:324:19 | a | 4.0 | 2.0 | 3.0 | +| test.c:324:14:324:14 | a | 3.3125 | 3.0 | 3.0 | +| test.c:324:19:324:19 | a | 2.15625 | 2.0 | 3.0 | | test.c:324:19:324:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:324:24:324:25 | - ... | 1.0 | 1.0 | 1.0 | | test.c:324:25:324:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:324:30:324:32 | - ... | 1.0 | 1.0 | 1.0 | | test.c:324:30:324:37 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:324:31:324:32 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:324:37:324:37 | b | 15.0 | 5.0 | 5.0 | -| test.c:324:42:324:42 | b | 15.0 | 4.0 | 5.0 | +| test.c:324:37:324:37 | b | 12.625 | 5.0 | 5.0 | +| test.c:324:42:324:42 | b | 6.8125 | 4.0 | 5.0 | | test.c:324:42:324:47 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:324:47:324:47 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:325:13:325:13 | a | 4.0 | 2.0 | 2.0 | +| test.c:325:13:325:13 | a | 1.578125 | 2.0 | 2.0 | | test.c:325:13:325:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:325:15:325:15 | b | 15.0 | 4.0 | 3.0 | +| test.c:325:15:325:15 | b | 3.90625 | 4.0 | 3.0 | | test.c:326:5:326:9 | total | 8.0 | 2.0 | 2.0 | | test.c:326:5:326:14 | ... += ... | 8.0 | 2.0 | 2.0 | | test.c:326:14:326:14 | r | 1.0 | 1.0 | 1.0 | @@ -947,22 +947,22 @@ estimateNrOfBounds | test.c:328:7:328:37 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:328:7:328:48 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:328:8:328:9 | 17 | 1.0 | -1.0 | -1.0 | -| test.c:328:14:328:14 | a | 5.0 | 3.0 | 3.0 | -| test.c:328:19:328:19 | a | 5.0 | 2.0 | 3.0 | +| test.c:328:14:328:14 | a | 3.734375 | 3.0 | 3.0 | +| test.c:328:19:328:19 | a | 2.3671875 | 2.0 | 3.0 | | test.c:328:19:328:25 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:328:24:328:25 | - ... | 1.0 | 1.0 | 1.0 | | test.c:328:25:328:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:328:30:328:32 | - ... | 1.0 | 1.0 | 1.0 | | test.c:328:30:328:37 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:328:31:328:32 | 13 | 1.0 | -1.0 | -1.0 | -| test.c:328:37:328:37 | b | 31.0 | 6.0 | 6.0 | -| test.c:328:42:328:42 | b | 31.0 | 5.0 | 6.0 | +| test.c:328:37:328:37 | b | 23.34375 | 6.0 | 6.0 | +| test.c:328:42:328:42 | b | 12.171875 | 5.0 | 6.0 | | test.c:328:42:328:48 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:328:47:328:48 | - ... | 1.0 | 1.0 | 1.0 | | test.c:328:48:328:48 | 7 | 1.0 | -1.0 | -1.0 | -| test.c:329:13:329:13 | a | 5.0 | 2.0 | 2.0 | +| test.c:329:13:329:13 | a | 1.68359375 | 2.0 | 2.0 | | test.c:329:13:329:15 | ... * ... | 1.0 | -1.0 | -1.0 | -| test.c:329:15:329:15 | b | 31.0 | 5.0 | 2.0 | +| test.c:329:15:329:15 | b | 6.5859375 | 5.0 | 2.0 | | test.c:330:5:330:9 | total | 16.0 | 2.0 | 2.0 | | test.c:330:5:330:14 | ... += ... | 16.0 | 2.0 | 2.0 | | test.c:330:14:330:14 | r | 1.0 | 1.0 | 1.0 | @@ -993,8 +993,8 @@ estimateNrOfBounds | test.c:348:44:348:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:349:20:349:30 | (...) | 2.0 | 2.0 | 1.0 | | test.c:349:20:349:35 | ... >= ... | 1.0 | -1.0 | -1.0 | -| test.c:349:20:349:43 | (signed int)... | 2.0 | 1.0 | 1.0 | -| test.c:349:20:349:43 | ... ? ... : ... | 2.0 | 1.0 | 1.0 | +| test.c:349:20:349:43 | (signed int)... | 1.5 | 1.0 | 1.0 | +| test.c:349:20:349:43 | ... ? ... : ... | 1.5 | 1.0 | 1.0 | | test.c:349:21:349:21 | 2 | 1.0 | -1.0 | -1.0 | | test.c:349:21:349:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:349:21:349:25 | ... * ... | 2.0 | 1.0 | 2.0 | @@ -1004,64 +1004,64 @@ estimateNrOfBounds | test.c:349:29:349:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:349:35:349:35 | 0 | 1.0 | -1.0 | -1.0 | | test.c:349:35:349:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:349:39:349:39 | e | 2.0 | 1.0 | 1.0 | +| test.c:349:39:349:39 | e | 1.5 | 1.0 | 1.0 | | test.c:349:43:349:43 | 2 | 1.0 | -1.0 | -1.0 | | test.c:349:43:349:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:350:22:350:32 | (...) | 4.0 | 1.0 | 1.0 | +| test.c:350:22:350:32 | (...) | 3.0 | 1.0 | 1.0 | | test.c:350:22:350:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:350:22:350:44 | ... ? ... : ... | 4.0 | 1.0 | 1.0 | +| test.c:350:22:350:44 | ... ? ... : ... | 2.0 | 1.0 | 1.0 | | test.c:350:23:350:23 | 3 | 1.0 | -1.0 | -1.0 | | test.c:350:23:350:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:350:23:350:27 | ... * ... | 4.0 | 1.0 | 2.0 | -| test.c:350:23:350:31 | ... + ... | 4.0 | 1.0 | 1.0 | -| test.c:350:27:350:27 | e | 4.0 | 1.0 | 2.0 | +| test.c:350:23:350:27 | ... * ... | 3.0 | 1.0 | 2.0 | +| test.c:350:23:350:31 | ... + ... | 3.0 | 1.0 | 1.0 | +| test.c:350:27:350:27 | e | 3.0 | 1.0 | 2.0 | | test.c:350:31:350:31 | 2 | 1.0 | -1.0 | -1.0 | | test.c:350:31:350:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:350:36:350:36 | 0 | 1.0 | -1.0 | -1.0 | | test.c:350:36:350:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:350:40:350:40 | e | 4.0 | 1.0 | 1.0 | +| test.c:350:40:350:40 | e | 2.0 | 1.0 | 1.0 | | test.c:350:44:350:44 | 2 | 1.0 | -1.0 | -1.0 | | test.c:350:44:350:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:351:22:351:32 | (...) | 8.0 | 2.0 | 2.0 | +| test.c:351:22:351:32 | (...) | 4.0 | 2.0 | 2.0 | | test.c:351:22:351:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:351:22:351:44 | ... ? ... : ... | 8.0 | 1.0 | 2.0 | +| test.c:351:22:351:44 | ... ? ... : ... | 2.5 | 1.0 | 2.0 | | test.c:351:23:351:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:351:23:351:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:351:23:351:27 | ... * ... | 8.0 | 1.0 | 2.0 | -| test.c:351:23:351:31 | ... + ... | 8.0 | 1.0 | 2.0 | -| test.c:351:27:351:27 | e | 8.0 | 1.0 | 2.0 | +| test.c:351:23:351:27 | ... * ... | 4.0 | 1.0 | 2.0 | +| test.c:351:23:351:31 | ... + ... | 4.0 | 1.0 | 2.0 | +| test.c:351:27:351:27 | e | 4.0 | 1.0 | 2.0 | | test.c:351:31:351:31 | 1 | 1.0 | -1.0 | -1.0 | | test.c:351:31:351:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:351:36:351:36 | 0 | 1.0 | -1.0 | -1.0 | | test.c:351:36:351:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:351:40:351:40 | e | 8.0 | 1.0 | 2.0 | +| test.c:351:40:351:40 | e | 2.5 | 1.0 | 2.0 | | test.c:351:44:351:44 | 2 | 1.0 | -1.0 | -1.0 | | test.c:351:44:351:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:352:22:352:32 | (...) | 16.0 | 2.0 | 2.0 | +| test.c:352:22:352:32 | (...) | 5.0 | 2.0 | 2.0 | | test.c:352:22:352:37 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:352:22:352:45 | ... ? ... : ... | 16.0 | 1.0 | 2.0 | +| test.c:352:22:352:45 | ... ? ... : ... | 3.0 | 1.0 | 2.0 | | test.c:352:23:352:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:352:23:352:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:352:23:352:27 | ... * ... | 16.0 | 1.0 | 3.0 | -| test.c:352:23:352:31 | ... + ... | 16.0 | 1.0 | 3.0 | -| test.c:352:27:352:27 | e | 16.0 | 1.0 | 3.0 | +| test.c:352:23:352:27 | ... * ... | 5.0 | 1.0 | 3.0 | +| test.c:352:23:352:31 | ... + ... | 5.0 | 1.0 | 3.0 | +| test.c:352:27:352:27 | e | 5.0 | 1.0 | 3.0 | | test.c:352:31:352:31 | 1 | 1.0 | -1.0 | -1.0 | | test.c:352:31:352:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:352:36:352:37 | 16 | 1.0 | -1.0 | -1.0 | | test.c:352:36:352:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:352:41:352:41 | e | 16.0 | 1.0 | 2.0 | +| test.c:352:41:352:41 | e | 3.0 | 1.0 | 2.0 | | test.c:352:45:352:45 | 2 | 1.0 | -1.0 | -1.0 | | test.c:352:45:352:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:354:10:354:12 | bi1 | 1.0 | 1.0 | 1.0 | -| test.c:354:10:354:18 | ... + ... | 2.0 | 1.0 | 1.0 | -| test.c:354:10:354:24 | ... + ... | 8.0 | 1.0 | 1.0 | -| test.c:354:10:354:30 | ... + ... | 64.0 | 1.0 | 2.0 | -| test.c:354:10:354:36 | ... + ... | 1024.0 | 1.0 | 2.0 | -| test.c:354:16:354:18 | (unsigned int)... | 2.0 | 1.0 | 1.0 | -| test.c:354:16:354:18 | bi2 | 2.0 | 1.0 | 1.0 | -| test.c:354:22:354:24 | bi3 | 4.0 | 1.0 | 1.0 | -| test.c:354:28:354:30 | bi4 | 8.0 | 1.0 | 2.0 | -| test.c:354:34:354:36 | bi5 | 16.0 | 1.0 | 2.0 | +| test.c:354:10:354:18 | ... + ... | 1.5 | 1.0 | 1.0 | +| test.c:354:10:354:24 | ... + ... | 3.0 | 1.0 | 1.0 | +| test.c:354:10:354:30 | ... + ... | 7.5 | 1.0 | 2.0 | +| test.c:354:10:354:36 | ... + ... | 22.5 | 1.0 | 2.0 | +| test.c:354:16:354:18 | (unsigned int)... | 1.5 | 1.0 | 1.0 | +| test.c:354:16:354:18 | bi2 | 1.5 | 1.0 | 1.0 | +| test.c:354:22:354:24 | bi3 | 2.0 | 1.0 | 1.0 | +| test.c:354:28:354:30 | bi4 | 2.5 | 1.0 | 2.0 | +| test.c:354:34:354:36 | bi5 | 3.0 | 1.0 | 2.0 | | test.c:358:13:358:14 | 0 | 1.0 | -1.0 | -1.0 | | test.c:359:7:359:7 | x | 1.0 | 1.0 | 1.0 | | test.c:359:7:359:11 | ... < ... | 1.0 | -1.0 | -1.0 | @@ -1074,12 +1074,12 @@ estimateNrOfBounds | test.c:364:5:364:5 | i | 13.0 | 3.0 | 3.0 | | test.c:364:5:364:7 | ... ++ | 13.0 | 3.0 | 3.0 | | test.c:366:3:366:3 | d | 1.0 | -1.0 | -1.0 | -| test.c:366:3:366:7 | ... = ... | 13.0 | 1.0 | 4.0 | -| test.c:366:7:366:7 | i | 13.0 | 1.0 | 4.0 | +| test.c:366:3:366:7 | ... = ... | 7.0 | 1.0 | 4.0 | +| test.c:366:7:366:7 | i | 7.0 | 1.0 | 4.0 | | test.c:367:7:367:7 | x | 1.0 | 1.0 | 1.0 | | test.c:367:7:367:11 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:367:11:367:11 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:368:9:368:9 | d | 13.0 | 1.0 | 4.0 | +| test.c:368:9:368:9 | d | 7.0 | 1.0 | 4.0 | | test.c:368:9:368:14 | ... > ... | 1.0 | -1.0 | -1.0 | | test.c:368:13:368:14 | - ... | 1.0 | 1.0 | 1.0 | | test.c:368:14:368:14 | x | 1.0 | 1.0 | 1.0 | @@ -1096,15 +1096,15 @@ estimateNrOfBounds | test.c:378:22:378:23 | 10 | 1.0 | -1.0 | -1.0 | | test.c:378:22:378:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:379:3:379:4 | y2 | 1.0 | -1.0 | -1.0 | -| test.c:379:3:379:24 | ... = ... | 2.0 | 2.0 | 1.0 | +| test.c:379:3:379:24 | ... = ... | 1.5 | 2.0 | 1.0 | | test.c:379:8:379:8 | x | 2.0 | 2.0 | 2.0 | | test.c:379:8:379:15 | ... >= ... | 1.0 | -1.0 | -1.0 | -| test.c:379:8:379:24 | ... ? ... : ... | 2.0 | 2.0 | 1.0 | +| test.c:379:8:379:24 | ... ? ... : ... | 1.5 | 2.0 | 1.0 | | test.c:379:13:379:15 | 100 | 1.0 | -1.0 | -1.0 | | test.c:379:13:379:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:379:19:379:20 | 10 | 1.0 | -1.0 | -1.0 | | test.c:379:19:379:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:379:24:379:24 | x | 2.0 | 2.0 | 1.0 | +| test.c:379:24:379:24 | x | 1.5 | 2.0 | 1.0 | | test.c:380:3:380:4 | y3 | 1.0 | -1.0 | -1.0 | | test.c:380:3:380:8 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:380:8:380:8 | 0 | 1.0 | -1.0 | -1.0 | @@ -1129,83 +1129,83 @@ estimateNrOfBounds | test.c:385:3:385:8 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:385:8:385:8 | 0 | 1.0 | -1.0 | -1.0 | | test.c:385:8:385:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:386:7:386:7 | x | 4.0 | 2.0 | 2.0 | +| test.c:386:7:386:7 | x | 3.0 | 2.0 | 2.0 | | test.c:386:7:386:13 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:386:11:386:13 | 300 | 1.0 | -1.0 | -1.0 | | test.c:386:11:386:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:387:5:387:6 | y3 | 1.0 | -1.0 | -1.0 | -| test.c:387:5:387:15 | ... = ... | 4.0 | 3.0 | 3.0 | -| test.c:387:10:387:10 | x | 4.0 | 2.0 | 2.0 | -| test.c:387:10:387:15 | ... ? ... : ... | 4.0 | 3.0 | 3.0 | +| test.c:387:5:387:15 | ... = ... | 2.0 | 3.0 | 3.0 | +| test.c:387:10:387:10 | x | 2.0 | 2.0 | 2.0 | +| test.c:387:10:387:15 | ... ? ... : ... | 2.0 | 3.0 | 3.0 | | test.c:387:15:387:15 | 5 | 1.0 | -1.0 | -1.0 | | test.c:387:15:387:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:388:5:388:6 | y4 | 1.0 | -1.0 | -1.0 | -| test.c:388:5:388:17 | ... = ... | 4.0 | 3.0 | 3.0 | -| test.c:388:10:388:10 | x | 4.0 | 2.0 | 2.0 | -| test.c:388:10:388:17 | ... ? ... : ... | 4.0 | 3.0 | 3.0 | +| test.c:388:5:388:17 | ... = ... | 2.0 | 3.0 | 3.0 | +| test.c:388:10:388:10 | x | 2.0 | 2.0 | 2.0 | +| test.c:388:10:388:17 | ... ? ... : ... | 2.0 | 3.0 | 3.0 | | test.c:388:15:388:17 | 500 | 1.0 | -1.0 | -1.0 | | test.c:388:15:388:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:389:5:389:6 | y5 | 1.0 | -1.0 | -1.0 | -| test.c:389:5:389:21 | ... = ... | 4.0 | 2.0 | 2.0 | -| test.c:389:10:389:14 | (...) | 4.0 | 2.0 | 2.0 | -| test.c:389:10:389:21 | ... ? ... : ... | 4.0 | 2.0 | 2.0 | -| test.c:389:11:389:11 | x | 4.0 | 2.0 | 2.0 | -| test.c:389:11:389:13 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:389:5:389:21 | ... = ... | 2.0 | 2.0 | 2.0 | +| test.c:389:10:389:14 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:389:10:389:21 | ... ? ... : ... | 2.0 | 2.0 | 2.0 | +| test.c:389:11:389:11 | x | 2.0 | 2.0 | 2.0 | +| test.c:389:11:389:13 | ... + ... | 2.0 | 2.0 | 2.0 | | test.c:389:13:389:13 | 1 | 1.0 | -1.0 | -1.0 | | test.c:389:13:389:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:389:19:389:21 | 500 | 1.0 | -1.0 | -1.0 | | test.c:389:19:389:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:390:5:390:6 | y6 | 1.0 | -1.0 | -1.0 | -| test.c:390:5:390:36 | ... = ... | 4.0 | 4.0 | 3.0 | -| test.c:390:10:390:31 | (...) | 4.0 | 3.0 | 2.0 | -| test.c:390:10:390:36 | (unsigned int)... | 4.0 | 4.0 | 3.0 | -| test.c:390:10:390:36 | ... ? ... : ... | 4.0 | 4.0 | 3.0 | -| test.c:390:11:390:30 | (unsigned char)... | 4.0 | 2.0 | 2.0 | -| test.c:390:26:390:30 | (...) | 4.0 | 2.0 | 2.0 | -| test.c:390:27:390:27 | x | 4.0 | 2.0 | 2.0 | -| test.c:390:27:390:29 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:390:5:390:36 | ... = ... | 2.0 | 4.0 | 3.0 | +| test.c:390:10:390:31 | (...) | 2.0 | 3.0 | 2.0 | +| test.c:390:10:390:36 | (unsigned int)... | 2.0 | 4.0 | 3.0 | +| test.c:390:10:390:36 | ... ? ... : ... | 2.0 | 4.0 | 3.0 | +| test.c:390:11:390:30 | (unsigned char)... | 2.0 | 2.0 | 2.0 | +| test.c:390:26:390:30 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:390:27:390:27 | x | 2.0 | 2.0 | 2.0 | +| test.c:390:27:390:29 | ... + ... | 2.0 | 2.0 | 2.0 | | test.c:390:29:390:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:390:29:390:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:390:36:390:36 | 5 | 1.0 | -1.0 | -1.0 | | test.c:391:5:391:6 | y7 | 1.0 | -1.0 | -1.0 | -| test.c:391:5:391:38 | ... = ... | 4.0 | 4.0 | 3.0 | -| test.c:391:10:391:31 | (...) | 4.0 | 3.0 | 2.0 | -| test.c:391:10:391:38 | (unsigned int)... | 4.0 | 4.0 | 3.0 | -| test.c:391:10:391:38 | ... ? ... : ... | 4.0 | 4.0 | 3.0 | -| test.c:391:11:391:30 | (unsigned char)... | 4.0 | 2.0 | 2.0 | -| test.c:391:26:391:30 | (...) | 4.0 | 2.0 | 2.0 | -| test.c:391:27:391:27 | x | 4.0 | 2.0 | 2.0 | -| test.c:391:27:391:29 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:391:5:391:38 | ... = ... | 2.0 | 4.0 | 3.0 | +| test.c:391:10:391:31 | (...) | 2.0 | 3.0 | 2.0 | +| test.c:391:10:391:38 | (unsigned int)... | 2.0 | 4.0 | 3.0 | +| test.c:391:10:391:38 | ... ? ... : ... | 2.0 | 4.0 | 3.0 | +| test.c:391:11:391:30 | (unsigned char)... | 2.0 | 2.0 | 2.0 | +| test.c:391:26:391:30 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:391:27:391:27 | x | 2.0 | 2.0 | 2.0 | +| test.c:391:27:391:29 | ... + ... | 2.0 | 2.0 | 2.0 | | test.c:391:29:391:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:391:29:391:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:391:36:391:38 | 500 | 1.0 | -1.0 | -1.0 | | test.c:392:5:392:6 | y8 | 1.0 | -1.0 | -1.0 | -| test.c:392:5:392:39 | ... = ... | 4.0 | 2.0 | 2.0 | -| test.c:392:10:392:32 | (...) | 4.0 | 2.0 | 2.0 | -| test.c:392:10:392:39 | (unsigned int)... | 4.0 | 2.0 | 2.0 | -| test.c:392:10:392:39 | ... ? ... : ... | 4.0 | 2.0 | 2.0 | -| test.c:392:11:392:31 | (unsigned short)... | 4.0 | 2.0 | 2.0 | -| test.c:392:27:392:31 | (...) | 4.0 | 2.0 | 2.0 | -| test.c:392:28:392:28 | x | 4.0 | 2.0 | 2.0 | -| test.c:392:28:392:30 | ... + ... | 4.0 | 2.0 | 2.0 | +| test.c:392:5:392:39 | ... = ... | 2.0 | 2.0 | 2.0 | +| test.c:392:10:392:32 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:392:10:392:39 | (unsigned int)... | 2.0 | 2.0 | 2.0 | +| test.c:392:10:392:39 | ... ? ... : ... | 2.0 | 2.0 | 2.0 | +| test.c:392:11:392:31 | (unsigned short)... | 2.0 | 2.0 | 2.0 | +| test.c:392:27:392:31 | (...) | 2.0 | 2.0 | 2.0 | +| test.c:392:28:392:28 | x | 2.0 | 2.0 | 2.0 | +| test.c:392:28:392:30 | ... + ... | 2.0 | 2.0 | 2.0 | | test.c:392:30:392:30 | 1 | 1.0 | -1.0 | -1.0 | | test.c:392:30:392:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:392:37:392:39 | 500 | 1.0 | -1.0 | -1.0 | | test.c:394:10:394:11 | y1 | 1.0 | 1.0 | 1.0 | -| test.c:394:10:394:16 | ... + ... | 2.0 | 2.0 | 1.0 | -| test.c:394:10:394:21 | ... + ... | 10.0 | 6.0 | 4.0 | -| test.c:394:10:394:26 | ... + ... | 50.0 | 16.0 | 13.0 | -| test.c:394:10:394:31 | ... + ... | 250.0 | 40.0 | 33.0 | -| test.c:394:10:394:36 | ... + ... | 1250.0 | 88.0 | 102.0 | -| test.c:394:10:394:41 | ... + ... | 6250.0 | 186.0 | 214.0 | -| test.c:394:10:394:46 | ... + ... | 31250.0 | 265.0 | 276.0 | -| test.c:394:15:394:16 | y2 | 2.0 | 2.0 | 1.0 | -| test.c:394:20:394:21 | y3 | 5.0 | 3.0 | 4.0 | -| test.c:394:25:394:26 | y4 | 5.0 | 3.0 | 4.0 | -| test.c:394:30:394:31 | y5 | 5.0 | 3.0 | 3.0 | -| test.c:394:35:394:36 | y6 | 5.0 | 4.0 | 4.0 | -| test.c:394:40:394:41 | y7 | 5.0 | 4.0 | 4.0 | -| test.c:394:45:394:46 | y8 | 5.0 | 3.0 | 3.0 | +| test.c:394:10:394:16 | ... + ... | 1.5 | 2.0 | 1.0 | +| test.c:394:10:394:21 | ... + ... | 4.5 | 6.0 | 4.0 | +| test.c:394:10:394:26 | ... + ... | 13.5 | 16.0 | 13.0 | +| test.c:394:10:394:31 | ... + ... | 40.5 | 40.0 | 33.0 | +| test.c:394:10:394:36 | ... + ... | 121.5 | 88.0 | 102.0 | +| test.c:394:10:394:41 | ... + ... | 364.5 | 186.0 | 214.0 | +| test.c:394:10:394:46 | ... + ... | 1093.5 | 265.0 | 276.0 | +| test.c:394:15:394:16 | y2 | 1.5 | 2.0 | 1.0 | +| test.c:394:20:394:21 | y3 | 3.0 | 3.0 | 4.0 | +| test.c:394:25:394:26 | y4 | 3.0 | 3.0 | 4.0 | +| test.c:394:30:394:31 | y5 | 3.0 | 3.0 | 3.0 | +| test.c:394:35:394:36 | y6 | 3.0 | 4.0 | 4.0 | +| test.c:394:40:394:41 | y7 | 3.0 | 4.0 | 4.0 | +| test.c:394:45:394:46 | y8 | 3.0 | 3.0 | 3.0 | | test.c:400:3:400:4 | y1 | 1.0 | -1.0 | -1.0 | | test.c:400:3:400:24 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:400:8:400:8 | x | 1.0 | 1.0 | 1.0 | @@ -1217,15 +1217,15 @@ estimateNrOfBounds | test.c:400:22:400:24 | 110 | 1.0 | -1.0 | -1.0 | | test.c:400:22:400:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:401:3:401:4 | y2 | 1.0 | -1.0 | -1.0 | -| test.c:401:3:401:25 | ... = ... | 2.0 | 1.0 | 2.0 | +| test.c:401:3:401:25 | ... = ... | 1.5 | 1.0 | 2.0 | | test.c:401:8:401:8 | x | 2.0 | 2.0 | 2.0 | | test.c:401:8:401:15 | ... <= ... | 1.0 | -1.0 | -1.0 | -| test.c:401:8:401:25 | ... ? ... : ... | 2.0 | 1.0 | 2.0 | +| test.c:401:8:401:25 | ... ? ... : ... | 1.5 | 1.0 | 2.0 | | test.c:401:13:401:15 | 100 | 1.0 | -1.0 | -1.0 | | test.c:401:13:401:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:401:19:401:21 | 110 | 1.0 | -1.0 | -1.0 | | test.c:401:19:401:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:401:25:401:25 | x | 2.0 | 1.0 | 2.0 | +| test.c:401:25:401:25 | x | 1.5 | 1.0 | 2.0 | | test.c:402:3:402:4 | y3 | 1.0 | -1.0 | -1.0 | | test.c:402:3:402:11 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:402:8:402:11 | 1000 | 1.0 | -1.0 | -1.0 | @@ -1238,51 +1238,51 @@ estimateNrOfBounds | test.c:404:3:404:11 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:404:8:404:11 | 1000 | 1.0 | -1.0 | -1.0 | | test.c:404:8:404:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:405:7:405:7 | x | 4.0 | 2.0 | 2.0 | +| test.c:405:7:405:7 | x | 3.0 | 2.0 | 2.0 | | test.c:405:7:405:14 | ... >= ... | 1.0 | -1.0 | -1.0 | | test.c:405:12:405:14 | 300 | 1.0 | -1.0 | -1.0 | | test.c:405:12:405:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:406:5:406:6 | y3 | 1.0 | -1.0 | -1.0 | -| test.c:406:5:406:21 | ... = ... | 4.0 | 2.0 | 3.0 | -| test.c:406:10:406:16 | (...) | 4.0 | 1.0 | 2.0 | -| test.c:406:10:406:21 | ... ? ... : ... | 4.0 | 2.0 | 3.0 | -| test.c:406:11:406:11 | x | 4.0 | 1.0 | 2.0 | -| test.c:406:11:406:15 | ... - ... | 4.0 | 1.0 | 2.0 | +| test.c:406:5:406:21 | ... = ... | 2.0 | 2.0 | 3.0 | +| test.c:406:10:406:16 | (...) | 2.0 | 1.0 | 2.0 | +| test.c:406:10:406:21 | ... ? ... : ... | 2.0 | 2.0 | 3.0 | +| test.c:406:11:406:11 | x | 2.0 | 1.0 | 2.0 | +| test.c:406:11:406:15 | ... - ... | 2.0 | 1.0 | 2.0 | | test.c:406:13:406:15 | 300 | 1.0 | -1.0 | -1.0 | | test.c:406:13:406:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:406:21:406:21 | 5 | 1.0 | -1.0 | -1.0 | | test.c:406:21:406:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:407:5:407:6 | y4 | 1.0 | -1.0 | -1.0 | -| test.c:407:5:407:21 | ... = ... | 4.0 | 1.0 | 2.0 | -| test.c:407:10:407:16 | (...) | 4.0 | 1.0 | 2.0 | -| test.c:407:10:407:21 | ... ? ... : ... | 4.0 | 1.0 | 2.0 | -| test.c:407:11:407:11 | x | 4.0 | 1.0 | 2.0 | -| test.c:407:11:407:15 | ... - ... | 4.0 | 1.0 | 2.0 | +| test.c:407:5:407:21 | ... = ... | 2.0 | 1.0 | 2.0 | +| test.c:407:10:407:16 | (...) | 2.0 | 1.0 | 2.0 | +| test.c:407:10:407:21 | ... ? ... : ... | 2.0 | 1.0 | 2.0 | +| test.c:407:11:407:11 | x | 2.0 | 1.0 | 2.0 | +| test.c:407:11:407:15 | ... - ... | 2.0 | 1.0 | 2.0 | | test.c:407:13:407:15 | 200 | 1.0 | -1.0 | -1.0 | | test.c:407:13:407:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:407:21:407:21 | 5 | 1.0 | -1.0 | -1.0 | | test.c:407:21:407:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:408:5:408:6 | y5 | 1.0 | -1.0 | -1.0 | -| test.c:408:5:408:38 | ... = ... | 4.0 | 2.0 | 2.0 | -| test.c:408:10:408:33 | (...) | 4.0 | 1.0 | 1.0 | -| test.c:408:10:408:38 | (unsigned int)... | 4.0 | 2.0 | 2.0 | -| test.c:408:10:408:38 | ... ? ... : ... | 4.0 | 2.0 | 2.0 | -| test.c:408:11:408:32 | (unsigned char)... | 4.0 | 1.0 | 2.0 | -| test.c:408:26:408:32 | (...) | 4.0 | 1.0 | 2.0 | -| test.c:408:27:408:27 | x | 4.0 | 1.0 | 2.0 | -| test.c:408:27:408:31 | ... - ... | 4.0 | 1.0 | 2.0 | +| test.c:408:5:408:38 | ... = ... | 2.0 | 2.0 | 2.0 | +| test.c:408:10:408:33 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:408:10:408:38 | (unsigned int)... | 2.0 | 2.0 | 2.0 | +| test.c:408:10:408:38 | ... ? ... : ... | 2.0 | 2.0 | 2.0 | +| test.c:408:11:408:32 | (unsigned char)... | 2.0 | 1.0 | 2.0 | +| test.c:408:26:408:32 | (...) | 2.0 | 1.0 | 2.0 | +| test.c:408:27:408:27 | x | 2.0 | 1.0 | 2.0 | +| test.c:408:27:408:31 | ... - ... | 2.0 | 1.0 | 2.0 | | test.c:408:29:408:31 | 200 | 1.0 | -1.0 | -1.0 | | test.c:408:29:408:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:408:38:408:38 | 5 | 1.0 | -1.0 | -1.0 | | test.c:410:10:410:11 | y1 | 1.0 | 1.0 | 1.0 | -| test.c:410:10:410:16 | ... + ... | 2.0 | 1.0 | 2.0 | -| test.c:410:10:410:21 | ... + ... | 10.0 | 3.0 | 4.0 | -| test.c:410:10:410:26 | ... + ... | 50.0 | 2.0 | 3.0 | -| test.c:410:10:410:31 | ... + ... | 250.0 | 3.0 | 3.0 | -| test.c:410:15:410:16 | y2 | 2.0 | 1.0 | 2.0 | -| test.c:410:20:410:21 | y3 | 5.0 | 3.0 | 4.0 | -| test.c:410:25:410:26 | y4 | 5.0 | 2.0 | 3.0 | -| test.c:410:30:410:31 | y5 | 5.0 | 3.0 | 3.0 | +| test.c:410:10:410:16 | ... + ... | 1.5 | 1.0 | 2.0 | +| test.c:410:10:410:21 | ... + ... | 4.5 | 3.0 | 4.0 | +| test.c:410:10:410:26 | ... + ... | 13.5 | 2.0 | 3.0 | +| test.c:410:10:410:31 | ... + ... | 40.5 | 3.0 | 3.0 | +| test.c:410:15:410:16 | y2 | 1.5 | 1.0 | 2.0 | +| test.c:410:20:410:21 | y3 | 3.0 | 3.0 | 4.0 | +| test.c:410:25:410:26 | y4 | 3.0 | 2.0 | 3.0 | +| test.c:410:30:410:31 | y5 | 3.0 | 3.0 | 3.0 | | test.c:415:14:415:14 | m | 1.0 | 1.0 | 1.0 | | test.c:415:14:415:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:415:18:415:18 | n | 1.0 | 1.0 | 1.0 | @@ -1315,15 +1315,15 @@ estimateNrOfBounds | test.c:416:73:416:82 | 0.326618929999999974 | 1.0 | -1.0 | -1.0 | | test.c:416:86:416:95 | 0.5927046500000000551 | 1.0 | -1.0 | -1.0 | | test.c:416:99:416:108 | 0.5297741000000000255 | 1.0 | -1.0 | -1.0 | -| test.c:417:14:417:14 | m | 4.0 | 1.0 | 1.0 | +| test.c:417:14:417:14 | m | 3.5 | 1.0 | 1.0 | | test.c:417:14:417:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:417:18:417:18 | n | 9.0 | 1.0 | 1.0 | +| test.c:417:18:417:18 | n | 8.0 | 1.0 | 1.0 | | test.c:417:18:417:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:417:22:417:22 | o | 9.0 | 1.0 | 1.0 | +| test.c:417:22:417:22 | o | 8.0 | 1.0 | 1.0 | | test.c:417:22:417:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:417:26:417:26 | p | 9.0 | 1.0 | 1.0 | +| test.c:417:26:417:26 | p | 8.0 | 1.0 | 1.0 | | test.c:417:26:417:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:417:30:417:30 | q | 9.0 | 1.0 | 1.0 | +| test.c:417:30:417:30 | q | 8.0 | 1.0 | 1.0 | | test.c:417:30:417:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:417:34:417:43 | 0.774296030000000024 | 1.0 | -1.0 | -1.0 | | test.c:417:47:417:56 | 0.3147808400000000062 | 1.0 | -1.0 | -1.0 | @@ -1331,15 +1331,15 @@ estimateNrOfBounds | test.c:417:73:417:82 | 0.05121255999999999725 | 1.0 | -1.0 | -1.0 | | test.c:417:86:417:95 | 0.7931074500000000471 | 1.0 | -1.0 | -1.0 | | test.c:417:99:417:108 | 0.6798145100000000385 | 1.0 | -1.0 | -1.0 | -| test.c:418:14:418:14 | m | 8.0 | 1.0 | 1.0 | +| test.c:418:14:418:14 | m | 5.75 | 1.0 | 1.0 | | test.c:418:14:418:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:418:18:418:18 | n | 27.0 | 1.0 | 1.0 | +| test.c:418:18:418:18 | n | 20.5 | 1.0 | 1.0 | | test.c:418:18:418:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:418:22:418:22 | o | 27.0 | 1.0 | 1.0 | +| test.c:418:22:418:22 | o | 20.5 | 1.0 | 1.0 | | test.c:418:22:418:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:418:26:418:26 | p | 27.0 | 1.0 | 1.0 | +| test.c:418:26:418:26 | p | 20.5 | 1.0 | 1.0 | | test.c:418:26:418:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:418:30:418:30 | q | 27.0 | 1.0 | 1.0 | +| test.c:418:30:418:30 | q | 20.5 | 1.0 | 1.0 | | test.c:418:30:418:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:418:34:418:43 | 0.4472955599999999809 | 1.0 | -1.0 | -1.0 | | test.c:418:47:418:56 | 0.8059920200000000312 | 1.0 | -1.0 | -1.0 | @@ -1347,15 +1347,15 @@ estimateNrOfBounds | test.c:418:73:418:82 | 0.5995273199999999747 | 1.0 | -1.0 | -1.0 | | test.c:418:86:418:95 | 0.3697694799999999837 | 1.0 | -1.0 | -1.0 | | test.c:418:99:418:108 | 0.8386683499999999514 | 1.0 | -1.0 | -1.0 | -| test.c:419:14:419:14 | m | 16.0 | 1.0 | 1.0 | +| test.c:419:14:419:14 | m | 9.125 | 1.0 | 1.0 | | test.c:419:14:419:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:419:18:419:18 | n | 81.0 | 1.0 | 1.0 | +| test.c:419:18:419:18 | n | 51.75 | 1.0 | 1.0 | | test.c:419:18:419:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:419:22:419:22 | o | 81.0 | 1.0 | 1.0 | +| test.c:419:22:419:22 | o | 51.75 | 1.0 | 1.0 | | test.c:419:22:419:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:419:26:419:26 | p | 81.0 | 1.0 | 1.0 | +| test.c:419:26:419:26 | p | 51.75 | 1.0 | 1.0 | | test.c:419:26:419:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:419:30:419:30 | q | 81.0 | 1.0 | 1.0 | +| test.c:419:30:419:30 | q | 51.75 | 1.0 | 1.0 | | test.c:419:30:419:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:419:34:419:43 | 0.4931182800000000199 | 1.0 | -1.0 | -1.0 | | test.c:419:47:419:56 | 0.9038991100000000056 | 1.0 | -1.0 | -1.0 | @@ -1363,15 +1363,15 @@ estimateNrOfBounds | test.c:419:73:419:82 | 0.2177842600000000073 | 1.0 | -1.0 | -1.0 | | test.c:419:86:419:95 | 0.7248596600000000167 | 1.0 | -1.0 | -1.0 | | test.c:419:99:419:108 | 0.6873487400000000136 | 1.0 | -1.0 | -1.0 | -| test.c:420:14:420:14 | m | 32.0 | 1.0 | 1.0 | +| test.c:420:14:420:14 | m | 14.1875 | 1.0 | 1.0 | | test.c:420:14:420:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:420:18:420:18 | n | 243.0 | 1.0 | 1.0 | +| test.c:420:18:420:18 | n | 129.875 | 1.0 | 1.0 | | test.c:420:18:420:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:420:22:420:22 | o | 243.0 | 1.0 | 1.0 | +| test.c:420:22:420:22 | o | 129.875 | 1.0 | 1.0 | | test.c:420:22:420:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:420:26:420:26 | p | 243.0 | 1.0 | 1.0 | +| test.c:420:26:420:26 | p | 129.875 | 1.0 | 1.0 | | test.c:420:26:420:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:420:30:420:30 | q | 243.0 | 1.0 | 1.0 | +| test.c:420:30:420:30 | q | 129.875 | 1.0 | 1.0 | | test.c:420:30:420:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:420:34:420:43 | 0.4745284799999999747 | 1.0 | -1.0 | -1.0 | | test.c:420:47:420:56 | 0.107866500000000004 | 1.0 | -1.0 | -1.0 | @@ -1379,15 +1379,15 @@ estimateNrOfBounds | test.c:420:73:420:82 | 0.7616405200000000431 | 1.0 | -1.0 | -1.0 | | test.c:420:86:420:95 | 0.3480889200000000239 | 1.0 | -1.0 | -1.0 | | test.c:420:99:420:108 | 0.584408649999999974 | 1.0 | -1.0 | -1.0 | -| test.c:421:14:421:14 | m | 64.0 | 1.0 | 1.0 | +| test.c:421:14:421:14 | m | 21.78125 | 1.0 | 1.0 | | test.c:421:14:421:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:421:18:421:18 | n | 729.0 | 1.0 | 1.0 | +| test.c:421:18:421:18 | n | 325.1875 | 1.0 | 1.0 | | test.c:421:18:421:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:421:22:421:22 | o | 729.0 | 1.0 | 1.0 | +| test.c:421:22:421:22 | o | 325.1875 | 1.0 | 1.0 | | test.c:421:22:421:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:421:26:421:26 | p | 729.0 | 1.0 | 1.0 | +| test.c:421:26:421:26 | p | 325.1875 | 1.0 | 1.0 | | test.c:421:26:421:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:421:30:421:30 | q | 729.0 | 1.0 | 1.0 | +| test.c:421:30:421:30 | q | 325.1875 | 1.0 | 1.0 | | test.c:421:30:421:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:421:34:421:43 | 0.02524326 | 1.0 | -1.0 | -1.0 | | test.c:421:47:421:56 | 0.8290504600000000446 | 1.0 | -1.0 | -1.0 | @@ -1395,15 +1395,15 @@ estimateNrOfBounds | test.c:421:73:421:82 | 0.1251655799999999985 | 1.0 | -1.0 | -1.0 | | test.c:421:86:421:95 | 0.8523517900000000536 | 1.0 | -1.0 | -1.0 | | test.c:421:99:421:108 | 0.3623238400000000081 | 1.0 | -1.0 | -1.0 | -| test.c:422:14:422:14 | m | 128.0 | 1.0 | 1.0 | +| test.c:422:14:422:14 | m | 33.171875 | 1.0 | 1.0 | | test.c:422:14:422:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:422:18:422:18 | n | 2187.0 | 1.0 | 1.0 | +| test.c:422:18:422:18 | n | 813.46875 | 1.0 | 1.0 | | test.c:422:18:422:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:422:22:422:22 | o | 2187.0 | 1.0 | 1.0 | +| test.c:422:22:422:22 | o | 813.46875 | 1.0 | 1.0 | | test.c:422:22:422:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:422:26:422:26 | p | 2187.0 | 1.0 | 1.0 | +| test.c:422:26:422:26 | p | 813.46875 | 1.0 | 1.0 | | test.c:422:26:422:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:422:30:422:30 | q | 2187.0 | 1.0 | 1.0 | +| test.c:422:30:422:30 | q | 813.46875 | 1.0 | 1.0 | | test.c:422:30:422:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:422:34:422:43 | 0.3870862600000000153 | 1.0 | -1.0 | -1.0 | | test.c:422:47:422:56 | 0.3287604399999999871 | 1.0 | -1.0 | -1.0 | @@ -1411,15 +1411,15 @@ estimateNrOfBounds | test.c:422:73:422:82 | 0.4504110800000000192 | 1.0 | -1.0 | -1.0 | | test.c:422:86:422:95 | 0.4864090899999999884 | 1.0 | -1.0 | -1.0 | | test.c:422:99:422:108 | 0.8433127200000000157 | 1.0 | -1.0 | -1.0 | -| test.c:423:14:423:14 | m | 256.0 | 1.0 | 1.0 | +| test.c:423:14:423:14 | m | 50.2578125 | 1.0 | 1.0 | | test.c:423:14:423:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:423:18:423:18 | n | 6561.0 | 1.0 | 1.0 | +| test.c:423:18:423:18 | n | 2034.171875 | 1.0 | 1.0 | | test.c:423:18:423:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:423:22:423:22 | o | 6561.0 | 1.0 | 1.0 | +| test.c:423:22:423:22 | o | 2034.171875 | 1.0 | 1.0 | | test.c:423:22:423:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:423:26:423:26 | p | 6561.0 | 1.0 | 1.0 | +| test.c:423:26:423:26 | p | 2034.171875 | 1.0 | 1.0 | | test.c:423:26:423:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:423:30:423:30 | q | 6561.0 | 1.0 | 1.0 | +| test.c:423:30:423:30 | q | 2034.171875 | 1.0 | 1.0 | | test.c:423:30:423:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:423:34:423:43 | 0.1575506299999999971 | 1.0 | -1.0 | -1.0 | | test.c:423:47:423:56 | 0.7708683299999999905 | 1.0 | -1.0 | -1.0 | @@ -1427,15 +1427,15 @@ estimateNrOfBounds | test.c:423:73:423:82 | 0.1480050800000000111 | 1.0 | -1.0 | -1.0 | | test.c:423:86:423:95 | 0.374281430000000026 | 1.0 | -1.0 | -1.0 | | test.c:423:99:423:108 | 0.05328182000000000057 | 1.0 | -1.0 | -1.0 | -| test.c:424:14:424:14 | m | 512.0 | 1.0 | 1.0 | +| test.c:424:14:424:14 | m | 75.88671875 | 1.0 | 1.0 | | test.c:424:14:424:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:424:18:424:18 | n | 19683.0 | 1.0 | 1.0 | +| test.c:424:18:424:18 | n | 5085.9296875 | 1.0 | 1.0 | | test.c:424:18:424:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:424:22:424:22 | o | 19683.0 | 1.0 | 1.0 | +| test.c:424:22:424:22 | o | 5085.9296875 | 1.0 | 1.0 | | test.c:424:22:424:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:424:26:424:26 | p | 19683.0 | 1.0 | 1.0 | +| test.c:424:26:424:26 | p | 5085.9296875 | 1.0 | 1.0 | | test.c:424:26:424:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:424:30:424:30 | q | 19683.0 | 1.0 | 1.0 | +| test.c:424:30:424:30 | q | 5085.9296875 | 1.0 | 1.0 | | test.c:424:30:424:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:424:34:424:43 | 0.4173653600000000186 | 1.0 | -1.0 | -1.0 | | test.c:424:47:424:56 | 0.7682662799999999681 | 1.0 | -1.0 | -1.0 | @@ -1443,15 +1443,15 @@ estimateNrOfBounds | test.c:424:73:424:82 | 0.5567927400000000082 | 1.0 | -1.0 | -1.0 | | test.c:424:86:424:95 | 0.3946885700000000163 | 1.0 | -1.0 | -1.0 | | test.c:424:99:424:108 | 0.6907214400000000198 | 1.0 | -1.0 | -1.0 | -| test.c:425:14:425:14 | m | 1024.0 | 1.0 | 1.0 | +| test.c:425:14:425:14 | m | 114.330078125 | 1.0 | 1.0 | | test.c:425:14:425:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:425:18:425:18 | n | 59049.0 | 1.0 | 1.0 | +| test.c:425:18:425:18 | n | 12715.32421875 | 1.0 | 1.0 | | test.c:425:18:425:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:425:22:425:22 | o | 59049.0 | 1.0 | 1.0 | +| test.c:425:22:425:22 | o | 12715.32421875 | 1.0 | 1.0 | | test.c:425:22:425:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:425:26:425:26 | p | 59049.0 | 1.0 | 1.0 | +| test.c:425:26:425:26 | p | 12715.32421875 | 1.0 | 1.0 | | test.c:425:26:425:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:425:30:425:30 | q | 59049.0 | 1.0 | 1.0 | +| test.c:425:30:425:30 | q | 12715.32421875 | 1.0 | 1.0 | | test.c:425:30:425:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:425:34:425:43 | 0.8895534499999999678 | 1.0 | -1.0 | -1.0 | | test.c:425:47:425:56 | 0.2990482400000000207 | 1.0 | -1.0 | -1.0 | @@ -1459,15 +1459,15 @@ estimateNrOfBounds | test.c:425:73:425:82 | 0.2051910999999999874 | 1.0 | -1.0 | -1.0 | | test.c:425:86:425:95 | 0.8874555899999999609 | 1.0 | -1.0 | -1.0 | | test.c:425:99:425:108 | 0.8137279800000000174 | 1.0 | -1.0 | -1.0 | -| test.c:426:14:426:14 | m | 2048.0 | 1.0 | 1.0 | +| test.c:426:14:426:14 | m | 171.9951171875 | 1.0 | 1.0 | | test.c:426:14:426:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:426:18:426:18 | n | 177147.0 | 1.0 | 1.0 | +| test.c:426:18:426:18 | n | 31788.810546875 | 1.0 | 1.0 | | test.c:426:18:426:95 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:426:22:426:22 | o | 177147.0 | 1.0 | 1.0 | +| test.c:426:22:426:22 | o | 31788.810546875 | 1.0 | 1.0 | | test.c:426:22:426:82 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:426:26:426:26 | p | 177147.0 | 1.0 | 1.0 | +| test.c:426:26:426:26 | p | 31788.810546875 | 1.0 | 1.0 | | test.c:426:26:426:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:426:30:426:30 | q | 177147.0 | 1.0 | 1.0 | +| test.c:426:30:426:30 | q | 31788.810546875 | 1.0 | 1.0 | | test.c:426:30:426:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:426:34:426:43 | 0.4218627600000000033 | 1.0 | -1.0 | -1.0 | | test.c:426:47:426:56 | 0.5384335799999999672 | 1.0 | -1.0 | -1.0 | @@ -1510,28 +1510,28 @@ estimateNrOfBounds | test.c:442:7:442:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:442:13:442:14 | 13 | 1.0 | -1.0 | -1.0 | | test.c:442:13:442:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:442:19:442:21 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:442:19:442:21 | rhs | 1.5 | 2.0 | 2.0 | | test.c:442:19:442:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:442:26:442:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:443:7:443:9 | rhs | 3.0 | 3.0 | 3.0 | | test.c:443:7:443:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:443:13:443:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:443:13:443:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:443:19:443:21 | rhs | 3.0 | 3.0 | 3.0 | +| test.c:443:19:443:21 | rhs | 2.0 | 3.0 | 3.0 | | test.c:443:19:443:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:443:26:443:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:444:7:444:9 | rhs | 4.0 | 4.0 | 4.0 | | test.c:444:7:444:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:444:13:444:14 | 15 | 1.0 | -1.0 | -1.0 | | test.c:444:13:444:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:444:19:444:21 | rhs | 4.0 | 4.0 | 4.0 | +| test.c:444:19:444:21 | rhs | 2.5 | 4.0 | 4.0 | | test.c:444:19:444:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:444:26:444:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:445:7:445:9 | rhs | 5.0 | 5.0 | 5.0 | | test.c:445:7:445:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:445:13:445:14 | 16 | 1.0 | -1.0 | -1.0 | | test.c:445:13:445:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:445:19:445:21 | rhs | 5.0 | 5.0 | 5.0 | +| test.c:445:19:445:21 | rhs | 3.0 | 5.0 | 5.0 | | test.c:445:19:445:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:445:26:445:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:446:10:446:12 | (int)... | 6.0 | 6.0 | 6.0 | @@ -1550,104 +1550,104 @@ estimateNrOfBounds | test.c:453:7:453:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:453:13:453:14 | 11 | 1.0 | -1.0 | -1.0 | | test.c:453:13:453:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:453:19:453:21 | rhs | 2.0 | 2.0 | 2.0 | +| test.c:453:19:453:21 | rhs | 1.5 | 2.0 | 2.0 | | test.c:453:19:453:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:453:26:453:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:453:38:453:40 | rhs | 2.0 | 1.0 | 2.0 | +| test.c:453:38:453:40 | rhs | 1.5 | 1.0 | 2.0 | | test.c:453:38:453:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:453:45:453:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:454:7:454:9 | rhs | 4.0 | 3.0 | 3.0 | +| test.c:454:7:454:9 | rhs | 3.0 | 3.0 | 3.0 | | test.c:454:7:454:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:454:13:454:14 | 12 | 1.0 | -1.0 | -1.0 | | test.c:454:13:454:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:454:19:454:21 | rhs | 4.0 | 3.0 | 3.0 | +| test.c:454:19:454:21 | rhs | 2.0 | 3.0 | 3.0 | | test.c:454:19:454:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:454:26:454:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:454:38:454:40 | rhs | 4.0 | 1.0 | 3.0 | +| test.c:454:38:454:40 | rhs | 2.0 | 1.0 | 3.0 | | test.c:454:38:454:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:454:45:454:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:455:7:455:9 | rhs | 8.0 | 4.0 | 4.0 | +| test.c:455:7:455:9 | rhs | 4.0 | 4.0 | 4.0 | | test.c:455:7:455:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:455:13:455:14 | 13 | 1.0 | -1.0 | -1.0 | | test.c:455:13:455:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:455:19:455:21 | rhs | 8.0 | 4.0 | 4.0 | +| test.c:455:19:455:21 | rhs | 2.5 | 4.0 | 4.0 | | test.c:455:19:455:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:455:26:455:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:455:38:455:40 | rhs | 8.0 | 1.0 | 4.0 | +| test.c:455:38:455:40 | rhs | 2.5 | 1.0 | 4.0 | | test.c:455:38:455:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:455:45:455:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:456:7:456:9 | rhs | 16.0 | 5.0 | 5.0 | +| test.c:456:7:456:9 | rhs | 5.0 | 5.0 | 5.0 | | test.c:456:7:456:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:456:13:456:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:456:13:456:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:456:19:456:21 | rhs | 16.0 | 5.0 | 5.0 | +| test.c:456:19:456:21 | rhs | 3.0 | 5.0 | 5.0 | | test.c:456:19:456:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:456:26:456:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:456:38:456:40 | rhs | 16.0 | 1.0 | 5.0 | +| test.c:456:38:456:40 | rhs | 3.0 | 1.0 | 5.0 | | test.c:456:38:456:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:456:45:456:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:457:7:457:9 | rhs | 32.0 | 6.0 | 6.0 | +| test.c:457:7:457:9 | rhs | 6.0 | 6.0 | 6.0 | | test.c:457:7:457:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:457:13:457:14 | 15 | 1.0 | -1.0 | -1.0 | | test.c:457:13:457:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:457:19:457:21 | rhs | 32.0 | 6.0 | 6.0 | +| test.c:457:19:457:21 | rhs | 3.5 | 6.0 | 6.0 | | test.c:457:19:457:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:457:26:457:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:457:38:457:40 | rhs | 32.0 | 1.0 | 6.0 | +| test.c:457:38:457:40 | rhs | 3.5 | 1.0 | 6.0 | | test.c:457:38:457:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:457:45:457:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:458:7:458:9 | rhs | 64.0 | 7.0 | 7.0 | +| test.c:458:7:458:9 | rhs | 7.0 | 7.0 | 7.0 | | test.c:458:7:458:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:458:13:458:14 | 16 | 1.0 | -1.0 | -1.0 | | test.c:458:13:458:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:458:19:458:21 | rhs | 64.0 | 7.0 | 7.0 | +| test.c:458:19:458:21 | rhs | 4.0 | 7.0 | 7.0 | | test.c:458:19:458:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:458:26:458:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:458:38:458:40 | rhs | 64.0 | 1.0 | 7.0 | +| test.c:458:38:458:40 | rhs | 4.0 | 1.0 | 7.0 | | test.c:458:38:458:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:458:45:458:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:459:7:459:9 | rhs | 128.0 | 8.0 | 8.0 | +| test.c:459:7:459:9 | rhs | 8.0 | 8.0 | 8.0 | | test.c:459:7:459:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:459:13:459:14 | 17 | 1.0 | -1.0 | -1.0 | | test.c:459:13:459:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:459:19:459:21 | rhs | 128.0 | 8.0 | 8.0 | +| test.c:459:19:459:21 | rhs | 4.5 | 8.0 | 8.0 | | test.c:459:19:459:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:459:26:459:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:459:38:459:40 | rhs | 128.0 | 1.0 | 8.0 | +| test.c:459:38:459:40 | rhs | 4.5 | 1.0 | 8.0 | | test.c:459:38:459:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:459:45:459:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:460:7:460:9 | rhs | 256.0 | 9.0 | 9.0 | +| test.c:460:7:460:9 | rhs | 9.0 | 9.0 | 9.0 | | test.c:460:7:460:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:460:13:460:14 | 18 | 1.0 | -1.0 | -1.0 | | test.c:460:13:460:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:460:19:460:21 | rhs | 256.0 | 9.0 | 9.0 | +| test.c:460:19:460:21 | rhs | 5.0 | 9.0 | 9.0 | | test.c:460:19:460:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:460:26:460:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:460:38:460:40 | rhs | 256.0 | 1.0 | 9.0 | +| test.c:460:38:460:40 | rhs | 5.0 | 1.0 | 9.0 | | test.c:460:38:460:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:460:45:460:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:461:7:461:9 | rhs | 512.0 | 10.0 | 10.0 | +| test.c:461:7:461:9 | rhs | 10.0 | 10.0 | 10.0 | | test.c:461:7:461:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:461:13:461:14 | 19 | 1.0 | -1.0 | -1.0 | | test.c:461:13:461:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:461:19:461:21 | rhs | 512.0 | 10.0 | 10.0 | +| test.c:461:19:461:21 | rhs | 5.5 | 10.0 | 10.0 | | test.c:461:19:461:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:461:26:461:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:461:38:461:40 | rhs | 512.0 | 1.0 | 10.0 | +| test.c:461:38:461:40 | rhs | 5.5 | 1.0 | 10.0 | | test.c:461:38:461:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:461:45:461:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:462:7:462:9 | rhs | 1024.0 | 11.0 | 11.0 | +| test.c:462:7:462:9 | rhs | 11.0 | 11.0 | 11.0 | | test.c:462:7:462:14 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:462:13:462:14 | 20 | 1.0 | -1.0 | -1.0 | | test.c:462:13:462:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:462:19:462:21 | rhs | 1024.0 | 11.0 | 11.0 | +| test.c:462:19:462:21 | rhs | 6.0 | 11.0 | 11.0 | | test.c:462:19:462:26 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:462:26:462:26 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:462:38:462:40 | rhs | 1024.0 | 1.0 | 11.0 | +| test.c:462:38:462:40 | rhs | 6.0 | 1.0 | 11.0 | | test.c:462:38:462:45 | ... << ... | 1.0 | -1.0 | -1.0 | | test.c:462:45:462:45 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:463:10:463:12 | (int)... | 2048.0 | 12.0 | 12.0 | -| test.c:463:10:463:12 | rhs | 2048.0 | 12.0 | 12.0 | +| test.c:463:10:463:12 | (int)... | 12.0 | 12.0 | 12.0 | +| test.c:463:10:463:12 | rhs | 12.0 | 12.0 | 12.0 | | test.c:467:7:467:7 | a | 1.0 | 1.0 | 1.0 | | test.c:467:7:467:13 | ... == ... | 1.0 | -1.0 | -1.0 | | test.c:467:12:467:13 | 17 | 1.0 | -1.0 | -1.0 | @@ -1663,15 +1663,15 @@ estimateNrOfBounds | test.c:472:7:472:7 | b | 1.0 | -1.0 | -1.0 | | test.c:472:7:472:12 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:472:11:472:12 | 10 | 1.0 | -1.0 | -1.0 | -| test.c:477:11:477:11 | a | 4.0 | 4.0 | 4.0 | -| test.c:477:11:477:15 | ... + ... | 16.0 | 12.0 | 12.0 | +| test.c:477:11:477:11 | a | 3.5 | 4.0 | 4.0 | +| test.c:477:11:477:15 | ... + ... | 14.0 | 12.0 | 12.0 | | test.c:477:15:477:15 | b | 4.0 | 3.0 | 3.0 | -| test.c:478:10:478:10 | a | 4.0 | 4.0 | 4.0 | -| test.c:478:10:478:14 | ... + ... | 16.0 | 12.0 | 12.0 | +| test.c:478:10:478:10 | a | 3.5 | 4.0 | 4.0 | +| test.c:478:10:478:14 | ... + ... | 14.0 | 12.0 | 12.0 | | test.c:478:14:478:14 | b | 4.0 | 3.0 | 3.0 | | test.c:485:4:487:50 | (...) | 1.0 | 1.0 | 1.0 | | test.c:485:4:570:26 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:485:4:659:27 | ... ? ... : ... | 1.297918419127476E201 | 1.0 | 1.0 | +| test.c:485:4:659:27 | ... ? ... : ... | 1.4542272872758854E125 | 1.0 | 1.0 | | test.c:485:5:485:6 | 14 | 1.0 | -1.0 | -1.0 | | test.c:485:5:485:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:485:5:485:11 | ... * ... | 1.0 | 1.0 | 1.0 | @@ -1734,13 +1734,13 @@ estimateNrOfBounds | test.c:487:43:487:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:487:48:487:49 | 17 | 1.0 | -1.0 | -1.0 | | test.c:487:48:487:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:488:5:570:26 | (...) | 9.29462083211502E84 | 1.0 | 1.0 | +| test.c:488:5:570:26 | (...) | 3.405969190536326E53 | 1.0 | 1.0 | | test.c:488:6:488:6 | 2 | 1.0 | -1.0 | -1.0 | | test.c:488:6:488:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:488:6:488:23 | ... * ... | 2.0 | 1.0 | 1.0 | -| test.c:488:6:507:42 | ... + ... | 4.524508125E10 | 1.0 | 1.0 | +| test.c:488:6:507:42 | ... + ... | 2.5265625E8 | 1.0 | 1.0 | | test.c:488:6:527:24 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:488:6:570:25 | ... ? ... : ... | 9.29462083211502E84 | 1.0 | 1.0 | +| test.c:488:6:570:25 | ... ? ... : ... | 3.405969190536326E53 | 1.0 | 1.0 | | test.c:488:10:488:23 | (...) | 2.0 | 1.0 | 1.0 | | test.c:488:11:488:12 | ip | 2.0 | 2.0 | 1.0 | | test.c:488:11:488:17 | ... * ... | 2.0 | 2.0 | 1.0 | @@ -1749,15 +1749,15 @@ estimateNrOfBounds | test.c:488:16:488:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:488:21:488:22 | 32 | 1.0 | -1.0 | -1.0 | | test.c:488:21:488:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:489:7:507:42 | (...) | 2.2622540625E10 | 1.0 | 1.0 | +| test.c:489:7:507:42 | (...) | 1.26328125E8 | 1.0 | 1.0 | | test.c:489:8:489:8 | 4 | 1.0 | -1.0 | -1.0 | | test.c:489:8:489:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:489:8:489:25 | ... * ... | 2.0 | 1.0 | 1.0 | | test.c:489:8:490:26 | ... + ... | 4.0 | 1.0 | 1.0 | | test.c:489:8:491:26 | ... + ... | 8.0 | 1.0 | 1.0 | -| test.c:489:8:496:22 | ... + ... | 1000.0 | 1.0 | 1.0 | +| test.c:489:8:496:22 | ... + ... | 272.25 | 1.0 | 1.0 | | test.c:489:8:497:37 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:489:8:507:41 | ... ? ... : ... | 2.2622540625E10 | 1.0 | 1.0 | +| test.c:489:8:507:41 | ... ? ... : ... | 1.26328125E8 | 1.0 | 1.0 | | test.c:489:12:489:25 | (...) | 2.0 | 1.0 | 1.0 | | test.c:489:13:489:14 | ip | 2.0 | 2.0 | 1.0 | | test.c:489:13:489:19 | ... * ... | 2.0 | 2.0 | 1.0 | @@ -1788,11 +1788,11 @@ estimateNrOfBounds | test.c:491:19:491:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:491:24:491:25 | 64 | 1.0 | -1.0 | -1.0 | | test.c:491:24:491:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:492:9:496:22 | (...) | 125.0 | 1.0 | 1.0 | +| test.c:492:9:496:22 | (...) | 34.03125 | 1.0 | 1.0 | | test.c:492:10:492:21 | (...) | 2.0 | 1.0 | 1.0 | | test.c:492:10:492:26 | ... * ... | 2.0 | 1.0 | 1.0 | | test.c:492:10:492:80 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:492:10:496:21 | ... ? ... : ... | 125.0 | 1.0 | 1.0 | +| test.c:492:10:496:21 | ... ? ... : ... | 34.03125 | 1.0 | 1.0 | | test.c:492:11:492:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:492:11:492:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:492:11:492:16 | ... * ... | 2.0 | 2.0 | 1.0 | @@ -1802,12 +1802,12 @@ estimateNrOfBounds | test.c:492:20:492:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:492:25:492:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:492:25:492:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:492:30:492:80 | (...) | 4.0 | 1.0 | 1.0 | +| test.c:492:30:492:80 | (...) | 2.25 | 1.0 | 1.0 | | test.c:492:31:492:32 | 17 | 1.0 | -1.0 | -1.0 | | test.c:492:31:492:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:492:31:492:43 | ... * ... | 2.0 | 1.0 | 1.0 | | test.c:492:31:492:53 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:492:31:492:79 | ... ? ... : ... | 4.0 | 1.0 | 1.0 | +| test.c:492:31:492:79 | ... ? ... : ... | 2.25 | 1.0 | 1.0 | | test.c:492:36:492:43 | (...) | 2.0 | 1.0 | 1.0 | | test.c:492:37:492:37 | 2 | 1.0 | -1.0 | -1.0 | | test.c:492:37:492:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | @@ -1819,1079 +1819,1079 @@ estimateNrOfBounds | test.c:492:52:492:53 | ip | 2.0 | 2.0 | 1.0 | | test.c:492:57:492:58 | 17 | 1.0 | -1.0 | -1.0 | | test.c:492:57:492:58 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:492:57:492:69 | ... * ... | 2.0 | 1.0 | 1.0 | -| test.c:492:62:492:69 | (...) | 2.0 | 1.0 | 1.0 | +| test.c:492:57:492:69 | ... * ... | 1.5 | 1.0 | 1.0 | +| test.c:492:62:492:69 | (...) | 1.5 | 1.0 | 1.0 | | test.c:492:63:492:63 | 2 | 1.0 | -1.0 | -1.0 | | test.c:492:63:492:63 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:492:63:492:68 | ... * ... | 2.0 | 2.0 | 1.0 | -| test.c:492:67:492:68 | ip | 2.0 | 2.0 | 1.0 | +| test.c:492:63:492:68 | ... * ... | 1.5 | 2.0 | 1.0 | +| test.c:492:67:492:68 | ip | 1.5 | 2.0 | 2.0 | | test.c:492:73:492:74 | 17 | 1.0 | -1.0 | -1.0 | | test.c:492:73:492:74 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:492:73:492:79 | ... * ... | 2.0 | 2.0 | 1.0 | -| test.c:492:78:492:79 | ip | 2.0 | 2.0 | 1.0 | -| test.c:493:13:493:24 | (...) | 5.0 | 1.0 | 1.0 | -| test.c:493:13:493:29 | ... * ... | 5.0 | 1.0 | 1.0 | +| test.c:492:73:492:79 | ... * ... | 1.5 | 2.0 | 1.0 | +| test.c:492:78:492:79 | ip | 1.5 | 2.0 | 2.0 | +| test.c:493:13:493:24 | (...) | 4.5 | 1.0 | 1.0 | +| test.c:493:13:493:29 | ... * ... | 4.5 | 1.0 | 1.0 | | test.c:493:14:493:14 | 2 | 1.0 | -1.0 | -1.0 | | test.c:493:14:493:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:493:14:493:19 | ... * ... | 5.0 | 2.0 | 1.0 | -| test.c:493:14:493:23 | ... + ... | 5.0 | 1.0 | 1.0 | -| test.c:493:18:493:19 | ip | 5.0 | 2.0 | 1.0 | +| test.c:493:14:493:19 | ... * ... | 4.5 | 2.0 | 1.0 | +| test.c:493:14:493:23 | ... + ... | 4.5 | 1.0 | 1.0 | +| test.c:493:18:493:19 | ip | 4.5 | 2.0 | 4.0 | | test.c:493:23:493:23 | 1 | 1.0 | -1.0 | -1.0 | | test.c:493:23:493:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:493:28:493:29 | 14 | 1.0 | -1.0 | -1.0 | | test.c:493:28:493:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:494:13:494:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:494:13:494:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:494:13:494:25 | ... * ... | 5.0 | 1.0 | 1.0 | +| test.c:494:13:494:25 | ... * ... | 4.5 | 1.0 | 1.0 | | test.c:494:13:494:35 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:494:13:496:21 | ... ? ... : ... | 25.0 | 1.0 | 1.0 | -| test.c:494:18:494:25 | (...) | 5.0 | 1.0 | 1.0 | +| test.c:494:13:496:21 | ... ? ... : ... | 7.5625 | 1.0 | 1.0 | +| test.c:494:18:494:25 | (...) | 4.5 | 1.0 | 1.0 | | test.c:494:19:494:19 | 2 | 1.0 | -1.0 | -1.0 | | test.c:494:19:494:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:494:19:494:24 | ... * ... | 5.0 | 2.0 | 1.0 | -| test.c:494:23:494:24 | ip | 5.0 | 2.0 | 1.0 | +| test.c:494:19:494:24 | ... * ... | 4.5 | 2.0 | 1.0 | +| test.c:494:23:494:24 | ip | 4.5 | 2.0 | 4.0 | | test.c:494:29:494:30 | 17 | 1.0 | -1.0 | -1.0 | | test.c:494:29:494:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:494:29:494:35 | ... * ... | 5.0 | 2.0 | 1.0 | -| test.c:494:34:494:35 | ip | 5.0 | 2.0 | 1.0 | +| test.c:494:29:494:35 | ... * ... | 4.5 | 2.0 | 1.0 | +| test.c:494:34:494:35 | ip | 4.5 | 2.0 | 4.0 | | test.c:495:15:495:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:495:15:495:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:495:15:495:27 | ... * ... | 5.0 | 1.0 | 1.0 | -| test.c:495:20:495:27 | (...) | 5.0 | 1.0 | 1.0 | +| test.c:495:15:495:27 | ... * ... | 2.75 | 1.0 | 1.0 | +| test.c:495:20:495:27 | (...) | 2.75 | 1.0 | 1.0 | | test.c:495:21:495:21 | 2 | 1.0 | -1.0 | -1.0 | | test.c:495:21:495:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:495:21:495:26 | ... * ... | 5.0 | 2.0 | 1.0 | -| test.c:495:25:495:26 | ip | 5.0 | 2.0 | 1.0 | +| test.c:495:21:495:26 | ... * ... | 2.75 | 2.0 | 1.0 | +| test.c:495:25:495:26 | ip | 2.75 | 2.0 | 2.0 | | test.c:496:15:496:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:496:15:496:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:496:15:496:21 | ... * ... | 5.0 | 2.0 | 1.0 | -| test.c:496:20:496:21 | ip | 5.0 | 2.0 | 1.0 | +| test.c:496:15:496:21 | ... * ... | 2.75 | 2.0 | 1.0 | +| test.c:496:20:496:21 | ip | 2.75 | 2.0 | 2.0 | | test.c:497:7:497:7 | 2 | 1.0 | -1.0 | -1.0 | | test.c:497:7:497:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:497:7:497:12 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:497:7:497:17 | ... * ... | 15.0 | 1.0 | 1.0 | -| test.c:497:7:497:37 | ... + ... | 225.0 | 1.0 | 1.0 | -| test.c:497:11:497:12 | ip | 15.0 | 2.0 | 1.0 | +| test.c:497:7:497:12 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:497:7:497:17 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:497:7:497:37 | ... + ... | 100.0 | 1.0 | 1.0 | +| test.c:497:11:497:12 | ip | 10.0 | 2.0 | 5.0 | | test.c:497:16:497:17 | 14 | 1.0 | -1.0 | -1.0 | | test.c:497:16:497:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:497:21:497:32 | (...) | 15.0 | 1.0 | 1.0 | -| test.c:497:21:497:37 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:497:21:497:32 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:497:21:497:37 | ... * ... | 10.0 | 1.0 | 1.0 | | test.c:497:22:497:22 | 2 | 1.0 | -1.0 | -1.0 | | test.c:497:22:497:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:497:22:497:27 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:497:22:497:31 | ... + ... | 15.0 | 1.0 | 1.0 | -| test.c:497:26:497:27 | ip | 15.0 | 2.0 | 1.0 | +| test.c:497:22:497:27 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:497:22:497:31 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:497:26:497:27 | ip | 10.0 | 2.0 | 5.0 | | test.c:497:31:497:31 | 1 | 1.0 | -1.0 | -1.0 | | test.c:497:31:497:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:497:36:497:37 | 17 | 1.0 | -1.0 | -1.0 | | test.c:497:36:497:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:498:11:498:11 | 4 | 1.0 | -1.0 | -1.0 | | test.c:498:11:498:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:498:11:498:28 | ... * ... | 15.0 | 1.0 | 1.0 | -| test.c:498:11:499:28 | ... + ... | 225.0 | 1.0 | 1.0 | -| test.c:498:11:500:28 | ... + ... | 3375.0 | 1.0 | 1.0 | -| test.c:498:11:506:24 | ... + ... | 1.00544625E8 | 1.0 | 1.0 | -| test.c:498:15:498:28 | (...) | 15.0 | 1.0 | 1.0 | -| test.c:498:16:498:17 | ip | 15.0 | 2.0 | 1.0 | -| test.c:498:16:498:22 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:498:16:498:27 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:498:11:498:28 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:498:11:499:28 | ... + ... | 100.0 | 1.0 | 1.0 | +| test.c:498:11:500:28 | ... + ... | 1000.0 | 1.0 | 1.0 | +| test.c:498:11:506:24 | ... + ... | 1263281.25 | 1.0 | 1.0 | +| test.c:498:15:498:28 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:498:16:498:17 | ip | 10.0 | 2.0 | 5.0 | +| test.c:498:16:498:22 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:498:16:498:27 | ... + ... | 10.0 | 1.0 | 1.0 | | test.c:498:21:498:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:498:21:498:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:498:26:498:27 | 32 | 1.0 | -1.0 | -1.0 | | test.c:498:26:498:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:499:11:499:28 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:499:11:499:28 | (...) | 10.0 | 1.0 | 1.0 | | test.c:499:12:499:12 | 2 | 1.0 | -1.0 | -1.0 | | test.c:499:12:499:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:499:12:499:17 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:499:12:499:22 | ... * ... | 15.0 | 1.0 | 1.0 | -| test.c:499:12:499:27 | ... + ... | 15.0 | 1.0 | 1.0 | -| test.c:499:16:499:17 | ip | 15.0 | 2.0 | 1.0 | +| test.c:499:12:499:17 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:499:12:499:22 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:499:12:499:27 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:499:16:499:17 | ip | 10.0 | 2.0 | 5.0 | | test.c:499:21:499:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:499:21:499:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:499:26:499:27 | 32 | 1.0 | -1.0 | -1.0 | | test.c:499:26:499:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:500:11:500:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:500:11:500:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:500:11:500:28 | ... * ... | 15.0 | 1.0 | 1.0 | -| test.c:500:15:500:28 | (...) | 15.0 | 1.0 | 1.0 | -| test.c:500:16:500:17 | ip | 15.0 | 2.0 | 1.0 | -| test.c:500:16:500:22 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:500:16:500:27 | ... + ... | 15.0 | 1.0 | 1.0 | +| test.c:500:11:500:28 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:500:15:500:28 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:500:16:500:17 | ip | 10.0 | 2.0 | 5.0 | +| test.c:500:16:500:22 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:500:16:500:27 | ... + ... | 10.0 | 1.0 | 1.0 | | test.c:500:21:500:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:500:21:500:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:500:26:500:27 | 64 | 1.0 | -1.0 | -1.0 | | test.c:500:26:500:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:501:11:506:24 | (...) | 29791.0 | 1.0 | 1.0 | -| test.c:501:12:501:23 | (...) | 15.0 | 1.0 | 1.0 | -| test.c:501:12:501:28 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:501:11:506:24 | (...) | 1263.28125 | 1.0 | 1.0 | +| test.c:501:12:501:23 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:501:12:501:28 | ... * ... | 10.0 | 1.0 | 1.0 | | test.c:501:12:502:61 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:501:12:506:23 | ... ? ... : ... | 29791.0 | 1.0 | 1.0 | +| test.c:501:12:506:23 | ... ? ... : ... | 1263.28125 | 1.0 | 1.0 | | test.c:501:13:501:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:501:13:501:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:501:13:501:18 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:501:13:501:22 | ... + ... | 15.0 | 1.0 | 1.0 | -| test.c:501:17:501:18 | ip | 15.0 | 2.0 | 1.0 | +| test.c:501:13:501:18 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:501:13:501:22 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:501:17:501:18 | ip | 10.0 | 2.0 | 5.0 | | test.c:501:22:501:22 | 1 | 1.0 | -1.0 | -1.0 | | test.c:501:22:501:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:501:27:501:28 | 14 | 1.0 | -1.0 | -1.0 | | test.c:501:27:501:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:502:11:502:61 | (...) | 225.0 | 1.0 | 1.0 | +| test.c:502:11:502:61 | (...) | 30.25 | 1.0 | 1.0 | | test.c:502:12:502:13 | 14 | 1.0 | -1.0 | -1.0 | | test.c:502:12:502:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:502:12:502:24 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:502:12:502:24 | ... * ... | 10.0 | 1.0 | 1.0 | | test.c:502:12:502:34 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:502:12:502:60 | ... ? ... : ... | 225.0 | 1.0 | 1.0 | -| test.c:502:17:502:24 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:502:12:502:60 | ... ? ... : ... | 30.25 | 1.0 | 1.0 | +| test.c:502:17:502:24 | (...) | 10.0 | 1.0 | 1.0 | | test.c:502:18:502:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:502:18:502:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:502:18:502:23 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:502:22:502:23 | ip | 15.0 | 2.0 | 1.0 | +| test.c:502:18:502:23 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:502:22:502:23 | ip | 10.0 | 2.0 | 5.0 | | test.c:502:28:502:29 | 17 | 1.0 | -1.0 | -1.0 | | test.c:502:28:502:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:502:28:502:34 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:502:33:502:34 | ip | 15.0 | 2.0 | 1.0 | +| test.c:502:28:502:34 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:502:33:502:34 | ip | 10.0 | 2.0 | 5.0 | | test.c:502:38:502:39 | 17 | 1.0 | -1.0 | -1.0 | | test.c:502:38:502:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:502:38:502:50 | ... * ... | 15.0 | 1.0 | 1.0 | -| test.c:502:43:502:50 | (...) | 15.0 | 1.0 | 1.0 | +| test.c:502:38:502:50 | ... * ... | 5.5 | 1.0 | 1.0 | +| test.c:502:43:502:50 | (...) | 5.5 | 1.0 | 1.0 | | test.c:502:44:502:44 | 2 | 1.0 | -1.0 | -1.0 | | test.c:502:44:502:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:502:44:502:49 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:502:48:502:49 | ip | 15.0 | 2.0 | 1.0 | +| test.c:502:44:502:49 | ... * ... | 5.5 | 2.0 | 1.0 | +| test.c:502:48:502:49 | ip | 5.5 | 2.0 | 2.0 | | test.c:502:54:502:55 | 17 | 1.0 | -1.0 | -1.0 | | test.c:502:54:502:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:502:54:502:60 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:502:59:502:60 | ip | 15.0 | 2.0 | 1.0 | -| test.c:503:15:503:26 | (...) | 31.0 | 1.0 | 1.0 | -| test.c:503:15:503:31 | ... * ... | 31.0 | 1.0 | 1.0 | +| test.c:502:54:502:60 | ... * ... | 5.5 | 2.0 | 1.0 | +| test.c:502:59:502:60 | ip | 5.5 | 2.0 | 2.0 | +| test.c:503:15:503:26 | (...) | 16.5 | 1.0 | 1.0 | +| test.c:503:15:503:31 | ... * ... | 16.5 | 1.0 | 1.0 | | test.c:503:16:503:16 | 2 | 1.0 | -1.0 | -1.0 | | test.c:503:16:503:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:503:16:503:21 | ... * ... | 31.0 | 2.0 | 1.0 | -| test.c:503:16:503:25 | ... + ... | 31.0 | 1.0 | 1.0 | -| test.c:503:20:503:21 | ip | 31.0 | 2.0 | 1.0 | +| test.c:503:16:503:21 | ... * ... | 16.5 | 2.0 | 1.0 | +| test.c:503:16:503:25 | ... + ... | 16.5 | 1.0 | 1.0 | +| test.c:503:20:503:21 | ip | 16.5 | 2.0 | 4.0 | | test.c:503:25:503:25 | 1 | 1.0 | -1.0 | -1.0 | | test.c:503:25:503:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:503:30:503:31 | 14 | 1.0 | -1.0 | -1.0 | | test.c:503:30:503:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:504:15:504:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:504:15:504:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:504:15:504:27 | ... * ... | 31.0 | 1.0 | 1.0 | +| test.c:504:15:504:27 | ... * ... | 16.5 | 1.0 | 1.0 | | test.c:504:15:504:37 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:504:15:506:23 | ... ? ... : ... | 961.0 | 1.0 | 1.0 | -| test.c:504:20:504:27 | (...) | 31.0 | 1.0 | 1.0 | +| test.c:504:15:506:23 | ... ? ... : ... | 76.5625 | 1.0 | 1.0 | +| test.c:504:20:504:27 | (...) | 16.5 | 1.0 | 1.0 | | test.c:504:21:504:21 | 2 | 1.0 | -1.0 | -1.0 | | test.c:504:21:504:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:504:21:504:26 | ... * ... | 31.0 | 2.0 | 1.0 | -| test.c:504:25:504:26 | ip | 31.0 | 2.0 | 1.0 | +| test.c:504:21:504:26 | ... * ... | 16.5 | 2.0 | 1.0 | +| test.c:504:25:504:26 | ip | 16.5 | 2.0 | 4.0 | | test.c:504:31:504:32 | 17 | 1.0 | -1.0 | -1.0 | | test.c:504:31:504:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:504:31:504:37 | ... * ... | 31.0 | 2.0 | 1.0 | -| test.c:504:36:504:37 | ip | 31.0 | 2.0 | 1.0 | +| test.c:504:31:504:37 | ... * ... | 16.5 | 2.0 | 1.0 | +| test.c:504:36:504:37 | ip | 16.5 | 2.0 | 4.0 | | test.c:505:17:505:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:505:17:505:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:505:17:505:29 | ... * ... | 31.0 | 1.0 | 1.0 | -| test.c:505:22:505:29 | (...) | 31.0 | 1.0 | 1.0 | +| test.c:505:17:505:29 | ... * ... | 8.75 | 1.0 | 1.0 | +| test.c:505:22:505:29 | (...) | 8.75 | 1.0 | 1.0 | | test.c:505:23:505:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:505:23:505:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:505:23:505:28 | ... * ... | 31.0 | 2.0 | 1.0 | -| test.c:505:27:505:28 | ip | 31.0 | 2.0 | 1.0 | +| test.c:505:23:505:28 | ... * ... | 8.75 | 2.0 | 1.0 | +| test.c:505:27:505:28 | ip | 8.75 | 2.0 | 2.0 | | test.c:506:17:506:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:506:17:506:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:506:17:506:23 | ... * ... | 31.0 | 2.0 | 1.0 | -| test.c:506:22:506:23 | ip | 31.0 | 2.0 | 1.0 | +| test.c:506:17:506:23 | ... * ... | 8.75 | 2.0 | 1.0 | +| test.c:506:22:506:23 | ip | 8.75 | 2.0 | 2.0 | | test.c:507:11:507:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:507:11:507:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:507:11:507:16 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:507:11:507:21 | ... * ... | 15.0 | 1.0 | 1.0 | -| test.c:507:11:507:41 | ... + ... | 225.0 | 1.0 | 1.0 | -| test.c:507:15:507:16 | ip | 15.0 | 2.0 | 1.0 | +| test.c:507:11:507:16 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:507:11:507:21 | ... * ... | 10.0 | 1.0 | 1.0 | +| test.c:507:11:507:41 | ... + ... | 100.0 | 1.0 | 1.0 | +| test.c:507:15:507:16 | ip | 10.0 | 2.0 | 5.0 | | test.c:507:20:507:21 | 14 | 1.0 | -1.0 | -1.0 | | test.c:507:20:507:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:507:25:507:36 | (...) | 15.0 | 1.0 | 1.0 | -| test.c:507:25:507:41 | ... * ... | 15.0 | 1.0 | 1.0 | +| test.c:507:25:507:36 | (...) | 10.0 | 1.0 | 1.0 | +| test.c:507:25:507:41 | ... * ... | 10.0 | 1.0 | 1.0 | | test.c:507:26:507:26 | 2 | 1.0 | -1.0 | -1.0 | | test.c:507:26:507:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:507:26:507:31 | ... * ... | 15.0 | 2.0 | 1.0 | -| test.c:507:26:507:35 | ... + ... | 15.0 | 1.0 | 1.0 | -| test.c:507:30:507:31 | ip | 15.0 | 2.0 | 1.0 | +| test.c:507:26:507:31 | ... * ... | 10.0 | 2.0 | 1.0 | +| test.c:507:26:507:35 | ... + ... | 10.0 | 1.0 | 1.0 | +| test.c:507:30:507:31 | ip | 10.0 | 2.0 | 5.0 | | test.c:507:35:507:35 | 1 | 1.0 | -1.0 | -1.0 | | test.c:507:35:507:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:507:40:507:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:507:40:507:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:508:5:527:24 | (...) | 6.6142118960740864E25 | 1.0 | 1.0 | +| test.c:508:5:527:24 | (...) | 2.7409234531663296E16 | 1.0 | 1.0 | | test.c:508:6:508:6 | 4 | 1.0 | -1.0 | -1.0 | | test.c:508:6:508:6 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:508:6:508:23 | ... * ... | 108.0 | 1.0 | 1.0 | -| test.c:508:6:509:24 | ... + ... | 11664.0 | 1.0 | 1.0 | -| test.c:508:6:510:24 | ... + ... | 1259712.0 | 1.0 | 1.0 | -| test.c:508:6:515:20 | ... + ... | 1.2872131505856E13 | 1.0 | 1.0 | +| test.c:508:6:508:23 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:508:6:509:24 | ... + ... | 1936.0 | 1.0 | 1.0 | +| test.c:508:6:510:24 | ... + ... | 85184.0 | 1.0 | 1.0 | +| test.c:508:6:515:20 | ... + ... | 6.74501553E9 | 1.0 | 1.0 | | test.c:508:6:516:55 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:508:6:527:23 | ... ? ... : ... | 6.6142118960740864E25 | 1.0 | 1.0 | -| test.c:508:10:508:23 | (...) | 108.0 | 1.0 | 1.0 | -| test.c:508:11:508:12 | ip | 108.0 | 2.0 | 1.0 | -| test.c:508:11:508:17 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:508:11:508:22 | ... + ... | 108.0 | 1.0 | 1.0 | +| test.c:508:6:527:23 | ... ? ... : ... | 2.7409234531663296E16 | 1.0 | 1.0 | +| test.c:508:10:508:23 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:508:11:508:12 | ip | 44.0 | 2.0 | 5.0 | +| test.c:508:11:508:17 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:508:11:508:22 | ... + ... | 44.0 | 1.0 | 1.0 | | test.c:508:16:508:17 | 14 | 1.0 | -1.0 | -1.0 | | test.c:508:16:508:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:508:21:508:22 | 32 | 1.0 | -1.0 | -1.0 | | test.c:508:21:508:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:509:7:509:24 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:509:7:509:24 | (...) | 44.0 | 1.0 | 1.0 | | test.c:509:8:509:8 | 2 | 1.0 | -1.0 | -1.0 | | test.c:509:8:509:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:509:8:509:13 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:509:8:509:18 | ... * ... | 108.0 | 1.0 | 1.0 | -| test.c:509:8:509:23 | ... + ... | 108.0 | 1.0 | 1.0 | -| test.c:509:12:509:13 | ip | 108.0 | 2.0 | 1.0 | +| test.c:509:8:509:13 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:509:8:509:18 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:509:8:509:23 | ... + ... | 44.0 | 1.0 | 1.0 | +| test.c:509:12:509:13 | ip | 44.0 | 2.0 | 5.0 | | test.c:509:17:509:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:509:17:509:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:509:22:509:23 | 32 | 1.0 | -1.0 | -1.0 | | test.c:509:22:509:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:510:7:510:7 | 2 | 1.0 | -1.0 | -1.0 | | test.c:510:7:510:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:510:7:510:24 | ... * ... | 108.0 | 1.0 | 1.0 | -| test.c:510:11:510:24 | (...) | 108.0 | 1.0 | 1.0 | -| test.c:510:12:510:13 | ip | 108.0 | 2.0 | 1.0 | -| test.c:510:12:510:18 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:510:12:510:23 | ... + ... | 108.0 | 1.0 | 1.0 | +| test.c:510:7:510:24 | ... * ... | 44.0 | 1.0 | 1.0 | +| test.c:510:11:510:24 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:510:12:510:13 | ip | 44.0 | 2.0 | 5.0 | +| test.c:510:12:510:18 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:510:12:510:23 | ... + ... | 44.0 | 1.0 | 1.0 | | test.c:510:17:510:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:510:17:510:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:510:22:510:23 | 64 | 1.0 | -1.0 | -1.0 | | test.c:510:22:510:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:7:515:20 | (...) | 1.0218313E7 | 1.0 | 1.0 | -| test.c:511:8:511:19 | (...) | 108.0 | 1.0 | 1.0 | -| test.c:511:8:511:24 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:511:7:515:20 | (...) | 79181.71875 | 1.0 | 1.0 | +| test.c:511:8:511:19 | (...) | 44.0 | 1.0 | 1.0 | +| test.c:511:8:511:24 | ... * ... | 44.0 | 1.0 | 1.0 | | test.c:511:8:511:78 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:511:8:515:19 | ... ? ... : ... | 1.0218313E7 | 1.0 | 1.0 | +| test.c:511:8:515:19 | ... ? ... : ... | 79181.71875 | 1.0 | 1.0 | | test.c:511:9:511:9 | 2 | 1.0 | -1.0 | -1.0 | | test.c:511:9:511:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:9:511:14 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:511:9:511:18 | ... + ... | 108.0 | 1.0 | 1.0 | -| test.c:511:13:511:14 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:9:511:14 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:511:9:511:18 | ... + ... | 44.0 | 1.0 | 1.0 | +| test.c:511:13:511:14 | ip | 44.0 | 2.0 | 5.0 | | test.c:511:18:511:18 | 1 | 1.0 | -1.0 | -1.0 | | test.c:511:18:511:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:511:23:511:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:511:23:511:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:28:511:78 | (...) | 11664.0 | 1.0 | 1.0 | +| test.c:511:28:511:78 | (...) | 506.25 | 1.0 | 1.0 | | test.c:511:29:511:30 | 17 | 1.0 | -1.0 | -1.0 | | test.c:511:29:511:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:29:511:41 | ... * ... | 108.0 | 1.0 | 1.0 | +| test.c:511:29:511:41 | ... * ... | 44.0 | 1.0 | 1.0 | | test.c:511:29:511:51 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:511:29:511:77 | ... ? ... : ... | 11664.0 | 1.0 | 1.0 | -| test.c:511:34:511:41 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:511:29:511:77 | ... ? ... : ... | 506.25 | 1.0 | 1.0 | +| test.c:511:34:511:41 | (...) | 44.0 | 1.0 | 1.0 | | test.c:511:35:511:35 | 2 | 1.0 | -1.0 | -1.0 | | test.c:511:35:511:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:35:511:40 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:511:39:511:40 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:35:511:40 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:511:39:511:40 | ip | 44.0 | 2.0 | 5.0 | | test.c:511:45:511:46 | 17 | 1.0 | -1.0 | -1.0 | | test.c:511:45:511:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:45:511:51 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:511:50:511:51 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:45:511:51 | ... * ... | 44.0 | 2.0 | 1.0 | +| test.c:511:50:511:51 | ip | 44.0 | 2.0 | 5.0 | | test.c:511:55:511:56 | 17 | 1.0 | -1.0 | -1.0 | | test.c:511:55:511:56 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:55:511:67 | ... * ... | 108.0 | 1.0 | 1.0 | -| test.c:511:60:511:67 | (...) | 108.0 | 1.0 | 1.0 | +| test.c:511:55:511:67 | ... * ... | 22.5 | 1.0 | 1.0 | +| test.c:511:60:511:67 | (...) | 22.5 | 1.0 | 1.0 | | test.c:511:61:511:61 | 2 | 1.0 | -1.0 | -1.0 | | test.c:511:61:511:61 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:61:511:66 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:511:65:511:66 | ip | 108.0 | 2.0 | 1.0 | +| test.c:511:61:511:66 | ... * ... | 22.5 | 2.0 | 1.0 | +| test.c:511:65:511:66 | ip | 22.5 | 2.0 | 2.0 | | test.c:511:71:511:72 | 17 | 1.0 | -1.0 | -1.0 | | test.c:511:71:511:72 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:511:71:511:77 | ... * ... | 108.0 | 2.0 | 1.0 | -| test.c:511:76:511:77 | ip | 108.0 | 2.0 | 1.0 | -| test.c:512:11:512:22 | (...) | 217.0 | 1.0 | 1.0 | -| test.c:512:11:512:27 | ... * ... | 217.0 | 1.0 | 1.0 | +| test.c:511:71:511:77 | ... * ... | 22.5 | 2.0 | 1.0 | +| test.c:511:76:511:77 | ip | 22.5 | 2.0 | 2.0 | +| test.c:512:11:512:22 | (...) | 67.5 | 1.0 | 1.0 | +| test.c:512:11:512:27 | ... * ... | 67.5 | 1.0 | 1.0 | | test.c:512:12:512:12 | 2 | 1.0 | -1.0 | -1.0 | | test.c:512:12:512:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:512:12:512:17 | ... * ... | 217.0 | 2.0 | 1.0 | -| test.c:512:12:512:21 | ... + ... | 217.0 | 1.0 | 1.0 | -| test.c:512:16:512:17 | ip | 217.0 | 2.0 | 1.0 | +| test.c:512:12:512:17 | ... * ... | 67.5 | 2.0 | 1.0 | +| test.c:512:12:512:21 | ... + ... | 67.5 | 1.0 | 1.0 | +| test.c:512:16:512:17 | ip | 67.5 | 2.0 | 4.0 | | test.c:512:21:512:21 | 1 | 1.0 | -1.0 | -1.0 | | test.c:512:21:512:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:512:26:512:27 | 14 | 1.0 | -1.0 | -1.0 | | test.c:512:26:512:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:513:11:513:12 | 14 | 1.0 | -1.0 | -1.0 | | test.c:513:11:513:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:513:11:513:23 | ... * ... | 217.0 | 1.0 | 1.0 | +| test.c:513:11:513:23 | ... * ... | 67.5 | 1.0 | 1.0 | | test.c:513:11:513:33 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:513:11:515:19 | ... ? ... : ... | 47089.0 | 1.0 | 1.0 | -| test.c:513:16:513:23 | (...) | 217.0 | 1.0 | 1.0 | +| test.c:513:11:515:19 | ... ? ... : ... | 1173.0625 | 1.0 | 1.0 | +| test.c:513:16:513:23 | (...) | 67.5 | 1.0 | 1.0 | | test.c:513:17:513:17 | 2 | 1.0 | -1.0 | -1.0 | | test.c:513:17:513:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:513:17:513:22 | ... * ... | 217.0 | 2.0 | 1.0 | -| test.c:513:21:513:22 | ip | 217.0 | 2.0 | 1.0 | +| test.c:513:17:513:22 | ... * ... | 67.5 | 2.0 | 1.0 | +| test.c:513:21:513:22 | ip | 67.5 | 2.0 | 4.0 | | test.c:513:27:513:28 | 17 | 1.0 | -1.0 | -1.0 | | test.c:513:27:513:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:513:27:513:33 | ... * ... | 217.0 | 2.0 | 1.0 | -| test.c:513:32:513:33 | ip | 217.0 | 2.0 | 1.0 | +| test.c:513:27:513:33 | ... * ... | 67.5 | 2.0 | 1.0 | +| test.c:513:32:513:33 | ip | 67.5 | 2.0 | 4.0 | | test.c:514:13:514:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:514:13:514:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:514:13:514:25 | ... * ... | 217.0 | 1.0 | 1.0 | -| test.c:514:18:514:25 | (...) | 217.0 | 1.0 | 1.0 | +| test.c:514:13:514:25 | ... * ... | 34.25 | 1.0 | 1.0 | +| test.c:514:18:514:25 | (...) | 34.25 | 1.0 | 1.0 | | test.c:514:19:514:19 | 2 | 1.0 | -1.0 | -1.0 | | test.c:514:19:514:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:514:19:514:24 | ... * ... | 217.0 | 2.0 | 1.0 | -| test.c:514:23:514:24 | ip | 217.0 | 2.0 | 1.0 | +| test.c:514:19:514:24 | ... * ... | 34.25 | 2.0 | 1.0 | +| test.c:514:23:514:24 | ip | 34.25 | 2.0 | 2.0 | | test.c:515:13:515:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:515:13:515:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:515:13:515:19 | ... * ... | 217.0 | 2.0 | 1.0 | -| test.c:515:18:515:19 | ip | 217.0 | 2.0 | 1.0 | -| test.c:516:5:516:55 | (...) | 423801.0 | 1.0 | 1.0 | +| test.c:515:13:515:19 | ... * ... | 34.25 | 2.0 | 1.0 | +| test.c:515:18:515:19 | ip | 34.25 | 2.0 | 2.0 | +| test.c:516:5:516:55 | (...) | 4692.25 | 1.0 | 1.0 | | test.c:516:6:516:7 | 14 | 1.0 | -1.0 | -1.0 | | test.c:516:6:516:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:516:6:516:12 | ... * ... | 651.0 | 2.0 | 1.0 | +| test.c:516:6:516:12 | ... * ... | 136.0 | 2.0 | 1.0 | | test.c:516:6:516:28 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:516:6:516:54 | ... ? ... : ... | 423801.0 | 1.0 | 1.0 | -| test.c:516:11:516:12 | ip | 651.0 | 2.0 | 1.0 | -| test.c:516:16:516:23 | (...) | 651.0 | 1.0 | 1.0 | -| test.c:516:16:516:28 | ... * ... | 651.0 | 1.0 | 1.0 | -| test.c:516:17:516:18 | ip | 651.0 | 2.0 | 1.0 | -| test.c:516:17:516:22 | ... + ... | 651.0 | 2.0 | 1.0 | +| test.c:516:6:516:54 | ... ? ... : ... | 4692.25 | 1.0 | 1.0 | +| test.c:516:11:516:12 | ip | 136.0 | 2.0 | 5.0 | +| test.c:516:16:516:23 | (...) | 136.0 | 1.0 | 1.0 | +| test.c:516:16:516:28 | ... * ... | 136.0 | 1.0 | 1.0 | +| test.c:516:17:516:18 | ip | 136.0 | 2.0 | 5.0 | +| test.c:516:17:516:22 | ... + ... | 136.0 | 2.0 | 1.0 | | test.c:516:22:516:22 | 1 | 1.0 | -1.0 | -1.0 | | test.c:516:22:516:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:516:27:516:28 | 17 | 1.0 | -1.0 | -1.0 | | test.c:516:27:516:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:516:32:516:33 | 17 | 1.0 | -1.0 | -1.0 | | test.c:516:32:516:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:516:32:516:38 | ... * ... | 651.0 | 2.0 | 1.0 | -| test.c:516:37:516:38 | ip | 651.0 | 2.0 | 1.0 | -| test.c:516:42:516:49 | (...) | 651.0 | 1.0 | 1.0 | -| test.c:516:42:516:54 | ... * ... | 651.0 | 1.0 | 1.0 | -| test.c:516:43:516:44 | ip | 651.0 | 2.0 | 1.0 | -| test.c:516:43:516:48 | ... + ... | 651.0 | 2.0 | 1.0 | +| test.c:516:32:516:38 | ... * ... | 68.5 | 2.0 | 1.0 | +| test.c:516:37:516:38 | ip | 68.5 | 2.0 | 2.0 | +| test.c:516:42:516:49 | (...) | 68.5 | 1.0 | 1.0 | +| test.c:516:42:516:54 | ... * ... | 68.5 | 1.0 | 1.0 | +| test.c:516:43:516:44 | ip | 68.5 | 2.0 | 2.0 | +| test.c:516:43:516:48 | ... + ... | 68.5 | 2.0 | 1.0 | | test.c:516:48:516:48 | 1 | 1.0 | -1.0 | -1.0 | | test.c:516:48:516:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:516:53:516:54 | 17 | 1.0 | -1.0 | -1.0 | | test.c:516:53:516:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:517:9:517:9 | 4 | 1.0 | -1.0 | -1.0 | | test.c:517:9:517:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:517:9:517:26 | ... * ... | 1302.0 | 1.0 | 1.0 | -| test.c:517:9:518:26 | ... + ... | 1695204.0 | 1.0 | 1.0 | -| test.c:517:9:519:26 | ... + ... | 2.207155608E9 | 1.0 | 1.0 | -| test.c:517:9:524:22 | ... + ... | 3.9017203216097214E19 | 1.0 | 1.0 | -| test.c:517:13:517:26 | (...) | 1302.0 | 1.0 | 1.0 | -| test.c:517:14:517:15 | ip | 1302.0 | 2.0 | 1.0 | -| test.c:517:14:517:20 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:517:14:517:25 | ... + ... | 1302.0 | 1.0 | 1.0 | +| test.c:517:9:517:26 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:517:9:518:26 | ... + ... | 18769.0 | 1.0 | 1.0 | +| test.c:517:9:519:26 | ... + ... | 2571353.0 | 1.0 | 1.0 | +| test.c:517:9:524:22 | ... + ... | 5.757033087936E12 | 1.0 | 1.0 | +| test.c:517:13:517:26 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:517:14:517:15 | ip | 137.0 | 2.0 | 3.0 | +| test.c:517:14:517:20 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:517:14:517:25 | ... + ... | 137.0 | 1.0 | 1.0 | | test.c:517:19:517:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:517:19:517:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:517:24:517:25 | 32 | 1.0 | -1.0 | -1.0 | | test.c:517:24:517:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:518:9:518:26 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:518:9:518:26 | (...) | 137.0 | 1.0 | 1.0 | | test.c:518:10:518:10 | 2 | 1.0 | -1.0 | -1.0 | | test.c:518:10:518:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:518:10:518:15 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:518:10:518:20 | ... * ... | 1302.0 | 1.0 | 1.0 | -| test.c:518:10:518:25 | ... + ... | 1302.0 | 1.0 | 1.0 | -| test.c:518:14:518:15 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:518:10:518:15 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:518:10:518:20 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:518:10:518:25 | ... + ... | 137.0 | 1.0 | 1.0 | +| test.c:518:14:518:15 | ip | 137.0 | 2.0 | 3.0 | | test.c:518:19:518:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:518:19:518:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:518:24:518:25 | 32 | 1.0 | -1.0 | -1.0 | | test.c:518:24:518:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:519:9:519:9 | 2 | 1.0 | -1.0 | -1.0 | | test.c:519:9:519:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:519:9:519:26 | ... * ... | 1302.0 | 1.0 | 1.0 | -| test.c:519:13:519:26 | (...) | 1302.0 | 1.0 | 1.0 | -| test.c:519:14:519:15 | ip | 1302.0 | 2.0 | 1.0 | -| test.c:519:14:519:20 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:519:14:519:25 | ... + ... | 1302.0 | 1.0 | 1.0 | +| test.c:519:9:519:26 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:519:13:519:26 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:519:14:519:15 | ip | 137.0 | 2.0 | 3.0 | +| test.c:519:14:519:20 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:519:14:519:25 | ... + ... | 137.0 | 1.0 | 1.0 | | test.c:519:19:519:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:519:19:519:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:519:24:519:25 | 64 | 1.0 | -1.0 | -1.0 | | test.c:519:24:519:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:9:524:22 | (...) | 1.7677595125E10 | 1.0 | 1.0 | -| test.c:520:10:520:21 | (...) | 1302.0 | 1.0 | 1.0 | -| test.c:520:10:520:26 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:520:9:524:22 | (...) | 2238912.0 | 1.0 | 1.0 | +| test.c:520:10:520:21 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:520:10:520:26 | ... * ... | 137.0 | 1.0 | 1.0 | | test.c:520:10:520:80 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:520:10:524:21 | ... ? ... : ... | 1.7677595125E10 | 1.0 | 1.0 | +| test.c:520:10:524:21 | ... ? ... : ... | 2238912.0 | 1.0 | 1.0 | | test.c:520:11:520:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:520:11:520:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:11:520:16 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:520:11:520:20 | ... + ... | 1302.0 | 1.0 | 1.0 | -| test.c:520:15:520:16 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:11:520:16 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:520:11:520:20 | ... + ... | 137.0 | 1.0 | 1.0 | +| test.c:520:15:520:16 | ip | 137.0 | 2.0 | 3.0 | | test.c:520:20:520:20 | 1 | 1.0 | -1.0 | -1.0 | | test.c:520:20:520:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:520:25:520:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:520:25:520:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:30:520:80 | (...) | 1695204.0 | 1.0 | 1.0 | +| test.c:520:30:520:80 | (...) | 4761.0 | 1.0 | 1.0 | | test.c:520:31:520:32 | 17 | 1.0 | -1.0 | -1.0 | | test.c:520:31:520:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:31:520:43 | ... * ... | 1302.0 | 1.0 | 1.0 | +| test.c:520:31:520:43 | ... * ... | 137.0 | 1.0 | 1.0 | | test.c:520:31:520:53 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:520:31:520:79 | ... ? ... : ... | 1695204.0 | 1.0 | 1.0 | -| test.c:520:36:520:43 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:520:31:520:79 | ... ? ... : ... | 4761.0 | 1.0 | 1.0 | +| test.c:520:36:520:43 | (...) | 137.0 | 1.0 | 1.0 | | test.c:520:37:520:37 | 2 | 1.0 | -1.0 | -1.0 | | test.c:520:37:520:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:37:520:42 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:520:41:520:42 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:37:520:42 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:520:41:520:42 | ip | 137.0 | 2.0 | 3.0 | | test.c:520:47:520:48 | 17 | 1.0 | -1.0 | -1.0 | | test.c:520:47:520:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:47:520:53 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:520:52:520:53 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:47:520:53 | ... * ... | 137.0 | 2.0 | 1.0 | +| test.c:520:52:520:53 | ip | 137.0 | 2.0 | 3.0 | | test.c:520:57:520:58 | 17 | 1.0 | -1.0 | -1.0 | | test.c:520:57:520:58 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:57:520:69 | ... * ... | 1302.0 | 1.0 | 1.0 | -| test.c:520:62:520:69 | (...) | 1302.0 | 1.0 | 1.0 | +| test.c:520:57:520:69 | ... * ... | 69.0 | 1.0 | 1.0 | +| test.c:520:62:520:69 | (...) | 69.0 | 1.0 | 1.0 | | test.c:520:63:520:63 | 2 | 1.0 | -1.0 | -1.0 | | test.c:520:63:520:63 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:63:520:68 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:520:67:520:68 | ip | 1302.0 | 2.0 | 1.0 | +| test.c:520:63:520:68 | ... * ... | 69.0 | 2.0 | 1.0 | +| test.c:520:67:520:68 | ip | 69.0 | 2.0 | 2.0 | | test.c:520:73:520:74 | 17 | 1.0 | -1.0 | -1.0 | | test.c:520:73:520:74 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:520:73:520:79 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:520:78:520:79 | ip | 1302.0 | 2.0 | 1.0 | -| test.c:521:13:521:24 | (...) | 2605.0 | 1.0 | 1.0 | -| test.c:521:13:521:29 | ... * ... | 2605.0 | 1.0 | 1.0 | +| test.c:520:73:520:79 | ... * ... | 69.0 | 2.0 | 1.0 | +| test.c:520:78:520:79 | ip | 69.0 | 2.0 | 2.0 | +| test.c:521:13:521:24 | (...) | 207.0 | 1.0 | 1.0 | +| test.c:521:13:521:29 | ... * ... | 207.0 | 1.0 | 1.0 | | test.c:521:14:521:14 | 2 | 1.0 | -1.0 | -1.0 | | test.c:521:14:521:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:521:14:521:19 | ... * ... | 2605.0 | 2.0 | 1.0 | -| test.c:521:14:521:23 | ... + ... | 2605.0 | 1.0 | 1.0 | -| test.c:521:18:521:19 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:521:14:521:19 | ... * ... | 207.0 | 2.0 | 1.0 | +| test.c:521:14:521:23 | ... + ... | 207.0 | 1.0 | 1.0 | +| test.c:521:18:521:19 | ip | 207.0 | 2.0 | 4.0 | | test.c:521:23:521:23 | 1 | 1.0 | -1.0 | -1.0 | | test.c:521:23:521:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:521:28:521:29 | 14 | 1.0 | -1.0 | -1.0 | | test.c:521:28:521:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:522:13:522:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:522:13:522:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:522:13:522:25 | ... * ... | 2605.0 | 1.0 | 1.0 | +| test.c:522:13:522:25 | ... * ... | 207.0 | 1.0 | 1.0 | | test.c:522:13:522:35 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:522:13:524:21 | ... ? ... : ... | 6786025.0 | 1.0 | 1.0 | -| test.c:522:18:522:25 | (...) | 2605.0 | 1.0 | 1.0 | +| test.c:522:13:524:21 | ... ? ... : ... | 10816.0 | 1.0 | 1.0 | +| test.c:522:18:522:25 | (...) | 207.0 | 1.0 | 1.0 | | test.c:522:19:522:19 | 2 | 1.0 | -1.0 | -1.0 | | test.c:522:19:522:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:522:19:522:24 | ... * ... | 2605.0 | 2.0 | 1.0 | -| test.c:522:23:522:24 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:522:19:522:24 | ... * ... | 207.0 | 2.0 | 1.0 | +| test.c:522:23:522:24 | ip | 207.0 | 2.0 | 4.0 | | test.c:522:29:522:30 | 17 | 1.0 | -1.0 | -1.0 | | test.c:522:29:522:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:522:29:522:35 | ... * ... | 2605.0 | 2.0 | 1.0 | -| test.c:522:34:522:35 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:522:29:522:35 | ... * ... | 207.0 | 2.0 | 1.0 | +| test.c:522:34:522:35 | ip | 207.0 | 2.0 | 4.0 | | test.c:523:15:523:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:523:15:523:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:523:15:523:27 | ... * ... | 2605.0 | 1.0 | 1.0 | -| test.c:523:20:523:27 | (...) | 2605.0 | 1.0 | 1.0 | +| test.c:523:15:523:27 | ... * ... | 104.0 | 1.0 | 1.0 | +| test.c:523:20:523:27 | (...) | 104.0 | 1.0 | 1.0 | | test.c:523:21:523:21 | 2 | 1.0 | -1.0 | -1.0 | | test.c:523:21:523:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:523:21:523:26 | ... * ... | 2605.0 | 2.0 | 1.0 | -| test.c:523:25:523:26 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:523:21:523:26 | ... * ... | 104.0 | 2.0 | 1.0 | +| test.c:523:25:523:26 | ip | 104.0 | 2.0 | 2.0 | | test.c:524:15:524:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:524:15:524:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:524:15:524:21 | ... * ... | 2605.0 | 2.0 | 1.0 | -| test.c:524:20:524:21 | ip | 2605.0 | 2.0 | 1.0 | +| test.c:524:15:524:21 | ... * ... | 104.0 | 2.0 | 1.0 | +| test.c:524:20:524:21 | ip | 104.0 | 2.0 | 2.0 | | test.c:525:9:525:10 | 14 | 1.0 | -1.0 | -1.0 | | test.c:525:9:525:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:525:9:525:15 | ... * ... | 1302.0 | 2.0 | 1.0 | +| test.c:525:9:525:15 | ... * ... | 137.0 | 2.0 | 1.0 | | test.c:525:9:525:31 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:525:9:527:23 | ... ? ... : ... | 1695204.0 | 1.0 | 1.0 | -| test.c:525:14:525:15 | ip | 1302.0 | 2.0 | 1.0 | -| test.c:525:19:525:26 | (...) | 1302.0 | 1.0 | 1.0 | -| test.c:525:19:525:31 | ... * ... | 1302.0 | 1.0 | 1.0 | -| test.c:525:20:525:21 | ip | 1302.0 | 2.0 | 1.0 | -| test.c:525:20:525:25 | ... + ... | 1302.0 | 2.0 | 1.0 | +| test.c:525:9:527:23 | ... ? ... : ... | 4761.0 | 1.0 | 1.0 | +| test.c:525:14:525:15 | ip | 137.0 | 2.0 | 3.0 | +| test.c:525:19:525:26 | (...) | 137.0 | 1.0 | 1.0 | +| test.c:525:19:525:31 | ... * ... | 137.0 | 1.0 | 1.0 | +| test.c:525:20:525:21 | ip | 137.0 | 2.0 | 3.0 | +| test.c:525:20:525:25 | ... + ... | 137.0 | 2.0 | 1.0 | | test.c:525:25:525:25 | 1 | 1.0 | -1.0 | -1.0 | | test.c:525:25:525:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:525:30:525:31 | 17 | 1.0 | -1.0 | -1.0 | | test.c:525:30:525:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:526:11:526:12 | 14 | 1.0 | -1.0 | -1.0 | | test.c:526:11:526:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:526:11:526:17 | ... * ... | 1302.0 | 2.0 | 1.0 | -| test.c:526:16:526:17 | ip | 1302.0 | 2.0 | 1.0 | -| test.c:527:11:527:18 | (...) | 1302.0 | 1.0 | 1.0 | -| test.c:527:11:527:23 | ... * ... | 1302.0 | 1.0 | 1.0 | -| test.c:527:12:527:13 | ip | 1302.0 | 2.0 | 1.0 | -| test.c:527:12:527:17 | ... + ... | 1302.0 | 2.0 | 1.0 | +| test.c:526:11:526:17 | ... * ... | 69.0 | 2.0 | 1.0 | +| test.c:526:16:526:17 | ip | 69.0 | 2.0 | 2.0 | +| test.c:527:11:527:18 | (...) | 69.0 | 1.0 | 1.0 | +| test.c:527:11:527:23 | ... * ... | 69.0 | 1.0 | 1.0 | +| test.c:527:12:527:13 | ip | 69.0 | 2.0 | 2.0 | +| test.c:527:12:527:17 | ... + ... | 69.0 | 2.0 | 1.0 | | test.c:527:17:527:17 | 1 | 1.0 | -1.0 | -1.0 | | test.c:527:17:527:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:527:22:527:23 | 14 | 1.0 | -1.0 | -1.0 | | test.c:527:22:527:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:528:9:528:9 | 2 | 1.0 | -1.0 | -1.0 | | test.c:528:9:528:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:528:9:528:26 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:528:9:548:44 | ... + ... | 1.9449636104972528E43 | 1.0 | 1.0 | -| test.c:528:13:528:26 | (...) | 10419.0 | 1.0 | 1.0 | -| test.c:528:14:528:15 | ip | 10419.0 | 2.0 | 1.0 | -| test.c:528:14:528:20 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:528:14:528:25 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:528:9:528:26 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:528:9:548:44 | ... + ... | 2.7365793897006286E28 | 1.0 | 1.0 | +| test.c:528:13:528:26 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:528:14:528:15 | ip | 553.0 | 2.0 | 7.0 | +| test.c:528:14:528:20 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:528:14:528:25 | ... + ... | 553.0 | 1.0 | 1.0 | | test.c:528:19:528:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:528:19:528:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:528:24:528:25 | 32 | 1.0 | -1.0 | -1.0 | | test.c:528:24:528:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:529:9:548:44 | (...) | 1.8667469147684545E39 | 1.0 | 1.0 | +| test.c:529:9:548:44 | (...) | 4.948606491321209E25 | 1.0 | 1.0 | | test.c:529:10:529:10 | 4 | 1.0 | -1.0 | -1.0 | | test.c:529:10:529:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:529:10:529:27 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:529:10:530:28 | ... + ... | 1.08555561E8 | 1.0 | 1.0 | -| test.c:529:10:531:28 | ... + ... | 1.131040390059E12 | 1.0 | 1.0 | -| test.c:529:10:537:24 | ... + ... | 1.0235492350954187E25 | 1.0 | 1.0 | +| test.c:529:10:529:27 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:529:10:530:28 | ... + ... | 305809.0 | 1.0 | 1.0 | +| test.c:529:10:531:28 | ... + ... | 1.69112377E8 | 1.0 | 1.0 | +| test.c:529:10:537:24 | ... + ... | 2.431997246822707E16 | 1.0 | 1.0 | | test.c:529:10:538:39 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:529:10:548:43 | ... ? ... : ... | 1.8667469147684545E39 | 1.0 | 1.0 | -| test.c:529:14:529:27 | (...) | 10419.0 | 1.0 | 1.0 | -| test.c:529:15:529:16 | ip | 10419.0 | 2.0 | 1.0 | -| test.c:529:15:529:21 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:529:15:529:26 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:529:10:548:43 | ... ? ... : ... | 4.948606491321209E25 | 1.0 | 1.0 | +| test.c:529:14:529:27 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:529:15:529:16 | ip | 553.0 | 2.0 | 7.0 | +| test.c:529:15:529:21 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:529:15:529:26 | ... + ... | 553.0 | 1.0 | 1.0 | | test.c:529:20:529:21 | 14 | 1.0 | -1.0 | -1.0 | | test.c:529:20:529:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:529:25:529:26 | 32 | 1.0 | -1.0 | -1.0 | | test.c:529:25:529:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:530:11:530:28 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:530:11:530:28 | (...) | 553.0 | 1.0 | 1.0 | | test.c:530:12:530:12 | 2 | 1.0 | -1.0 | -1.0 | | test.c:530:12:530:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:530:12:530:17 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:530:12:530:22 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:530:12:530:27 | ... + ... | 10419.0 | 1.0 | 1.0 | -| test.c:530:16:530:17 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:530:12:530:17 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:530:12:530:22 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:530:12:530:27 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:530:16:530:17 | ip | 553.0 | 2.0 | 7.0 | | test.c:530:21:530:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:530:21:530:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:530:26:530:27 | 32 | 1.0 | -1.0 | -1.0 | | test.c:530:26:530:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:531:11:531:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:531:11:531:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:531:11:531:28 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:531:15:531:28 | (...) | 10419.0 | 1.0 | 1.0 | -| test.c:531:16:531:17 | ip | 10419.0 | 2.0 | 1.0 | -| test.c:531:16:531:22 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:531:16:531:27 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:531:11:531:28 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:531:15:531:28 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:531:16:531:17 | ip | 553.0 | 2.0 | 7.0 | +| test.c:531:16:531:22 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:531:16:531:27 | ... + ... | 553.0 | 1.0 | 1.0 | | test.c:531:21:531:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:531:21:531:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:531:26:531:27 | 64 | 1.0 | -1.0 | -1.0 | | test.c:531:26:531:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:532:11:537:24 | (...) | 9.049625849719E12 | 1.0 | 1.0 | -| test.c:532:12:532:23 | (...) | 10419.0 | 1.0 | 1.0 | -| test.c:532:12:532:28 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:532:11:537:24 | (...) | 1.43809536E8 | 1.0 | 1.0 | +| test.c:532:12:532:23 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:532:12:532:28 | ... * ... | 553.0 | 1.0 | 1.0 | | test.c:532:12:533:61 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:532:12:537:23 | ... ? ... : ... | 9.049625849719E12 | 1.0 | 1.0 | +| test.c:532:12:537:23 | ... ? ... : ... | 1.43809536E8 | 1.0 | 1.0 | | test.c:532:13:532:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:532:13:532:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:532:13:532:18 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:532:13:532:22 | ... + ... | 10419.0 | 1.0 | 1.0 | -| test.c:532:17:532:18 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:532:13:532:18 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:532:13:532:22 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:532:17:532:18 | ip | 553.0 | 2.0 | 7.0 | | test.c:532:22:532:22 | 1 | 1.0 | -1.0 | -1.0 | | test.c:532:22:532:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:532:27:532:28 | 14 | 1.0 | -1.0 | -1.0 | | test.c:532:27:532:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:533:11:533:61 | (...) | 1.08555561E8 | 1.0 | 1.0 | +| test.c:533:11:533:61 | (...) | 76729.0 | 1.0 | 1.0 | | test.c:533:12:533:13 | 14 | 1.0 | -1.0 | -1.0 | | test.c:533:12:533:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:533:12:533:24 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:533:12:533:24 | ... * ... | 553.0 | 1.0 | 1.0 | | test.c:533:12:533:34 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:533:12:533:60 | ... ? ... : ... | 1.08555561E8 | 1.0 | 1.0 | -| test.c:533:17:533:24 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:533:12:533:60 | ... ? ... : ... | 76729.0 | 1.0 | 1.0 | +| test.c:533:17:533:24 | (...) | 553.0 | 1.0 | 1.0 | | test.c:533:18:533:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:533:18:533:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:533:18:533:23 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:533:22:533:23 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:533:18:533:23 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:533:22:533:23 | ip | 553.0 | 2.0 | 7.0 | | test.c:533:28:533:29 | 17 | 1.0 | -1.0 | -1.0 | | test.c:533:28:533:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:533:28:533:34 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:533:33:533:34 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:533:28:533:34 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:533:33:533:34 | ip | 553.0 | 2.0 | 7.0 | | test.c:533:38:533:39 | 17 | 1.0 | -1.0 | -1.0 | | test.c:533:38:533:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:533:38:533:50 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:533:43:533:50 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:533:38:533:50 | ... * ... | 277.0 | 1.0 | 1.0 | +| test.c:533:43:533:50 | (...) | 277.0 | 1.0 | 1.0 | | test.c:533:44:533:44 | 2 | 1.0 | -1.0 | -1.0 | | test.c:533:44:533:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:533:44:533:49 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:533:48:533:49 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:533:44:533:49 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:533:48:533:49 | ip | 277.0 | 2.0 | 2.0 | | test.c:533:54:533:55 | 17 | 1.0 | -1.0 | -1.0 | | test.c:533:54:533:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:533:54:533:60 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:533:59:533:60 | ip | 10419.0 | 2.0 | 1.0 | -| test.c:534:15:534:26 | (...) | 20839.0 | 1.0 | 1.0 | -| test.c:534:15:534:31 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:533:54:533:60 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:533:59:533:60 | ip | 277.0 | 2.0 | 2.0 | +| test.c:534:15:534:26 | (...) | 831.0 | 1.0 | 1.0 | +| test.c:534:15:534:31 | ... * ... | 831.0 | 1.0 | 1.0 | | test.c:534:16:534:16 | 2 | 1.0 | -1.0 | -1.0 | | test.c:534:16:534:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:534:16:534:21 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:534:16:534:25 | ... + ... | 20839.0 | 1.0 | 1.0 | -| test.c:534:20:534:21 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:534:16:534:21 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:534:16:534:25 | ... + ... | 831.0 | 1.0 | 1.0 | +| test.c:534:20:534:21 | ip | 831.0 | 2.0 | 4.0 | | test.c:534:25:534:25 | 1 | 1.0 | -1.0 | -1.0 | | test.c:534:25:534:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:534:30:534:31 | 14 | 1.0 | -1.0 | -1.0 | | test.c:534:30:534:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:535:15:535:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:535:15:535:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:535:15:535:27 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:535:15:535:27 | ... * ... | 831.0 | 1.0 | 1.0 | | test.c:535:15:535:37 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:535:15:537:23 | ... ? ... : ... | 4.34263921E8 | 1.0 | 1.0 | -| test.c:535:20:535:27 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:535:15:537:23 | ... ? ... : ... | 173056.0 | 1.0 | 1.0 | +| test.c:535:20:535:27 | (...) | 831.0 | 1.0 | 1.0 | | test.c:535:21:535:21 | 2 | 1.0 | -1.0 | -1.0 | | test.c:535:21:535:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:535:21:535:26 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:535:25:535:26 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:535:21:535:26 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:535:25:535:26 | ip | 831.0 | 2.0 | 4.0 | | test.c:535:31:535:32 | 17 | 1.0 | -1.0 | -1.0 | | test.c:535:31:535:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:535:31:535:37 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:535:36:535:37 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:535:31:535:37 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:535:36:535:37 | ip | 831.0 | 2.0 | 4.0 | | test.c:536:17:536:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:536:17:536:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:536:17:536:29 | ... * ... | 20839.0 | 1.0 | 1.0 | -| test.c:536:22:536:29 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:536:17:536:29 | ... * ... | 416.0 | 1.0 | 1.0 | +| test.c:536:22:536:29 | (...) | 416.0 | 1.0 | 1.0 | | test.c:536:23:536:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:536:23:536:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:536:23:536:28 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:536:27:536:28 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:536:23:536:28 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:536:27:536:28 | ip | 416.0 | 2.0 | 2.0 | | test.c:537:17:537:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:537:17:537:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:537:17:537:23 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:537:22:537:23 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:537:17:537:23 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:537:22:537:23 | ip | 416.0 | 2.0 | 2.0 | | test.c:538:9:538:9 | 2 | 1.0 | -1.0 | -1.0 | | test.c:538:9:538:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:538:9:538:14 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:538:9:538:19 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:538:9:538:39 | ... + ... | 3.908375289E9 | 1.0 | 1.0 | -| test.c:538:13:538:14 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:538:9:538:14 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:538:9:538:19 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:538:9:538:39 | ... + ... | 2765569.0 | 1.0 | 1.0 | +| test.c:538:13:538:14 | ip | 1663.0 | 2.0 | 4.0 | | test.c:538:18:538:19 | 14 | 1.0 | -1.0 | -1.0 | | test.c:538:18:538:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:538:23:538:34 | (...) | 62517.0 | 1.0 | 1.0 | -| test.c:538:23:538:39 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:538:23:538:34 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:538:23:538:39 | ... * ... | 1663.0 | 1.0 | 1.0 | | test.c:538:24:538:24 | 2 | 1.0 | -1.0 | -1.0 | | test.c:538:24:538:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:538:24:538:29 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:538:24:538:33 | ... + ... | 62517.0 | 1.0 | 1.0 | -| test.c:538:28:538:29 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:538:24:538:29 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:538:24:538:33 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:538:28:538:29 | ip | 1663.0 | 2.0 | 4.0 | | test.c:538:33:538:33 | 1 | 1.0 | -1.0 | -1.0 | | test.c:538:33:538:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:538:38:538:39 | 17 | 1.0 | -1.0 | -1.0 | | test.c:538:38:538:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:539:13:539:13 | 4 | 1.0 | -1.0 | -1.0 | | test.c:539:13:539:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:539:13:539:30 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:539:13:540:30 | ... + ... | 3.908375289E9 | 1.0 | 1.0 | -| test.c:539:13:541:30 | ... + ... | 2.44339897942413E14 | 1.0 | 1.0 | -| test.c:539:13:547:26 | ... + ... | 4.7762734556795386E29 | 1.0 | 1.0 | -| test.c:539:17:539:30 | (...) | 62517.0 | 1.0 | 1.0 | -| test.c:539:18:539:19 | ip | 62517.0 | 2.0 | 1.0 | -| test.c:539:18:539:24 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:539:18:539:29 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:539:13:539:30 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:539:13:540:30 | ... + ... | 2765569.0 | 1.0 | 1.0 | +| test.c:539:13:541:30 | ... + ... | 4.599141247E9 | 1.0 | 1.0 | +| test.c:539:13:547:26 | ... + ... | 1.7893628730005324E19 | 1.0 | 1.0 | +| test.c:539:17:539:30 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:539:18:539:19 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:539:18:539:24 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:539:18:539:29 | ... + ... | 1663.0 | 1.0 | 1.0 | | test.c:539:23:539:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:539:23:539:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:539:28:539:29 | 32 | 1.0 | -1.0 | -1.0 | | test.c:539:28:539:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:540:13:540:30 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:540:13:540:30 | (...) | 1663.0 | 1.0 | 1.0 | | test.c:540:14:540:14 | 2 | 1.0 | -1.0 | -1.0 | | test.c:540:14:540:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:540:14:540:19 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:540:14:540:24 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:540:14:540:29 | ... + ... | 62517.0 | 1.0 | 1.0 | -| test.c:540:18:540:19 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:540:14:540:19 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:540:14:540:24 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:540:14:540:29 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:540:18:540:19 | ip | 1663.0 | 2.0 | 4.0 | | test.c:540:23:540:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:540:23:540:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:540:28:540:29 | 32 | 1.0 | -1.0 | -1.0 | | test.c:540:28:540:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:541:13:541:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:541:13:541:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:541:13:541:30 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:541:17:541:30 | (...) | 62517.0 | 1.0 | 1.0 | -| test.c:541:18:541:19 | ip | 62517.0 | 2.0 | 1.0 | -| test.c:541:18:541:24 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:541:18:541:29 | ... + ... | 62517.0 | 1.0 | 1.0 | +| test.c:541:13:541:30 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:541:17:541:30 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:541:18:541:19 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:541:18:541:24 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:541:18:541:29 | ... + ... | 1663.0 | 1.0 | 1.0 | | test.c:541:23:541:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:541:23:541:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:541:28:541:29 | 64 | 1.0 | -1.0 | -1.0 | | test.c:541:28:541:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:542:13:547:26 | (...) | 1.954766084417875E15 | 1.0 | 1.0 | -| test.c:542:14:542:25 | (...) | 62517.0 | 1.0 | 1.0 | -| test.c:542:14:542:30 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:542:13:547:26 | (...) | 3.890645616E9 | 1.0 | 1.0 | +| test.c:542:14:542:25 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:542:14:542:30 | ... * ... | 1663.0 | 1.0 | 1.0 | | test.c:542:14:543:63 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:542:14:547:25 | ... ? ... : ... | 1.954766084417875E15 | 1.0 | 1.0 | +| test.c:542:14:547:25 | ... ? ... : ... | 3.890645616E9 | 1.0 | 1.0 | | test.c:542:15:542:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:542:15:542:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:542:15:542:20 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:542:15:542:24 | ... + ... | 62517.0 | 1.0 | 1.0 | -| test.c:542:19:542:20 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:542:15:542:20 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:542:15:542:24 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:542:19:542:20 | ip | 1663.0 | 2.0 | 4.0 | | test.c:542:24:542:24 | 1 | 1.0 | -1.0 | -1.0 | | test.c:542:24:542:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:542:29:542:30 | 14 | 1.0 | -1.0 | -1.0 | | test.c:542:29:542:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:543:13:543:63 | (...) | 3.908375289E9 | 1.0 | 1.0 | +| test.c:543:13:543:63 | (...) | 692224.0 | 1.0 | 1.0 | | test.c:543:14:543:15 | 14 | 1.0 | -1.0 | -1.0 | | test.c:543:14:543:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:543:14:543:26 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:543:14:543:26 | ... * ... | 1663.0 | 1.0 | 1.0 | | test.c:543:14:543:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:543:14:543:62 | ... ? ... : ... | 3.908375289E9 | 1.0 | 1.0 | -| test.c:543:19:543:26 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:543:14:543:62 | ... ? ... : ... | 692224.0 | 1.0 | 1.0 | +| test.c:543:19:543:26 | (...) | 1663.0 | 1.0 | 1.0 | | test.c:543:20:543:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:543:20:543:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:543:20:543:25 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:543:24:543:25 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:543:20:543:25 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:543:24:543:25 | ip | 1663.0 | 2.0 | 4.0 | | test.c:543:30:543:31 | 17 | 1.0 | -1.0 | -1.0 | | test.c:543:30:543:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:543:30:543:36 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:543:35:543:36 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:543:30:543:36 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:543:35:543:36 | ip | 1663.0 | 2.0 | 4.0 | | test.c:543:40:543:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:543:40:543:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:543:40:543:52 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:543:45:543:52 | (...) | 62517.0 | 1.0 | 1.0 | +| test.c:543:40:543:52 | ... * ... | 832.0 | 1.0 | 1.0 | +| test.c:543:45:543:52 | (...) | 832.0 | 1.0 | 1.0 | | test.c:543:46:543:46 | 2 | 1.0 | -1.0 | -1.0 | | test.c:543:46:543:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:543:46:543:51 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:543:50:543:51 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:543:46:543:51 | ... * ... | 832.0 | 2.0 | 1.0 | +| test.c:543:50:543:51 | ip | 832.0 | 2.0 | 2.0 | | test.c:543:56:543:57 | 17 | 1.0 | -1.0 | -1.0 | | test.c:543:56:543:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:543:56:543:62 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:543:61:543:62 | ip | 62517.0 | 2.0 | 1.0 | -| test.c:544:17:544:28 | (...) | 125035.0 | 1.0 | 1.0 | -| test.c:544:17:544:33 | ... * ... | 125035.0 | 1.0 | 1.0 | +| test.c:543:56:543:62 | ... * ... | 832.0 | 2.0 | 1.0 | +| test.c:543:61:543:62 | ip | 832.0 | 2.0 | 2.0 | +| test.c:544:17:544:28 | (...) | 2496.0 | 1.0 | 1.0 | +| test.c:544:17:544:33 | ... * ... | 2496.0 | 1.0 | 1.0 | | test.c:544:18:544:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:544:18:544:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:544:18:544:23 | ... * ... | 125035.0 | 2.0 | 1.0 | -| test.c:544:18:544:27 | ... + ... | 125035.0 | 1.0 | 1.0 | -| test.c:544:22:544:23 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:544:18:544:23 | ... * ... | 2496.0 | 2.0 | 1.0 | +| test.c:544:18:544:27 | ... + ... | 2496.0 | 1.0 | 1.0 | +| test.c:544:22:544:23 | ip | 2496.0 | 2.0 | 4.0 | | test.c:544:27:544:27 | 1 | 1.0 | -1.0 | -1.0 | | test.c:544:27:544:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:544:32:544:33 | 14 | 1.0 | -1.0 | -1.0 | | test.c:544:32:544:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:545:17:545:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:545:17:545:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:545:17:545:29 | ... * ... | 125035.0 | 1.0 | 1.0 | +| test.c:545:17:545:29 | ... * ... | 2496.0 | 1.0 | 1.0 | | test.c:545:17:545:39 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:545:17:547:25 | ... ? ... : ... | 1.5633751225E10 | 1.0 | 1.0 | -| test.c:545:22:545:29 | (...) | 125035.0 | 1.0 | 1.0 | +| test.c:545:17:547:25 | ... ? ... : ... | 1558752.25 | 1.0 | 1.0 | +| test.c:545:22:545:29 | (...) | 2496.0 | 1.0 | 1.0 | | test.c:545:23:545:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:545:23:545:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:545:23:545:28 | ... * ... | 125035.0 | 2.0 | 1.0 | -| test.c:545:27:545:28 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:545:23:545:28 | ... * ... | 2496.0 | 2.0 | 1.0 | +| test.c:545:27:545:28 | ip | 2496.0 | 2.0 | 4.0 | | test.c:545:33:545:34 | 17 | 1.0 | -1.0 | -1.0 | | test.c:545:33:545:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:545:33:545:39 | ... * ... | 125035.0 | 2.0 | 1.0 | -| test.c:545:38:545:39 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:545:33:545:39 | ... * ... | 2496.0 | 2.0 | 1.0 | +| test.c:545:38:545:39 | ip | 2496.0 | 2.0 | 4.0 | | test.c:546:19:546:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:546:19:546:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:546:19:546:31 | ... * ... | 125035.0 | 1.0 | 1.0 | -| test.c:546:24:546:31 | (...) | 125035.0 | 1.0 | 1.0 | +| test.c:546:19:546:31 | ... * ... | 1248.5 | 1.0 | 1.0 | +| test.c:546:24:546:31 | (...) | 1248.5 | 1.0 | 1.0 | | test.c:546:25:546:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:546:25:546:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:546:25:546:30 | ... * ... | 125035.0 | 2.0 | 1.0 | -| test.c:546:29:546:30 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:546:25:546:30 | ... * ... | 1248.5 | 2.0 | 1.0 | +| test.c:546:29:546:30 | ip | 1248.5 | 2.0 | 2.0 | | test.c:547:19:547:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:547:19:547:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:547:19:547:25 | ... * ... | 125035.0 | 2.0 | 1.0 | -| test.c:547:24:547:25 | ip | 125035.0 | 2.0 | 1.0 | +| test.c:547:19:547:25 | ... * ... | 1248.5 | 2.0 | 1.0 | +| test.c:547:24:547:25 | ip | 1248.5 | 2.0 | 2.0 | | test.c:548:13:548:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:548:13:548:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:548:13:548:18 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:548:13:548:23 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:548:13:548:43 | ... + ... | 3.908375289E9 | 1.0 | 1.0 | -| test.c:548:17:548:18 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:548:13:548:18 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:548:13:548:23 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:548:13:548:43 | ... + ... | 2765569.0 | 1.0 | 1.0 | +| test.c:548:17:548:18 | ip | 1663.0 | 2.0 | 4.0 | | test.c:548:22:548:23 | 14 | 1.0 | -1.0 | -1.0 | | test.c:548:22:548:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:548:27:548:38 | (...) | 62517.0 | 1.0 | 1.0 | -| test.c:548:27:548:43 | ... * ... | 62517.0 | 1.0 | 1.0 | +| test.c:548:27:548:38 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:548:27:548:43 | ... * ... | 1663.0 | 1.0 | 1.0 | | test.c:548:28:548:28 | 2 | 1.0 | -1.0 | -1.0 | | test.c:548:28:548:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:548:28:548:33 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:548:28:548:37 | ... + ... | 62517.0 | 1.0 | 1.0 | -| test.c:548:32:548:33 | ip | 62517.0 | 2.0 | 1.0 | +| test.c:548:28:548:33 | ... * ... | 1663.0 | 2.0 | 1.0 | +| test.c:548:28:548:37 | ... + ... | 1663.0 | 1.0 | 1.0 | +| test.c:548:32:548:33 | ip | 1663.0 | 2.0 | 4.0 | | test.c:548:37:548:37 | 1 | 1.0 | -1.0 | -1.0 | | test.c:548:37:548:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:548:42:548:43 | 17 | 1.0 | -1.0 | -1.0 | | test.c:548:42:548:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:549:9:549:9 | 4 | 1.0 | -1.0 | -1.0 | | test.c:549:9:549:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:549:9:549:26 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:549:9:550:30 | ... + ... | 1.08555561E8 | 1.0 | 1.0 | -| test.c:549:9:551:30 | ... + ... | 1.131040390059E12 | 1.0 | 1.0 | -| test.c:549:9:557:26 | ... + ... | 1.0235492350954187E25 | 1.0 | 1.0 | +| test.c:549:9:549:26 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:549:9:550:30 | ... + ... | 305809.0 | 1.0 | 1.0 | +| test.c:549:9:551:30 | ... + ... | 1.69112377E8 | 1.0 | 1.0 | +| test.c:549:9:557:26 | ... + ... | 2.431997246822707E16 | 1.0 | 1.0 | | test.c:549:9:558:61 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:549:9:570:25 | ... ? ... : ... | 4.778814771623795E41 | 1.0 | 1.0 | -| test.c:549:13:549:26 | (...) | 10419.0 | 1.0 | 1.0 | -| test.c:549:14:549:15 | ip | 10419.0 | 2.0 | 1.0 | -| test.c:549:14:549:20 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:549:14:549:25 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:549:9:570:25 | ... ? ... : ... | 1.2446082154075297E25 | 1.0 | 1.0 | +| test.c:549:13:549:26 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:549:14:549:15 | ip | 553.0 | 2.0 | 7.0 | +| test.c:549:14:549:20 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:549:14:549:25 | ... + ... | 553.0 | 1.0 | 1.0 | | test.c:549:19:549:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:549:19:549:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:549:24:549:25 | 32 | 1.0 | -1.0 | -1.0 | | test.c:549:24:549:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:550:13:550:30 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:550:13:550:30 | (...) | 553.0 | 1.0 | 1.0 | | test.c:550:14:550:14 | 2 | 1.0 | -1.0 | -1.0 | | test.c:550:14:550:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:550:14:550:19 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:550:14:550:24 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:550:14:550:29 | ... + ... | 10419.0 | 1.0 | 1.0 | -| test.c:550:18:550:19 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:550:14:550:19 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:550:14:550:24 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:550:14:550:29 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:550:18:550:19 | ip | 553.0 | 2.0 | 7.0 | | test.c:550:23:550:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:550:23:550:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:550:28:550:29 | 32 | 1.0 | -1.0 | -1.0 | | test.c:550:28:550:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:551:13:551:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:551:13:551:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:551:13:551:30 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:551:17:551:30 | (...) | 10419.0 | 1.0 | 1.0 | -| test.c:551:18:551:19 | ip | 10419.0 | 2.0 | 1.0 | -| test.c:551:18:551:24 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:551:18:551:29 | ... + ... | 10419.0 | 1.0 | 1.0 | +| test.c:551:13:551:30 | ... * ... | 553.0 | 1.0 | 1.0 | +| test.c:551:17:551:30 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:551:18:551:19 | ip | 553.0 | 2.0 | 7.0 | +| test.c:551:18:551:24 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:551:18:551:29 | ... + ... | 553.0 | 1.0 | 1.0 | | test.c:551:23:551:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:551:23:551:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:551:28:551:29 | 64 | 1.0 | -1.0 | -1.0 | | test.c:551:28:551:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:552:13:557:26 | (...) | 9.049625849719E12 | 1.0 | 1.0 | -| test.c:552:14:552:25 | (...) | 10419.0 | 1.0 | 1.0 | -| test.c:552:14:552:30 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:552:13:557:26 | (...) | 1.43809536E8 | 1.0 | 1.0 | +| test.c:552:14:552:25 | (...) | 553.0 | 1.0 | 1.0 | +| test.c:552:14:552:30 | ... * ... | 553.0 | 1.0 | 1.0 | | test.c:552:14:553:63 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:552:14:557:25 | ... ? ... : ... | 9.049625849719E12 | 1.0 | 1.0 | +| test.c:552:14:557:25 | ... ? ... : ... | 1.43809536E8 | 1.0 | 1.0 | | test.c:552:15:552:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:552:15:552:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:552:15:552:20 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:552:15:552:24 | ... + ... | 10419.0 | 1.0 | 1.0 | -| test.c:552:19:552:20 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:552:15:552:20 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:552:15:552:24 | ... + ... | 553.0 | 1.0 | 1.0 | +| test.c:552:19:552:20 | ip | 553.0 | 2.0 | 7.0 | | test.c:552:24:552:24 | 1 | 1.0 | -1.0 | -1.0 | | test.c:552:24:552:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:552:29:552:30 | 14 | 1.0 | -1.0 | -1.0 | | test.c:552:29:552:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:553:13:553:63 | (...) | 1.08555561E8 | 1.0 | 1.0 | +| test.c:553:13:553:63 | (...) | 76729.0 | 1.0 | 1.0 | | test.c:553:14:553:15 | 14 | 1.0 | -1.0 | -1.0 | | test.c:553:14:553:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:553:14:553:26 | ... * ... | 10419.0 | 1.0 | 1.0 | +| test.c:553:14:553:26 | ... * ... | 553.0 | 1.0 | 1.0 | | test.c:553:14:553:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:553:14:553:62 | ... ? ... : ... | 1.08555561E8 | 1.0 | 1.0 | -| test.c:553:19:553:26 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:553:14:553:62 | ... ? ... : ... | 76729.0 | 1.0 | 1.0 | +| test.c:553:19:553:26 | (...) | 553.0 | 1.0 | 1.0 | | test.c:553:20:553:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:553:20:553:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:553:20:553:25 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:553:24:553:25 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:553:20:553:25 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:553:24:553:25 | ip | 553.0 | 2.0 | 7.0 | | test.c:553:30:553:31 | 17 | 1.0 | -1.0 | -1.0 | | test.c:553:30:553:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:553:30:553:36 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:553:35:553:36 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:553:30:553:36 | ... * ... | 553.0 | 2.0 | 1.0 | +| test.c:553:35:553:36 | ip | 553.0 | 2.0 | 7.0 | | test.c:553:40:553:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:553:40:553:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:553:40:553:52 | ... * ... | 10419.0 | 1.0 | 1.0 | -| test.c:553:45:553:52 | (...) | 10419.0 | 1.0 | 1.0 | +| test.c:553:40:553:52 | ... * ... | 277.0 | 1.0 | 1.0 | +| test.c:553:45:553:52 | (...) | 277.0 | 1.0 | 1.0 | | test.c:553:46:553:46 | 2 | 1.0 | -1.0 | -1.0 | | test.c:553:46:553:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:553:46:553:51 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:553:50:553:51 | ip | 10419.0 | 2.0 | 1.0 | +| test.c:553:46:553:51 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:553:50:553:51 | ip | 277.0 | 2.0 | 2.0 | | test.c:553:56:553:57 | 17 | 1.0 | -1.0 | -1.0 | | test.c:553:56:553:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:553:56:553:62 | ... * ... | 10419.0 | 2.0 | 1.0 | -| test.c:553:61:553:62 | ip | 10419.0 | 2.0 | 1.0 | -| test.c:554:17:554:28 | (...) | 20839.0 | 1.0 | 1.0 | -| test.c:554:17:554:33 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:553:56:553:62 | ... * ... | 277.0 | 2.0 | 1.0 | +| test.c:553:61:553:62 | ip | 277.0 | 2.0 | 2.0 | +| test.c:554:17:554:28 | (...) | 831.0 | 1.0 | 1.0 | +| test.c:554:17:554:33 | ... * ... | 831.0 | 1.0 | 1.0 | | test.c:554:18:554:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:554:18:554:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:554:18:554:23 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:554:18:554:27 | ... + ... | 20839.0 | 1.0 | 1.0 | -| test.c:554:22:554:23 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:554:18:554:23 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:554:18:554:27 | ... + ... | 831.0 | 1.0 | 1.0 | +| test.c:554:22:554:23 | ip | 831.0 | 2.0 | 4.0 | | test.c:554:27:554:27 | 1 | 1.0 | -1.0 | -1.0 | | test.c:554:27:554:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:554:32:554:33 | 14 | 1.0 | -1.0 | -1.0 | | test.c:554:32:554:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:555:17:555:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:555:17:555:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:555:17:555:29 | ... * ... | 20839.0 | 1.0 | 1.0 | +| test.c:555:17:555:29 | ... * ... | 831.0 | 1.0 | 1.0 | | test.c:555:17:555:39 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:555:17:557:25 | ... ? ... : ... | 4.34263921E8 | 1.0 | 1.0 | -| test.c:555:22:555:29 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:555:17:557:25 | ... ? ... : ... | 173056.0 | 1.0 | 1.0 | +| test.c:555:22:555:29 | (...) | 831.0 | 1.0 | 1.0 | | test.c:555:23:555:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:555:23:555:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:555:23:555:28 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:555:27:555:28 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:555:23:555:28 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:555:27:555:28 | ip | 831.0 | 2.0 | 4.0 | | test.c:555:33:555:34 | 17 | 1.0 | -1.0 | -1.0 | | test.c:555:33:555:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:555:33:555:39 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:555:38:555:39 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:555:33:555:39 | ... * ... | 831.0 | 2.0 | 1.0 | +| test.c:555:38:555:39 | ip | 831.0 | 2.0 | 4.0 | | test.c:556:19:556:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:556:19:556:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:556:19:556:31 | ... * ... | 20839.0 | 1.0 | 1.0 | -| test.c:556:24:556:31 | (...) | 20839.0 | 1.0 | 1.0 | +| test.c:556:19:556:31 | ... * ... | 416.0 | 1.0 | 1.0 | +| test.c:556:24:556:31 | (...) | 416.0 | 1.0 | 1.0 | | test.c:556:25:556:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:556:25:556:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:556:25:556:30 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:556:29:556:30 | ip | 20839.0 | 2.0 | 1.0 | +| test.c:556:25:556:30 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:556:29:556:30 | ip | 416.0 | 2.0 | 2.0 | | test.c:557:19:557:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:557:19:557:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:557:19:557:25 | ... * ... | 20839.0 | 2.0 | 1.0 | -| test.c:557:24:557:25 | ip | 20839.0 | 2.0 | 1.0 | -| test.c:558:11:558:61 | (...) | 3.908375289E9 | 1.0 | 1.0 | +| test.c:557:19:557:25 | ... * ... | 416.0 | 2.0 | 1.0 | +| test.c:557:24:557:25 | ip | 416.0 | 2.0 | 2.0 | +| test.c:558:11:558:61 | (...) | 692224.0 | 1.0 | 1.0 | | test.c:558:12:558:13 | 14 | 1.0 | -1.0 | -1.0 | | test.c:558:12:558:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:558:12:558:18 | ... * ... | 62517.0 | 2.0 | 1.0 | +| test.c:558:12:558:18 | ... * ... | 1663.0 | 2.0 | 1.0 | | test.c:558:12:558:34 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:558:12:558:60 | ... ? ... : ... | 3.908375289E9 | 1.0 | 1.0 | -| test.c:558:17:558:18 | ip | 62517.0 | 2.0 | 1.0 | -| test.c:558:22:558:29 | (...) | 62517.0 | 1.0 | 1.0 | -| test.c:558:22:558:34 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:558:23:558:24 | ip | 62517.0 | 2.0 | 1.0 | -| test.c:558:23:558:28 | ... + ... | 62517.0 | 2.0 | 1.0 | +| test.c:558:12:558:60 | ... ? ... : ... | 692224.0 | 1.0 | 1.0 | +| test.c:558:17:558:18 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:558:22:558:29 | (...) | 1663.0 | 1.0 | 1.0 | +| test.c:558:22:558:34 | ... * ... | 1663.0 | 1.0 | 1.0 | +| test.c:558:23:558:24 | ip | 1663.0 | 2.0 | 4.0 | +| test.c:558:23:558:28 | ... + ... | 1663.0 | 2.0 | 1.0 | | test.c:558:28:558:28 | 1 | 1.0 | -1.0 | -1.0 | | test.c:558:28:558:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:558:33:558:34 | 17 | 1.0 | -1.0 | -1.0 | | test.c:558:33:558:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:558:38:558:39 | 17 | 1.0 | -1.0 | -1.0 | | test.c:558:38:558:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:558:38:558:44 | ... * ... | 62517.0 | 2.0 | 1.0 | -| test.c:558:43:558:44 | ip | 62517.0 | 2.0 | 1.0 | -| test.c:558:48:558:55 | (...) | 62517.0 | 1.0 | 1.0 | -| test.c:558:48:558:60 | ... * ... | 62517.0 | 1.0 | 1.0 | -| test.c:558:49:558:50 | ip | 62517.0 | 2.0 | 1.0 | -| test.c:558:49:558:54 | ... + ... | 62517.0 | 2.0 | 1.0 | +| test.c:558:38:558:44 | ... * ... | 832.0 | 2.0 | 1.0 | +| test.c:558:43:558:44 | ip | 832.0 | 2.0 | 2.0 | +| test.c:558:48:558:55 | (...) | 832.0 | 1.0 | 1.0 | +| test.c:558:48:558:60 | ... * ... | 832.0 | 1.0 | 1.0 | +| test.c:558:49:558:50 | ip | 832.0 | 2.0 | 2.0 | +| test.c:558:49:558:54 | ... + ... | 832.0 | 2.0 | 1.0 | | test.c:558:54:558:54 | 1 | 1.0 | -1.0 | -1.0 | | test.c:558:54:558:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:558:59:558:60 | 17 | 1.0 | -1.0 | -1.0 | | test.c:558:59:558:60 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:559:11:559:11 | 4 | 1.0 | -1.0 | -1.0 | | test.c:559:11:559:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:559:11:559:28 | ... * ... | 125034.0 | 1.0 | 1.0 | -| test.c:559:11:560:28 | ... + ... | 1.5633501156E10 | 1.0 | 1.0 | -| test.c:559:11:561:28 | ... + ... | 1.954719183539304E15 | 1.0 | 1.0 | -| test.c:559:11:567:24 | ... + ... | 3.056778340269433E31 | 1.0 | 1.0 | -| test.c:559:15:559:28 | (...) | 125034.0 | 1.0 | 1.0 | -| test.c:559:16:559:17 | ip | 125034.0 | 2.0 | 1.0 | -| test.c:559:16:559:22 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:559:16:559:27 | ... + ... | 125034.0 | 1.0 | 1.0 | +| test.c:559:11:559:28 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:559:11:560:28 | ... + ... | 2768896.0 | 1.0 | 1.0 | +| test.c:559:11:561:28 | ... + ... | 4.607442944E9 | 1.0 | 1.0 | +| test.c:559:11:567:24 | ... + ... | 1.7958256857326223E19 | 1.0 | 1.0 | +| test.c:559:15:559:28 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:559:16:559:17 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:559:16:559:22 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:559:16:559:27 | ... + ... | 1664.0 | 1.0 | 1.0 | | test.c:559:21:559:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:559:21:559:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:559:26:559:27 | 32 | 1.0 | -1.0 | -1.0 | | test.c:559:26:559:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:560:11:560:28 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:560:11:560:28 | (...) | 1664.0 | 1.0 | 1.0 | | test.c:560:12:560:12 | 2 | 1.0 | -1.0 | -1.0 | | test.c:560:12:560:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:560:12:560:17 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:560:12:560:22 | ... * ... | 125034.0 | 1.0 | 1.0 | -| test.c:560:12:560:27 | ... + ... | 125034.0 | 1.0 | 1.0 | -| test.c:560:16:560:17 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:560:12:560:17 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:560:12:560:22 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:560:12:560:27 | ... + ... | 1664.0 | 1.0 | 1.0 | +| test.c:560:16:560:17 | ip | 1664.0 | 2.0 | 3.0 | | test.c:560:21:560:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:560:21:560:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:560:26:560:27 | 32 | 1.0 | -1.0 | -1.0 | | test.c:560:26:560:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:561:11:561:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:561:11:561:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:561:11:561:28 | ... * ... | 125034.0 | 1.0 | 1.0 | -| test.c:561:15:561:28 | (...) | 125034.0 | 1.0 | 1.0 | -| test.c:561:16:561:17 | ip | 125034.0 | 2.0 | 1.0 | -| test.c:561:16:561:22 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:561:16:561:27 | ... + ... | 125034.0 | 1.0 | 1.0 | +| test.c:561:11:561:28 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:561:15:561:28 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:561:16:561:17 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:561:16:561:22 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:561:16:561:27 | ... + ... | 1664.0 | 1.0 | 1.0 | | test.c:561:21:561:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:561:21:561:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:561:26:561:27 | 64 | 1.0 | -1.0 | -1.0 | | test.c:561:26:561:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:562:11:567:24 | (...) | 1.5637941071078508E16 | 1.0 | 1.0 | -| test.c:562:12:562:23 | (...) | 125034.0 | 1.0 | 1.0 | -| test.c:562:12:562:28 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:562:11:567:24 | (...) | 3.89766234234375E9 | 1.0 | 1.0 | +| test.c:562:12:562:23 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:562:12:562:28 | ... * ... | 1664.0 | 1.0 | 1.0 | | test.c:562:12:563:61 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:562:12:567:23 | ... ? ... : ... | 1.5637941071078508E16 | 1.0 | 1.0 | +| test.c:562:12:567:23 | ... ? ... : ... | 3.89766234234375E9 | 1.0 | 1.0 | | test.c:562:13:562:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:562:13:562:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:562:13:562:18 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:562:13:562:22 | ... + ... | 125034.0 | 1.0 | 1.0 | -| test.c:562:17:562:18 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:562:13:562:18 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:562:13:562:22 | ... + ... | 1664.0 | 1.0 | 1.0 | +| test.c:562:17:562:18 | ip | 1664.0 | 2.0 | 3.0 | | test.c:562:22:562:22 | 1 | 1.0 | -1.0 | -1.0 | | test.c:562:22:562:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:562:27:562:28 | 14 | 1.0 | -1.0 | -1.0 | | test.c:562:27:562:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:563:11:563:61 | (...) | 1.5633501156E10 | 1.0 | 1.0 | +| test.c:563:11:563:61 | (...) | 693056.25 | 1.0 | 1.0 | | test.c:563:12:563:13 | 14 | 1.0 | -1.0 | -1.0 | | test.c:563:12:563:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:563:12:563:24 | ... * ... | 125034.0 | 1.0 | 1.0 | +| test.c:563:12:563:24 | ... * ... | 1664.0 | 1.0 | 1.0 | | test.c:563:12:563:34 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:563:12:563:60 | ... ? ... : ... | 1.5633501156E10 | 1.0 | 1.0 | -| test.c:563:17:563:24 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:563:12:563:60 | ... ? ... : ... | 693056.25 | 1.0 | 1.0 | +| test.c:563:17:563:24 | (...) | 1664.0 | 1.0 | 1.0 | | test.c:563:18:563:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:563:18:563:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:563:18:563:23 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:563:22:563:23 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:563:18:563:23 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:563:22:563:23 | ip | 1664.0 | 2.0 | 3.0 | | test.c:563:28:563:29 | 17 | 1.0 | -1.0 | -1.0 | | test.c:563:28:563:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:563:28:563:34 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:563:33:563:34 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:563:28:563:34 | ... * ... | 1664.0 | 2.0 | 1.0 | +| test.c:563:33:563:34 | ip | 1664.0 | 2.0 | 3.0 | | test.c:563:38:563:39 | 17 | 1.0 | -1.0 | -1.0 | | test.c:563:38:563:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:563:38:563:50 | ... * ... | 125034.0 | 1.0 | 1.0 | -| test.c:563:43:563:50 | (...) | 125034.0 | 1.0 | 1.0 | +| test.c:563:38:563:50 | ... * ... | 832.5 | 1.0 | 1.0 | +| test.c:563:43:563:50 | (...) | 832.5 | 1.0 | 1.0 | | test.c:563:44:563:44 | 2 | 1.0 | -1.0 | -1.0 | | test.c:563:44:563:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:563:44:563:49 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:563:48:563:49 | ip | 125034.0 | 2.0 | 1.0 | +| test.c:563:44:563:49 | ... * ... | 832.5 | 2.0 | 1.0 | +| test.c:563:48:563:49 | ip | 832.5 | 2.0 | 2.0 | | test.c:563:54:563:55 | 17 | 1.0 | -1.0 | -1.0 | | test.c:563:54:563:55 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:563:54:563:60 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:563:59:563:60 | ip | 125034.0 | 2.0 | 1.0 | -| test.c:564:15:564:26 | (...) | 250069.0 | 1.0 | 1.0 | -| test.c:564:15:564:31 | ... * ... | 250069.0 | 1.0 | 1.0 | +| test.c:563:54:563:60 | ... * ... | 832.5 | 2.0 | 1.0 | +| test.c:563:59:563:60 | ip | 832.5 | 2.0 | 2.0 | +| test.c:564:15:564:26 | (...) | 2497.5 | 1.0 | 1.0 | +| test.c:564:15:564:31 | ... * ... | 2497.5 | 1.0 | 1.0 | | test.c:564:16:564:16 | 2 | 1.0 | -1.0 | -1.0 | | test.c:564:16:564:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:564:16:564:21 | ... * ... | 250069.0 | 2.0 | 1.0 | -| test.c:564:16:564:25 | ... + ... | 250069.0 | 1.0 | 1.0 | -| test.c:564:20:564:21 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:564:16:564:21 | ... * ... | 2497.5 | 2.0 | 1.0 | +| test.c:564:16:564:25 | ... + ... | 2497.5 | 1.0 | 1.0 | +| test.c:564:20:564:21 | ip | 2497.5 | 2.0 | 4.0 | | test.c:564:25:564:25 | 1 | 1.0 | -1.0 | -1.0 | | test.c:564:25:564:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:564:30:564:31 | 14 | 1.0 | -1.0 | -1.0 | | test.c:564:30:564:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:565:15:565:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:565:15:565:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:565:15:565:27 | ... * ... | 250069.0 | 1.0 | 1.0 | +| test.c:565:15:565:27 | ... * ... | 2497.5 | 1.0 | 1.0 | | test.c:565:15:565:37 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:565:15:567:23 | ... ? ... : ... | 6.2534504761E10 | 1.0 | 1.0 | -| test.c:565:20:565:27 | (...) | 250069.0 | 1.0 | 1.0 | +| test.c:565:15:567:23 | ... ? ... : ... | 1560625.5625 | 1.0 | 1.0 | +| test.c:565:20:565:27 | (...) | 2497.5 | 1.0 | 1.0 | | test.c:565:21:565:21 | 2 | 1.0 | -1.0 | -1.0 | | test.c:565:21:565:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:565:21:565:26 | ... * ... | 250069.0 | 2.0 | 1.0 | -| test.c:565:25:565:26 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:565:21:565:26 | ... * ... | 2497.5 | 2.0 | 1.0 | +| test.c:565:25:565:26 | ip | 2497.5 | 2.0 | 4.0 | | test.c:565:31:565:32 | 17 | 1.0 | -1.0 | -1.0 | | test.c:565:31:565:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:565:31:565:37 | ... * ... | 250069.0 | 2.0 | 1.0 | -| test.c:565:36:565:37 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:565:31:565:37 | ... * ... | 2497.5 | 2.0 | 1.0 | +| test.c:565:36:565:37 | ip | 2497.5 | 2.0 | 4.0 | | test.c:566:17:566:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:566:17:566:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:566:17:566:29 | ... * ... | 250069.0 | 1.0 | 1.0 | -| test.c:566:22:566:29 | (...) | 250069.0 | 1.0 | 1.0 | +| test.c:566:17:566:29 | ... * ... | 1249.25 | 1.0 | 1.0 | +| test.c:566:22:566:29 | (...) | 1249.25 | 1.0 | 1.0 | | test.c:566:23:566:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:566:23:566:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:566:23:566:28 | ... * ... | 250069.0 | 2.0 | 1.0 | -| test.c:566:27:566:28 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:566:23:566:28 | ... * ... | 1249.25 | 2.0 | 1.0 | +| test.c:566:27:566:28 | ip | 1249.25 | 2.0 | 2.0 | | test.c:567:17:567:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:567:17:567:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:567:17:567:23 | ... * ... | 250069.0 | 2.0 | 1.0 | -| test.c:567:22:567:23 | ip | 250069.0 | 2.0 | 1.0 | +| test.c:567:17:567:23 | ... * ... | 1249.25 | 2.0 | 1.0 | +| test.c:567:22:567:23 | ip | 1249.25 | 2.0 | 2.0 | | test.c:568:11:568:12 | 14 | 1.0 | -1.0 | -1.0 | | test.c:568:11:568:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:568:11:568:17 | ... * ... | 125034.0 | 2.0 | 1.0 | +| test.c:568:11:568:17 | ... * ... | 1664.0 | 2.0 | 1.0 | | test.c:568:11:568:33 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:568:11:570:25 | ... ? ... : ... | 1.5633501156E10 | 1.0 | 1.0 | -| test.c:568:16:568:17 | ip | 125034.0 | 2.0 | 1.0 | -| test.c:568:21:568:28 | (...) | 125034.0 | 1.0 | 1.0 | -| test.c:568:21:568:33 | ... * ... | 125034.0 | 1.0 | 1.0 | -| test.c:568:22:568:23 | ip | 125034.0 | 2.0 | 1.0 | -| test.c:568:22:568:27 | ... + ... | 125034.0 | 2.0 | 1.0 | +| test.c:568:11:570:25 | ... ? ... : ... | 693056.25 | 1.0 | 1.0 | +| test.c:568:16:568:17 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:568:21:568:28 | (...) | 1664.0 | 1.0 | 1.0 | +| test.c:568:21:568:33 | ... * ... | 1664.0 | 1.0 | 1.0 | +| test.c:568:22:568:23 | ip | 1664.0 | 2.0 | 3.0 | +| test.c:568:22:568:27 | ... + ... | 1664.0 | 2.0 | 1.0 | | test.c:568:27:568:27 | 1 | 1.0 | -1.0 | -1.0 | | test.c:568:27:568:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:568:32:568:33 | 17 | 1.0 | -1.0 | -1.0 | | test.c:568:32:568:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:569:13:569:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:569:13:569:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:569:13:569:19 | ... * ... | 125034.0 | 2.0 | 1.0 | -| test.c:569:18:569:19 | ip | 125034.0 | 2.0 | 1.0 | -| test.c:570:13:570:20 | (...) | 125034.0 | 1.0 | 1.0 | -| test.c:570:13:570:25 | ... * ... | 125034.0 | 1.0 | 1.0 | -| test.c:570:14:570:15 | ip | 125034.0 | 2.0 | 1.0 | -| test.c:570:14:570:19 | ... + ... | 125034.0 | 2.0 | 1.0 | +| test.c:569:13:569:19 | ... * ... | 832.5 | 2.0 | 1.0 | +| test.c:569:18:569:19 | ip | 832.5 | 2.0 | 2.0 | +| test.c:570:13:570:20 | (...) | 832.5 | 1.0 | 1.0 | +| test.c:570:13:570:25 | ... * ... | 832.5 | 1.0 | 1.0 | +| test.c:570:14:570:15 | ip | 832.5 | 2.0 | 2.0 | +| test.c:570:14:570:19 | ... + ... | 832.5 | 2.0 | 1.0 | | test.c:570:19:570:19 | 1 | 1.0 | -1.0 | -1.0 | | test.c:570:19:570:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:570:24:570:25 | 14 | 1.0 | -1.0 | -1.0 | | test.c:570:24:570:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:571:9:571:10 | 14 | 1.0 | -1.0 | -1.0 | | test.c:571:9:571:10 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:571:9:571:15 | ... * ... | 1437897.0 | 2.0 | 1.0 | +| test.c:571:9:571:15 | ... * ... | 13317.0 | 2.0 | 1.0 | | test.c:571:9:571:59 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:571:9:573:51 | ... ? ... : ... | 2.9729207539701335E18 | 1.0 | 1.0 | -| test.c:571:14:571:15 | ip | 1437897.0 | 2.0 | 1.0 | -| test.c:571:19:571:30 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:571:19:571:35 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:571:19:571:59 | ... + ... | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:571:9:573:51 | ... ? ... : ... | 2.95275249179E11 | 1.0 | 1.0 | +| test.c:571:14:571:15 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:571:19:571:30 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:571:19:571:35 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:19:571:59 | ... + ... | 1.77342489E8 | 1.0 | 1.0 | | test.c:571:20:571:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:571:20:571:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:571:20:571:25 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:571:20:571:29 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:571:24:571:25 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:571:20:571:25 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:571:20:571:29 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:24:571:25 | ip | 13317.0 | 2.0 | 6.0 | | test.c:571:29:571:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:571:29:571:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:571:34:571:35 | 17 | 1.0 | -1.0 | -1.0 | | test.c:571:34:571:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:571:39:571:54 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:571:39:571:59 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:571:39:571:54 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:571:39:571:59 | ... * ... | 13317.0 | 1.0 | 1.0 | | test.c:571:40:571:40 | 2 | 1.0 | -1.0 | -1.0 | | test.c:571:40:571:40 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:571:40:571:45 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:571:40:571:49 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:571:40:571:53 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:571:44:571:45 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:571:40:571:45 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:571:40:571:49 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:40:571:53 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:571:44:571:45 | ip | 13317.0 | 2.0 | 6.0 | | test.c:571:49:571:49 | 1 | 1.0 | -1.0 | -1.0 | | test.c:571:49:571:49 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:571:53:571:53 | 1 | 1.0 | -1.0 | -1.0 | @@ -2900,28 +2900,28 @@ estimateNrOfBounds | test.c:571:58:571:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:572:11:572:12 | 14 | 1.0 | -1.0 | -1.0 | | test.c:572:11:572:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:572:11:572:17 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:572:16:572:17 | ip | 1437897.0 | 1.0 | 1.0 | -| test.c:573:11:573:22 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:573:11:573:27 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:573:11:573:51 | ... + ... | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:572:11:572:17 | ... * ... | 6659.0 | 1.0 | 1.0 | +| test.c:572:16:572:17 | ip | 6659.0 | 1.0 | 1.0 | +| test.c:573:11:573:22 | (...) | 6659.0 | 1.0 | 1.0 | +| test.c:573:11:573:27 | ... * ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:11:573:51 | ... + ... | 4.4342281E7 | 1.0 | 1.0 | | test.c:573:12:573:12 | 2 | 1.0 | -1.0 | -1.0 | | test.c:573:12:573:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:573:12:573:17 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:573:12:573:21 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:573:16:573:17 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:573:12:573:17 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:573:12:573:21 | ... + ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:16:573:17 | ip | 6659.0 | 2.0 | 1.0 | | test.c:573:21:573:21 | 1 | 1.0 | -1.0 | -1.0 | | test.c:573:21:573:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:573:26:573:27 | 14 | 1.0 | -1.0 | -1.0 | | test.c:573:26:573:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:573:31:573:46 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:573:31:573:51 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:573:31:573:46 | (...) | 6659.0 | 1.0 | 1.0 | +| test.c:573:31:573:51 | ... * ... | 6659.0 | 1.0 | 1.0 | | test.c:573:32:573:32 | 2 | 1.0 | -1.0 | -1.0 | | test.c:573:32:573:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:573:32:573:37 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:573:32:573:41 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:573:32:573:45 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:573:36:573:37 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:573:32:573:37 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:573:32:573:41 | ... + ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:32:573:45 | ... + ... | 6659.0 | 1.0 | 1.0 | +| test.c:573:36:573:37 | ip | 6659.0 | 2.0 | 1.0 | | test.c:573:41:573:41 | 1 | 1.0 | -1.0 | -1.0 | | test.c:573:41:573:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:573:45:573:45 | 1 | 1.0 | -1.0 | -1.0 | @@ -2930,1136 +2930,1136 @@ estimateNrOfBounds | test.c:573:50:573:51 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:574:9:574:9 | 2 | 1.0 | -1.0 | -1.0 | | test.c:574:9:574:9 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:574:9:574:26 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:574:9:594:48 | ... + ... | 3.5306223994138077E62 | 1.0 | 1.0 | +| test.c:574:9:574:26 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:574:9:594:48 | ... + ... | 7.298546280791731E40 | 1.0 | 1.0 | | test.c:574:9:616:30 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:574:9:659:27 | ... ? ... : ... | 4.3658022750663434E182 | 1.0 | 1.0 | -| test.c:574:13:574:26 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:574:14:574:15 | ip | 1437897.0 | 2.0 | 1.0 | -| test.c:574:14:574:20 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:574:14:574:25 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:574:9:659:27 | ... ? ... : ... | 4.924988773421752E113 | 1.0 | 1.0 | +| test.c:574:13:574:26 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:574:14:574:15 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:574:14:574:20 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:574:14:574:25 | ... + ... | 13317.0 | 1.0 | 1.0 | | test.c:574:19:574:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:574:19:574:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:574:24:574:25 | 32 | 1.0 | -1.0 | -1.0 | | test.c:574:24:574:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:575:13:594:48 | (...) | 2.4554070280512497E56 | 1.0 | 1.0 | +| test.c:575:13:594:48 | (...) | 5.480623474349876E36 | 1.0 | 1.0 | | test.c:575:14:575:14 | 4 | 1.0 | -1.0 | -1.0 | | test.c:575:14:575:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:575:14:575:31 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:575:14:576:32 | ... + ... | 2.067547782609E12 | 1.0 | 1.0 | -| test.c:575:14:577:32 | ... + ... | 2.9729207539701335E18 | 1.0 | 1.0 | -| test.c:575:14:583:28 | ... + ... | 7.070613623498497E37 | 1.0 | 1.0 | +| test.c:575:14:575:31 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:575:14:576:32 | ... + ... | 1.77342489E8 | 1.0 | 1.0 | +| test.c:575:14:577:32 | ... + ... | 2.361669926013E12 | 1.0 | 1.0 | +| test.c:575:14:583:28 | ... + ... | 4.707534322240232E24 | 1.0 | 1.0 | | test.c:575:14:584:43 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:575:14:594:47 | ... ? ... : ... | 2.4554070280512497E56 | 1.0 | 1.0 | -| test.c:575:18:575:31 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:575:19:575:20 | ip | 1437897.0 | 2.0 | 1.0 | -| test.c:575:19:575:25 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:575:19:575:30 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:575:14:594:47 | ... ? ... : ... | 5.480623474349876E36 | 1.0 | 1.0 | +| test.c:575:18:575:31 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:575:19:575:20 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:575:19:575:25 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:575:19:575:30 | ... + ... | 13317.0 | 1.0 | 1.0 | | test.c:575:24:575:25 | 14 | 1.0 | -1.0 | -1.0 | | test.c:575:24:575:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:575:29:575:30 | 32 | 1.0 | -1.0 | -1.0 | | test.c:575:29:575:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:576:15:576:32 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:576:15:576:32 | (...) | 13317.0 | 1.0 | 1.0 | | test.c:576:16:576:16 | 2 | 1.0 | -1.0 | -1.0 | | test.c:576:16:576:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:576:16:576:21 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:576:16:576:26 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:576:16:576:31 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:576:20:576:21 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:576:16:576:21 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:576:16:576:26 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:576:16:576:31 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:576:20:576:21 | ip | 13317.0 | 2.0 | 6.0 | | test.c:576:25:576:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:576:25:576:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:576:30:576:31 | 32 | 1.0 | -1.0 | -1.0 | | test.c:576:30:576:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:577:15:577:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:577:15:577:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:577:15:577:32 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:577:19:577:32 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:577:20:577:21 | ip | 1437897.0 | 2.0 | 1.0 | -| test.c:577:20:577:26 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:577:20:577:31 | ... + ... | 1437897.0 | 1.0 | 1.0 | +| test.c:577:15:577:32 | ... * ... | 13317.0 | 1.0 | 1.0 | +| test.c:577:19:577:32 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:577:20:577:21 | ip | 13317.0 | 2.0 | 6.0 | +| test.c:577:20:577:26 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:577:20:577:31 | ... + ... | 13317.0 | 1.0 | 1.0 | | test.c:577:25:577:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:577:25:577:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:577:30:577:31 | 64 | 1.0 | -1.0 | -1.0 | | test.c:577:30:577:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:578:15:583:28 | (...) | 2.3783390842343084E19 | 1.0 | 1.0 | -| test.c:578:16:578:27 | (...) | 1437897.0 | 1.0 | 1.0 | -| test.c:578:16:578:32 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:578:15:583:28 | (...) | 1.993307477217E12 | 1.0 | 1.0 | +| test.c:578:16:578:27 | (...) | 13317.0 | 1.0 | 1.0 | +| test.c:578:16:578:32 | ... * ... | 13317.0 | 1.0 | 1.0 | | test.c:578:16:579:65 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:578:16:583:27 | ... ? ... : ... | 2.3783390842343084E19 | 1.0 | 1.0 | +| test.c:578:16:583:27 | ... ? ... : ... | 1.993307477217E12 | 1.0 | 1.0 | | test.c:578:17:578:17 | 2 | 1.0 | -1.0 | -1.0 | | test.c:578:17:578:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:578:17:578:22 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:578:17:578:26 | ... + ... | 1437897.0 | 1.0 | 1.0 | -| test.c:578:21:578:22 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:578:17:578:22 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:578:17:578:26 | ... + ... | 13317.0 | 1.0 | 1.0 | +| test.c:578:21:578:22 | ip | 13317.0 | 2.0 | 6.0 | | test.c:578:26:578:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:578:26:578:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:578:31:578:32 | 14 | 1.0 | -1.0 | -1.0 | | test.c:578:31:578:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:579:15:579:65 | (...) | 2.067547782609E12 | 1.0 | 1.0 | +| test.c:579:15:579:65 | (...) | 4.4342281E7 | 1.0 | 1.0 | | test.c:579:16:579:17 | 14 | 1.0 | -1.0 | -1.0 | | test.c:579:16:579:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:579:16:579:28 | ... * ... | 1437897.0 | 1.0 | 1.0 | +| test.c:579:16:579:28 | ... * ... | 13317.0 | 1.0 | 1.0 | | test.c:579:16:579:38 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:579:16:579:64 | ... ? ... : ... | 2.067547782609E12 | 1.0 | 1.0 | -| test.c:579:21:579:28 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:579:16:579:64 | ... ? ... : ... | 4.4342281E7 | 1.0 | 1.0 | +| test.c:579:21:579:28 | (...) | 13317.0 | 1.0 | 1.0 | | test.c:579:22:579:22 | 2 | 1.0 | -1.0 | -1.0 | | test.c:579:22:579:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:579:22:579:27 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:579:26:579:27 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:579:22:579:27 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:579:26:579:27 | ip | 13317.0 | 2.0 | 6.0 | | test.c:579:32:579:33 | 17 | 1.0 | -1.0 | -1.0 | | test.c:579:32:579:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:579:32:579:38 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:579:37:579:38 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:579:32:579:38 | ... * ... | 13317.0 | 2.0 | 1.0 | +| test.c:579:37:579:38 | ip | 13317.0 | 2.0 | 6.0 | | test.c:579:42:579:43 | 17 | 1.0 | -1.0 | -1.0 | | test.c:579:42:579:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:579:42:579:54 | ... * ... | 1437897.0 | 1.0 | 1.0 | -| test.c:579:47:579:54 | (...) | 1437897.0 | 1.0 | 1.0 | +| test.c:579:42:579:54 | ... * ... | 6659.0 | 1.0 | 1.0 | +| test.c:579:47:579:54 | (...) | 6659.0 | 1.0 | 1.0 | | test.c:579:48:579:48 | 2 | 1.0 | -1.0 | -1.0 | | test.c:579:48:579:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:579:48:579:53 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:579:52:579:53 | ip | 1437897.0 | 2.0 | 1.0 | +| test.c:579:48:579:53 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:579:52:579:53 | ip | 6659.0 | 2.0 | 2.0 | | test.c:579:58:579:59 | 17 | 1.0 | -1.0 | -1.0 | | test.c:579:58:579:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:579:58:579:64 | ... * ... | 1437897.0 | 2.0 | 1.0 | -| test.c:579:63:579:64 | ip | 1437897.0 | 2.0 | 1.0 | -| test.c:580:19:580:30 | (...) | 2875795.0 | 1.0 | 1.0 | -| test.c:580:19:580:35 | ... * ... | 2875795.0 | 1.0 | 1.0 | +| test.c:579:58:579:64 | ... * ... | 6659.0 | 2.0 | 1.0 | +| test.c:579:63:579:64 | ip | 6659.0 | 2.0 | 2.0 | +| test.c:580:19:580:30 | (...) | 19977.0 | 1.0 | 1.0 | +| test.c:580:19:580:35 | ... * ... | 19977.0 | 1.0 | 1.0 | | test.c:580:20:580:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:580:20:580:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:580:20:580:25 | ... * ... | 2875795.0 | 2.0 | 1.0 | -| test.c:580:20:580:29 | ... + ... | 2875795.0 | 1.0 | 1.0 | -| test.c:580:24:580:25 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:580:20:580:25 | ... * ... | 19977.0 | 2.0 | 1.0 | +| test.c:580:20:580:29 | ... + ... | 19977.0 | 1.0 | 1.0 | +| test.c:580:24:580:25 | ip | 19977.0 | 2.0 | 4.0 | | test.c:580:29:580:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:580:29:580:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:580:34:580:35 | 14 | 1.0 | -1.0 | -1.0 | | test.c:580:34:580:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:581:19:581:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:581:19:581:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:581:19:581:31 | ... * ... | 2875795.0 | 1.0 | 1.0 | +| test.c:581:19:581:31 | ... * ... | 19977.0 | 1.0 | 1.0 | | test.c:581:19:581:41 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:581:19:583:27 | ... ? ... : ... | 8.270196882025E12 | 1.0 | 1.0 | -| test.c:581:24:581:31 | (...) | 2875795.0 | 1.0 | 1.0 | +| test.c:581:19:583:27 | ... ? ... : ... | 9.9780121E7 | 1.0 | 1.0 | +| test.c:581:24:581:31 | (...) | 19977.0 | 1.0 | 1.0 | | test.c:581:25:581:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:581:25:581:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:581:25:581:30 | ... * ... | 2875795.0 | 2.0 | 1.0 | -| test.c:581:29:581:30 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:581:25:581:30 | ... * ... | 19977.0 | 2.0 | 1.0 | +| test.c:581:29:581:30 | ip | 19977.0 | 2.0 | 4.0 | | test.c:581:35:581:36 | 17 | 1.0 | -1.0 | -1.0 | | test.c:581:35:581:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:581:35:581:41 | ... * ... | 2875795.0 | 2.0 | 1.0 | -| test.c:581:40:581:41 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:581:35:581:41 | ... * ... | 19977.0 | 2.0 | 1.0 | +| test.c:581:40:581:41 | ip | 19977.0 | 2.0 | 4.0 | | test.c:582:21:582:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:582:21:582:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:582:21:582:33 | ... * ... | 2875795.0 | 1.0 | 1.0 | -| test.c:582:26:582:33 | (...) | 2875795.0 | 1.0 | 1.0 | +| test.c:582:21:582:33 | ... * ... | 9989.0 | 1.0 | 1.0 | +| test.c:582:26:582:33 | (...) | 9989.0 | 1.0 | 1.0 | | test.c:582:27:582:27 | 2 | 1.0 | -1.0 | -1.0 | | test.c:582:27:582:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:582:27:582:32 | ... * ... | 2875795.0 | 2.0 | 1.0 | -| test.c:582:31:582:32 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:582:27:582:32 | ... * ... | 9989.0 | 2.0 | 1.0 | +| test.c:582:31:582:32 | ip | 9989.0 | 2.0 | 2.0 | | test.c:583:21:583:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:583:21:583:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:583:21:583:27 | ... * ... | 2875795.0 | 2.0 | 1.0 | -| test.c:583:26:583:27 | ip | 2875795.0 | 2.0 | 1.0 | +| test.c:583:21:583:27 | ... * ... | 9989.0 | 2.0 | 1.0 | +| test.c:583:26:583:27 | ip | 9989.0 | 2.0 | 2.0 | | test.c:584:13:584:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:584:13:584:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:584:13:584:18 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:584:13:584:23 | ... * ... | 8627385.0 | 1.0 | 1.0 | -| test.c:584:13:584:43 | ... + ... | 7.4431771938225E13 | 1.0 | 1.0 | -| test.c:584:17:584:18 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:584:13:584:18 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:584:13:584:23 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:584:13:584:43 | ... + ... | 1.596402025E9 | 1.0 | 1.0 | +| test.c:584:17:584:18 | ip | 39955.0 | 2.0 | 4.0 | | test.c:584:22:584:23 | 14 | 1.0 | -1.0 | -1.0 | | test.c:584:22:584:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:584:27:584:38 | (...) | 8627385.0 | 1.0 | 1.0 | -| test.c:584:27:584:43 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:584:27:584:38 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:584:27:584:43 | ... * ... | 39955.0 | 1.0 | 1.0 | | test.c:584:28:584:28 | 2 | 1.0 | -1.0 | -1.0 | | test.c:584:28:584:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:584:28:584:33 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:584:28:584:37 | ... + ... | 8627385.0 | 1.0 | 1.0 | -| test.c:584:32:584:33 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:584:28:584:33 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:584:28:584:37 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:584:32:584:33 | ip | 39955.0 | 2.0 | 4.0 | | test.c:584:37:584:37 | 1 | 1.0 | -1.0 | -1.0 | | test.c:584:37:584:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:584:42:584:43 | 17 | 1.0 | -1.0 | -1.0 | | test.c:584:42:584:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:585:17:585:17 | 4 | 1.0 | -1.0 | -1.0 | | test.c:585:17:585:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:585:17:585:34 | ... * ... | 8627385.0 | 1.0 | 1.0 | -| test.c:585:17:586:34 | ... + ... | 7.4431771938225E13 | 1.0 | 1.0 | -| test.c:585:17:587:34 | ... + ... | 6.421515527432633E20 | 1.0 | 1.0 | -| test.c:585:17:593:30 | ... + ... | 3.298869507082441E42 | 1.0 | 1.0 | -| test.c:585:21:585:34 | (...) | 8627385.0 | 1.0 | 1.0 | -| test.c:585:22:585:23 | ip | 8627385.0 | 2.0 | 1.0 | -| test.c:585:22:585:28 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:585:22:585:33 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:585:17:585:34 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:585:17:586:34 | ... + ... | 1.596402025E9 | 1.0 | 1.0 | +| test.c:585:17:587:34 | ... + ... | 6.3784242908875E13 | 1.0 | 1.0 | +| test.c:585:17:593:30 | ... + ... | 3.433109823542022E27 | 1.0 | 1.0 | +| test.c:585:21:585:34 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:585:22:585:23 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:585:22:585:28 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:585:22:585:33 | ... + ... | 39955.0 | 1.0 | 1.0 | | test.c:585:27:585:28 | 14 | 1.0 | -1.0 | -1.0 | | test.c:585:27:585:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:585:32:585:33 | 32 | 1.0 | -1.0 | -1.0 | | test.c:585:32:585:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:586:17:586:34 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:586:17:586:34 | (...) | 39955.0 | 1.0 | 1.0 | | test.c:586:18:586:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:586:18:586:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:586:18:586:23 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:586:18:586:28 | ... * ... | 8627385.0 | 1.0 | 1.0 | -| test.c:586:18:586:33 | ... + ... | 8627385.0 | 1.0 | 1.0 | -| test.c:586:22:586:23 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:586:18:586:23 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:586:18:586:28 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:586:18:586:33 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:586:22:586:23 | ip | 39955.0 | 2.0 | 4.0 | | test.c:586:27:586:28 | 14 | 1.0 | -1.0 | -1.0 | | test.c:586:27:586:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:586:32:586:33 | 32 | 1.0 | -1.0 | -1.0 | | test.c:586:32:586:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:587:17:587:17 | 2 | 1.0 | -1.0 | -1.0 | | test.c:587:17:587:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:587:17:587:34 | ... * ... | 8627385.0 | 1.0 | 1.0 | -| test.c:587:21:587:34 | (...) | 8627385.0 | 1.0 | 1.0 | -| test.c:587:22:587:23 | ip | 8627385.0 | 2.0 | 1.0 | -| test.c:587:22:587:28 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:587:22:587:33 | ... + ... | 8627385.0 | 1.0 | 1.0 | +| test.c:587:17:587:34 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:587:21:587:34 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:587:22:587:23 | ip | 39955.0 | 2.0 | 4.0 | +| test.c:587:22:587:28 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:587:22:587:33 | ... + ... | 39955.0 | 1.0 | 1.0 | | test.c:587:27:587:28 | 14 | 1.0 | -1.0 | -1.0 | | test.c:587:27:587:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:587:32:587:33 | 64 | 1.0 | -1.0 | -1.0 | | test.c:587:32:587:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:588:17:593:30 | (...) | 5.137213315127421E21 | 1.0 | 1.0 | -| test.c:588:18:588:29 | (...) | 8627385.0 | 1.0 | 1.0 | -| test.c:588:18:588:34 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:588:17:593:30 | (...) | 5.38237920052875E13 | 1.0 | 1.0 | +| test.c:588:18:588:29 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:588:18:588:34 | ... * ... | 39955.0 | 1.0 | 1.0 | | test.c:588:18:589:67 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:588:18:593:29 | ... ? ... : ... | 5.137213315127421E21 | 1.0 | 1.0 | +| test.c:588:18:593:29 | ... ? ... : ... | 5.38237920052875E13 | 1.0 | 1.0 | | test.c:588:19:588:19 | 2 | 1.0 | -1.0 | -1.0 | | test.c:588:19:588:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:588:19:588:24 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:588:19:588:28 | ... + ... | 8627385.0 | 1.0 | 1.0 | -| test.c:588:23:588:24 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:588:19:588:24 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:588:19:588:28 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:588:23:588:24 | ip | 39955.0 | 2.0 | 4.0 | | test.c:588:28:588:28 | 1 | 1.0 | -1.0 | -1.0 | | test.c:588:28:588:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:588:33:588:34 | 14 | 1.0 | -1.0 | -1.0 | | test.c:588:33:588:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:589:17:589:67 | (...) | 7.4431771938225E13 | 1.0 | 1.0 | +| test.c:589:17:589:67 | (...) | 3.99120484E8 | 1.0 | 1.0 | | test.c:589:18:589:19 | 14 | 1.0 | -1.0 | -1.0 | | test.c:589:18:589:19 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:589:18:589:30 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:589:18:589:30 | ... * ... | 39955.0 | 1.0 | 1.0 | | test.c:589:18:589:40 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:589:18:589:66 | ... ? ... : ... | 7.4431771938225E13 | 1.0 | 1.0 | -| test.c:589:23:589:30 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:589:18:589:66 | ... ? ... : ... | 3.99120484E8 | 1.0 | 1.0 | +| test.c:589:23:589:30 | (...) | 39955.0 | 1.0 | 1.0 | | test.c:589:24:589:24 | 2 | 1.0 | -1.0 | -1.0 | | test.c:589:24:589:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:589:24:589:29 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:589:28:589:29 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:589:24:589:29 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:589:28:589:29 | ip | 39955.0 | 2.0 | 4.0 | | test.c:589:34:589:35 | 17 | 1.0 | -1.0 | -1.0 | | test.c:589:34:589:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:589:34:589:40 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:589:39:589:40 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:589:34:589:40 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:589:39:589:40 | ip | 39955.0 | 2.0 | 4.0 | | test.c:589:44:589:45 | 17 | 1.0 | -1.0 | -1.0 | | test.c:589:44:589:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:589:44:589:56 | ... * ... | 8627385.0 | 1.0 | 1.0 | -| test.c:589:49:589:56 | (...) | 8627385.0 | 1.0 | 1.0 | +| test.c:589:44:589:56 | ... * ... | 19978.0 | 1.0 | 1.0 | +| test.c:589:49:589:56 | (...) | 19978.0 | 1.0 | 1.0 | | test.c:589:50:589:50 | 2 | 1.0 | -1.0 | -1.0 | | test.c:589:50:589:50 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:589:50:589:55 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:589:54:589:55 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:589:50:589:55 | ... * ... | 19978.0 | 2.0 | 1.0 | +| test.c:589:54:589:55 | ip | 19978.0 | 2.0 | 2.0 | | test.c:589:60:589:61 | 17 | 1.0 | -1.0 | -1.0 | | test.c:589:60:589:61 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:589:60:589:66 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:589:65:589:66 | ip | 8627385.0 | 2.0 | 1.0 | -| test.c:590:21:590:32 | (...) | 1.7254771E7 | 1.0 | 1.0 | -| test.c:590:21:590:37 | ... * ... | 1.7254771E7 | 1.0 | 1.0 | +| test.c:589:60:589:66 | ... * ... | 19978.0 | 2.0 | 1.0 | +| test.c:589:65:589:66 | ip | 19978.0 | 2.0 | 2.0 | +| test.c:590:21:590:32 | (...) | 59934.0 | 1.0 | 1.0 | +| test.c:590:21:590:37 | ... * ... | 59934.0 | 1.0 | 1.0 | | test.c:590:22:590:22 | 2 | 1.0 | -1.0 | -1.0 | | test.c:590:22:590:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:590:22:590:27 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | -| test.c:590:22:590:31 | ... + ... | 1.7254771E7 | 1.0 | 1.0 | -| test.c:590:26:590:27 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:590:22:590:27 | ... * ... | 59934.0 | 2.0 | 1.0 | +| test.c:590:22:590:31 | ... + ... | 59934.0 | 1.0 | 1.0 | +| test.c:590:26:590:27 | ip | 59934.0 | 2.0 | 4.0 | | test.c:590:31:590:31 | 1 | 1.0 | -1.0 | -1.0 | | test.c:590:31:590:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:590:36:590:37 | 14 | 1.0 | -1.0 | -1.0 | | test.c:590:36:590:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:591:21:591:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:591:21:591:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:591:21:591:33 | ... * ... | 1.7254771E7 | 1.0 | 1.0 | +| test.c:591:21:591:33 | ... * ... | 59934.0 | 1.0 | 1.0 | | test.c:591:21:591:43 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:591:21:593:29 | ... ? ... : ... | 2.97727122262441E14 | 1.0 | 1.0 | -| test.c:591:26:591:33 | (...) | 1.7254771E7 | 1.0 | 1.0 | +| test.c:591:21:593:29 | ... ? ... : ... | 8.9805105625E8 | 1.0 | 1.0 | +| test.c:591:26:591:33 | (...) | 59934.0 | 1.0 | 1.0 | | test.c:591:27:591:27 | 2 | 1.0 | -1.0 | -1.0 | | test.c:591:27:591:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:591:27:591:32 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | -| test.c:591:31:591:32 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:591:27:591:32 | ... * ... | 59934.0 | 2.0 | 1.0 | +| test.c:591:31:591:32 | ip | 59934.0 | 2.0 | 4.0 | | test.c:591:37:591:38 | 17 | 1.0 | -1.0 | -1.0 | | test.c:591:37:591:38 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:591:37:591:43 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | -| test.c:591:42:591:43 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:591:37:591:43 | ... * ... | 59934.0 | 2.0 | 1.0 | +| test.c:591:42:591:43 | ip | 59934.0 | 2.0 | 4.0 | | test.c:592:23:592:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:592:23:592:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:592:23:592:35 | ... * ... | 1.7254771E7 | 1.0 | 1.0 | -| test.c:592:28:592:35 | (...) | 1.7254771E7 | 1.0 | 1.0 | +| test.c:592:23:592:35 | ... * ... | 29967.5 | 1.0 | 1.0 | +| test.c:592:28:592:35 | (...) | 29967.5 | 1.0 | 1.0 | | test.c:592:29:592:29 | 2 | 1.0 | -1.0 | -1.0 | | test.c:592:29:592:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:592:29:592:34 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | -| test.c:592:33:592:34 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:592:29:592:34 | ... * ... | 29967.5 | 2.0 | 1.0 | +| test.c:592:33:592:34 | ip | 29967.5 | 2.0 | 2.0 | | test.c:593:23:593:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:593:23:593:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:593:23:593:29 | ... * ... | 1.7254771E7 | 2.0 | 1.0 | -| test.c:593:28:593:29 | ip | 1.7254771E7 | 2.0 | 1.0 | +| test.c:593:23:593:29 | ... * ... | 29967.5 | 2.0 | 1.0 | +| test.c:593:28:593:29 | ip | 29967.5 | 2.0 | 2.0 | | test.c:594:17:594:17 | 2 | 1.0 | -1.0 | -1.0 | | test.c:594:17:594:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:594:17:594:22 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:594:17:594:27 | ... * ... | 8627385.0 | 1.0 | 1.0 | -| test.c:594:17:594:47 | ... + ... | 7.4431771938225E13 | 1.0 | 1.0 | -| test.c:594:21:594:22 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:594:17:594:22 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:594:17:594:27 | ... * ... | 39955.0 | 1.0 | 1.0 | +| test.c:594:17:594:47 | ... + ... | 1.596402025E9 | 1.0 | 1.0 | +| test.c:594:21:594:22 | ip | 39955.0 | 2.0 | 4.0 | | test.c:594:26:594:27 | 14 | 1.0 | -1.0 | -1.0 | | test.c:594:26:594:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:594:31:594:42 | (...) | 8627385.0 | 1.0 | 1.0 | -| test.c:594:31:594:47 | ... * ... | 8627385.0 | 1.0 | 1.0 | +| test.c:594:31:594:42 | (...) | 39955.0 | 1.0 | 1.0 | +| test.c:594:31:594:47 | ... * ... | 39955.0 | 1.0 | 1.0 | | test.c:594:32:594:32 | 2 | 1.0 | -1.0 | -1.0 | | test.c:594:32:594:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:594:32:594:37 | ... * ... | 8627385.0 | 2.0 | 1.0 | -| test.c:594:32:594:41 | ... + ... | 8627385.0 | 1.0 | 1.0 | -| test.c:594:36:594:37 | ip | 8627385.0 | 2.0 | 1.0 | +| test.c:594:32:594:37 | ... * ... | 39955.0 | 2.0 | 1.0 | +| test.c:594:32:594:41 | ... + ... | 39955.0 | 1.0 | 1.0 | +| test.c:594:36:594:37 | ip | 39955.0 | 2.0 | 4.0 | | test.c:594:41:594:41 | 1 | 1.0 | -1.0 | -1.0 | | test.c:594:41:594:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:594:46:594:47 | 17 | 1.0 | -1.0 | -1.0 | | test.c:594:46:594:47 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:595:11:616:30 | (...) | 6.08636382738973E71 | 1.0 | 1.0 | +| test.c:595:11:616:30 | (...) | 5.8925295069020155E44 | 1.0 | 1.0 | | test.c:595:12:595:12 | 4 | 1.0 | -1.0 | -1.0 | | test.c:595:12:595:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:595:12:595:29 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | -| test.c:595:12:596:30 | ... + ... | 3.647157187323204E15 | 1.0 | 1.0 | -| test.c:595:12:597:30 | ... + ... | 2.2025801541535236E23 | 1.0 | 1.0 | -| test.c:595:12:603:26 | ... + ... | 3.881087564774641E47 | 1.0 | 1.0 | +| test.c:595:12:595:29 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:595:12:596:30 | ... + ... | 2.5543710976E10 | 1.0 | 1.0 | +| test.c:595:12:597:30 | ... + ... | 4.082498063028224E15 | 1.0 | 1.0 | +| test.c:595:12:603:26 | ... + ... | 1.406298571419582E31 | 1.0 | 1.0 | | test.c:595:12:604:61 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:595:12:616:29 | ... ? ... : ... | 6.08636382738973E71 | 1.0 | 1.0 | -| test.c:595:16:595:29 | (...) | 6.0391698E7 | 1.0 | 1.0 | -| test.c:595:17:595:18 | ip | 6.0391698E7 | 2.0 | 1.0 | -| test.c:595:17:595:23 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:595:17:595:28 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:595:12:616:29 | ... ? ... : ... | 5.8925295069020155E44 | 1.0 | 1.0 | +| test.c:595:16:595:29 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:595:17:595:18 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:595:17:595:23 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:595:17:595:28 | ... + ... | 159824.0 | 1.0 | 1.0 | | test.c:595:22:595:23 | 14 | 1.0 | -1.0 | -1.0 | | test.c:595:22:595:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:595:27:595:28 | 32 | 1.0 | -1.0 | -1.0 | | test.c:595:27:595:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:596:13:596:30 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:596:13:596:30 | (...) | 159824.0 | 1.0 | 1.0 | | test.c:596:14:596:14 | 2 | 1.0 | -1.0 | -1.0 | | test.c:596:14:596:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:596:14:596:19 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:596:14:596:24 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | -| test.c:596:14:596:29 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | -| test.c:596:18:596:19 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:596:14:596:19 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:596:14:596:24 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:596:14:596:29 | ... + ... | 159824.0 | 1.0 | 1.0 | +| test.c:596:18:596:19 | ip | 159824.0 | 2.0 | 4.0 | | test.c:596:23:596:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:596:23:596:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:596:28:596:29 | 32 | 1.0 | -1.0 | -1.0 | | test.c:596:28:596:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:597:13:597:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:597:13:597:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:597:13:597:30 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | -| test.c:597:17:597:30 | (...) | 6.0391698E7 | 1.0 | 1.0 | -| test.c:597:18:597:19 | ip | 6.0391698E7 | 2.0 | 1.0 | -| test.c:597:18:597:24 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:597:18:597:29 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:597:13:597:30 | ... * ... | 159824.0 | 1.0 | 1.0 | +| test.c:597:17:597:30 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:597:18:597:19 | ip | 159824.0 | 2.0 | 4.0 | +| test.c:597:18:597:24 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:597:18:597:29 | ... + ... | 159824.0 | 1.0 | 1.0 | | test.c:597:23:597:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:597:23:597:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:597:28:597:29 | 64 | 1.0 | -1.0 | -1.0 | | test.c:597:28:597:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:598:13:603:26 | (...) | 1.7620641670887053E24 | 1.0 | 1.0 | -| test.c:598:14:598:25 | (...) | 6.0391698E7 | 1.0 | 1.0 | -| test.c:598:14:598:30 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:598:13:603:26 | (...) | 3.444701135697415E15 | 1.0 | 1.0 | +| test.c:598:14:598:25 | (...) | 159824.0 | 1.0 | 1.0 | +| test.c:598:14:598:30 | ... * ... | 159824.0 | 1.0 | 1.0 | | test.c:598:14:599:63 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:598:14:603:25 | ... ? ... : ... | 1.7620641670887053E24 | 1.0 | 1.0 | +| test.c:598:14:603:25 | ... ? ... : ... | 3.444701135697415E15 | 1.0 | 1.0 | | test.c:598:15:598:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:598:15:598:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:598:15:598:20 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:598:15:598:24 | ... + ... | 6.0391698E7 | 1.0 | 1.0 | -| test.c:598:19:598:20 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:598:15:598:20 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:598:15:598:24 | ... + ... | 159824.0 | 1.0 | 1.0 | +| test.c:598:19:598:20 | ip | 159824.0 | 2.0 | 4.0 | | test.c:598:24:598:24 | 1 | 1.0 | -1.0 | -1.0 | | test.c:598:24:598:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:598:29:598:30 | 14 | 1.0 | -1.0 | -1.0 | | test.c:598:29:598:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:599:13:599:63 | (...) | 3.647157187323204E15 | 1.0 | 1.0 | +| test.c:599:13:599:63 | (...) | 6.38600765625E9 | 1.0 | 1.0 | | test.c:599:14:599:15 | 14 | 1.0 | -1.0 | -1.0 | | test.c:599:14:599:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:599:14:599:26 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | +| test.c:599:14:599:26 | ... * ... | 159824.0 | 1.0 | 1.0 | | test.c:599:14:599:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:599:14:599:62 | ... ? ... : ... | 3.647157187323204E15 | 1.0 | 1.0 | -| test.c:599:19:599:26 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:599:14:599:62 | ... ? ... : ... | 6.38600765625E9 | 1.0 | 1.0 | +| test.c:599:19:599:26 | (...) | 159824.0 | 1.0 | 1.0 | | test.c:599:20:599:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:599:20:599:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:599:20:599:25 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:599:24:599:25 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:20:599:25 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:599:24:599:25 | ip | 159824.0 | 2.0 | 4.0 | | test.c:599:30:599:31 | 17 | 1.0 | -1.0 | -1.0 | | test.c:599:30:599:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:599:30:599:36 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:599:35:599:36 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:30:599:36 | ... * ... | 159824.0 | 2.0 | 1.0 | +| test.c:599:35:599:36 | ip | 159824.0 | 2.0 | 4.0 | | test.c:599:40:599:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:599:40:599:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:599:40:599:52 | ... * ... | 6.0391698E7 | 1.0 | 1.0 | -| test.c:599:45:599:52 | (...) | 6.0391698E7 | 1.0 | 1.0 | +| test.c:599:40:599:52 | ... * ... | 79912.5 | 1.0 | 1.0 | +| test.c:599:45:599:52 | (...) | 79912.5 | 1.0 | 1.0 | | test.c:599:46:599:46 | 2 | 1.0 | -1.0 | -1.0 | | test.c:599:46:599:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:599:46:599:51 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:599:50:599:51 | ip | 6.0391698E7 | 2.0 | 1.0 | +| test.c:599:46:599:51 | ... * ... | 79912.5 | 2.0 | 1.0 | +| test.c:599:50:599:51 | ip | 79912.5 | 2.0 | 2.0 | | test.c:599:56:599:57 | 17 | 1.0 | -1.0 | -1.0 | | test.c:599:56:599:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:599:56:599:62 | ... * ... | 6.0391698E7 | 2.0 | 1.0 | -| test.c:599:61:599:62 | ip | 6.0391698E7 | 2.0 | 1.0 | -| test.c:600:17:600:28 | (...) | 1.20783397E8 | 1.0 | 1.0 | -| test.c:600:17:600:33 | ... * ... | 1.20783397E8 | 1.0 | 1.0 | +| test.c:599:56:599:62 | ... * ... | 79912.5 | 2.0 | 1.0 | +| test.c:599:61:599:62 | ip | 79912.5 | 2.0 | 2.0 | +| test.c:600:17:600:28 | (...) | 239737.5 | 1.0 | 1.0 | +| test.c:600:17:600:33 | ... * ... | 239737.5 | 1.0 | 1.0 | | test.c:600:18:600:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:600:18:600:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:600:18:600:23 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | -| test.c:600:18:600:27 | ... + ... | 1.20783397E8 | 1.0 | 1.0 | -| test.c:600:22:600:23 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:600:18:600:23 | ... * ... | 239737.5 | 2.0 | 1.0 | +| test.c:600:18:600:27 | ... + ... | 239737.5 | 1.0 | 1.0 | +| test.c:600:22:600:23 | ip | 239737.5 | 2.0 | 4.0 | | test.c:600:27:600:27 | 1 | 1.0 | -1.0 | -1.0 | | test.c:600:27:600:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:600:32:600:33 | 14 | 1.0 | -1.0 | -1.0 | | test.c:600:32:600:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:601:17:601:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:601:17:601:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:601:17:601:29 | ... * ... | 1.20783397E8 | 1.0 | 1.0 | +| test.c:601:17:601:29 | ... * ... | 239737.5 | 1.0 | 1.0 | | test.c:601:17:601:39 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:601:17:603:25 | ... ? ... : ... | 1.4588628990859608E16 | 1.0 | 1.0 | -| test.c:601:22:601:29 | (...) | 1.20783397E8 | 1.0 | 1.0 | +| test.c:601:17:603:25 | ... ? ... : ... | 1.43686370955625E10 | 1.0 | 1.0 | +| test.c:601:22:601:29 | (...) | 239737.5 | 1.0 | 1.0 | | test.c:601:23:601:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:601:23:601:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:601:23:601:28 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | -| test.c:601:27:601:28 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:601:23:601:28 | ... * ... | 239737.5 | 2.0 | 1.0 | +| test.c:601:27:601:28 | ip | 239737.5 | 2.0 | 4.0 | | test.c:601:33:601:34 | 17 | 1.0 | -1.0 | -1.0 | | test.c:601:33:601:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:601:33:601:39 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | -| test.c:601:38:601:39 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:601:33:601:39 | ... * ... | 239737.5 | 2.0 | 1.0 | +| test.c:601:38:601:39 | ip | 239737.5 | 2.0 | 4.0 | | test.c:602:19:602:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:602:19:602:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:602:19:602:31 | ... * ... | 1.20783397E8 | 1.0 | 1.0 | -| test.c:602:24:602:31 | (...) | 1.20783397E8 | 1.0 | 1.0 | +| test.c:602:19:602:31 | ... * ... | 119869.25 | 1.0 | 1.0 | +| test.c:602:24:602:31 | (...) | 119869.25 | 1.0 | 1.0 | | test.c:602:25:602:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:602:25:602:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:602:25:602:30 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | -| test.c:602:29:602:30 | ip | 1.20783397E8 | 2.0 | 1.0 | +| test.c:602:25:602:30 | ... * ... | 119869.25 | 2.0 | 1.0 | +| test.c:602:29:602:30 | ip | 119869.25 | 2.0 | 2.0 | | test.c:603:19:603:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:603:19:603:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:603:19:603:25 | ... * ... | 1.20783397E8 | 2.0 | 1.0 | -| test.c:603:24:603:25 | ip | 1.20783397E8 | 2.0 | 1.0 | -| test.c:604:11:604:61 | (...) | 1.3129766091773648E17 | 1.0 | 1.0 | +| test.c:603:19:603:25 | ... * ... | 119869.25 | 2.0 | 1.0 | +| test.c:603:24:603:25 | ip | 119869.25 | 2.0 | 2.0 | +| test.c:604:11:604:61 | (...) | 5.747454838225E10 | 1.0 | 1.0 | | test.c:604:12:604:13 | 14 | 1.0 | -1.0 | -1.0 | | test.c:604:12:604:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:604:12:604:18 | ... * ... | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:12:604:18 | ... * ... | 479476.0 | 2.0 | 1.0 | | test.c:604:12:604:34 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:604:12:604:60 | ... ? ... : ... | 1.3129766091773648E17 | 1.0 | 1.0 | -| test.c:604:17:604:18 | ip | 3.62350191E8 | 2.0 | 1.0 | -| test.c:604:22:604:29 | (...) | 3.62350191E8 | 1.0 | 1.0 | -| test.c:604:22:604:34 | ... * ... | 3.62350191E8 | 1.0 | 1.0 | -| test.c:604:23:604:24 | ip | 3.62350191E8 | 2.0 | 1.0 | -| test.c:604:23:604:28 | ... + ... | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:12:604:60 | ... ? ... : ... | 5.747454838225E10 | 1.0 | 1.0 | +| test.c:604:17:604:18 | ip | 479476.0 | 2.0 | 4.0 | +| test.c:604:22:604:29 | (...) | 479476.0 | 1.0 | 1.0 | +| test.c:604:22:604:34 | ... * ... | 479476.0 | 1.0 | 1.0 | +| test.c:604:23:604:24 | ip | 479476.0 | 2.0 | 4.0 | +| test.c:604:23:604:28 | ... + ... | 479476.0 | 2.0 | 1.0 | | test.c:604:28:604:28 | 1 | 1.0 | -1.0 | -1.0 | | test.c:604:28:604:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:604:33:604:34 | 17 | 1.0 | -1.0 | -1.0 | | test.c:604:33:604:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:604:38:604:39 | 17 | 1.0 | -1.0 | -1.0 | | test.c:604:38:604:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:604:38:604:44 | ... * ... | 3.62350191E8 | 2.0 | 1.0 | -| test.c:604:43:604:44 | ip | 3.62350191E8 | 2.0 | 1.0 | -| test.c:604:48:604:55 | (...) | 3.62350191E8 | 1.0 | 1.0 | -| test.c:604:48:604:60 | ... * ... | 3.62350191E8 | 1.0 | 1.0 | -| test.c:604:49:604:50 | ip | 3.62350191E8 | 2.0 | 1.0 | -| test.c:604:49:604:54 | ... + ... | 3.62350191E8 | 2.0 | 1.0 | +| test.c:604:38:604:44 | ... * ... | 239738.5 | 2.0 | 1.0 | +| test.c:604:43:604:44 | ip | 239738.5 | 2.0 | 2.0 | +| test.c:604:48:604:55 | (...) | 239738.5 | 1.0 | 1.0 | +| test.c:604:48:604:60 | ... * ... | 239738.5 | 1.0 | 1.0 | +| test.c:604:49:604:50 | ip | 239738.5 | 2.0 | 2.0 | +| test.c:604:49:604:54 | ... + ... | 239738.5 | 2.0 | 1.0 | | test.c:604:54:604:54 | 1 | 1.0 | -1.0 | -1.0 | | test.c:604:54:604:54 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:604:59:604:60 | 17 | 1.0 | -1.0 | -1.0 | | test.c:604:59:604:60 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:605:15:605:15 | 4 | 1.0 | -1.0 | -1.0 | | test.c:605:15:605:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:605:15:605:32 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:605:15:606:32 | ... + ... | 5.251906436709459E17 | 1.0 | 1.0 | -| test.c:605:15:607:32 | ... + ... | 3.806058600911604E26 | 1.0 | 1.0 | -| test.c:605:15:613:28 | ... + ... | 1.1588865682845433E54 | 1.0 | 1.0 | -| test.c:605:19:605:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | -| test.c:605:20:605:21 | ip | 7.24700382E8 | 2.0 | 1.0 | -| test.c:605:20:605:26 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:605:20:605:31 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:605:15:605:32 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:605:15:606:32 | ... + ... | 2.29898193529E11 | 1.0 | 1.0 | +| test.c:605:15:607:32 | ... + ... | 1.1023089613870434E17 | 1.0 | 1.0 | +| test.c:605:15:613:28 | ... + ... | 1.0252372735148921E34 | 1.0 | 1.0 | +| test.c:605:19:605:32 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:605:20:605:21 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:605:20:605:26 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:605:20:605:31 | ... + ... | 479477.0 | 1.0 | 1.0 | | test.c:605:25:605:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:605:25:605:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:605:30:605:31 | 32 | 1.0 | -1.0 | -1.0 | | test.c:605:30:605:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:606:15:606:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:606:15:606:32 | (...) | 479477.0 | 1.0 | 1.0 | | test.c:606:16:606:16 | 2 | 1.0 | -1.0 | -1.0 | | test.c:606:16:606:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:606:16:606:21 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:606:16:606:26 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:606:16:606:31 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:606:20:606:21 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:606:16:606:21 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:606:16:606:26 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:606:16:606:31 | ... + ... | 479477.0 | 1.0 | 1.0 | +| test.c:606:20:606:21 | ip | 479477.0 | 2.0 | 3.0 | | test.c:606:25:606:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:606:25:606:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:606:30:606:31 | 32 | 1.0 | -1.0 | -1.0 | | test.c:606:30:606:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:607:15:607:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:607:15:607:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:607:15:607:32 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:607:19:607:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | -| test.c:607:20:607:21 | ip | 7.24700382E8 | 2.0 | 1.0 | -| test.c:607:20:607:26 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:607:20:607:31 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:607:15:607:32 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:607:19:607:32 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:607:20:607:21 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:607:20:607:26 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:607:20:607:31 | ... + ... | 479477.0 | 1.0 | 1.0 | | test.c:607:25:607:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:607:25:607:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:607:30:607:31 | 64 | 1.0 | -1.0 | -1.0 | | test.c:607:30:607:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:608:15:613:28 | (...) | 3.044846887031571E27 | 1.0 | 1.0 | -| test.c:608:16:608:27 | (...) | 7.24700382E8 | 1.0 | 1.0 | -| test.c:608:16:608:32 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:608:15:613:28 | (...) | 9.300815918477418E16 | 1.0 | 1.0 | +| test.c:608:16:608:27 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:608:16:608:32 | ... * ... | 479477.0 | 1.0 | 1.0 | | test.c:608:16:609:65 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:608:16:613:27 | ... ? ... : ... | 3.044846887031571E27 | 1.0 | 1.0 | +| test.c:608:16:613:27 | ... ? ... : ... | 9.300815918477418E16 | 1.0 | 1.0 | | test.c:608:17:608:17 | 2 | 1.0 | -1.0 | -1.0 | | test.c:608:17:608:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:608:17:608:22 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:608:17:608:26 | ... + ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:608:21:608:22 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:608:17:608:22 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:608:17:608:26 | ... + ... | 479477.0 | 1.0 | 1.0 | +| test.c:608:21:608:22 | ip | 479477.0 | 2.0 | 3.0 | | test.c:608:26:608:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:608:26:608:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:608:31:608:32 | 14 | 1.0 | -1.0 | -1.0 | | test.c:608:31:608:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:609:15:609:65 | (...) | 5.251906436709459E17 | 1.0 | 1.0 | +| test.c:609:15:609:65 | (...) | 5.7474788121E10 | 1.0 | 1.0 | | test.c:609:16:609:17 | 14 | 1.0 | -1.0 | -1.0 | | test.c:609:16:609:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:609:16:609:28 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | +| test.c:609:16:609:28 | ... * ... | 479477.0 | 1.0 | 1.0 | | test.c:609:16:609:38 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:609:16:609:64 | ... ? ... : ... | 5.251906436709459E17 | 1.0 | 1.0 | -| test.c:609:21:609:28 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:609:16:609:64 | ... ? ... : ... | 5.7474788121E10 | 1.0 | 1.0 | +| test.c:609:21:609:28 | (...) | 479477.0 | 1.0 | 1.0 | | test.c:609:22:609:22 | 2 | 1.0 | -1.0 | -1.0 | | test.c:609:22:609:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:609:22:609:27 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:609:26:609:27 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:22:609:27 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:609:26:609:27 | ip | 479477.0 | 2.0 | 3.0 | | test.c:609:32:609:33 | 17 | 1.0 | -1.0 | -1.0 | | test.c:609:32:609:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:609:32:609:38 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:609:37:609:38 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:32:609:38 | ... * ... | 479477.0 | 2.0 | 1.0 | +| test.c:609:37:609:38 | ip | 479477.0 | 2.0 | 3.0 | | test.c:609:42:609:43 | 17 | 1.0 | -1.0 | -1.0 | | test.c:609:42:609:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:609:42:609:54 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:609:47:609:54 | (...) | 7.24700382E8 | 1.0 | 1.0 | +| test.c:609:42:609:54 | ... * ... | 239739.0 | 1.0 | 1.0 | +| test.c:609:47:609:54 | (...) | 239739.0 | 1.0 | 1.0 | | test.c:609:48:609:48 | 2 | 1.0 | -1.0 | -1.0 | | test.c:609:48:609:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:609:48:609:53 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:609:52:609:53 | ip | 7.24700382E8 | 2.0 | 1.0 | +| test.c:609:48:609:53 | ... * ... | 239739.0 | 2.0 | 1.0 | +| test.c:609:52:609:53 | ip | 239739.0 | 2.0 | 2.0 | | test.c:609:58:609:59 | 17 | 1.0 | -1.0 | -1.0 | | test.c:609:58:609:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:609:58:609:64 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:609:63:609:64 | ip | 7.24700382E8 | 2.0 | 1.0 | -| test.c:610:19:610:30 | (...) | 1.449400765E9 | 1.0 | 1.0 | -| test.c:610:19:610:35 | ... * ... | 1.449400765E9 | 1.0 | 1.0 | +| test.c:609:58:609:64 | ... * ... | 239739.0 | 2.0 | 1.0 | +| test.c:609:63:609:64 | ip | 239739.0 | 2.0 | 2.0 | +| test.c:610:19:610:30 | (...) | 719217.0 | 1.0 | 1.0 | +| test.c:610:19:610:35 | ... * ... | 719217.0 | 1.0 | 1.0 | | test.c:610:20:610:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:610:20:610:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:610:20:610:25 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | -| test.c:610:20:610:29 | ... + ... | 1.449400765E9 | 1.0 | 1.0 | -| test.c:610:24:610:25 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:610:20:610:25 | ... * ... | 719217.0 | 2.0 | 1.0 | +| test.c:610:20:610:29 | ... + ... | 719217.0 | 1.0 | 1.0 | +| test.c:610:24:610:25 | ip | 719217.0 | 2.0 | 4.0 | | test.c:610:29:610:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:610:29:610:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:610:34:610:35 | 14 | 1.0 | -1.0 | -1.0 | | test.c:610:34:610:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:611:19:611:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:611:19:611:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:611:19:611:31 | ... * ... | 1.449400765E9 | 1.0 | 1.0 | +| test.c:611:19:611:31 | ... * ... | 719217.0 | 1.0 | 1.0 | | test.c:611:19:611:41 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:611:19:613:27 | ... ? ... : ... | 2.1007625775825853E18 | 1.0 | 1.0 | -| test.c:611:24:611:31 | (...) | 1.449400765E9 | 1.0 | 1.0 | +| test.c:611:19:613:27 | ... ? ... : ... | 1.29318632881E11 | 1.0 | 1.0 | +| test.c:611:24:611:31 | (...) | 719217.0 | 1.0 | 1.0 | | test.c:611:25:611:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:611:25:611:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:611:25:611:30 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | -| test.c:611:29:611:30 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:611:25:611:30 | ... * ... | 719217.0 | 2.0 | 1.0 | +| test.c:611:29:611:30 | ip | 719217.0 | 2.0 | 4.0 | | test.c:611:35:611:36 | 17 | 1.0 | -1.0 | -1.0 | | test.c:611:35:611:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:611:35:611:41 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | -| test.c:611:40:611:41 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:611:35:611:41 | ... * ... | 719217.0 | 2.0 | 1.0 | +| test.c:611:40:611:41 | ip | 719217.0 | 2.0 | 4.0 | | test.c:612:21:612:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:612:21:612:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:612:21:612:33 | ... * ... | 1.449400765E9 | 1.0 | 1.0 | -| test.c:612:26:612:33 | (...) | 1.449400765E9 | 1.0 | 1.0 | +| test.c:612:21:612:33 | ... * ... | 359609.0 | 1.0 | 1.0 | +| test.c:612:26:612:33 | (...) | 359609.0 | 1.0 | 1.0 | | test.c:612:27:612:27 | 2 | 1.0 | -1.0 | -1.0 | | test.c:612:27:612:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:612:27:612:32 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | -| test.c:612:31:612:32 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:612:27:612:32 | ... * ... | 359609.0 | 2.0 | 1.0 | +| test.c:612:31:612:32 | ip | 359609.0 | 2.0 | 2.0 | | test.c:613:21:613:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:613:21:613:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:613:21:613:27 | ... * ... | 1.449400765E9 | 2.0 | 1.0 | -| test.c:613:26:613:27 | ip | 1.449400765E9 | 2.0 | 1.0 | +| test.c:613:21:613:27 | ... * ... | 359609.0 | 2.0 | 1.0 | +| test.c:613:26:613:27 | ip | 359609.0 | 2.0 | 2.0 | | test.c:614:15:614:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:614:15:614:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:614:15:614:21 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:614:15:614:21 | ... * ... | 479477.0 | 2.0 | 1.0 | | test.c:614:15:614:37 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:614:15:616:29 | ... ? ... : ... | 5.251906436709459E17 | 1.0 | 1.0 | -| test.c:614:20:614:21 | ip | 7.24700382E8 | 2.0 | 1.0 | -| test.c:614:25:614:32 | (...) | 7.24700382E8 | 1.0 | 1.0 | -| test.c:614:25:614:37 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:614:26:614:27 | ip | 7.24700382E8 | 2.0 | 1.0 | -| test.c:614:26:614:31 | ... + ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:614:15:616:29 | ... ? ... : ... | 5.7474788121E10 | 1.0 | 1.0 | +| test.c:614:20:614:21 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:614:25:614:32 | (...) | 479477.0 | 1.0 | 1.0 | +| test.c:614:25:614:37 | ... * ... | 479477.0 | 1.0 | 1.0 | +| test.c:614:26:614:27 | ip | 479477.0 | 2.0 | 3.0 | +| test.c:614:26:614:31 | ... + ... | 479477.0 | 2.0 | 1.0 | | test.c:614:31:614:31 | 1 | 1.0 | -1.0 | -1.0 | | test.c:614:31:614:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:614:36:614:37 | 17 | 1.0 | -1.0 | -1.0 | | test.c:614:36:614:37 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:615:17:615:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:615:17:615:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:615:17:615:23 | ... * ... | 7.24700382E8 | 2.0 | 1.0 | -| test.c:615:22:615:23 | ip | 7.24700382E8 | 2.0 | 1.0 | -| test.c:616:17:616:24 | (...) | 7.24700382E8 | 1.0 | 1.0 | -| test.c:616:17:616:29 | ... * ... | 7.24700382E8 | 1.0 | 1.0 | -| test.c:616:18:616:19 | ip | 7.24700382E8 | 2.0 | 1.0 | -| test.c:616:18:616:23 | ... + ... | 7.24700382E8 | 2.0 | 1.0 | +| test.c:615:17:615:23 | ... * ... | 239739.0 | 2.0 | 1.0 | +| test.c:615:22:615:23 | ip | 239739.0 | 2.0 | 2.0 | +| test.c:616:17:616:24 | (...) | 239739.0 | 1.0 | 1.0 | +| test.c:616:17:616:29 | ... * ... | 239739.0 | 1.0 | 1.0 | +| test.c:616:18:616:19 | ip | 239739.0 | 2.0 | 2.0 | +| test.c:616:18:616:23 | ... + ... | 239739.0 | 2.0 | 1.0 | | test.c:616:23:616:23 | 1 | 1.0 | -1.0 | -1.0 | | test.c:616:23:616:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:616:28:616:29 | 14 | 1.0 | -1.0 | -1.0 | | test.c:616:28:616:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:617:11:617:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:617:11:617:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:617:11:617:28 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:617:11:637:46 | ... + ... | 9.943431528813442E94 | 1.0 | 1.0 | -| test.c:617:15:617:28 | (...) | 5.797603059E9 | 1.0 | 1.0 | -| test.c:617:16:617:17 | ip | 5.797603059E9 | 2.0 | 1.0 | -| test.c:617:16:617:22 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:617:16:617:27 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:617:11:617:28 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:617:11:637:46 | ... + ... | 1.9437781331005143E60 | 1.0 | 1.0 | +| test.c:617:15:617:28 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:617:16:617:17 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:617:16:617:22 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:617:16:617:27 | ... + ... | 1917913.0 | 1.0 | 1.0 | | test.c:617:21:617:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:617:21:617:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:617:26:617:27 | 32 | 1.0 | -1.0 | -1.0 | | test.c:617:26:617:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:618:11:637:46 | (...) | 1.715093535659983E85 | 1.0 | 1.0 | +| test.c:618:11:637:46 | (...) | 1.0134860825806563E54 | 1.0 | 1.0 | | test.c:618:12:618:12 | 4 | 1.0 | -1.0 | -1.0 | | test.c:618:12:618:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:618:12:618:29 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:618:12:619:30 | ... + ... | 3.361220122972616E19 | 1.0 | 1.0 | -| test.c:618:12:620:30 | ... + ... | 1.9487020066918396E29 | 1.0 | 1.0 | -| test.c:618:12:626:26 | ... + ... | 3.0379516094938436E59 | 1.0 | 1.0 | +| test.c:618:12:618:29 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:618:12:619:30 | ... + ... | 3.678390275569E12 | 1.0 | 1.0 | +| test.c:618:12:620:30 | ... + ... | 7.054832528587367E18 | 1.0 | 1.0 | +| test.c:618:12:626:26 | ... + ... | 4.1994090949232005E37 | 1.0 | 1.0 | | test.c:618:12:627:41 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:618:12:637:45 | ... ? ... : ... | 1.715093535659983E85 | 1.0 | 1.0 | -| test.c:618:16:618:29 | (...) | 5.797603059E9 | 1.0 | 1.0 | -| test.c:618:17:618:18 | ip | 5.797603059E9 | 2.0 | 1.0 | -| test.c:618:17:618:23 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:618:17:618:28 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:618:12:637:45 | ... ? ... : ... | 1.0134860825806563E54 | 1.0 | 1.0 | +| test.c:618:16:618:29 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:618:17:618:18 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:618:17:618:23 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:618:17:618:28 | ... + ... | 1917913.0 | 1.0 | 1.0 | | test.c:618:22:618:23 | 14 | 1.0 | -1.0 | -1.0 | | test.c:618:22:618:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:618:27:618:28 | 32 | 1.0 | -1.0 | -1.0 | | test.c:618:27:618:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:619:13:619:30 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:619:13:619:30 | (...) | 1917913.0 | 1.0 | 1.0 | | test.c:619:14:619:14 | 2 | 1.0 | -1.0 | -1.0 | | test.c:619:14:619:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:619:14:619:19 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:619:14:619:24 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:619:14:619:29 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:619:18:619:19 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:619:14:619:19 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:619:14:619:24 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:619:14:619:29 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:619:18:619:19 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:619:23:619:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:619:23:619:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:619:28:619:29 | 32 | 1.0 | -1.0 | -1.0 | | test.c:619:28:619:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:620:13:620:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:620:13:620:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:620:13:620:30 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:620:17:620:30 | (...) | 5.797603059E9 | 1.0 | 1.0 | -| test.c:620:18:620:19 | ip | 5.797603059E9 | 2.0 | 1.0 | -| test.c:620:18:620:24 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:620:18:620:29 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:620:13:620:30 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:620:17:620:30 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:620:18:620:19 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:620:18:620:24 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:620:18:620:29 | ... + ... | 1917913.0 | 1.0 | 1.0 | | test.c:620:23:620:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:620:23:620:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:620:28:620:29 | 64 | 1.0 | -1.0 | -1.0 | | test.c:620:28:620:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:621:13:626:26 | (...) | 1.558961605756818E30 | 1.0 | 1.0 | -| test.c:621:14:621:25 | (...) | 5.797603059E9 | 1.0 | 1.0 | -| test.c:621:14:621:30 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:621:13:626:26 | (...) | 5.952528395119925E18 | 1.0 | 1.0 | +| test.c:621:14:621:25 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:621:14:621:30 | ... * ... | 1917913.0 | 1.0 | 1.0 | | test.c:621:14:622:63 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:621:14:626:25 | ... ? ... : ... | 1.558961605756818E30 | 1.0 | 1.0 | +| test.c:621:14:626:25 | ... ? ... : ... | 5.952528395119925E18 | 1.0 | 1.0 | | test.c:621:15:621:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:621:15:621:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:621:15:621:20 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:621:15:621:24 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:621:19:621:20 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:621:15:621:20 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:621:15:621:24 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:621:19:621:20 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:621:24:621:24 | 1 | 1.0 | -1.0 | -1.0 | | test.c:621:24:621:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:621:29:621:30 | 14 | 1.0 | -1.0 | -1.0 | | test.c:621:29:621:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:622:13:622:63 | (...) | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:622:13:622:63 | (...) | 9.19598527849E11 | 1.0 | 1.0 | | test.c:622:14:622:15 | 14 | 1.0 | -1.0 | -1.0 | | test.c:622:14:622:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:622:14:622:26 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:622:14:622:26 | ... * ... | 1917913.0 | 1.0 | 1.0 | | test.c:622:14:622:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:622:14:622:62 | ... ? ... : ... | 3.361220122972616E19 | 1.0 | 1.0 | -| test.c:622:19:622:26 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:622:14:622:62 | ... ? ... : ... | 9.19598527849E11 | 1.0 | 1.0 | +| test.c:622:19:622:26 | (...) | 1917913.0 | 1.0 | 1.0 | | test.c:622:20:622:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:622:20:622:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:622:20:622:25 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:622:24:622:25 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:20:622:25 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:622:24:622:25 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:622:30:622:31 | 17 | 1.0 | -1.0 | -1.0 | | test.c:622:30:622:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:622:30:622:36 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:622:35:622:36 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:30:622:36 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:622:35:622:36 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:622:40:622:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:622:40:622:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:622:40:622:52 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:622:45:622:52 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:622:40:622:52 | ... * ... | 958957.0 | 1.0 | 1.0 | +| test.c:622:45:622:52 | (...) | 958957.0 | 1.0 | 1.0 | | test.c:622:46:622:46 | 2 | 1.0 | -1.0 | -1.0 | | test.c:622:46:622:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:622:46:622:51 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:622:50:622:51 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:622:46:622:51 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:622:50:622:51 | ip | 958957.0 | 2.0 | 2.0 | | test.c:622:56:622:57 | 17 | 1.0 | -1.0 | -1.0 | | test.c:622:56:622:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:622:56:622:62 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:622:61:622:62 | ip | 5.797603059E9 | 2.0 | 1.0 | -| test.c:623:17:623:28 | (...) | 1.1595206119E10 | 1.0 | 1.0 | -| test.c:623:17:623:33 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:622:56:622:62 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:622:61:622:62 | ip | 958957.0 | 2.0 | 2.0 | +| test.c:623:17:623:28 | (...) | 2876871.0 | 1.0 | 1.0 | +| test.c:623:17:623:33 | ... * ... | 2876871.0 | 1.0 | 1.0 | | test.c:623:18:623:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:623:18:623:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:623:18:623:23 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:623:18:623:27 | ... + ... | 1.1595206119E10 | 1.0 | 1.0 | -| test.c:623:22:623:23 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:623:18:623:23 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:623:18:623:27 | ... + ... | 2876871.0 | 1.0 | 1.0 | +| test.c:623:22:623:23 | ip | 2876871.0 | 2.0 | 4.0 | | test.c:623:27:623:27 | 1 | 1.0 | -1.0 | -1.0 | | test.c:623:27:623:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:623:32:623:33 | 14 | 1.0 | -1.0 | -1.0 | | test.c:623:32:623:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:624:17:624:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:624:17:624:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:624:17:624:29 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:624:17:624:29 | ... * ... | 2876871.0 | 1.0 | 1.0 | | test.c:624:17:624:39 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:624:17:626:25 | ... ? ... : ... | 1.3444880494209504E20 | 1.0 | 1.0 | -| test.c:624:22:624:29 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:624:17:626:25 | ... ? ... : ... | 2.069098126096E12 | 1.0 | 1.0 | +| test.c:624:22:624:29 | (...) | 2876871.0 | 1.0 | 1.0 | | test.c:624:23:624:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:624:23:624:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:624:23:624:28 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:624:27:624:28 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:624:23:624:28 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:624:27:624:28 | ip | 2876871.0 | 2.0 | 4.0 | | test.c:624:33:624:34 | 17 | 1.0 | -1.0 | -1.0 | | test.c:624:33:624:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:624:33:624:39 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:624:38:624:39 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:624:33:624:39 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:624:38:624:39 | ip | 2876871.0 | 2.0 | 4.0 | | test.c:625:19:625:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:625:19:625:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:625:19:625:31 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | -| test.c:625:24:625:31 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:625:19:625:31 | ... * ... | 1438436.0 | 1.0 | 1.0 | +| test.c:625:24:625:31 | (...) | 1438436.0 | 1.0 | 1.0 | | test.c:625:25:625:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:625:25:625:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:625:25:625:30 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:625:29:625:30 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:625:25:625:30 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:625:29:625:30 | ip | 1438436.0 | 2.0 | 2.0 | | test.c:626:19:626:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:626:19:626:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:626:19:626:25 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:626:24:626:25 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:626:19:626:25 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:626:24:626:25 | ip | 1438436.0 | 2.0 | 2.0 | | test.c:627:11:627:11 | 2 | 1.0 | -1.0 | -1.0 | | test.c:627:11:627:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:627:11:627:16 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:627:11:627:21 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:627:11:627:41 | ... + ... | 1.2100392444788552E21 | 1.0 | 1.0 | -| test.c:627:15:627:16 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:627:11:627:16 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:627:11:627:21 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:627:11:627:41 | ... + ... | 3.3105558510049E13 | 1.0 | 1.0 | +| test.c:627:15:627:16 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:627:20:627:21 | 14 | 1.0 | -1.0 | -1.0 | | test.c:627:20:627:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:627:25:627:36 | (...) | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:627:25:627:41 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:627:25:627:36 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:627:25:627:41 | ... * ... | 5753743.0 | 1.0 | 1.0 | | test.c:627:26:627:26 | 2 | 1.0 | -1.0 | -1.0 | | test.c:627:26:627:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:627:26:627:31 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:627:26:627:35 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:627:30:627:31 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:627:26:627:31 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:627:26:627:35 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:627:30:627:31 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:627:35:627:35 | 1 | 1.0 | -1.0 | -1.0 | | test.c:627:35:627:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:627:40:627:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:627:40:627:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:628:15:628:15 | 4 | 1.0 | -1.0 | -1.0 | | test.c:628:15:628:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:628:15:628:32 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:628:15:629:32 | ... + ... | 1.2100392444788552E21 | 1.0 | 1.0 | -| test.c:628:15:630:32 | ... + ... | 4.209196335543408E31 | 1.0 | 1.0 | -| test.c:628:15:636:28 | ... + ... | 1.417386703353284E64 | 1.0 | 1.0 | -| test.c:628:19:628:32 | (...) | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:628:20:628:21 | ip | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:628:20:628:26 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:628:20:628:31 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:628:15:628:32 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:628:15:629:32 | ... + ... | 3.3105558510049E13 | 1.0 | 1.0 | +| test.c:628:15:630:32 | ... + ... | 1.9048087553828487E20 | 1.0 | 1.0 | +| test.c:628:15:636:28 | ... + ... | 3.0613773885524947E40 | 1.0 | 1.0 | +| test.c:628:19:628:32 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:628:20:628:21 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:628:20:628:26 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:628:20:628:31 | ... + ... | 5753743.0 | 1.0 | 1.0 | | test.c:628:25:628:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:628:25:628:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:628:30:628:31 | 32 | 1.0 | -1.0 | -1.0 | | test.c:628:30:628:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:629:15:629:32 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:629:15:629:32 | (...) | 5753743.0 | 1.0 | 1.0 | | test.c:629:16:629:16 | 2 | 1.0 | -1.0 | -1.0 | | test.c:629:16:629:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:629:16:629:21 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:629:16:629:26 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:629:16:629:31 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:629:20:629:21 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:629:16:629:21 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:629:16:629:26 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:629:16:629:31 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:629:20:629:21 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:629:25:629:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:629:25:629:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:629:30:629:31 | 32 | 1.0 | -1.0 | -1.0 | | test.c:629:30:629:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:630:15:630:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:630:15:630:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:630:15:630:32 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:630:19:630:32 | (...) | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:630:20:630:21 | ip | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:630:20:630:26 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:630:20:630:31 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:630:15:630:32 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:630:19:630:32 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:630:20:630:21 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:630:20:630:26 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:630:20:630:31 | ... + ... | 5753743.0 | 1.0 | 1.0 | | test.c:630:25:630:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:630:25:630:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:630:30:630:31 | 64 | 1.0 | -1.0 | -1.0 | | test.c:630:30:630:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:631:15:636:28 | (...) | 3.367357068579931E32 | 1.0 | 1.0 | -| test.c:631:16:631:27 | (...) | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:631:16:631:32 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:631:15:636:28 | (...) | 1.607183597776558E20 | 1.0 | 1.0 | +| test.c:631:16:631:27 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:631:16:631:32 | ... * ... | 5753743.0 | 1.0 | 1.0 | | test.c:631:16:632:65 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:631:16:636:27 | ... ? ... : ... | 3.367357068579931E32 | 1.0 | 1.0 | +| test.c:631:16:636:27 | ... ? ... : ... | 1.607183597776558E20 | 1.0 | 1.0 | | test.c:631:17:631:17 | 2 | 1.0 | -1.0 | -1.0 | | test.c:631:17:631:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:631:17:631:22 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:631:17:631:26 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:631:21:631:22 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:631:17:631:22 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:631:17:631:26 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:631:21:631:22 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:631:26:631:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:631:26:631:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:631:31:631:32 | 14 | 1.0 | -1.0 | -1.0 | | test.c:631:31:631:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:632:15:632:65 | (...) | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:632:15:632:65 | (...) | 8.276392504384E12 | 1.0 | 1.0 | | test.c:632:16:632:17 | 14 | 1.0 | -1.0 | -1.0 | | test.c:632:16:632:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:632:16:632:28 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:632:16:632:28 | ... * ... | 5753743.0 | 1.0 | 1.0 | | test.c:632:16:632:38 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:632:16:632:64 | ... ? ... : ... | 1.2100392444788552E21 | 1.0 | 1.0 | -| test.c:632:21:632:28 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:632:16:632:64 | ... ? ... : ... | 8.276392504384E12 | 1.0 | 1.0 | +| test.c:632:21:632:28 | (...) | 5753743.0 | 1.0 | 1.0 | | test.c:632:22:632:22 | 2 | 1.0 | -1.0 | -1.0 | | test.c:632:22:632:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:632:22:632:27 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:632:26:632:27 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:22:632:27 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:632:26:632:27 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:632:32:632:33 | 17 | 1.0 | -1.0 | -1.0 | | test.c:632:32:632:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:632:32:632:38 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:632:37:632:38 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:32:632:38 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:632:37:632:38 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:632:42:632:43 | 17 | 1.0 | -1.0 | -1.0 | | test.c:632:42:632:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:632:42:632:54 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:632:47:632:54 | (...) | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:632:42:632:54 | ... * ... | 2876872.0 | 1.0 | 1.0 | +| test.c:632:47:632:54 | (...) | 2876872.0 | 1.0 | 1.0 | | test.c:632:48:632:48 | 2 | 1.0 | -1.0 | -1.0 | | test.c:632:48:632:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:632:48:632:53 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:632:52:632:53 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:632:48:632:53 | ... * ... | 2876872.0 | 2.0 | 1.0 | +| test.c:632:52:632:53 | ip | 2876872.0 | 2.0 | 2.0 | | test.c:632:58:632:59 | 17 | 1.0 | -1.0 | -1.0 | | test.c:632:58:632:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:632:58:632:64 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:632:63:632:64 | ip | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:633:19:633:30 | (...) | 6.9571236715E10 | 1.0 | 1.0 | -| test.c:633:19:633:35 | ... * ... | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:632:58:632:64 | ... * ... | 2876872.0 | 2.0 | 1.0 | +| test.c:632:63:632:64 | ip | 2876872.0 | 2.0 | 2.0 | +| test.c:633:19:633:30 | (...) | 8630616.0 | 1.0 | 1.0 | +| test.c:633:19:633:35 | ... * ... | 8630616.0 | 1.0 | 1.0 | | test.c:633:20:633:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:633:20:633:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:633:20:633:25 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | -| test.c:633:20:633:29 | ... + ... | 6.9571236715E10 | 1.0 | 1.0 | -| test.c:633:24:633:25 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:633:20:633:25 | ... * ... | 8630616.0 | 2.0 | 1.0 | +| test.c:633:20:633:29 | ... + ... | 8630616.0 | 1.0 | 1.0 | +| test.c:633:24:633:25 | ip | 8630616.0 | 2.0 | 4.0 | | test.c:633:29:633:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:633:29:633:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:633:34:633:35 | 14 | 1.0 | -1.0 | -1.0 | | test.c:633:34:633:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:634:19:634:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:634:19:634:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:634:19:634:31 | ... * ... | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:634:19:634:31 | ... * ... | 8630616.0 | 1.0 | 1.0 | | test.c:634:19:634:41 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:634:19:636:27 | ... ? ... : ... | 4.840156978054564E21 | 1.0 | 1.0 | -| test.c:634:24:634:31 | (...) | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:634:19:636:27 | ... ? ... : ... | 1.862188745017225E13 | 1.0 | 1.0 | +| test.c:634:24:634:31 | (...) | 8630616.0 | 1.0 | 1.0 | | test.c:634:25:634:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:634:25:634:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:634:25:634:30 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | -| test.c:634:29:634:30 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:634:25:634:30 | ... * ... | 8630616.0 | 2.0 | 1.0 | +| test.c:634:29:634:30 | ip | 8630616.0 | 2.0 | 4.0 | | test.c:634:35:634:36 | 17 | 1.0 | -1.0 | -1.0 | | test.c:634:35:634:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:634:35:634:41 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | -| test.c:634:40:634:41 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:634:35:634:41 | ... * ... | 8630616.0 | 2.0 | 1.0 | +| test.c:634:40:634:41 | ip | 8630616.0 | 2.0 | 4.0 | | test.c:635:21:635:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:635:21:635:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:635:21:635:33 | ... * ... | 6.9571236715E10 | 1.0 | 1.0 | -| test.c:635:26:635:33 | (...) | 6.9571236715E10 | 1.0 | 1.0 | +| test.c:635:21:635:33 | ... * ... | 4315308.5 | 1.0 | 1.0 | +| test.c:635:26:635:33 | (...) | 4315308.5 | 1.0 | 1.0 | | test.c:635:27:635:27 | 2 | 1.0 | -1.0 | -1.0 | | test.c:635:27:635:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:635:27:635:32 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | -| test.c:635:31:635:32 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:635:27:635:32 | ... * ... | 4315308.5 | 2.0 | 1.0 | +| test.c:635:31:635:32 | ip | 4315308.5 | 2.0 | 2.0 | | test.c:636:21:636:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:636:21:636:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:636:21:636:27 | ... * ... | 6.9571236715E10 | 2.0 | 1.0 | -| test.c:636:26:636:27 | ip | 6.9571236715E10 | 2.0 | 1.0 | +| test.c:636:21:636:27 | ... * ... | 4315308.5 | 2.0 | 1.0 | +| test.c:636:26:636:27 | ip | 4315308.5 | 2.0 | 2.0 | | test.c:637:15:637:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:637:15:637:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:637:15:637:20 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:637:15:637:25 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:637:15:637:45 | ... + ... | 1.2100392444788552E21 | 1.0 | 1.0 | -| test.c:637:19:637:20 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:637:15:637:20 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:637:15:637:25 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:637:15:637:45 | ... + ... | 3.3105558510049E13 | 1.0 | 1.0 | +| test.c:637:19:637:20 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:637:24:637:25 | 14 | 1.0 | -1.0 | -1.0 | | test.c:637:24:637:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:637:29:637:40 | (...) | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:637:29:637:45 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | +| test.c:637:29:637:40 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:637:29:637:45 | ... * ... | 5753743.0 | 1.0 | 1.0 | | test.c:637:30:637:30 | 2 | 1.0 | -1.0 | -1.0 | | test.c:637:30:637:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:637:30:637:35 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:637:30:637:39 | ... + ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:637:34:637:35 | ip | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:637:30:637:35 | ... * ... | 5753743.0 | 2.0 | 1.0 | +| test.c:637:30:637:39 | ... + ... | 5753743.0 | 1.0 | 1.0 | +| test.c:637:34:637:35 | ip | 5753743.0 | 2.0 | 4.0 | | test.c:637:39:637:39 | 1 | 1.0 | -1.0 | -1.0 | | test.c:637:39:637:39 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:637:44:637:45 | 17 | 1.0 | -1.0 | -1.0 | | test.c:637:44:637:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:638:11:638:11 | 4 | 1.0 | -1.0 | -1.0 | | test.c:638:11:638:11 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:638:11:638:28 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:638:11:639:32 | ... + ... | 3.361220122972616E19 | 1.0 | 1.0 | -| test.c:638:11:640:32 | ... + ... | 1.9487020066918396E29 | 1.0 | 1.0 | -| test.c:638:11:646:28 | ... + ... | 3.0379516094938436E59 | 1.0 | 1.0 | +| test.c:638:11:638:28 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:638:11:639:32 | ... + ... | 3.678390275569E12 | 1.0 | 1.0 | +| test.c:638:11:640:32 | ... + ... | 7.054832528587367E18 | 1.0 | 1.0 | +| test.c:638:11:646:28 | ... + ... | 4.1994090949232005E37 | 1.0 | 1.0 | | test.c:638:11:647:63 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:638:11:659:27 | ... ? ... : ... | 4.390639451194891E87 | 1.0 | 1.0 | -| test.c:638:15:638:28 | (...) | 5.797603059E9 | 1.0 | 1.0 | -| test.c:638:16:638:17 | ip | 5.797603059E9 | 2.0 | 1.0 | -| test.c:638:16:638:22 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:638:16:638:27 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:638:11:659:27 | ... ? ... : ... | 2.5337196100492797E53 | 1.0 | 1.0 | +| test.c:638:15:638:28 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:638:16:638:17 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:638:16:638:22 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:638:16:638:27 | ... + ... | 1917913.0 | 1.0 | 1.0 | | test.c:638:21:638:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:638:21:638:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:638:26:638:27 | 32 | 1.0 | -1.0 | -1.0 | | test.c:638:26:638:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:639:15:639:32 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:639:15:639:32 | (...) | 1917913.0 | 1.0 | 1.0 | | test.c:639:16:639:16 | 2 | 1.0 | -1.0 | -1.0 | | test.c:639:16:639:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:639:16:639:21 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:639:16:639:26 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:639:16:639:31 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:639:20:639:21 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:639:16:639:21 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:639:16:639:26 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:639:16:639:31 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:639:20:639:21 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:639:25:639:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:639:25:639:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:639:30:639:31 | 32 | 1.0 | -1.0 | -1.0 | | test.c:639:30:639:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:640:15:640:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:640:15:640:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:640:15:640:32 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:640:19:640:32 | (...) | 5.797603059E9 | 1.0 | 1.0 | -| test.c:640:20:640:21 | ip | 5.797603059E9 | 2.0 | 1.0 | -| test.c:640:20:640:26 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:640:20:640:31 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:640:15:640:32 | ... * ... | 1917913.0 | 1.0 | 1.0 | +| test.c:640:19:640:32 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:640:20:640:21 | ip | 1917913.0 | 2.0 | 6.0 | +| test.c:640:20:640:26 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:640:20:640:31 | ... + ... | 1917913.0 | 1.0 | 1.0 | | test.c:640:25:640:26 | 14 | 1.0 | -1.0 | -1.0 | | test.c:640:25:640:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:640:30:640:31 | 64 | 1.0 | -1.0 | -1.0 | | test.c:640:30:640:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:641:15:646:28 | (...) | 1.558961605756818E30 | 1.0 | 1.0 | -| test.c:641:16:641:27 | (...) | 5.797603059E9 | 1.0 | 1.0 | -| test.c:641:16:641:32 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:641:15:646:28 | (...) | 5.952528395119925E18 | 1.0 | 1.0 | +| test.c:641:16:641:27 | (...) | 1917913.0 | 1.0 | 1.0 | +| test.c:641:16:641:32 | ... * ... | 1917913.0 | 1.0 | 1.0 | | test.c:641:16:642:65 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:641:16:646:27 | ... ? ... : ... | 1.558961605756818E30 | 1.0 | 1.0 | +| test.c:641:16:646:27 | ... ? ... : ... | 5.952528395119925E18 | 1.0 | 1.0 | | test.c:641:17:641:17 | 2 | 1.0 | -1.0 | -1.0 | | test.c:641:17:641:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:641:17:641:22 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:641:17:641:26 | ... + ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:641:21:641:22 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:641:17:641:22 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:641:17:641:26 | ... + ... | 1917913.0 | 1.0 | 1.0 | +| test.c:641:21:641:22 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:641:26:641:26 | 1 | 1.0 | -1.0 | -1.0 | | test.c:641:26:641:26 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:641:31:641:32 | 14 | 1.0 | -1.0 | -1.0 | | test.c:641:31:641:32 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:642:15:642:65 | (...) | 3.361220122972616E19 | 1.0 | 1.0 | +| test.c:642:15:642:65 | (...) | 9.19598527849E11 | 1.0 | 1.0 | | test.c:642:16:642:17 | 14 | 1.0 | -1.0 | -1.0 | | test.c:642:16:642:17 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:642:16:642:28 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | +| test.c:642:16:642:28 | ... * ... | 1917913.0 | 1.0 | 1.0 | | test.c:642:16:642:38 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:642:16:642:64 | ... ? ... : ... | 3.361220122972616E19 | 1.0 | 1.0 | -| test.c:642:21:642:28 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:642:16:642:64 | ... ? ... : ... | 9.19598527849E11 | 1.0 | 1.0 | +| test.c:642:21:642:28 | (...) | 1917913.0 | 1.0 | 1.0 | | test.c:642:22:642:22 | 2 | 1.0 | -1.0 | -1.0 | | test.c:642:22:642:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:642:22:642:27 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:642:26:642:27 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:22:642:27 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:642:26:642:27 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:642:32:642:33 | 17 | 1.0 | -1.0 | -1.0 | | test.c:642:32:642:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:642:32:642:38 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:642:37:642:38 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:32:642:38 | ... * ... | 1917913.0 | 2.0 | 1.0 | +| test.c:642:37:642:38 | ip | 1917913.0 | 2.0 | 6.0 | | test.c:642:42:642:43 | 17 | 1.0 | -1.0 | -1.0 | | test.c:642:42:642:43 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:642:42:642:54 | ... * ... | 5.797603059E9 | 1.0 | 1.0 | -| test.c:642:47:642:54 | (...) | 5.797603059E9 | 1.0 | 1.0 | +| test.c:642:42:642:54 | ... * ... | 958957.0 | 1.0 | 1.0 | +| test.c:642:47:642:54 | (...) | 958957.0 | 1.0 | 1.0 | | test.c:642:48:642:48 | 2 | 1.0 | -1.0 | -1.0 | | test.c:642:48:642:48 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:642:48:642:53 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:642:52:642:53 | ip | 5.797603059E9 | 2.0 | 1.0 | +| test.c:642:48:642:53 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:642:52:642:53 | ip | 958957.0 | 2.0 | 2.0 | | test.c:642:58:642:59 | 17 | 1.0 | -1.0 | -1.0 | | test.c:642:58:642:59 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:642:58:642:64 | ... * ... | 5.797603059E9 | 2.0 | 1.0 | -| test.c:642:63:642:64 | ip | 5.797603059E9 | 2.0 | 1.0 | -| test.c:643:19:643:30 | (...) | 1.1595206119E10 | 1.0 | 1.0 | -| test.c:643:19:643:35 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:642:58:642:64 | ... * ... | 958957.0 | 2.0 | 1.0 | +| test.c:642:63:642:64 | ip | 958957.0 | 2.0 | 2.0 | +| test.c:643:19:643:30 | (...) | 2876871.0 | 1.0 | 1.0 | +| test.c:643:19:643:35 | ... * ... | 2876871.0 | 1.0 | 1.0 | | test.c:643:20:643:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:643:20:643:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:643:20:643:25 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:643:20:643:29 | ... + ... | 1.1595206119E10 | 1.0 | 1.0 | -| test.c:643:24:643:25 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:643:20:643:25 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:643:20:643:29 | ... + ... | 2876871.0 | 1.0 | 1.0 | +| test.c:643:24:643:25 | ip | 2876871.0 | 2.0 | 4.0 | | test.c:643:29:643:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:643:29:643:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:643:34:643:35 | 14 | 1.0 | -1.0 | -1.0 | | test.c:643:34:643:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:644:19:644:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:644:19:644:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:644:19:644:31 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:644:19:644:31 | ... * ... | 2876871.0 | 1.0 | 1.0 | | test.c:644:19:644:41 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:644:19:646:27 | ... ? ... : ... | 1.3444880494209504E20 | 1.0 | 1.0 | -| test.c:644:24:644:31 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:644:19:646:27 | ... ? ... : ... | 2.069098126096E12 | 1.0 | 1.0 | +| test.c:644:24:644:31 | (...) | 2876871.0 | 1.0 | 1.0 | | test.c:644:25:644:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:644:25:644:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:644:25:644:30 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:644:29:644:30 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:644:25:644:30 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:644:29:644:30 | ip | 2876871.0 | 2.0 | 4.0 | | test.c:644:35:644:36 | 17 | 1.0 | -1.0 | -1.0 | | test.c:644:35:644:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:644:35:644:41 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:644:40:644:41 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:644:35:644:41 | ... * ... | 2876871.0 | 2.0 | 1.0 | +| test.c:644:40:644:41 | ip | 2876871.0 | 2.0 | 4.0 | | test.c:645:21:645:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:645:21:645:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:645:21:645:33 | ... * ... | 1.1595206119E10 | 1.0 | 1.0 | -| test.c:645:26:645:33 | (...) | 1.1595206119E10 | 1.0 | 1.0 | +| test.c:645:21:645:33 | ... * ... | 1438436.0 | 1.0 | 1.0 | +| test.c:645:26:645:33 | (...) | 1438436.0 | 1.0 | 1.0 | | test.c:645:27:645:27 | 2 | 1.0 | -1.0 | -1.0 | | test.c:645:27:645:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:645:27:645:32 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:645:31:645:32 | ip | 1.1595206119E10 | 2.0 | 1.0 | +| test.c:645:27:645:32 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:645:31:645:32 | ip | 1438436.0 | 2.0 | 2.0 | | test.c:646:21:646:22 | 14 | 1.0 | -1.0 | -1.0 | | test.c:646:21:646:22 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:646:21:646:27 | ... * ... | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:646:26:646:27 | ip | 1.1595206119E10 | 2.0 | 1.0 | -| test.c:647:13:647:63 | (...) | 1.2100392444788552E21 | 1.0 | 1.0 | +| test.c:646:21:646:27 | ... * ... | 1438436.0 | 2.0 | 1.0 | +| test.c:646:26:646:27 | ip | 1438436.0 | 2.0 | 2.0 | +| test.c:647:13:647:63 | (...) | 8.276392504384E12 | 1.0 | 1.0 | | test.c:647:14:647:15 | 14 | 1.0 | -1.0 | -1.0 | | test.c:647:14:647:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:647:14:647:20 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:14:647:20 | ... * ... | 5753743.0 | 2.0 | 1.0 | | test.c:647:14:647:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:647:14:647:62 | ... ? ... : ... | 1.2100392444788552E21 | 1.0 | 1.0 | -| test.c:647:19:647:20 | ip | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:647:24:647:31 | (...) | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:647:24:647:36 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:647:25:647:26 | ip | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:647:25:647:30 | ... + ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:14:647:62 | ... ? ... : ... | 8.276392504384E12 | 1.0 | 1.0 | +| test.c:647:19:647:20 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:647:24:647:31 | (...) | 5753743.0 | 1.0 | 1.0 | +| test.c:647:24:647:36 | ... * ... | 5753743.0 | 1.0 | 1.0 | +| test.c:647:25:647:26 | ip | 5753743.0 | 2.0 | 4.0 | +| test.c:647:25:647:30 | ... + ... | 5753743.0 | 2.0 | 1.0 | | test.c:647:30:647:30 | 1 | 1.0 | -1.0 | -1.0 | | test.c:647:30:647:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:647:35:647:36 | 17 | 1.0 | -1.0 | -1.0 | | test.c:647:35:647:36 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:647:40:647:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:647:40:647:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:647:40:647:46 | ... * ... | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:647:45:647:46 | ip | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:647:50:647:57 | (...) | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:647:50:647:62 | ... * ... | 3.4785618357E10 | 1.0 | 1.0 | -| test.c:647:51:647:52 | ip | 3.4785618357E10 | 2.0 | 1.0 | -| test.c:647:51:647:56 | ... + ... | 3.4785618357E10 | 2.0 | 1.0 | +| test.c:647:40:647:46 | ... * ... | 2876872.0 | 2.0 | 1.0 | +| test.c:647:45:647:46 | ip | 2876872.0 | 2.0 | 2.0 | +| test.c:647:50:647:57 | (...) | 2876872.0 | 1.0 | 1.0 | +| test.c:647:50:647:62 | ... * ... | 2876872.0 | 1.0 | 1.0 | +| test.c:647:51:647:52 | ip | 2876872.0 | 2.0 | 2.0 | +| test.c:647:51:647:56 | ... + ... | 2876872.0 | 2.0 | 1.0 | | test.c:647:56:647:56 | 1 | 1.0 | -1.0 | -1.0 | | test.c:647:56:647:56 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:647:61:647:62 | 17 | 1.0 | -1.0 | -1.0 | | test.c:647:61:647:62 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:648:13:648:13 | 4 | 1.0 | -1.0 | -1.0 | | test.c:648:13:648:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:648:13:648:30 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:648:13:649:30 | ... + ... | 4.840156977915421E21 | 1.0 | 1.0 | -| test.c:648:13:650:30 | ... + ... | 3.3673570684347266E32 | 1.0 | 1.0 | -| test.c:648:13:656:26 | ... + ... | 9.071274901265435E65 | 1.0 | 1.0 | -| test.c:648:17:648:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:648:18:648:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:648:18:648:24 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:648:18:648:29 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:648:13:648:30 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:648:13:649:30 | ... + ... | 3.3105570017536E13 | 1.0 | 1.0 | +| test.c:648:13:650:30 | ... + ... | 1.9048097485497765E20 | 1.0 | 1.0 | +| test.c:648:13:656:26 | ... + ... | 3.0613805809561187E40 | 1.0 | 1.0 | +| test.c:648:17:648:30 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:648:18:648:19 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:648:18:648:24 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:648:18:648:29 | ... + ... | 5753744.0 | 1.0 | 1.0 | | test.c:648:23:648:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:648:23:648:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:648:28:648:29 | 32 | 1.0 | -1.0 | -1.0 | | test.c:648:28:648:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:649:13:649:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:649:13:649:30 | (...) | 5753744.0 | 1.0 | 1.0 | | test.c:649:14:649:14 | 2 | 1.0 | -1.0 | -1.0 | | test.c:649:14:649:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:649:14:649:19 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:649:14:649:24 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:649:14:649:29 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:649:18:649:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:649:14:649:19 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:649:14:649:24 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:649:14:649:29 | ... + ... | 5753744.0 | 1.0 | 1.0 | +| test.c:649:18:649:19 | ip | 5753744.0 | 2.0 | 3.0 | | test.c:649:23:649:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:649:23:649:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:649:28:649:29 | 32 | 1.0 | -1.0 | -1.0 | | test.c:649:28:649:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:650:13:650:13 | 2 | 1.0 | -1.0 | -1.0 | | test.c:650:13:650:13 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:650:13:650:30 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:650:17:650:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:650:18:650:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:650:18:650:24 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:650:18:650:29 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:650:13:650:30 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:650:17:650:30 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:650:18:650:19 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:650:18:650:24 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:650:18:650:29 | ... + ... | 5753744.0 | 1.0 | 1.0 | | test.c:650:23:650:24 | 14 | 1.0 | -1.0 | -1.0 | | test.c:650:23:650:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:650:28:650:29 | 64 | 1.0 | -1.0 | -1.0 | | test.c:650:28:650:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:651:13:656:26 | (...) | 2.693885654805863E33 | 1.0 | 1.0 | -| test.c:651:14:651:25 | (...) | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:651:14:651:30 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:651:13:656:26 | (...) | 1.6071844357615744E20 | 1.0 | 1.0 | +| test.c:651:14:651:25 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:651:14:651:30 | ... * ... | 5753744.0 | 1.0 | 1.0 | | test.c:651:14:652:63 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:651:14:656:25 | ... ? ... : ... | 2.693885654805863E33 | 1.0 | 1.0 | +| test.c:651:14:656:25 | ... ? ... : ... | 1.6071844357615744E20 | 1.0 | 1.0 | | test.c:651:15:651:15 | 2 | 1.0 | -1.0 | -1.0 | | test.c:651:15:651:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:651:15:651:20 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:651:15:651:24 | ... + ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:651:19:651:20 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:651:15:651:20 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:651:15:651:24 | ... + ... | 5753744.0 | 1.0 | 1.0 | +| test.c:651:19:651:20 | ip | 5753744.0 | 2.0 | 3.0 | | test.c:651:24:651:24 | 1 | 1.0 | -1.0 | -1.0 | | test.c:651:24:651:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:651:29:651:30 | 14 | 1.0 | -1.0 | -1.0 | | test.c:651:29:651:30 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:652:13:652:63 | (...) | 4.840156977915421E21 | 1.0 | 1.0 | +| test.c:652:13:652:63 | (...) | 8.27639538125625E12 | 1.0 | 1.0 | | test.c:652:14:652:15 | 14 | 1.0 | -1.0 | -1.0 | | test.c:652:14:652:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:652:14:652:26 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:652:14:652:26 | ... * ... | 5753744.0 | 1.0 | 1.0 | | test.c:652:14:652:36 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:652:14:652:62 | ... ? ... : ... | 4.840156977915421E21 | 1.0 | 1.0 | -| test.c:652:19:652:26 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:652:14:652:62 | ... ? ... : ... | 8.27639538125625E12 | 1.0 | 1.0 | +| test.c:652:19:652:26 | (...) | 5753744.0 | 1.0 | 1.0 | | test.c:652:20:652:20 | 2 | 1.0 | -1.0 | -1.0 | | test.c:652:20:652:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:652:20:652:25 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:652:24:652:25 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:20:652:25 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:652:24:652:25 | ip | 5753744.0 | 2.0 | 3.0 | | test.c:652:30:652:31 | 17 | 1.0 | -1.0 | -1.0 | | test.c:652:30:652:31 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:652:30:652:36 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:652:35:652:36 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:30:652:36 | ... * ... | 5753744.0 | 2.0 | 1.0 | +| test.c:652:35:652:36 | ip | 5753744.0 | 2.0 | 3.0 | | test.c:652:40:652:41 | 17 | 1.0 | -1.0 | -1.0 | | test.c:652:40:652:41 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:652:40:652:52 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:652:45:652:52 | (...) | 6.9571236714E10 | 1.0 | 1.0 | +| test.c:652:40:652:52 | ... * ... | 2876872.5 | 1.0 | 1.0 | +| test.c:652:45:652:52 | (...) | 2876872.5 | 1.0 | 1.0 | | test.c:652:46:652:46 | 2 | 1.0 | -1.0 | -1.0 | | test.c:652:46:652:46 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:652:46:652:51 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:652:50:652:51 | ip | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:652:46:652:51 | ... * ... | 2876872.5 | 2.0 | 1.0 | +| test.c:652:50:652:51 | ip | 2876872.5 | 2.0 | 2.0 | | test.c:652:56:652:57 | 17 | 1.0 | -1.0 | -1.0 | | test.c:652:56:652:57 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:652:56:652:62 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:652:61:652:62 | ip | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:653:17:653:28 | (...) | 1.39142473429E11 | 1.0 | 1.0 | -| test.c:653:17:653:33 | ... * ... | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:652:56:652:62 | ... * ... | 2876872.5 | 2.0 | 1.0 | +| test.c:652:61:652:62 | ip | 2876872.5 | 2.0 | 2.0 | +| test.c:653:17:653:28 | (...) | 8630617.5 | 1.0 | 1.0 | +| test.c:653:17:653:33 | ... * ... | 8630617.5 | 1.0 | 1.0 | | test.c:653:18:653:18 | 2 | 1.0 | -1.0 | -1.0 | | test.c:653:18:653:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:653:18:653:23 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | -| test.c:653:18:653:27 | ... + ... | 1.39142473429E11 | 1.0 | 1.0 | -| test.c:653:22:653:23 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:653:18:653:23 | ... * ... | 8630617.5 | 2.0 | 1.0 | +| test.c:653:18:653:27 | ... + ... | 8630617.5 | 1.0 | 1.0 | +| test.c:653:22:653:23 | ip | 8630617.5 | 2.0 | 4.0 | | test.c:653:27:653:27 | 1 | 1.0 | -1.0 | -1.0 | | test.c:653:27:653:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:653:32:653:33 | 14 | 1.0 | -1.0 | -1.0 | | test.c:653:32:653:33 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:654:17:654:18 | 14 | 1.0 | -1.0 | -1.0 | | test.c:654:17:654:18 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:654:17:654:29 | ... * ... | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:654:17:654:29 | ... * ... | 8630617.5 | 1.0 | 1.0 | | test.c:654:17:654:39 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:654:17:656:25 | ... ? ... : ... | 1.936062791193997E22 | 1.0 | 1.0 | -| test.c:654:22:654:29 | (...) | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:654:17:656:25 | ... ? ... : ... | 1.8621893923135562E13 | 1.0 | 1.0 | +| test.c:654:22:654:29 | (...) | 8630617.5 | 1.0 | 1.0 | | test.c:654:23:654:23 | 2 | 1.0 | -1.0 | -1.0 | | test.c:654:23:654:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:654:23:654:28 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | -| test.c:654:27:654:28 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:654:23:654:28 | ... * ... | 8630617.5 | 2.0 | 1.0 | +| test.c:654:27:654:28 | ip | 8630617.5 | 2.0 | 4.0 | | test.c:654:33:654:34 | 17 | 1.0 | -1.0 | -1.0 | | test.c:654:33:654:34 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:654:33:654:39 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | -| test.c:654:38:654:39 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:654:33:654:39 | ... * ... | 8630617.5 | 2.0 | 1.0 | +| test.c:654:38:654:39 | ip | 8630617.5 | 2.0 | 4.0 | | test.c:655:19:655:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:655:19:655:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:655:19:655:31 | ... * ... | 1.39142473429E11 | 1.0 | 1.0 | -| test.c:655:24:655:31 | (...) | 1.39142473429E11 | 1.0 | 1.0 | +| test.c:655:19:655:31 | ... * ... | 4315309.25 | 1.0 | 1.0 | +| test.c:655:24:655:31 | (...) | 4315309.25 | 1.0 | 1.0 | | test.c:655:25:655:25 | 2 | 1.0 | -1.0 | -1.0 | | test.c:655:25:655:25 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:655:25:655:30 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | -| test.c:655:29:655:30 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:655:25:655:30 | ... * ... | 4315309.25 | 2.0 | 1.0 | +| test.c:655:29:655:30 | ip | 4315309.25 | 2.0 | 2.0 | | test.c:656:19:656:20 | 14 | 1.0 | -1.0 | -1.0 | | test.c:656:19:656:20 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:656:19:656:25 | ... * ... | 1.39142473429E11 | 2.0 | 1.0 | -| test.c:656:24:656:25 | ip | 1.39142473429E11 | 2.0 | 1.0 | +| test.c:656:19:656:25 | ... * ... | 4315309.25 | 2.0 | 1.0 | +| test.c:656:24:656:25 | ip | 4315309.25 | 2.0 | 2.0 | | test.c:657:13:657:14 | 14 | 1.0 | -1.0 | -1.0 | | test.c:657:13:657:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:657:13:657:19 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:657:13:657:19 | ... * ... | 5753744.0 | 2.0 | 1.0 | | test.c:657:13:657:35 | ... > ... | 1.0 | -1.0 | -1.0 | -| test.c:657:13:659:27 | ... ? ... : ... | 4.840156977915421E21 | 1.0 | 1.0 | -| test.c:657:18:657:19 | ip | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:657:23:657:30 | (...) | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:657:23:657:35 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:657:24:657:25 | ip | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:657:24:657:29 | ... + ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:657:13:659:27 | ... ? ... : ... | 8.27639538125625E12 | 1.0 | 1.0 | +| test.c:657:18:657:19 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:657:23:657:30 | (...) | 5753744.0 | 1.0 | 1.0 | +| test.c:657:23:657:35 | ... * ... | 5753744.0 | 1.0 | 1.0 | +| test.c:657:24:657:25 | ip | 5753744.0 | 2.0 | 3.0 | +| test.c:657:24:657:29 | ... + ... | 5753744.0 | 2.0 | 1.0 | | test.c:657:29:657:29 | 1 | 1.0 | -1.0 | -1.0 | | test.c:657:29:657:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:657:34:657:35 | 17 | 1.0 | -1.0 | -1.0 | | test.c:657:34:657:35 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:658:15:658:16 | 14 | 1.0 | -1.0 | -1.0 | | test.c:658:15:658:16 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:658:15:658:21 | ... * ... | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:658:20:658:21 | ip | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:659:15:659:22 | (...) | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:659:15:659:27 | ... * ... | 6.9571236714E10 | 1.0 | 1.0 | -| test.c:659:16:659:17 | ip | 6.9571236714E10 | 2.0 | 1.0 | -| test.c:659:16:659:21 | ... + ... | 6.9571236714E10 | 2.0 | 1.0 | +| test.c:658:15:658:21 | ... * ... | 2876872.5 | 2.0 | 1.0 | +| test.c:658:20:658:21 | ip | 2876872.5 | 2.0 | 2.0 | +| test.c:659:15:659:22 | (...) | 2876872.5 | 1.0 | 1.0 | +| test.c:659:15:659:27 | ... * ... | 2876872.5 | 1.0 | 1.0 | +| test.c:659:16:659:17 | ip | 2876872.5 | 2.0 | 2.0 | +| test.c:659:16:659:21 | ... + ... | 2876872.5 | 2.0 | 1.0 | | test.c:659:21:659:21 | 1 | 1.0 | -1.0 | -1.0 | | test.c:659:21:659:21 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:659:26:659:27 | 14 | 1.0 | -1.0 | -1.0 | | test.c:659:26:659:27 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:660:10:660:23 | special_number | 1.297918419127476E201 | 1.0 | 1.0 | +| test.c:660:10:660:23 | special_number | 1.4542272872758854E125 | 1.0 | 1.0 | | test.c:667:10:667:11 | 0 | 1.0 | -1.0 | -1.0 | | test.c:668:7:668:8 | c1 | 1.0 | 1.0 | 1.0 | | test.c:668:13:668:13 | x | 1.0 | 1.0 | 1.0 | @@ -4087,27 +4087,27 @@ estimateNrOfBounds | test.c:673:19:673:19 | x | 32.0 | 32.0 | 32.0 | | test.c:673:19:673:32 | ... += ... | 32.0 | 32.0 | 32.0 | | test.c:673:24:673:32 | 938457398 | 1.0 | -1.0 | -1.0 | -| test.c:674:7:674:8 | c1 | 3.0 | 3.0 | 3.0 | +| test.c:674:7:674:8 | c1 | 3.5 | 3.0 | 3.0 | | test.c:674:7:674:14 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:674:13:674:14 | c3 | 2.0 | 2.0 | 2.0 | | test.c:674:19:674:19 | x | 64.0 | 64.0 | 64.0 | | test.c:674:19:674:31 | ... += ... | 64.0 | 64.0 | 64.0 | | test.c:674:24:674:31 | 73895648 | 1.0 | -1.0 | -1.0 | -| test.c:675:7:675:8 | c1 | 4.0 | 3.0 | 3.0 | +| test.c:675:7:675:8 | c1 | 5.75 | 3.0 | 3.0 | | test.c:675:7:675:14 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:675:13:675:14 | c4 | 2.0 | 2.0 | 2.0 | | test.c:675:19:675:19 | x | 128.0 | 128.0 | 128.0 | | test.c:675:19:675:31 | ... += ... | 128.0 | 128.0 | 128.0 | | test.c:675:24:675:31 | 12345432 | 1.0 | -1.0 | -1.0 | -| test.c:676:7:676:8 | c1 | 5.0 | 3.0 | 3.0 | +| test.c:676:7:676:8 | c1 | 9.125 | 3.0 | 3.0 | | test.c:676:7:676:14 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:676:13:676:14 | c5 | 2.0 | 2.0 | 2.0 | | test.c:676:19:676:19 | x | 256.0 | 256.0 | 256.0 | | test.c:676:19:676:28 | ... += ... | 256.0 | 256.0 | 256.0 | | test.c:676:24:676:28 | 38847 | 1.0 | -1.0 | -1.0 | -| test.c:677:7:677:8 | c2 | 5.0 | 3.0 | 3.0 | +| test.c:677:7:677:8 | c2 | 5.5 | 3.0 | 3.0 | | test.c:677:7:677:14 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:677:13:677:14 | c3 | 5.0 | 3.0 | 3.0 | +| test.c:677:13:677:14 | c3 | 5.5 | 3.0 | 3.0 | | test.c:677:19:677:19 | x | 512.0 | 512.0 | 512.0 | | test.c:677:19:677:26 | ... += ... | 512.0 | 512.0 | 512.0 | | test.c:677:24:677:26 | 234 | 1.0 | -1.0 | -1.0 | @@ -4223,7 +4223,7 @@ estimateNrOfBounds | test.c:727:7:727:33 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:727:7:727:44 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:727:12:727:12 | a | 2.0 | 3.0 | 3.0 | -| test.c:727:17:727:17 | a | 2.0 | 2.0 | 3.0 | +| test.c:727:17:727:17 | a | 1.5 | 2.0 | 3.0 | | test.c:727:17:727:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:727:22:727:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:727:22:727:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | @@ -4231,44 +4231,44 @@ estimateNrOfBounds | test.c:727:28:727:28 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:727:28:727:33 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:727:33:727:33 | b | 3.0 | 3.0 | 3.0 | -| test.c:727:38:727:38 | b | 3.0 | 3.0 | 3.0 | +| test.c:727:38:727:38 | b | 2.0 | 3.0 | 3.0 | | test.c:727:38:727:44 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:727:43:727:44 | 23 | 1.0 | -1.0 | -1.0 | | test.c:727:43:727:44 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:728:13:728:13 | a | 2.0 | 2.0 | 2.0 | -| test.c:728:13:728:15 | (int)... | 6.0 | 5.0 | 4.0 | -| test.c:728:13:728:15 | ... * ... | 6.0 | 5.0 | 4.0 | -| test.c:728:15:728:15 | b | 3.0 | 3.0 | 2.0 | +| test.c:728:13:728:13 | a | 1.25 | 2.0 | 2.0 | +| test.c:728:13:728:15 | (int)... | 1.875 | 5.0 | 4.0 | +| test.c:728:13:728:15 | ... * ... | 1.875 | 5.0 | 4.0 | +| test.c:728:15:728:15 | b | 1.5 | 3.0 | 2.0 | | test.c:729:5:729:9 | total | 2.0 | 2.0 | 2.0 | -| test.c:729:5:729:14 | ... += ... | 12.0 | 9.0 | 8.0 | -| test.c:729:14:729:14 | r | 6.0 | 5.0 | 4.0 | +| test.c:729:5:729:14 | ... += ... | 3.75 | 9.0 | 8.0 | +| test.c:729:14:729:14 | r | 1.875 | 5.0 | 4.0 | | test.c:731:7:731:7 | 3 | 1.0 | -1.0 | -1.0 | | test.c:731:7:731:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:731:7:731:12 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:731:7:731:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:731:7:731:34 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:731:7:731:45 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:731:12:731:12 | a | 3.0 | 3.0 | 3.0 | -| test.c:731:17:731:17 | a | 3.0 | 2.0 | 3.0 | +| test.c:731:12:731:12 | a | 2.75 | 3.0 | 3.0 | +| test.c:731:17:731:17 | a | 1.875 | 2.0 | 3.0 | | test.c:731:17:731:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:731:22:731:23 | 11 | 1.0 | -1.0 | -1.0 | | test.c:731:22:731:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:731:28:731:29 | 13 | 1.0 | -1.0 | -1.0 | | test.c:731:28:731:29 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:731:28:731:34 | ... <= ... | 1.0 | -1.0 | -1.0 | -| test.c:731:34:731:34 | b | 7.0 | 3.0 | 3.0 | -| test.c:731:39:731:39 | b | 7.0 | 2.0 | 3.0 | +| test.c:731:34:731:34 | b | 6.5 | 3.0 | 3.0 | +| test.c:731:39:731:39 | b | 3.75 | 2.0 | 3.0 | | test.c:731:39:731:45 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:731:44:731:45 | 23 | 1.0 | -1.0 | -1.0 | | test.c:731:44:731:45 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:732:13:732:13 | a | 3.0 | 2.0 | 2.0 | -| test.c:732:13:732:15 | (int)... | 21.0 | 4.0 | 4.0 | -| test.c:732:13:732:15 | ... * ... | 21.0 | 4.0 | 4.0 | -| test.c:732:15:732:15 | b | 7.0 | 2.0 | 2.0 | -| test.c:733:5:733:9 | total | 14.0 | 9.0 | 9.0 | -| test.c:733:5:733:14 | ... += ... | 294.0 | 34.0 | 24.0 | -| test.c:733:14:733:14 | r | 21.0 | 4.0 | 4.0 | -| test.c:736:10:736:14 | total | 308.0 | 39.0 | 25.0 | +| test.c:732:13:732:13 | a | 1.4375 | 2.0 | 2.0 | +| test.c:732:13:732:15 | (int)... | 3.4140625 | 4.0 | 4.0 | +| test.c:732:13:732:15 | ... * ... | 3.4140625 | 4.0 | 4.0 | +| test.c:732:15:732:15 | b | 2.375 | 2.0 | 2.0 | +| test.c:733:5:733:9 | total | 5.75 | 9.0 | 9.0 | +| test.c:733:5:733:14 | ... += ... | 19.630859375 | 34.0 | 24.0 | +| test.c:733:14:733:14 | r | 3.4140625 | 4.0 | 4.0 | +| test.c:736:10:736:14 | total | 25.380859375 | 39.0 | 25.0 | | test.c:740:14:740:15 | 0 | 1.0 | -1.0 | -1.0 | | test.c:742:7:742:7 | 5 | 1.0 | -1.0 | -1.0 | | test.c:742:7:742:7 | (unsigned int)... | 1.0 | 1.0 | 1.0 | @@ -4292,36 +4292,36 @@ estimateNrOfBounds | test.c:746:7:746:12 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:746:7:746:23 | ... && ... | 1.0 | -1.0 | -1.0 | | test.c:746:12:746:12 | b | 2.0 | 3.0 | 3.0 | -| test.c:746:17:746:17 | b | 2.0 | 3.0 | 3.0 | +| test.c:746:17:746:17 | b | 1.5 | 3.0 | 3.0 | | test.c:746:17:746:23 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:746:22:746:23 | 23 | 1.0 | -1.0 | -1.0 | | test.c:746:22:746:23 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:747:13:747:14 | 11 | 1.0 | -1.0 | -1.0 | | test.c:747:13:747:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:747:13:747:16 | (int)... | 2.0 | 3.0 | 2.0 | -| test.c:747:13:747:16 | ... * ... | 2.0 | 3.0 | 2.0 | -| test.c:747:16:747:16 | b | 2.0 | 3.0 | 2.0 | +| test.c:747:13:747:16 | (int)... | 1.25 | 3.0 | 2.0 | +| test.c:747:13:747:16 | ... * ... | 1.25 | 3.0 | 2.0 | +| test.c:747:16:747:16 | b | 1.25 | 3.0 | 2.0 | | test.c:748:5:748:9 | total | 2.0 | 2.0 | 2.0 | -| test.c:748:5:748:14 | ... += ... | 4.0 | 5.0 | 4.0 | -| test.c:748:14:748:14 | r | 2.0 | 3.0 | 2.0 | +| test.c:748:5:748:14 | ... += ... | 2.5 | 5.0 | 4.0 | +| test.c:748:14:748:14 | r | 1.25 | 3.0 | 2.0 | | test.c:750:7:750:8 | 13 | 1.0 | -1.0 | -1.0 | | test.c:750:7:750:8 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:750:7:750:13 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:750:7:750:24 | ... && ... | 1.0 | -1.0 | -1.0 | -| test.c:750:13:750:13 | b | 3.0 | 3.0 | 3.0 | -| test.c:750:18:750:18 | b | 3.0 | 2.0 | 3.0 | +| test.c:750:13:750:13 | b | 2.75 | 3.0 | 3.0 | +| test.c:750:18:750:18 | b | 1.875 | 2.0 | 3.0 | | test.c:750:18:750:24 | ... <= ... | 1.0 | -1.0 | -1.0 | | test.c:750:23:750:24 | 23 | 1.0 | -1.0 | -1.0 | | test.c:750:23:750:24 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:751:13:751:14 | 11 | 1.0 | -1.0 | -1.0 | | test.c:751:13:751:14 | (unsigned int)... | 1.0 | 1.0 | 1.0 | -| test.c:751:13:751:16 | (int)... | 3.0 | 2.0 | 2.0 | -| test.c:751:13:751:16 | ... * ... | 3.0 | 2.0 | 2.0 | -| test.c:751:16:751:16 | b | 3.0 | 2.0 | 2.0 | -| test.c:752:5:752:9 | total | 6.0 | 5.0 | 5.0 | -| test.c:752:5:752:14 | ... += ... | 18.0 | 10.0 | 8.0 | -| test.c:752:14:752:14 | r | 3.0 | 2.0 | 2.0 | -| test.c:755:10:755:14 | total | 24.0 | 13.0 | 9.0 | +| test.c:751:13:751:16 | (int)... | 1.4375 | 2.0 | 2.0 | +| test.c:751:13:751:16 | ... * ... | 1.4375 | 2.0 | 2.0 | +| test.c:751:16:751:16 | b | 1.4375 | 2.0 | 2.0 | +| test.c:752:5:752:9 | total | 4.5 | 5.0 | 5.0 | +| test.c:752:5:752:14 | ... += ... | 6.46875 | 10.0 | 8.0 | +| test.c:752:14:752:14 | r | 1.4375 | 2.0 | 2.0 | +| test.c:755:10:755:14 | total | 10.96875 | 13.0 | 9.0 | | test.c:760:3:760:3 | x | 1.0 | -1.0 | -1.0 | | test.c:760:3:760:22 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:760:7:760:7 | y | 1.0 | -1.0 | -1.0 | @@ -4433,19 +4433,19 @@ estimateNrOfBounds | test.c:813:12:813:13 | - ... | 1.0 | 1.0 | 1.0 | | test.c:813:13:813:13 | 1 | 1.0 | -1.0 | -1.0 | | test.c:814:5:814:5 | i | 1.0 | -1.0 | -1.0 | -| test.c:814:5:814:27 | ... = ... | 2.0 | 2.0 | 2.0 | -| test.c:814:9:814:9 | i | 2.0 | 2.0 | 2.0 | -| test.c:814:9:814:27 | ... * ... | 2.0 | 2.0 | 2.0 | +| test.c:814:5:814:27 | ... = ... | 1.5 | 2.0 | 2.0 | +| test.c:814:9:814:9 | i | 1.5 | 2.0 | 2.0 | +| test.c:814:9:814:27 | ... * ... | 1.5 | 2.0 | 2.0 | | test.c:814:13:814:27 | (int)... | 1.0 | 1.0 | 1.0 | | test.c:814:18:814:27 | 4294967295 | 1.0 | -1.0 | -1.0 | -| test.c:815:9:815:9 | i | 2.0 | 2.0 | 2.0 | +| test.c:815:9:815:9 | i | 1.5 | 2.0 | 2.0 | | test.c:817:3:817:3 | i | 1.0 | -1.0 | -1.0 | -| test.c:817:3:817:12 | ... = ... | 4.0 | 6.0 | 5.0 | -| test.c:817:7:817:7 | i | 4.0 | 5.0 | 5.0 | -| test.c:817:7:817:12 | ... * ... | 4.0 | 5.0 | 5.0 | +| test.c:817:3:817:12 | ... = ... | 3.5 | 6.0 | 5.0 | +| test.c:817:7:817:7 | i | 3.5 | 5.0 | 5.0 | +| test.c:817:7:817:12 | ... * ... | 3.5 | 5.0 | 5.0 | | test.c:817:11:817:12 | - ... | 1.0 | 1.0 | 1.0 | | test.c:817:12:817:12 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:818:10:818:10 | i | 4.0 | 6.0 | 5.0 | +| test.c:818:10:818:10 | i | 3.5 | 6.0 | 5.0 | | test.c:820:20:820:20 | 1 | 1.0 | -1.0 | -1.0 | | test.c:820:20:820:20 | (signed char)... | 1.0 | 1.0 | 1.0 | | test.c:821:3:821:3 | i | 1.0 | -1.0 | -1.0 | @@ -4472,22 +4472,22 @@ estimateNrOfBounds | test.c:836:12:836:12 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:837:9:837:9 | (int)... | 2.0 | 1.0 | 1.0 | | test.c:837:9:837:9 | n | 2.0 | 1.0 | 1.0 | -| test.c:839:9:839:9 | (int)... | 2.0 | 2.0 | 1.0 | -| test.c:839:9:839:9 | n | 2.0 | 2.0 | 1.0 | +| test.c:839:9:839:9 | (int)... | 1.5 | 2.0 | 1.0 | +| test.c:839:9:839:9 | n | 1.5 | 2.0 | 1.0 | | test.c:842:7:842:8 | ! ... | 1.0 | -1.0 | -1.0 | -| test.c:842:8:842:8 | n | 4.0 | 2.0 | 2.0 | -| test.c:843:9:843:9 | (int)... | 4.0 | 2.0 | 1.0 | -| test.c:843:9:843:9 | n | 4.0 | 2.0 | 1.0 | -| test.c:845:9:845:9 | (int)... | 4.0 | 1.0 | 1.0 | -| test.c:845:9:845:9 | n | 4.0 | 1.0 | 1.0 | +| test.c:842:8:842:8 | n | 3.5 | 2.0 | 2.0 | +| test.c:843:9:843:9 | (int)... | 2.25 | 2.0 | 1.0 | +| test.c:843:9:843:9 | n | 2.25 | 2.0 | 1.0 | +| test.c:845:9:845:9 | (int)... | 3.5 | 1.0 | 1.0 | +| test.c:845:9:845:9 | n | 3.5 | 1.0 | 1.0 | | test.c:848:10:848:10 | n | 13.0 | 2.0 | 2.0 | | test.c:848:10:848:15 | ... != ... | 1.0 | -1.0 | -1.0 | | test.c:848:15:848:15 | 0 | 1.0 | -1.0 | -1.0 | | test.c:848:15:848:15 | (unsigned int)... | 1.0 | 1.0 | 1.0 | | test.c:849:5:849:5 | n | 13.0 | 1.0 | 1.0 | | test.c:849:5:849:7 | ... -- | 13.0 | 1.0 | 1.0 | -| test.c:852:7:852:7 | (int)... | 13.0 | 2.0 | 1.0 | -| test.c:852:7:852:7 | n | 13.0 | 2.0 | 1.0 | +| test.c:852:7:852:7 | (int)... | 7.0 | 2.0 | 1.0 | +| test.c:852:7:852:7 | n | 7.0 | 2.0 | 1.0 | | test.c:856:7:856:7 | (int)... | 1.0 | 1.0 | 1.0 | | test.c:856:7:856:7 | n | 1.0 | 1.0 | 1.0 | | test.c:856:7:856:11 | ... < ... | 1.0 | -1.0 | -1.0 | @@ -4503,16 +4503,16 @@ estimateNrOfBounds | test.c:865:7:865:7 | n | 2.0 | 2.0 | 2.0 | | test.c:866:9:866:9 | (int)... | 2.0 | 1.0 | 2.0 | | test.c:866:9:866:9 | n | 2.0 | 1.0 | 2.0 | -| test.c:868:9:868:9 | (int)... | 2.0 | 2.0 | 1.0 | -| test.c:868:9:868:9 | n | 2.0 | 2.0 | 1.0 | +| test.c:868:9:868:9 | (int)... | 1.5 | 2.0 | 1.0 | +| test.c:868:9:868:9 | n | 1.5 | 2.0 | 1.0 | | test.c:871:10:871:10 | (int)... | 13.0 | 2.0 | 4.0 | | test.c:871:10:871:10 | n | 12.0 | 2.0 | 4.0 | | test.c:871:10:871:15 | ... != ... | 1.0 | -1.0 | -1.0 | | test.c:871:15:871:15 | 0 | 1.0 | -1.0 | -1.0 | | test.c:872:5:872:5 | n | 12.0 | 1.0 | 3.0 | | test.c:872:5:872:7 | ... -- | 12.0 | 1.0 | 3.0 | -| test.c:875:7:875:7 | (int)... | 12.0 | 2.0 | 3.0 | -| test.c:875:7:875:7 | n | 12.0 | 2.0 | 3.0 | +| test.c:875:7:875:7 | (int)... | 6.5 | 2.0 | 3.0 | +| test.c:875:7:875:7 | n | 6.5 | 2.0 | 3.0 | | test.c:879:7:879:7 | (int)... | 1.0 | 1.0 | 1.0 | | test.c:879:7:879:7 | n | 1.0 | 1.0 | 1.0 | | test.c:879:7:879:12 | ... != ... | 1.0 | -1.0 | -1.0 | @@ -4528,15 +4528,15 @@ estimateNrOfBounds | test.c:885:7:885:12 | ... >= ... | 1.0 | -1.0 | -1.0 | | test.c:885:12:885:12 | 5 | 1.0 | -1.0 | -1.0 | | test.c:886:9:886:9 | 2 | 1.0 | -1.0 | -1.0 | -| test.c:886:9:886:13 | ... * ... | 2.0 | 1.0 | 3.0 | -| test.c:886:9:886:18 | ... - ... | 2.0 | 1.0 | 3.0 | +| test.c:886:9:886:13 | ... * ... | 1.5 | 1.0 | 3.0 | +| test.c:886:9:886:18 | ... - ... | 1.5 | 1.0 | 3.0 | | test.c:886:9:886:23 | ... == ... | 1.0 | -1.0 | -1.0 | -| test.c:886:13:886:13 | (int)... | 2.0 | 1.0 | 3.0 | -| test.c:886:13:886:13 | n | 2.0 | 1.0 | 3.0 | +| test.c:886:13:886:13 | (int)... | 1.5 | 1.0 | 3.0 | +| test.c:886:13:886:13 | n | 1.5 | 1.0 | 3.0 | | test.c:886:17:886:18 | 10 | 1.0 | -1.0 | -1.0 | | test.c:886:23:886:23 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:889:9:889:9 | (int)... | 2.0 | 1.0 | 3.0 | -| test.c:889:9:889:9 | n | 2.0 | 1.0 | 3.0 | +| test.c:889:9:889:9 | (int)... | 1.5 | 1.0 | 3.0 | +| test.c:889:9:889:9 | n | 1.5 | 1.0 | 3.0 | | test.c:892:7:892:7 | (int)... | 3.0 | 3.0 | 4.0 | | test.c:892:7:892:7 | n | 3.0 | 3.0 | 4.0 | | test.c:892:7:892:17 | ... != ... | 1.0 | -1.0 | -1.0 | @@ -4550,23 +4550,23 @@ estimateNrOfBounds | test.c:892:28:892:32 | 32767 | 1.0 | -1.0 | -1.0 | | test.c:893:9:893:9 | (int)... | 3.0 | 3.0 | 4.0 | | test.c:893:9:893:9 | n | 3.0 | 3.0 | 4.0 | -| test.c:896:7:896:7 | (int)... | 4.0 | 5.0 | 6.0 | -| test.c:896:7:896:7 | n | 4.0 | 5.0 | 6.0 | +| test.c:896:7:896:7 | (int)... | 5.0 | 5.0 | 6.0 | +| test.c:896:7:896:7 | n | 5.0 | 5.0 | 6.0 | | test.c:896:7:896:12 | ... >= ... | 1.0 | -1.0 | -1.0 | | test.c:896:12:896:12 | 0 | 1.0 | -1.0 | -1.0 | -| test.c:897:5:897:5 | n | 4.0 | 2.0 | 6.0 | -| test.c:897:5:897:14 | ... ? ... : ... | 16.0 | 3.0 | 6.0 | -| test.c:897:10:897:10 | (int)... | 4.0 | 2.0 | 5.0 | -| test.c:897:10:897:10 | n | 4.0 | 2.0 | 5.0 | -| test.c:897:14:897:14 | (int)... | 4.0 | 2.0 | 4.0 | -| test.c:897:14:897:14 | n | 4.0 | 2.0 | 4.0 | +| test.c:897:5:897:5 | n | 3.0 | 2.0 | 6.0 | +| test.c:897:5:897:14 | ... ? ... : ... | 6.0 | 3.0 | 6.0 | +| test.c:897:10:897:10 | (int)... | 3.0 | 2.0 | 5.0 | +| test.c:897:10:897:10 | n | 3.0 | 2.0 | 5.0 | +| test.c:897:14:897:14 | (int)... | 2.0 | 2.0 | 4.0 | +| test.c:897:14:897:14 | n | 2.0 | 2.0 | 4.0 | | test.c:898:5:898:6 | ! ... | 1.0 | -1.0 | -1.0 | -| test.c:898:5:898:14 | ... ? ... : ... | 64.0 | 3.0 | 6.0 | -| test.c:898:6:898:6 | n | 8.0 | 3.0 | 6.0 | -| test.c:898:10:898:10 | (int)... | 8.0 | 3.0 | 4.0 | -| test.c:898:10:898:10 | n | 8.0 | 3.0 | 4.0 | -| test.c:898:14:898:14 | (int)... | 8.0 | 2.0 | 5.0 | -| test.c:898:14:898:14 | n | 8.0 | 2.0 | 5.0 | +| test.c:898:5:898:14 | ... ? ... : ... | 15.0 | 3.0 | 6.0 | +| test.c:898:6:898:6 | n | 5.0 | 3.0 | 6.0 | +| test.c:898:10:898:10 | (int)... | 3.0 | 3.0 | 4.0 | +| test.c:898:10:898:10 | n | 3.0 | 3.0 | 4.0 | +| test.c:898:14:898:14 | (int)... | 5.0 | 2.0 | 5.0 | +| test.c:898:14:898:14 | n | 5.0 | 2.0 | 5.0 | | test.c:909:7:909:8 | (unsigned long)... | 1.0 | 1.0 | 1.0 | | test.c:909:7:909:8 | ss | 1.0 | 1.0 | 1.0 | | test.c:909:7:909:22 | ... < ... | 1.0 | -1.0 | -1.0 | @@ -4577,8 +4577,8 @@ estimateNrOfBounds | test.c:913:7:913:8 | ss | 2.0 | 3.0 | 2.0 | | test.c:913:7:913:17 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:913:12:913:17 | 32769 | 1.0 | -1.0 | -1.0 | -| test.c:914:9:914:10 | (int)... | 2.0 | 3.0 | 2.0 | -| test.c:914:9:914:10 | ss | 2.0 | 3.0 | 2.0 | +| test.c:914:9:914:10 | (int)... | 1.5 | 3.0 | 2.0 | +| test.c:914:9:914:10 | ss | 1.5 | 3.0 | 2.0 | | test.c:917:7:917:15 | (int)... | 1.0 | 1.0 | 1.0 | | test.c:917:7:917:15 | (short)... | 1.0 | 1.0 | 1.0 | | test.c:917:7:917:20 | ... >= ... | 1.0 | -1.0 | -1.0 | @@ -4592,14 +4592,14 @@ estimateNrOfBounds | test.c:921:14:921:15 | us | 2.0 | 1.0 | 2.0 | | test.c:921:20:921:21 | - ... | 1.0 | 1.0 | 1.0 | | test.c:921:21:921:21 | 1 | 1.0 | -1.0 | -1.0 | -| test.c:922:9:922:10 | (int)... | 2.0 | 1.0 | 2.0 | -| test.c:922:9:922:10 | us | 2.0 | 1.0 | 2.0 | +| test.c:922:9:922:10 | (int)... | 1.5 | 1.0 | 2.0 | +| test.c:922:9:922:10 | us | 1.5 | 1.0 | 2.0 | | test.c:925:7:925:8 | (unsigned long)... | 3.0 | 3.0 | 2.0 | | test.c:925:7:925:8 | ss | 3.0 | 3.0 | 2.0 | | test.c:925:7:925:23 | ... >= ... | 1.0 | -1.0 | -1.0 | | test.c:925:13:925:23 | sizeof(int) | 1.0 | -1.0 | -1.0 | -| test.c:926:9:926:10 | (int)... | 3.0 | 2.0 | 2.0 | -| test.c:926:9:926:10 | ss | 3.0 | 2.0 | 2.0 | +| test.c:926:9:926:10 | (int)... | 2.0 | 2.0 | 2.0 | +| test.c:926:9:926:10 | ss | 2.0 | 2.0 | 2.0 | | test.c:929:7:929:8 | (int)... | 4.0 | 3.0 | 2.0 | | test.c:929:7:929:8 | ss | 4.0 | 3.0 | 2.0 | | test.c:929:7:929:12 | (unsigned long)... | 4.0 | 3.0 | 2.0 | @@ -4607,8 +4607,8 @@ estimateNrOfBounds | test.c:929:7:929:26 | ... < ... | 1.0 | -1.0 | -1.0 | | test.c:929:12:929:12 | 1 | 1.0 | -1.0 | -1.0 | | test.c:929:16:929:26 | sizeof(int) | 1.0 | -1.0 | -1.0 | -| test.c:930:9:930:10 | (int)... | 4.0 | 3.0 | 1.0 | -| test.c:930:9:930:10 | ss | 4.0 | 3.0 | 1.0 | +| test.c:930:9:930:10 | (int)... | 2.5 | 3.0 | 1.0 | +| test.c:930:9:930:10 | ss | 2.5 | 3.0 | 1.0 | | test.c:936:8:936:8 | s | 1.0 | -1.0 | -1.0 | | test.c:936:8:936:12 | ... = ... | 1.0 | 1.0 | 1.0 | | test.c:936:12:936:12 | 0 | 1.0 | -1.0 | -1.0 | @@ -4693,13 +4693,13 @@ estimateNrOfBounds | test.cpp:31:5:31:10 | ... = ... | 1.0 | 1.0 | 1.0 | | test.cpp:31:9:31:10 | - ... | 1.0 | 1.0 | 1.0 | | test.cpp:31:10:31:10 | 1 | 1.0 | -1.0 | -1.0 | -| test.cpp:33:7:33:7 | y | 4.0 | 3.0 | 3.0 | +| test.cpp:33:7:33:7 | y | 3.5 | 3.0 | 3.0 | | test.cpp:33:7:33:12 | ... == ... | 1.0 | -1.0 | -1.0 | | test.cpp:33:12:33:12 | 1 | 1.0 | -1.0 | -1.0 | | test.cpp:34:5:34:5 | x | 1.0 | -1.0 | -1.0 | | test.cpp:34:5:34:9 | ... = ... | 1.0 | 1.0 | 1.0 | | test.cpp:34:9:34:9 | 1 | 1.0 | -1.0 | -1.0 | -| test.cpp:36:7:36:7 | y | 8.0 | 4.0 | 4.0 | +| test.cpp:36:7:36:7 | y | 5.75 | 4.0 | 4.0 | | test.cpp:36:7:36:15 | ... == ... | 1.0 | -1.0 | -1.0 | | test.cpp:36:12:36:15 | - ... | 1.0 | 1.0 | 1.0 | | test.cpp:36:13:36:15 | 128 | 1.0 | -1.0 | -1.0 | @@ -4707,13 +4707,13 @@ estimateNrOfBounds | test.cpp:37:5:37:12 | ... = ... | 1.0 | 1.0 | 1.0 | | test.cpp:37:9:37:12 | - ... | 1.0 | 1.0 | 1.0 | | test.cpp:37:10:37:12 | 128 | 1.0 | -1.0 | -1.0 | -| test.cpp:39:7:39:7 | y | 16.0 | 5.0 | 5.0 | +| test.cpp:39:7:39:7 | y | 9.125 | 5.0 | 5.0 | | test.cpp:39:7:39:14 | ... == ... | 1.0 | -1.0 | -1.0 | | test.cpp:39:12:39:14 | 128 | 1.0 | -1.0 | -1.0 | | test.cpp:40:5:40:5 | x | 1.0 | -1.0 | -1.0 | | test.cpp:40:5:40:11 | ... = ... | 1.0 | 1.0 | 1.0 | | test.cpp:40:9:40:11 | 128 | 1.0 | -1.0 | -1.0 | -| test.cpp:42:7:42:7 | y | 32.0 | 6.0 | 6.0 | +| test.cpp:42:7:42:7 | y | 14.1875 | 6.0 | 6.0 | | test.cpp:42:7:42:16 | ... == ... | 1.0 | -1.0 | -1.0 | | test.cpp:42:12:42:16 | - ... | 1.0 | 1.0 | 1.0 | | test.cpp:42:13:42:16 | 1024 | 1.0 | -1.0 | -1.0 | @@ -4721,7 +4721,7 @@ estimateNrOfBounds | test.cpp:43:5:43:13 | ... = ... | 1.0 | 1.0 | 1.0 | | test.cpp:43:9:43:13 | - ... | 1.0 | 1.0 | 1.0 | | test.cpp:43:10:43:13 | 1024 | 1.0 | -1.0 | -1.0 | -| test.cpp:45:7:45:7 | y | 64.0 | 7.0 | 7.0 | +| test.cpp:45:7:45:7 | y | 21.78125 | 7.0 | 7.0 | | test.cpp:45:7:45:15 | ... == ... | 1.0 | -1.0 | -1.0 | | test.cpp:45:12:45:15 | 1024 | 1.0 | -1.0 | -1.0 | | test.cpp:46:5:46:5 | x | 1.0 | -1.0 | -1.0 | @@ -4732,39 +4732,39 @@ estimateNrOfBounds | test.cpp:51:7:51:12 | ... == ... | 1.0 | -1.0 | -1.0 | | test.cpp:51:12:51:12 | 0 | 1.0 | -1.0 | -1.0 | | test.cpp:52:15:52:21 | (bool)... | 1.0 | 2.0 | 1.0 | -| test.cpp:52:21:52:21 | x | 8.0 | 4.0 | 4.0 | +| test.cpp:52:21:52:21 | x | 4.5 | 4.0 | 4.0 | | test.cpp:53:5:53:5 | t | 1.0 | 1.0 | 1.0 | -| test.cpp:53:5:53:16 | ... += ... | 8.0 | 2.0 | 1.0 | -| test.cpp:53:10:53:16 | (int)... | 8.0 | 2.0 | 1.0 | -| test.cpp:53:15:53:16 | xb | 8.0 | 2.0 | 1.0 | -| test.cpp:56:7:56:7 | x | 16.0 | 8.0 | 8.0 | +| test.cpp:53:5:53:16 | ... += ... | 4.5 | 2.0 | 1.0 | +| test.cpp:53:10:53:16 | (int)... | 4.5 | 2.0 | 1.0 | +| test.cpp:53:15:53:16 | xb | 4.5 | 2.0 | 1.0 | +| test.cpp:56:7:56:7 | x | 12.5 | 8.0 | 8.0 | | test.cpp:56:7:56:11 | ... > ... | 1.0 | -1.0 | -1.0 | | test.cpp:56:11:56:11 | 0 | 1.0 | -1.0 | -1.0 | | test.cpp:57:15:57:21 | (bool)... | 1.0 | 1.0 | 2.0 | -| test.cpp:57:21:57:21 | x | 16.0 | 3.0 | 8.0 | -| test.cpp:58:5:58:5 | t | 9.0 | 2.0 | 1.0 | -| test.cpp:58:5:58:16 | ... += ... | 144.0 | 2.0 | 2.0 | -| test.cpp:58:10:58:16 | (int)... | 16.0 | 1.0 | 2.0 | -| test.cpp:58:15:58:16 | xb | 16.0 | 1.0 | 2.0 | -| test.cpp:61:7:61:7 | x | 17.0 | 8.0 | 8.0 | +| test.cpp:57:21:57:21 | x | 6.75 | 3.0 | 8.0 | +| test.cpp:58:5:58:5 | t | 5.5 | 2.0 | 1.0 | +| test.cpp:58:5:58:16 | ... += ... | 37.125 | 2.0 | 2.0 | +| test.cpp:58:10:58:16 | (int)... | 6.75 | 1.0 | 2.0 | +| test.cpp:58:15:58:16 | xb | 6.75 | 1.0 | 2.0 | +| test.cpp:61:7:61:7 | x | 13.5 | 8.0 | 8.0 | | test.cpp:61:7:61:11 | ... < ... | 1.0 | -1.0 | -1.0 | | test.cpp:61:11:61:11 | 0 | 1.0 | -1.0 | -1.0 | | test.cpp:62:15:62:21 | (bool)... | 1.0 | 1.0 | 2.0 | -| test.cpp:62:21:62:21 | x | 17.0 | 8.0 | 3.0 | -| test.cpp:63:5:63:5 | t | 153.0 | 3.0 | 2.0 | -| test.cpp:63:5:63:16 | ... += ... | 2601.0 | 3.0 | 3.0 | -| test.cpp:63:10:63:16 | (int)... | 17.0 | 1.0 | 2.0 | -| test.cpp:63:15:63:16 | xb | 17.0 | 1.0 | 2.0 | +| test.cpp:62:21:62:21 | x | 7.25 | 8.0 | 3.0 | +| test.cpp:63:5:63:5 | t | 42.625 | 3.0 | 2.0 | +| test.cpp:63:5:63:16 | ... += ... | 309.03125 | 3.0 | 3.0 | +| test.cpp:63:10:63:16 | (int)... | 7.25 | 1.0 | 2.0 | +| test.cpp:63:15:63:16 | xb | 7.25 | 1.0 | 2.0 | | test.cpp:66:13:66:19 | (bool)... | 1.0 | 2.0 | 2.0 | -| test.cpp:66:19:66:19 | x | 18.0 | 8.0 | 8.0 | -| test.cpp:67:3:67:3 | t | 2754.0 | 4.0 | 3.0 | -| test.cpp:67:3:67:14 | ... += ... | 49572.0 | 5.0 | 4.0 | -| test.cpp:67:8:67:14 | (int)... | 18.0 | 2.0 | 2.0 | -| test.cpp:67:13:67:14 | xb | 18.0 | 2.0 | 2.0 | +| test.cpp:66:19:66:19 | x | 14.5 | 8.0 | 8.0 | +| test.cpp:67:3:67:3 | t | 351.65625 | 4.0 | 3.0 | +| test.cpp:67:3:67:14 | ... += ... | 5099.015625 | 5.0 | 4.0 | +| test.cpp:67:8:67:14 | (int)... | 14.5 | 2.0 | 2.0 | +| test.cpp:67:13:67:14 | xb | 14.5 | 2.0 | 2.0 | | test.cpp:69:10:69:10 | b | 1.0 | 1.0 | 1.0 | | test.cpp:69:10:69:21 | ... \|\| ... | 1.0 | -1.0 | -1.0 | | test.cpp:69:15:69:21 | (bool)... | 1.0 | 2.0 | 2.0 | -| test.cpp:69:21:69:21 | t | 49572.0 | 5.0 | 4.0 | +| test.cpp:69:21:69:21 | t | 5099.015625 | 5.0 | 4.0 | | test.cpp:74:30:74:30 | (int)... | 1.0 | 1.0 | 1.0 | | test.cpp:74:30:74:30 | c | 1.0 | 1.0 | 1.0 | | test.cpp:74:30:74:34 | (unsigned short)... | 1.0 | 1.0 | 1.0 | @@ -4827,19 +4827,19 @@ estimateNrOfBounds | test.cpp:115:7:115:8 | ! ... | 1.0 | -1.0 | -1.0 | | test.cpp:115:8:115:8 | (bool)... | 1.0 | 2.0 | 2.0 | | test.cpp:115:8:115:8 | n | 2.0 | 2.0 | 2.0 | -| test.cpp:116:5:116:5 | n | 2.0 | 2.0 | 1.0 | +| test.cpp:116:5:116:5 | n | 1.5 | 2.0 | 1.0 | | test.cpp:118:5:118:5 | n | 2.0 | 1.0 | 2.0 | | test.cpp:121:3:121:3 | (bool)... | 1.0 | 2.0 | 2.0 | -| test.cpp:121:3:121:3 | n | 4.0 | 2.0 | 3.0 | -| test.cpp:121:3:121:12 | ... ? ... : ... | 16.0 | 2.0 | 3.0 | -| test.cpp:121:8:121:8 | n | 4.0 | 1.0 | 2.0 | -| test.cpp:121:12:121:12 | n | 4.0 | 2.0 | 1.0 | +| test.cpp:121:3:121:3 | n | 3.5 | 2.0 | 3.0 | +| test.cpp:121:3:121:12 | ... ? ... : ... | 7.875 | 2.0 | 3.0 | +| test.cpp:121:8:121:8 | n | 3.5 | 1.0 | 2.0 | +| test.cpp:121:12:121:12 | n | 2.25 | 2.0 | 1.0 | | test.cpp:122:3:122:4 | ! ... | 1.0 | -1.0 | -1.0 | -| test.cpp:122:3:122:12 | ... ? ... : ... | 64.0 | 2.0 | 3.0 | +| test.cpp:122:3:122:12 | ... ? ... : ... | 19.40625 | 2.0 | 3.0 | | test.cpp:122:4:122:4 | (bool)... | 1.0 | 2.0 | 2.0 | -| test.cpp:122:4:122:4 | n | 8.0 | 2.0 | 3.0 | -| test.cpp:122:8:122:8 | n | 8.0 | 2.0 | 1.0 | -| test.cpp:122:12:122:12 | n | 8.0 | 1.0 | 2.0 | +| test.cpp:122:4:122:4 | n | 5.75 | 2.0 | 3.0 | +| test.cpp:122:8:122:8 | n | 3.375 | 2.0 | 1.0 | +| test.cpp:122:12:122:12 | n | 5.75 | 1.0 | 2.0 | | test_nr_of_bounds.cpp:2:9:2:11 | 1 | 1.0 | -1.0 | -1.0 | | test_nr_of_bounds.cpp:3:9:3:11 | 2 | 1.0 | -1.0 | -1.0 | | test_nr_of_bounds.cpp:4:9:4:11 | 4 | 1.0 | -1.0 | -1.0 | From fd7b123ee38957e99ac0cedf83fee8cd0e5cc2f7 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 5 Dec 2025 13:23:11 +0000 Subject: [PATCH 077/243] Python: Add overlay annotations to AST classes ... and everything else that it depends on. --- python/ql/lib/semmle/python/AstExtended.qll | 3 +++ python/ql/lib/semmle/python/AstGenerated.qll | 2 ++ python/ql/lib/semmle/python/Class.qll | 2 ++ python/ql/lib/semmle/python/Comment.qll | 2 ++ python/ql/lib/semmle/python/Comprehensions.qll | 3 +++ python/ql/lib/semmle/python/Constants.qll | 2 ++ python/ql/lib/semmle/python/Exprs.qll | 3 +++ python/ql/lib/semmle/python/Files.qll | 3 +++ python/ql/lib/semmle/python/Flow.qll | 3 +++ python/ql/lib/semmle/python/Function.qll | 3 +++ python/ql/lib/semmle/python/GuardedControlFlow.qll | 3 +++ python/ql/lib/semmle/python/Import.qll | 3 +++ python/ql/lib/semmle/python/Keywords.qll | 3 +++ python/ql/lib/semmle/python/Module.qll | 3 +++ python/ql/lib/semmle/python/Operations.qll | 3 +++ python/ql/lib/semmle/python/Patterns.qll | 2 ++ python/ql/lib/semmle/python/SSA.qll | 2 ++ python/ql/lib/semmle/python/Scope.qll | 5 +++++ python/ql/lib/semmle/python/Stmts.qll | 3 +++ python/ql/lib/semmle/python/Variables.qll | 3 +++ python/ql/lib/semmle/python/essa/Definitions.qll | 3 +++ python/ql/lib/semmle/python/essa/Essa.qll | 2 ++ python/ql/lib/semmle/python/essa/SsaCompute.qll | 2 ++ python/ql/lib/semmle/python/essa/SsaDefinitions.qll | 2 ++ python/ql/lib/semmle/python/internal/CachedStages.qll | 1 + python/ql/lib/semmle/python/types/Builtins.qll | 3 +++ python/ql/lib/semmle/python/types/ImportTime.qll | 3 +++ 27 files changed, 72 insertions(+) diff --git a/python/ql/lib/semmle/python/AstExtended.qll b/python/ql/lib/semmle/python/AstExtended.qll index 73292b85c3a8..13da4e899a71 100644 --- a/python/ql/lib/semmle/python/AstExtended.qll +++ b/python/ql/lib/semmle/python/AstExtended.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/AstGenerated.qll b/python/ql/lib/semmle/python/AstGenerated.qll index 12f868323878..8805a43bec38 100644 --- a/python/ql/lib/semmle/python/AstGenerated.qll +++ b/python/ql/lib/semmle/python/AstGenerated.qll @@ -3,6 +3,8 @@ * WARNING: Any modifications to this file will be lost. * Relations can be changed by modifying master.py. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Class.qll b/python/ql/lib/semmle/python/Class.qll index 19b81e86a125..cee0e730cb4f 100644 --- a/python/ql/lib/semmle/python/Class.qll +++ b/python/ql/lib/semmle/python/Class.qll @@ -1,6 +1,8 @@ /** * Provides classes representing Python classes. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Comment.qll b/python/ql/lib/semmle/python/Comment.qll index 839d700b8cd1..c87ccc1521d2 100644 --- a/python/ql/lib/semmle/python/Comment.qll +++ b/python/ql/lib/semmle/python/Comment.qll @@ -1,6 +1,8 @@ /** * Provides classes representing comments in Python. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Comprehensions.qll b/python/ql/lib/semmle/python/Comprehensions.qll index 37f07614282f..12e71e2d5d11 100644 --- a/python/ql/lib/semmle/python/Comprehensions.qll +++ b/python/ql/lib/semmle/python/Comprehensions.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** The base class for list, set and dictionary comprehensions, and generator expressions. */ diff --git a/python/ql/lib/semmle/python/Constants.qll b/python/ql/lib/semmle/python/Constants.qll index 03254a4bfd04..f86019c0256f 100644 --- a/python/ql/lib/semmle/python/Constants.qll +++ b/python/ql/lib/semmle/python/Constants.qll @@ -1,4 +1,6 @@ /** Standard builtin types and modules */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Exprs.qll b/python/ql/lib/semmle/python/Exprs.qll index c374863d684e..6ab9f8d8340d 100644 --- a/python/ql/lib/semmle/python/Exprs.qll +++ b/python/ql/lib/semmle/python/Exprs.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + private import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/Files.qll b/python/ql/lib/semmle/python/Files.qll index 2da0dd61f885..bb3c504654e7 100644 --- a/python/ql/lib/semmle/python/Files.qll +++ b/python/ql/lib/semmle/python/Files.qll @@ -1,4 +1,6 @@ /** Provides classes for working with files and folders. */ +overlay[local] +module; import python private import codeql.util.FileSystem @@ -178,6 +180,7 @@ class Container extends Impl::Container { override Container getParentContainer() { result = super.getParentContainer() } + overlay[global] Container getChildContainer(string baseName) { result = this.getAChildContainer() and result.getBaseName() = baseName diff --git a/python/ql/lib/semmle/python/Flow.qll b/python/ql/lib/semmle/python/Flow.qll index 898cd566ab96..b29f9fd13839 100644 --- a/python/ql/lib/semmle/python/Flow.qll +++ b/python/ql/lib/semmle/python/Flow.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.internal.CachedStages private import codeql.controlflow.BasicBlock as BB diff --git a/python/ql/lib/semmle/python/Function.qll b/python/ql/lib/semmle/python/Function.qll index e15d28d3a12b..c133275b8b78 100644 --- a/python/ql/lib/semmle/python/Function.qll +++ b/python/ql/lib/semmle/python/Function.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** diff --git a/python/ql/lib/semmle/python/GuardedControlFlow.qll b/python/ql/lib/semmle/python/GuardedControlFlow.qll index 73ea183850af..3169e4d0c1ad 100644 --- a/python/ql/lib/semmle/python/GuardedControlFlow.qll +++ b/python/ql/lib/semmle/python/GuardedControlFlow.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** A basic block which terminates in a condition, splitting the subsequent control flow */ diff --git a/python/ql/lib/semmle/python/Import.qll b/python/ql/lib/semmle/python/Import.qll index c75ef9f0c918..e8a7facccad3 100644 --- a/python/ql/lib/semmle/python/Import.qll +++ b/python/ql/lib/semmle/python/Import.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.types.Builtins private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/Keywords.qll b/python/ql/lib/semmle/python/Keywords.qll index b7ecca528bb9..da7b582ef16b 100644 --- a/python/ql/lib/semmle/python/Keywords.qll +++ b/python/ql/lib/semmle/python/Keywords.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python class KeyValuePair extends KeyValuePair_, DictDisplayItem { diff --git a/python/ql/lib/semmle/python/Module.qll b/python/ql/lib/semmle/python/Module.qll index f22f0d6fe39f..a30aab452c38 100644 --- a/python/ql/lib/semmle/python/Module.qll +++ b/python/ql/lib/semmle/python/Module.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/Operations.qll b/python/ql/lib/semmle/python/Operations.qll index e8f5e4799a54..c6318af63e25 100644 --- a/python/ql/lib/semmle/python/Operations.qll +++ b/python/ql/lib/semmle/python/Operations.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** The base class for operators */ diff --git a/python/ql/lib/semmle/python/Patterns.qll b/python/ql/lib/semmle/python/Patterns.qll index 9b4760611d00..fb99a123584e 100644 --- a/python/ql/lib/semmle/python/Patterns.qll +++ b/python/ql/lib/semmle/python/Patterns.qll @@ -1,6 +1,8 @@ /** * Wrapping generated AST classes: `Pattern_` and subclasses. */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/SSA.qll b/python/ql/lib/semmle/python/SSA.qll index b71bd95de795..777792877340 100644 --- a/python/ql/lib/semmle/python/SSA.qll +++ b/python/ql/lib/semmle/python/SSA.qll @@ -1,4 +1,6 @@ /** SSA library */ +overlay[local] +module; import python diff --git a/python/ql/lib/semmle/python/Scope.qll b/python/ql/lib/semmle/python/Scope.qll index 4131455299cb..66a7170aec77 100644 --- a/python/ql/lib/semmle/python/Scope.qll +++ b/python/ql/lib/semmle/python/Scope.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python private import semmle.python.dataflow.new.internal.ImportResolution @@ -6,6 +9,7 @@ private import semmle.python.dataflow.new.internal.ImportResolution * * This aims to be the same as m.getAnExport(), but without using the points-to machinery. */ +overlay[global] private string getAModuleExport(Module m) { py_exports(m, result) or @@ -76,6 +80,7 @@ class Scope extends Scope_ { predicate isTopLevel() { this.getEnclosingModule() = this.getEnclosingScope() } /** Holds if this scope is deemed to be public */ + overlay[global] predicate isPublic() { /* Not inside a function */ not this.getEnclosingScope() instanceof Function and diff --git a/python/ql/lib/semmle/python/Stmts.qll b/python/ql/lib/semmle/python/Stmts.qll index ea309227af67..c0dfac10ee84 100644 --- a/python/ql/lib/semmle/python/Stmts.qll +++ b/python/ql/lib/semmle/python/Stmts.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** A statement */ diff --git a/python/ql/lib/semmle/python/Variables.qll b/python/ql/lib/semmle/python/Variables.qll index 1249fd020caa..d2baf04a5bf1 100644 --- a/python/ql/lib/semmle/python/Variables.qll +++ b/python/ql/lib/semmle/python/Variables.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** A variable, either a global or local variable (including parameters) */ diff --git a/python/ql/lib/semmle/python/essa/Definitions.qll b/python/ql/lib/semmle/python/essa/Definitions.qll index aca6991b9f69..6e7b8d5b376a 100644 --- a/python/ql/lib/semmle/python/essa/Definitions.qll +++ b/python/ql/lib/semmle/python/essa/Definitions.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /* * Classification of variables. These should be non-overlapping and complete. diff --git a/python/ql/lib/semmle/python/essa/Essa.qll b/python/ql/lib/semmle/python/essa/Essa.qll index 384bfd2f91fe..ebc22beedf33 100644 --- a/python/ql/lib/semmle/python/essa/Essa.qll +++ b/python/ql/lib/semmle/python/essa/Essa.qll @@ -1,6 +1,8 @@ /** * Library for SSA representation (Static Single Assignment form). */ +overlay[local] +module; import python private import SsaCompute diff --git a/python/ql/lib/semmle/python/essa/SsaCompute.qll b/python/ql/lib/semmle/python/essa/SsaCompute.qll index d2512eecdede..fb030b6250ee 100644 --- a/python/ql/lib/semmle/python/essa/SsaCompute.qll +++ b/python/ql/lib/semmle/python/essa/SsaCompute.qll @@ -88,6 +88,8 @@ * ``` * and thus it falls out that `g3` must be `1`. */ +overlay[local] +module; import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/essa/SsaDefinitions.qll b/python/ql/lib/semmle/python/essa/SsaDefinitions.qll index 6c87af102fa9..827bee34474e 100644 --- a/python/ql/lib/semmle/python/essa/SsaDefinitions.qll +++ b/python/ql/lib/semmle/python/essa/SsaDefinitions.qll @@ -2,6 +2,8 @@ * Provides classes and predicates for determining the uses and definitions of * variables for ESSA form. */ +overlay[local] +module; import python private import semmle.python.internal.CachedStages diff --git a/python/ql/lib/semmle/python/internal/CachedStages.qll b/python/ql/lib/semmle/python/internal/CachedStages.qll index 687cabeceaed..df96e8498556 100644 --- a/python/ql/lib/semmle/python/internal/CachedStages.qll +++ b/python/ql/lib/semmle/python/internal/CachedStages.qll @@ -35,6 +35,7 @@ module Stages { * Computes predicates based on the AST. * These include SSA and basic-blocks. */ + overlay[local] cached module AST { /** diff --git a/python/ql/lib/semmle/python/types/Builtins.qll b/python/ql/lib/semmle/python/types/Builtins.qll index 796397f72cd6..371cf758d5c5 100644 --- a/python/ql/lib/semmle/python/types/Builtins.qll +++ b/python/ql/lib/semmle/python/types/Builtins.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + import python private import LegacyPointsTo diff --git a/python/ql/lib/semmle/python/types/ImportTime.qll b/python/ql/lib/semmle/python/types/ImportTime.qll index 1604013d7ff4..27f70b09aa40 100644 --- a/python/ql/lib/semmle/python/types/ImportTime.qll +++ b/python/ql/lib/semmle/python/types/ImportTime.qll @@ -1,3 +1,6 @@ +overlay[local] +module; + import python /** From 51ebec91649184d0ca1c21d7d606405a7a464d38 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 5 Dec 2025 13:48:28 +0000 Subject: [PATCH 078/243] Python: Fix broken queries --- python/ql/lib/analysis/DefinitionTracking.qll | 7 +++---- .../LoopVariableCapture/LoopVariableCaptureQuery.qll | 8 +++++--- python/ql/src/analysis/ImportFailure.ql | 6 ++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/python/ql/lib/analysis/DefinitionTracking.qll b/python/ql/lib/analysis/DefinitionTracking.qll index 0d58bd69b7b6..21155970375b 100644 --- a/python/ql/lib/analysis/DefinitionTracking.qll +++ b/python/ql/lib/analysis/DefinitionTracking.qll @@ -471,11 +471,10 @@ Definition getUniqueDefinition(Expr use) { not result = TLocalDefinition(use) } -/** A helper class to get suitable locations for attributes */ -class NiceLocationExpr extends Expr { - /** Gets a textual representation of this element. */ - override string toString() { result = this.(Expr).toString() } +final class FinalExpr = Expr; +/** A helper class to get suitable locations for attributes */ +class NiceLocationExpr extends FinalExpr { /** * Holds if this element is at the specified location. * The location spans column `bc` of line `bl` to diff --git a/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll b/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll index 7f25701cac8e..987740236f24 100644 --- a/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll +++ b/python/ql/src/Variables/LoopVariableCapture/LoopVariableCaptureQuery.qll @@ -3,8 +3,10 @@ import python import semmle.python.dataflow.new.DataFlow +final class FinalAstNode = AstNode; + /** A looping construct. */ -abstract class Loop extends AstNode { +abstract class Loop extends FinalAstNode { /** * Gets a loop variable of this loop. * For example, `x` and `y` in `for x,y in pairs: print(x+y)` @@ -13,9 +15,9 @@ abstract class Loop extends AstNode { } /** A `for` loop. */ -private class ForLoop extends Loop, For { +private class ForLoop extends Loop instanceof For { override Variable getALoopVariable() { - this.getTarget() = result.getAnAccess().getParentNode*() and + this.(For).getTarget() = result.getAnAccess().getParentNode*() and result.getScope() = this.getScope() } } diff --git a/python/ql/src/analysis/ImportFailure.ql b/python/ql/src/analysis/ImportFailure.ql index c9289a8b474a..71967e6e04f7 100644 --- a/python/ql/src/analysis/ImportFailure.ql +++ b/python/ql/src/analysis/ImportFailure.ql @@ -59,7 +59,9 @@ predicate ok_to_fail(ImportExpr ie) { os_specific_import(ie) != get_os() } -class VersionTest extends ControlFlowNode { +final class FinalControlFlowNode = ControlFlowNode; + +class VersionTest extends FinalControlFlowNode { VersionTest() { exists(string name | name.matches("%version%") and @@ -70,7 +72,7 @@ class VersionTest extends ControlFlowNode { ) } - override string toString() { result = "VersionTest" } + string toString() { result = "VersionTest" } } /** A guard on the version of the Python interpreter */ From df0f2f8ce4cc271e4b0c5b7e06d10c42a97ffe97 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 30 Jan 2026 13:30:57 +0000 Subject: [PATCH 079/243] Python: Simple dataflow annotations None of these required any changes to the dataflow libraries, so it seemed easiest to put them in their own commit. --- python/ql/lib/semmle/python/ApiGraphs.qll | 2 ++ python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll | 1 + .../lib/semmle/python/dataflow/new/internal/Attributes.qll | 2 ++ .../ql/lib/semmle/python/dataflow/new/internal/Builtins.qll | 2 ++ .../semmle/python/dataflow/new/internal/FlowSummaryImpl.qll | 3 +++ .../lib/semmle/python/dataflow/new/internal/ImportStar.qll | 6 ++++++ .../python/dataflow/new/internal/IterableUnpacking.qll | 2 ++ .../semmle/python/dataflow/new/internal/MatchUnpacking.qll | 2 ++ .../semmle/python/dataflow/new/internal/VariableCapture.qll | 2 ++ python/ql/lib/semmle/python/frameworks/Flask.qll | 2 ++ python/ql/lib/semmle/python/frameworks/Stdlib.qll | 2 ++ .../ql/lib/semmle/python/frameworks/data/ModelsAsData.qll | 2 ++ .../frameworks/data/internal/ApiGraphModelsSpecific.qll | 2 ++ python/ql/lib/semmle/python/internal/Awaited.qll | 2 ++ python/ql/lib/semmle/python/internal/CachedStages.qll | 1 + .../test/library-tests/dataflow/summaries/TestSummaries.qll | 3 +++ .../dataflow/typetracking-summaries/TestSummaries.qll | 3 +++ 17 files changed, 39 insertions(+) diff --git a/python/ql/lib/semmle/python/ApiGraphs.qll b/python/ql/lib/semmle/python/ApiGraphs.qll index b45c10e1417e..efd8141efc6e 100644 --- a/python/ql/lib/semmle/python/ApiGraphs.qll +++ b/python/ql/lib/semmle/python/ApiGraphs.qll @@ -451,6 +451,7 @@ module API { * allowing this predicate to be used in a negative * context when constructing new nodes. */ + overlay[local] predicate moduleImportExists(string m) { Impl::isImported(m) and // restrict `moduleImport` so it will never give results for a dotted name. Note @@ -695,6 +696,7 @@ module API { * * This is determined syntactically. */ + overlay[local] cached predicate isImported(string name) { // Ignore the following module name for Python 2, as we alias `__builtin__` to `builtins` elsewhere diff --git a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll index f83870ab050d..f9a951241875 100644 --- a/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll +++ b/python/ql/lib/semmle/python/dataflow/new/FlowSummary.qll @@ -25,6 +25,7 @@ deprecated module SummaryComponentStack = Impl::Private::SummaryComponentStack; class Provenance = Impl::Public::Provenance; /** Provides the `Range` class used to define the extent of `SummarizedCallable`. */ +overlay[local] module SummarizedCallable { /** A callable with a flow summary, identified by a unique string. */ abstract class Range extends LibraryCallable, Impl::Public::SummarizedCallable { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll index e9bcc5e67855..8778ae288667 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll @@ -1,4 +1,6 @@ /** This module provides an API for attribute reads and writes. */ +overlay[local] +module; private import python import DataFlowUtil diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll index 9ed9e7d7a2b0..6a66d241083a 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Builtins.qll @@ -1,4 +1,6 @@ /** Provides predicates for reasoning about built-ins in Python. */ +overlay[local] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll index 449b51565a85..41cb0368b507 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/FlowSummaryImpl.qll @@ -1,6 +1,8 @@ /** * Provides classes and predicates for defining flow summaries. */ +overlay[local] +module; private import python private import codeql.dataflow.internal.FlowSummaryImpl @@ -99,6 +101,7 @@ module Input implements InputSig private import Make as Impl private module StepsInput implements Impl::Private::StepsInputSig { + overlay[global] DataFlowCall getACall(Public::SummarizedCallable sc) { result = TPotentialLibraryCall([ diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll b/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll index 564630c47dbc..83f8ee862c39 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/ImportStar.qll @@ -1,4 +1,6 @@ /** Provides predicates for reasoning about uses of `import *` in Python. */ +overlay[local] +module; private import python private import semmle.python.dataflow.new.internal.Builtins @@ -11,6 +13,7 @@ module ImportStar { * Holds if `n` is an access of a variable called `name` (which is _not_ the name of a * built-in, and which is _not_ a global defined in the enclosing module) inside the scope `s`. */ + overlay[local] cached predicate namePossiblyDefinedInImportStar(NameNode n, string name, Scope s) { n.isLoad() and @@ -61,6 +64,7 @@ module ImportStar { * Holds if `n` may refer to a global variable of the same name in the module `m`, accessible * from the scope of `n` by a chain of `import *` imports. */ + overlay[global] cached predicate importStarResolvesTo(NameNode n, Module m) { m = getStarImported+(n.getEnclosingModule()) and @@ -71,6 +75,7 @@ module ImportStar { /** * Gets a module that is imported from `m` via `import *`. */ + overlay[global] cached Module getStarImported(Module m) { exists(ImportStar i, DataFlow::CfgNode imported_module | @@ -92,6 +97,7 @@ module ImportStar { * * this would return the data-flow nodes corresponding to `foo.bar` and `quux`. */ + overlay[local] cached ControlFlowNode potentialImportStarBase(Scope s) { result = any(ImportStarNode n | n.getScope() = s).getModule() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll b/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll index e83e789c2fbc..5def15fa3c8a 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/IterableUnpacking.qll @@ -166,6 +166,8 @@ * * `c`: [ListElementContent] */ +overlay[local] +module; private import python private import DataFlowPublic diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll b/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll index 8064c34d9218..e72e378da528 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/MatchUnpacking.qll @@ -50,6 +50,8 @@ * keyword arguments using the `__match_args__` attribute on the class. We do not * currently model this. */ +overlay[local] +module; private import python private import DataFlowPublic diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll index 5ed365a8e56f..fbe05979328c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/VariableCapture.qll @@ -1,4 +1,6 @@ /** Provides logic related to captured variables. */ +overlay[local] +module; private import python private import DataFlowPublic diff --git a/python/ql/lib/semmle/python/frameworks/Flask.qll b/python/ql/lib/semmle/python/frameworks/Flask.qll index b9bba675ac05..f819e8679075 100644 --- a/python/ql/lib/semmle/python/frameworks/Flask.qll +++ b/python/ql/lib/semmle/python/frameworks/Flask.qll @@ -2,6 +2,8 @@ * Provides classes modeling security-relevant aspects of the `flask` PyPI package. * See https://flask.palletsprojects.com/en/1.1.x/. */ +overlay[local?] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index e749ab66f8b2..5d3b994880a1 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -2,6 +2,8 @@ * Provides classes modeling security-relevant aspects of the standard libraries. * Note: some modeling is done internally in the dataflow/taint tracking implementation. */ +overlay[local?] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll b/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll index e66f2c01d70a..542f8c995e98 100644 --- a/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll +++ b/python/ql/lib/semmle/python/frameworks/data/ModelsAsData.qll @@ -8,6 +8,8 @@ * The package name refers to the top-level module the import comes from, and not a PyPI package. * So for `from foo.bar import baz`, the package will be `foo`. */ +overlay[local?] +module; private import python private import internal.ApiGraphModels as Shared diff --git a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll index 7adc24bab14f..3136f87569c9 100644 --- a/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll +++ b/python/ql/lib/semmle/python/frameworks/data/internal/ApiGraphModelsSpecific.qll @@ -30,6 +30,7 @@ import semmle.python.dataflow.new.DataFlow::DataFlow as DataFlow * Holds if models describing `type` may be relevant for the analysis of this database. */ bindingset[type] +overlay[local] predicate isTypeUsed(string type) { // If `type` is a path, then it is the first component that should be imported. API::moduleImportExists(type.splitAt(".", 0)) @@ -39,6 +40,7 @@ predicate isTypeUsed(string type) { * Holds if `type` can be obtained from an instance of `otherType` due to * language semantics modeled by `getExtraNodeFromType`. */ +overlay[local] predicate hasImplicitTypeModel(string type, string otherType) { none() } /** Gets a Python-specific interpretation of the `(type, path)` tuple after resolving the first `n` access path tokens. */ diff --git a/python/ql/lib/semmle/python/internal/Awaited.qll b/python/ql/lib/semmle/python/internal/Awaited.qll index cd5162e6151e..43affdf95a4f 100644 --- a/python/ql/lib/semmle/python/internal/Awaited.qll +++ b/python/ql/lib/semmle/python/internal/Awaited.qll @@ -3,6 +3,8 @@ * * Provides helper class for defining additional API graph edges. */ +overlay[local] +module; private import python private import semmle.python.dataflow.new.DataFlow diff --git a/python/ql/lib/semmle/python/internal/CachedStages.qll b/python/ql/lib/semmle/python/internal/CachedStages.qll index df96e8498556..7379cc51372f 100644 --- a/python/ql/lib/semmle/python/internal/CachedStages.qll +++ b/python/ql/lib/semmle/python/internal/CachedStages.qll @@ -177,6 +177,7 @@ module Stages { * Always holds. * Ensures that a predicate is evaluated as part of the DataFlow stage. */ + overlay[local] cached predicate ref() { 1 = 1 } diff --git a/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll b/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll index 11b9c0ef09e6..14d68455d621 100644 --- a/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll +++ b/python/ql/test/library-tests/dataflow/summaries/TestSummaries.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import python private import semmle.python.dataflow.new.FlowSummary private import semmle.python.ApiGraphs diff --git a/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll b/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll index c4c4096c686a..57e0013b6e0e 100644 --- a/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll +++ b/python/ql/test/library-tests/dataflow/typetracking-summaries/TestSummaries.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import python private import semmle.python.dataflow.new.FlowSummary private import semmle.python.ApiGraphs From c46c662b726dc65e9740b0b0972d07145ffd919b Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 30 Jan 2026 13:31:44 +0000 Subject: [PATCH 080/243] Python: `LocalSources.qll` annotations --- .../semmle/python/dataflow/new/internal/LocalSources.qll | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll index 7752846ae1ff..5cbe7b44ab30 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll @@ -5,6 +5,8 @@ * Note that unlike `TypeTracker.qll`, this library only performs * local tracking within a function. */ +overlay[local] +module; private import python import DataFlowPublic @@ -77,6 +79,7 @@ class LocalSourceNode extends Node { } /** Holds if this `LocalSourceNode` can flow to `nodeTo` in one or more local flow steps. */ + overlay[caller] pragma[inline] predicate flowsTo(Node nodeTo) { Cached::hasLocalSource(nodeTo, this) } @@ -149,6 +152,7 @@ class LocalSourceNode extends Node { * * See `TypeTracker` for more details about how to use this. */ + overlay[global] pragma[inline] LocalSourceNode track(TypeTracker t2, TypeTracker t) { t = t2.step(this, result) } @@ -157,6 +161,7 @@ class LocalSourceNode extends Node { * * See `TypeBackTracker` for more details about how to use this. */ + overlay[global] pragma[inline] LocalSourceNode backtrack(TypeBackTracker t2, TypeBackTracker t) { t = t2.step(result, this) } } @@ -210,6 +215,7 @@ private module FutureWork { * * See `TypeTracker` for more details about how to use this. */ + overlay[global] pragma[inline] TypeTrackingNode track(TypeTracker t2, TypeTracker t) { t = t2.step(this, result) } @@ -218,6 +224,7 @@ private module FutureWork { * * See `TypeBackTracker` for more details about how to use this. */ + overlay[global] pragma[inline] TypeTrackingNode backtrack(TypeBackTracker t2, TypeBackTracker t) { t2 = t.step(result, this) } } From bd71db87be090782b3bd67694117bc1ccf818ba0 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 30 Jan 2026 13:33:33 +0000 Subject: [PATCH 081/243] Python: `DataFlowPublic.qll` annotations --- .../dataflow/new/internal/DataFlowPublic.qll | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index de26d988c068..f63d24a300ca 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -1,6 +1,8 @@ /** * Provides Python-specific definitions for use in the data flow library. */ +overlay[local] +module; private import python private import DataFlowPrivate @@ -22,6 +24,7 @@ private import semmle.python.frameworks.data.ModelsAsData * - Module variable nodes: These represent global variables and act as canonical targets for reads and writes of these. * - Synthetic nodes: These handle flow in various special cases. */ +overlay[local] newtype TNode = /** A node corresponding to a control flow node. */ TCfgNode(ControlFlowNode node) { @@ -157,6 +160,7 @@ private import semmle.python.internal.CachedStages * An element, viewed as a node in a data flow graph. Either an SSA variable * (`EssaNode`) or a control flow node (`CfgNode`). */ +overlay[local] class Node extends TNode { /** Gets a textual representation of this element. */ cached @@ -324,6 +328,7 @@ class ScopeEntryDefinitionNode extends Node, TScopeEntryDefinitionNode { * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ +overlay[local] class ParameterNode extends Node instanceof ParameterNodeImpl { /** Gets the parameter corresponding to this node, if any. */ final Parameter getParameter() { result = super.getParameter() } @@ -345,6 +350,7 @@ class LocalSourceParameterNode extends ExtractedParameterNode, LocalSourceNode { ExtractedParameterNode parameterNode(Parameter p) { result.getParameter() = p } /** A data flow node that represents a call argument. */ +overlay[global] abstract class ArgumentNode extends Node { /** Holds if this argument occurs at the given position in the given call. */ abstract predicate argumentOf(DataFlowCall call, ArgumentPosition pos); @@ -383,6 +389,7 @@ private Node implicitArgumentNode() { /** * A data flow node that represents a call argument found in the source code. */ +overlay[global] class ExtractedArgumentNode extends ArgumentNode { ExtractedArgumentNode() { this = getCallArgApproximation() @@ -469,6 +476,7 @@ class ModuleVariableNode extends Node, TModuleVariableNode { GlobalVariable getVariable() { result = var } /** Gets a node that reads this variable. */ + overlay[global] Node getARead() { result = this.getALocalRead() or @@ -500,10 +508,12 @@ class ModuleVariableNode extends Node, TModuleVariableNode { override Location getLocation() { result = mod.getLocation() } } +overlay[global] private ModuleVariableNode import_star_read(Node n) { resolved_import_star_module(result.getModule(), result.getVariable().getId(), n) } +overlay[global] pragma[nomagic] private predicate resolved_import_star_module(Module m, string name, Node n) { exists(NameNode nn | nn = n.asCfgNode() | @@ -625,6 +635,7 @@ signature predicate guardChecksSig(GuardNode g, ControlFlowNode node, boolean br * This is expected to be used in `isBarrier`/`isSanitizer` definitions * in data flow and taint tracking. */ +overlay[global] module BarrierGuard { /** Gets a node that is safely guarded by the given guard check. */ ExprNode getABarrierNode() { @@ -652,6 +663,7 @@ private module WithParam { */ module ParameterizedBarrierGuard::guardChecksSig/4 guardChecks> { /** Gets a node that is safely guarded by the given guard check with parameter `param`. */ + overlay[global] ExprNode getABarrierNode(P param) { exists(GuardNode g, EssaDefinition def, ControlFlowNode node, boolean branch | AdjacentUses::useOfDef(def, node) and @@ -671,6 +683,7 @@ module ParameterizedBarrierGuard::guardChecksSig/4 guar module ExternalBarrierGuard { private import semmle.python.ApiGraphs + overlay[global] private predicate guardCheck(GuardNode g, ControlFlowNode node, boolean branch, string kind) { exists(API::CallNode call, API::Node parameter | parameter = call.getAParameter() and @@ -689,6 +702,7 @@ module ExternalBarrierGuard { * * INTERNAL: Do not use. */ + overlay[global] ExprNode getAnExternalBarrierNode(string kind) { result = ParameterizedBarrierGuard::getABarrierNode(kind) } @@ -698,6 +712,7 @@ module ExternalBarrierGuard { * Algebraic datatype for tracking data content associated with values. * Content can be collection elements or object attributes. */ +overlay[local] newtype TContent = /** An element of a list. */ TListElementContent() or @@ -769,6 +784,7 @@ newtype TContent = * If the value is a collection, it can have elements, * if it is an object, it can have attribute values. */ +overlay[local] class Content extends TContent { /** Gets a textual representation of this element. */ string toString() { result = "Content" } From 7ea96c43ec44a97cb6d10cc9294a675e140c2ee3 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 30 Jan 2026 13:34:05 +0000 Subject: [PATCH 082/243] Python: `DataFlowPrivate.qll` annotations --- .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index 9866bd009642..fffd0150008e 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -1,3 +1,6 @@ +overlay[local?] +module; + private import python private import DataFlowPublic private import semmle.python.essa.SsaCompute @@ -39,6 +42,7 @@ predicate isArgumentNode(ArgumentNode arg, DataFlowCall c, ArgumentPosition pos) //-------- // Nodes //-------- +overlay[local] predicate isExpressionNode(ControlFlowNode node) { node.getNode() instanceof Expr } // ============================================================================= @@ -111,6 +115,7 @@ class SyntheticPreUpdateNode extends Node, TSyntheticPreUpdateNode { * func = foo if else bar * func(1, 2, 3) */ +overlay[local] class SynthStarArgsElementParameterNode extends ParameterNodeImpl, TSynthStarArgsElementParameterNode { @@ -241,6 +246,7 @@ private predicate dictSplatParameterNodeClearStep(ParameterNode n, DictionaryEle * (c) since the synthesized nodes are hidden, the reported data-flow paths will be * collapsed anyway. */ +overlay[local] class SynthDictSplatParameterNode extends ParameterNodeImpl, TSynthDictSplatParameterNode { DataFlowCallable callable; From 306d7d1b5db7871e666bac18fa8deb286c71f5c8 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 30 Jan 2026 13:35:46 +0000 Subject: [PATCH 083/243] Python: `DataFlowDispatch.qll` annotations --- .../new/internal/DataFlowDispatch.qll | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll index b04b83be83ec..d4444c6795bf 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowDispatch.qll @@ -31,6 +31,8 @@ * Note: This hasn't been 100% realized yet, so we don't currently expose a predicate to * ask what targets any data-flow node has. But it's still the plan to do this! */ +overlay[local?] +module; private import python private import DataFlowPublic @@ -39,6 +41,7 @@ private import FlowSummaryImpl as FlowSummaryImpl private import semmle.python.internal.CachedStages private import semmle.python.dataflow.new.internal.TypeTrackingImpl::CallGraphConstruction as CallGraphConstruction +overlay[local] newtype TParameterPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfParameterPosition() or @@ -84,6 +87,7 @@ newtype TParameterPosition = TSynthDictSplatParameterPosition() /** A parameter position. */ +overlay[local] class ParameterPosition extends TParameterPosition { /** Holds if this position represents a `self`/`cls` parameter. */ predicate isSelf() { this = TSelfParameterPosition() } @@ -146,6 +150,7 @@ class ParameterPosition extends TParameterPosition { } } +overlay[local] newtype TArgumentPosition = /** Used for `self` in methods, and `cls` in classmethods. */ TSelfArgumentPosition() or @@ -180,6 +185,7 @@ newtype TArgumentPosition = TDictSplatArgumentPosition() /** An argument position. */ +overlay[local] class ArgumentPosition extends TArgumentPosition { /** Holds if this position represents a `self`/`cls` argument. */ predicate isSelf() { this = TSelfArgumentPosition() } @@ -248,6 +254,7 @@ predicate parameterMatch(ParameterPosition ppos, ArgumentPosition apos) { * `@staticmethod` decorator or by convention * (like a `__new__` method on a class is a classmethod even without the decorator). */ +overlay[local] predicate isStaticmethod(Function func) { exists(NameNode id | id.getId() = "staticmethod" and id.isGlobal() | func.getADecorator() = id.getNode() @@ -259,6 +266,7 @@ predicate isStaticmethod(Function func) { * `@classmethod` decorator or by convention * (like a `__new__` method on a class is a classmethod even without the decorator). */ +overlay[local] predicate isClassmethod(Function func) { exists(NameNode id | id.getId() = "classmethod" and id.isGlobal() | func.getADecorator() = id.getNode() @@ -275,6 +283,7 @@ predicate isClassmethod(Function func) { } /** Holds if the function `func` has a `property` decorator. */ +overlay[local] predicate hasPropertyDecorator(Function func) { exists(NameNode id | id.getId() = "property" and id.isGlobal() | func.getADecorator() = id.getNode() @@ -284,6 +293,7 @@ predicate hasPropertyDecorator(Function func) { /** * Holds if the function `func` has a `contextlib.contextmanager`. */ +overlay[local] predicate hasContextmanagerDecorator(Function func) { exists(ControlFlowNode contextmanager | contextmanager.(NameNode).getId() = "contextmanager" and contextmanager.(NameNode).isGlobal() @@ -298,20 +308,25 @@ predicate hasContextmanagerDecorator(Function func) { // Callables // ============================================================================= /** A callable defined in library code, identified by a unique string. */ +overlay[local] abstract class LibraryCallable extends string { bindingset[this] LibraryCallable() { any() } /** Gets a call to this library callable. */ + overlay[global] abstract CallCfgNode getACall(); /** Same as `getACall` but without referring to the call graph or API graph. */ + overlay[global] CallCfgNode getACallSimple() { none() } /** Gets a data-flow node, where this library callable is used as a call-back. */ + overlay[global] abstract ArgumentNode getACallback(); } +overlay[local] newtype TDataFlowCallable = /** * Is used as the target for all calls: plain functions, lambdas, methods on classes, @@ -329,6 +344,7 @@ newtype TDataFlowCallable = TLibraryCallable(LibraryCallable callable) /** A callable. */ +overlay[local] abstract class DataFlowCallable extends TDataFlowCallable { /** Gets a textual representation of this element. */ abstract string toString(); @@ -350,6 +366,7 @@ abstract class DataFlowCallable extends TDataFlowCallable { } /** A callable function. */ +overlay[local] abstract class DataFlowFunction extends DataFlowCallable, TFunction { Function func; @@ -370,6 +387,7 @@ abstract class DataFlowFunction extends DataFlowCallable, TFunction { /** Gets the positional parameter offset, to take into account self/cls parameters. */ int positionalOffset() { result = 0 } + overlay[local] override ParameterNode getParameter(ParameterPosition ppos) { // Do not handle lower bound positions (such as `[1..]`) here // they are handled by parameter matching and would create @@ -408,11 +426,13 @@ abstract class DataFlowFunction extends DataFlowCallable, TFunction { } /** A plain (non-method) function. */ +overlay[local] class DataFlowPlainFunction extends DataFlowFunction { DataFlowPlainFunction() { not this instanceof DataFlowMethod } } /** A method. */ +overlay[local] class DataFlowMethod extends DataFlowFunction { Class cls; @@ -431,11 +451,13 @@ class DataFlowMethod extends DataFlowFunction { } /** A classmethod. */ +overlay[local] class DataFlowClassmethod extends DataFlowMethod { DataFlowClassmethod() { isClassmethod(func) } } /** A staticmethod. */ +overlay[local] class DataFlowStaticmethod extends DataFlowMethod, DataFlowFunction { DataFlowStaticmethod() { isStaticmethod(func) } @@ -450,6 +472,7 @@ class DataFlowStaticmethod extends DataFlowMethod, DataFlowFunction { * A module. This is not actually a callable, but we need this so a * `ModuleVariableNode` have an enclosing callable. */ +overlay[local] class DataFlowModuleScope extends DataFlowCallable, TModule { Module mod; @@ -466,6 +489,7 @@ class DataFlowModuleScope extends DataFlowCallable, TModule { override ParameterNode getParameter(ParameterPosition ppos) { none() } } +overlay[local] class LibraryCallableValue extends DataFlowCallable, TLibraryCallable { LibraryCallable callable; @@ -476,6 +500,7 @@ class LibraryCallableValue extends DataFlowCallable, TLibraryCallable { override string getQualifiedName() { result = callable.toString() } /** Gets a data-flow node, where this library callable is used as a call-back. */ + overlay[global] ArgumentNode getACallback() { result = callable.getACallback() } override Scope getScope() { none() } @@ -1210,6 +1235,7 @@ predicate resolveCall(CallNode call, Function target, CallType type) { * Holds if the argument of `call` at position `apos` is `arg`. This is just a helper * predicate that maps ArgumentPositions to the arguments of the underlying `CallNode`. */ +overlay[local] cached predicate normalCallArg(CallNode call, Node arg, ArgumentPosition apos) { exists(int index | @@ -1589,6 +1615,7 @@ class SummaryCall extends DataFlowCall, TSummaryCall { * The value of a parameter at function entry, viewed as a node in a data * flow graph. */ +overlay[local] abstract class ParameterNodeImpl extends Node { /** Gets the `Parameter` this `ParameterNode` represents. */ abstract Parameter getParameter(); @@ -1610,6 +1637,7 @@ abstract class ParameterNodeImpl extends Node { * * This is used for tracking flow through captured variables. */ +overlay[local] class SynthCapturedVariablesParameterNode extends ParameterNodeImpl, TSynthCapturedVariablesParameterNode { @@ -1634,6 +1662,7 @@ class SynthCapturedVariablesParameterNode extends ParameterNodeImpl, } /** A parameter for a library callable with a flow summary. */ +overlay[local] class SummaryParameterNode extends ParameterNodeImpl, FlowSummaryNode { SummaryParameterNode() { FlowSummaryImpl::Private::summaryParameterNode(this.getSummaryNode(), _) @@ -1684,6 +1713,7 @@ private class SummaryReturnNode extends FlowSummaryNode, ReturnNode { override ReturnKind getKind() { result = rk } } +overlay[global] private class SummaryArgumentNode extends FlowSummaryNode, ArgumentNode { private SummaryCall call_; private ArgumentPosition pos_; @@ -1737,6 +1767,7 @@ class SynthCapturedVariablesArgumentNode extends Node, TSynthCapturedVariablesAr class CapturedVariablesArgumentNodeAsArgumentNode extends ArgumentNode, SynthCapturedVariablesArgumentNode { + overlay[global] override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { exists(CallNode callNode | callNode = this.getCallNode() | callNode = call.getNode() and @@ -1773,6 +1804,7 @@ class SynthCapturedVariablesArgumentPostUpdateNode extends PostUpdateNodeImpl, } /** A synthetic node representing the values of variables captured by a comprehension. */ +overlay[local] class SynthCompCapturedVariablesArgumentNode extends Node, TSynthCompCapturedVariablesArgumentNode { Comp comp; @@ -1790,6 +1822,7 @@ class SynthCompCapturedVariablesArgumentNode extends Node, TSynthCompCapturedVar class SynthCompCapturedVariablesArgumentNodeAsArgumentNode extends SynthCompCapturedVariablesArgumentNode, ArgumentNode { + overlay[global] override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { call.(ComprehensionCall).getComprehension() = comp and pos.isLambdaSelf() @@ -1834,12 +1867,14 @@ DataFlowCallable viableCallable(DataFlowCall call) { // ============================================================================= // Remaining required data-flow things // ============================================================================= +overlay[local] private newtype TReturnKind = TNormalReturnKind() /** * A return kind. A return kind describes how a value can be returned * from a callable. For Python, this is simply a method return. */ +overlay[local] class ReturnKind extends TReturnKind { /** Gets a textual representation of this element. */ string toString() { result = "return" } From 248932db7a5abea60d4330670fa05d2a6531e3bb Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 30 Jan 2026 14:07:33 +0000 Subject: [PATCH 084/243] Python: Fix `frameworks/data/warnings.ql` --- python/ql/test/library-tests/frameworks/data/warnings.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/test/library-tests/frameworks/data/warnings.ql b/python/ql/test/library-tests/frameworks/data/warnings.ql index f09684132359..07c746547dd3 100644 --- a/python/ql/test/library-tests/frameworks/data/warnings.ql +++ b/python/ql/test/library-tests/frameworks/data/warnings.ql @@ -2,6 +2,7 @@ import python import semmle.python.frameworks.data.internal.ApiGraphModels as ApiGraphModels import semmle.python.frameworks.data.ModelsAsData +overlay[local] class IsTesting extends ApiGraphModels::TestAllModels { IsTesting() { this = this } } From 72f5109ec23ff34589c16fc9563a4066967792cb Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 2 Feb 2026 13:37:12 +0000 Subject: [PATCH 085/243] Python: Add more `overlay[caller]` to `Flow.qll` These were causing the repo `gufolabs/noc` to spend ~30 seconds evaluating `ControlFlowNode.strictlyDominates`. Just in case, I added `overlay[caller] to the other instances of `pragma[inline]` as well. --- python/ql/lib/semmle/python/Flow.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/ql/lib/semmle/python/Flow.qll b/python/ql/lib/semmle/python/Flow.qll index b29f9fd13839..94caf513aa98 100644 --- a/python/ql/lib/semmle/python/Flow.qll +++ b/python/ql/lib/semmle/python/Flow.qll @@ -194,6 +194,7 @@ class ControlFlowNode extends @py_flow_node { predicate isNormalExit() { py_scope_flow(this, _, 0) or py_scope_flow(this, _, 2) } /** Whether this strictly dominates other. */ + overlay[caller] pragma[inline] predicate strictlyDominates(ControlFlowNode other) { // This predicate is gigantic, so it must be inlined. @@ -207,6 +208,7 @@ class ControlFlowNode extends @py_flow_node { * Whether this dominates other. * Note that all nodes dominate themselves. */ + overlay[caller] pragma[inline] predicate dominates(ControlFlowNode other) { // This predicate is gigantic, so it must be inlined. @@ -216,6 +218,7 @@ class ControlFlowNode extends @py_flow_node { } /** Whether this strictly reaches other. */ + overlay[caller] pragma[inline] predicate strictlyReaches(ControlFlowNode other) { // This predicate is gigantic, even larger than strictlyDominates, From 987b10ab3e7c731e1d3f709d997ef0c156770e3b Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 3 Feb 2026 13:39:06 +0000 Subject: [PATCH 086/243] Python: Fix bad join in `OutgoingRequestCall` On `keras-team/keras`, this was producing ~200 million intermediate tuples in order to produce a total of ... 2 tuples. After the refactor, max intermediate tuple count is ~80k for the charpred (and 4 for the new helper predicate). --- .../lib/semmle/python/frameworks/Requests.qll | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Requests.qll b/python/ql/lib/semmle/python/frameworks/Requests.qll index 4c8038787c96..30980d473225 100644 --- a/python/ql/lib/semmle/python/frameworks/Requests.qll +++ b/python/ql/lib/semmle/python/frameworks/Requests.qll @@ -24,6 +24,18 @@ private import semmle.python.frameworks.data.ModelsAsData * - https://requests.readthedocs.io/en/latest/ */ module Requests { + /** Join-order helper for `OutgoingRequestCall`. */ + pragma[nomagic] + private API::Node sessionInstance() { + exists(API::Node moduleExporting | + moduleExporting in [ + API::moduleImport("requests"), // + API::moduleImport("requests").getMember("sessions") + ] and + result = moduleExporting.getMember(["Session", "session"]).getReturn() + ) + } + /** * An outgoing HTTP request, from the `requests` library. * @@ -37,15 +49,7 @@ module Requests { ( this = API::moduleImport("requests").getMember(methodName).getACall() or - exists(API::Node moduleExporting, API::Node sessionInstance | - moduleExporting in [ - API::moduleImport("requests"), // - API::moduleImport("requests").getMember("sessions") - ] and - sessionInstance = moduleExporting.getMember(["Session", "session"]).getReturn() - | - this = sessionInstance.getMember(methodName).getACall() - ) + this = sessionInstance().getMember(methodName).getACall() ) } From 304cd12fff6627723b5bf7a013f1f3156e6255a3 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 3 Feb 2026 16:40:12 +0000 Subject: [PATCH 087/243] Python: Fix bad join in `missing_imported_module` This caused a ~30x blowup in intermediate tuples, now back to baseline. --- python/ql/lib/semmle/python/objects/TObject.qll | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/objects/TObject.qll b/python/ql/lib/semmle/python/objects/TObject.qll index c041827ff5a9..cfa8cb5aa07b 100644 --- a/python/ql/lib/semmle/python/objects/TObject.qll +++ b/python/ql/lib/semmle/python/objects/TObject.qll @@ -397,6 +397,12 @@ private predicate neither_class_nor_static_method(Function f) { ) } +/** Join-order helper for `missing_imported_module`. */ +pragma[nomagic] +private predicate module_has_syntaxerror(Module m) { + exists(SyntaxError se | se.getFile() = m.getFile()) +} + predicate missing_imported_module(ControlFlowNode imp, Context ctx, string name) { ctx.isImport() and imp.(ImportExprNode).getNode().getAnImportedModuleName() = name and @@ -404,9 +410,9 @@ predicate missing_imported_module(ControlFlowNode imp, Context ctx, string name) not exists(Module m | m.getName() = name) and not exists(Builtin b | b.isModule() and b.getName() = name) or - exists(Module m, SyntaxError se | + exists(Module m | m.getName() = name and - se.getFile() = m.getFile() + module_has_syntaxerror(m) ) ) or From 2b78a7b256ace097aa9cbd06b4003dd8b214aabd Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 16 Feb 2026 15:21:30 +0100 Subject: [PATCH 088/243] C#: Add PartialEvent test case. --- .../partial/MethodIsPartial.expected | 14 +- .../ql/test/library-tests/partial/Partial.cs | 8 + .../library-tests/partial/Partial1.expected | 24 +-- .../library-tests/partial/Partial2.expected | 26 +-- .../partial/PartialAccessors.expected | 20 +- .../partial/PartialConstructors.expected | 6 +- .../partial/PartialEvents.expected | 2 + .../library-tests/partial/PartialEvents.ql | 7 + .../partial/PartialIndexers.expected | 4 +- .../partial/PartialMethodBody.expected | 6 +- .../partial/PartialProperties.expected | 4 +- .../library-tests/partial/PrintAst.expected | 178 ++++++++++-------- 12 files changed, 168 insertions(+), 131 deletions(-) create mode 100644 csharp/ql/test/library-tests/partial/PartialEvents.expected create mode 100644 csharp/ql/test/library-tests/partial/PartialEvents.ql diff --git a/csharp/ql/test/library-tests/partial/MethodIsPartial.expected b/csharp/ql/test/library-tests/partial/MethodIsPartial.expected index 4c0e905d8c56..a0f1f88fb981 100644 --- a/csharp/ql/test/library-tests/partial/MethodIsPartial.expected +++ b/csharp/ql/test/library-tests/partial/MethodIsPartial.expected @@ -1,7 +1,7 @@ -| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | true | -| Partial.cs:5:17:5:23 | Method2 | false | -| Partial.cs:14:18:14:39 | PartialMethodWithBody1 | true | -| Partial.cs:15:17:15:23 | Method3 | false | -| Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | true | -| Partial.cs:35:17:35:23 | Method4 | false | -| Partial.cs:40:17:40:23 | Method5 | false | +| Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 | true | +| Partial.cs:7:17:7:23 | Method2 | false | +| Partial.cs:18:18:18:39 | PartialMethodWithBody1 | true | +| Partial.cs:19:17:19:23 | Method3 | false | +| Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 | true | +| Partial.cs:42:17:42:23 | Method4 | false | +| Partial.cs:47:17:47:23 | Method5 | false | diff --git a/csharp/ql/test/library-tests/partial/Partial.cs b/csharp/ql/test/library-tests/partial/Partial.cs index 5a3e4af2e8c0..8dd757fcd24d 100644 --- a/csharp/ql/test/library-tests/partial/Partial.cs +++ b/csharp/ql/test/library-tests/partial/Partial.cs @@ -1,3 +1,5 @@ +using System; + partial class TwoPartClass { partial void PartialMethodWithBody1(); @@ -7,6 +9,8 @@ public void Method2() { } public partial object PartialProperty1 { get; set; } // Declaring declaration. public partial object this[int index] { get; set; } + // Declaring declaration. + public partial event EventHandler PartialEvent1; } partial class TwoPartClass @@ -27,6 +31,9 @@ public partial object this[int index] get { return _backingArray[index]; } set { _backingArray[index] = value; } } + + // Implementation declaration. + public partial event EventHandler PartialEvent1 { add { } remove { } } } partial class OnePartPartialClass @@ -44,4 +51,5 @@ public object this[int index] get { return null; } set { } } + public event EventHandler Event; } diff --git a/csharp/ql/test/library-tests/partial/Partial1.expected b/csharp/ql/test/library-tests/partial/Partial1.expected index 55dcaabcea7d..3fd8b9e2fd45 100644 --- a/csharp/ql/test/library-tests/partial/Partial1.expected +++ b/csharp/ql/test/library-tests/partial/Partial1.expected @@ -1,14 +1,14 @@ -| Partial.cs:1:15:1:26 | TwoPartClass | -| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | -| Partial.cs:12:15:12:26 | TwoPartClass | -| Partial.cs:14:18:14:39 | PartialMethodWithBody1 | -| Partial.cs:18:27:18:42 | PartialProperty1 | -| Partial.cs:20:9:20:11 | get_PartialProperty1 | -| Partial.cs:21:9:21:11 | set_PartialProperty1 | -| Partial.cs:25:27:25:30 | Item | -| Partial.cs:27:9:27:11 | get_Item | -| Partial.cs:28:9:28:11 | set_Item | -| Partial.cs:32:15:32:33 | OnePartPartialClass | -| Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | +| Partial.cs:3:15:3:26 | TwoPartClass | +| Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 | +| Partial.cs:16:15:16:26 | TwoPartClass | +| Partial.cs:18:18:18:39 | PartialMethodWithBody1 | +| Partial.cs:22:27:22:42 | PartialProperty1 | +| Partial.cs:24:9:24:11 | get_PartialProperty1 | +| Partial.cs:25:9:25:11 | set_PartialProperty1 | +| Partial.cs:29:27:29:30 | Item | +| Partial.cs:31:9:31:11 | get_Item | +| Partial.cs:32:9:32:11 | set_Item | +| Partial.cs:39:15:39:33 | OnePartPartialClass | +| Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 | | PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | | PartialMultipleFiles2.cs:1:22:1:41 | PartialMultipleFiles | diff --git a/csharp/ql/test/library-tests/partial/Partial2.expected b/csharp/ql/test/library-tests/partial/Partial2.expected index 87194dd3f9eb..8d608c26011c 100644 --- a/csharp/ql/test/library-tests/partial/Partial2.expected +++ b/csharp/ql/test/library-tests/partial/Partial2.expected @@ -1,15 +1,15 @@ -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:1:15:1:26 | | -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 | -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:14:18:14:39 | PartialMethodWithBody1 | -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:15:17:15:23 | Method3 | -| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:1:15:1:26 | | -| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | -| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:5:17:5:23 | Method2 | -| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:14:18:14:39 | PartialMethodWithBody1 | -| Partial.cs:12:15:12:26 | TwoPartClass | Partial.cs:15:17:15:23 | Method3 | -| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:32:15:32:33 | | -| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | -| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:35:17:35:23 | Method4 | +| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:3:15:3:26 | | +| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 | +| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:7:17:7:23 | Method2 | +| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:18:18:18:39 | PartialMethodWithBody1 | +| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:19:17:19:23 | Method3 | +| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:3:15:3:26 | | +| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 | +| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:7:17:7:23 | Method2 | +| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:18:18:18:39 | PartialMethodWithBody1 | +| Partial.cs:16:15:16:26 | TwoPartClass | Partial.cs:19:17:19:23 | Method3 | +| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:39:15:39:33 | | +| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 | +| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:42:17:42:23 | Method4 | | PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | | | PartialMultipleFiles2.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | | diff --git a/csharp/ql/test/library-tests/partial/PartialAccessors.expected b/csharp/ql/test/library-tests/partial/PartialAccessors.expected index 2c69ed620ae6..e9180ffce566 100644 --- a/csharp/ql/test/library-tests/partial/PartialAccessors.expected +++ b/csharp/ql/test/library-tests/partial/PartialAccessors.expected @@ -1,8 +1,12 @@ -| Partial.cs:20:9:20:11 | get_PartialProperty1 | true | -| Partial.cs:21:9:21:11 | set_PartialProperty1 | true | -| Partial.cs:27:9:27:11 | get_Item | true | -| Partial.cs:28:9:28:11 | set_Item | true | -| Partial.cs:41:30:41:32 | get_Property | false | -| Partial.cs:41:35:41:37 | set_Property | false | -| Partial.cs:44:9:44:11 | get_Item | false | -| Partial.cs:45:9:45:11 | set_Item | false | +| Partial.cs:13:39:13:51 | add_PartialEvent1 | false | +| Partial.cs:13:39:13:51 | remove_PartialEvent1 | false | +| Partial.cs:24:9:24:11 | get_PartialProperty1 | true | +| Partial.cs:25:9:25:11 | set_PartialProperty1 | true | +| Partial.cs:31:9:31:11 | get_Item | true | +| Partial.cs:32:9:32:11 | set_Item | true | +| Partial.cs:48:30:48:32 | get_Property | false | +| Partial.cs:48:35:48:37 | set_Property | false | +| Partial.cs:51:9:51:11 | get_Item | false | +| Partial.cs:52:9:52:11 | set_Item | false | +| Partial.cs:54:31:54:35 | add_Event | false | +| Partial.cs:54:31:54:35 | remove_Event | false | diff --git a/csharp/ql/test/library-tests/partial/PartialConstructors.expected b/csharp/ql/test/library-tests/partial/PartialConstructors.expected index 01779f1b81ed..69cabb244f53 100644 --- a/csharp/ql/test/library-tests/partial/PartialConstructors.expected +++ b/csharp/ql/test/library-tests/partial/PartialConstructors.expected @@ -1,4 +1,4 @@ -| Partial.cs:1:15:1:26 | TwoPartClass | Partial.cs:1:15:1:26 | {...} | -| Partial.cs:32:15:32:33 | OnePartPartialClass | Partial.cs:32:15:32:33 | {...} | -| Partial.cs:38:7:38:21 | NonPartialClass | Partial.cs:38:7:38:21 | {...} | +| Partial.cs:3:15:3:26 | TwoPartClass | Partial.cs:3:15:3:26 | {...} | +| Partial.cs:39:15:39:33 | OnePartPartialClass | Partial.cs:39:15:39:33 | {...} | +| Partial.cs:45:7:45:21 | NonPartialClass | Partial.cs:45:7:45:21 | {...} | | PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | PartialMultipleFiles1.cs:1:22:1:41 | {...} | diff --git a/csharp/ql/test/library-tests/partial/PartialEvents.expected b/csharp/ql/test/library-tests/partial/PartialEvents.expected new file mode 100644 index 000000000000..e3ee325248a8 --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialEvents.expected @@ -0,0 +1,2 @@ +| Partial.cs:13:39:13:51 | PartialEvent1 | false | +| Partial.cs:54:31:54:35 | Event | false | diff --git a/csharp/ql/test/library-tests/partial/PartialEvents.ql b/csharp/ql/test/library-tests/partial/PartialEvents.ql new file mode 100644 index 000000000000..e9f452502667 --- /dev/null +++ b/csharp/ql/test/library-tests/partial/PartialEvents.ql @@ -0,0 +1,7 @@ +import csharp + +private boolean isPartial(Event e) { if e.isPartial() then result = true else result = false } + +from Event e +where e.fromSource() +select e, isPartial(e) diff --git a/csharp/ql/test/library-tests/partial/PartialIndexers.expected b/csharp/ql/test/library-tests/partial/PartialIndexers.expected index 151ed5aad03a..be625fc4ad51 100644 --- a/csharp/ql/test/library-tests/partial/PartialIndexers.expected +++ b/csharp/ql/test/library-tests/partial/PartialIndexers.expected @@ -1,2 +1,2 @@ -| Partial.cs:25:27:25:30 | Item | true | -| Partial.cs:42:19:42:22 | Item | false | +| Partial.cs:29:27:29:30 | Item | true | +| Partial.cs:49:19:49:22 | Item | false | diff --git a/csharp/ql/test/library-tests/partial/PartialMethodBody.expected b/csharp/ql/test/library-tests/partial/PartialMethodBody.expected index b75a105bea05..a91a156cb627 100644 --- a/csharp/ql/test/library-tests/partial/PartialMethodBody.expected +++ b/csharp/ql/test/library-tests/partial/PartialMethodBody.expected @@ -1,3 +1,3 @@ -| Partial.cs:4:18:4:42 | PartialMethodWithoutBody1 | false | -| Partial.cs:14:18:14:39 | PartialMethodWithBody1 | true | -| Partial.cs:34:18:34:42 | PartialMethodWithoutBody2 | false | +| Partial.cs:6:18:6:42 | PartialMethodWithoutBody1 | false | +| Partial.cs:18:18:18:39 | PartialMethodWithBody1 | true | +| Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 | false | diff --git a/csharp/ql/test/library-tests/partial/PartialProperties.expected b/csharp/ql/test/library-tests/partial/PartialProperties.expected index 8d2dfc01e74a..4686bbf087a4 100644 --- a/csharp/ql/test/library-tests/partial/PartialProperties.expected +++ b/csharp/ql/test/library-tests/partial/PartialProperties.expected @@ -1,2 +1,2 @@ -| Partial.cs:18:27:18:42 | PartialProperty1 | true | -| Partial.cs:41:19:41:26 | Property | false | +| Partial.cs:22:27:22:42 | PartialProperty1 | true | +| Partial.cs:48:19:48:26 | Property | false | diff --git a/csharp/ql/test/library-tests/partial/PrintAst.expected b/csharp/ql/test/library-tests/partial/PrintAst.expected index 0729946b18be..90471e0a80c8 100644 --- a/csharp/ql/test/library-tests/partial/PrintAst.expected +++ b/csharp/ql/test/library-tests/partial/PrintAst.expected @@ -1,94 +1,110 @@ Partial.cs: -# 1| [Class] TwoPartClass -# 4| 6: [Method] PartialMethodWithoutBody1 -# 4| -1: [TypeMention] Void -# 5| 7: [Method] Method2 -# 5| -1: [TypeMention] Void -# 5| 4: [BlockStmt] {...} -# 14| 8: [Method] PartialMethodWithBody1 -# 3| -1: [TypeMention] Void -# 14| 4: [BlockStmt] {...} -# 15| 9: [Method] Method3 -# 15| -1: [TypeMention] Void -# 15| 4: [BlockStmt] {...} -# 16| 10: [Field] _backingField -# 16| -1: [TypeMention] object -# 18| 11: [Property] PartialProperty1 -# 7| -1: [TypeMention] object -# 18| -1: [TypeMention] object -# 20| 3: [Getter] get_PartialProperty1 -# 20| 4: [BlockStmt] {...} -# 20| 0: [ReturnStmt] return ...; -# 20| 0: [FieldAccess] access to field _backingField -# 21| 4: [Setter] set_PartialProperty1 +# 3| [Class] TwoPartClass +# 6| 6: [Method] PartialMethodWithoutBody1 +# 6| -1: [TypeMention] Void +# 7| 7: [Method] Method2 +# 7| -1: [TypeMention] Void +# 7| 4: [BlockStmt] {...} +# 13| 8: [Event] PartialEvent1 +# 13| -1: [TypeMention] EventHandler +# 13| 3: [AddEventAccessor] add_PartialEvent1 +#-----| 2: (Parameters) +# 13| 0: [Parameter] value +# 13| 4: [RemoveEventAccessor] remove_PartialEvent1 #-----| 2: (Parameters) -# 21| 0: [Parameter] value -# 21| 4: [BlockStmt] {...} -# 21| 0: [ExprStmt] ...; -# 21| 0: [AssignExpr] ... = ... -# 21| 0: [FieldAccess] access to field _backingField -# 21| 1: [ParameterAccess] access to parameter value -# 23| 12: [Field] _backingArray -# 23| -1: [TypeMention] Object[] -# 23| 1: [TypeMention] object -# 25| 13: [Indexer] Item +# 13| 0: [Parameter] value +# 18| 9: [Method] PartialMethodWithBody1 +# 5| -1: [TypeMention] Void +# 18| 4: [BlockStmt] {...} +# 19| 10: [Method] Method3 +# 19| -1: [TypeMention] Void +# 19| 4: [BlockStmt] {...} +# 20| 11: [Field] _backingField +# 20| -1: [TypeMention] object +# 22| 12: [Property] PartialProperty1 # 9| -1: [TypeMention] object -# 25| -1: [TypeMention] object +# 22| -1: [TypeMention] object +# 24| 3: [Getter] get_PartialProperty1 +# 24| 4: [BlockStmt] {...} +# 24| 0: [ReturnStmt] return ...; +# 24| 0: [FieldAccess] access to field _backingField +# 25| 4: [Setter] set_PartialProperty1 +#-----| 2: (Parameters) +# 25| 0: [Parameter] value +# 25| 4: [BlockStmt] {...} +# 25| 0: [ExprStmt] ...; +# 25| 0: [AssignExpr] ... = ... +# 25| 0: [FieldAccess] access to field _backingField +# 25| 1: [ParameterAccess] access to parameter value +# 27| 13: [Field] _backingArray +# 27| -1: [TypeMention] Object[] +# 27| 1: [TypeMention] object +# 29| 14: [Indexer] Item +# 11| -1: [TypeMention] object +# 29| -1: [TypeMention] object #-----| 1: (Parameters) -# 9| 0: [Parameter] index -# 9| -1: [TypeMention] int -# 25| -1: [TypeMention] int -# 27| 3: [Getter] get_Item +# 11| 0: [Parameter] index +# 11| -1: [TypeMention] int +# 29| -1: [TypeMention] int +# 31| 3: [Getter] get_Item #-----| 2: (Parameters) -# 25| 0: [Parameter] index -# 27| 4: [BlockStmt] {...} -# 27| 0: [ReturnStmt] return ...; -# 27| 0: [ArrayAccess] access to array element -# 27| -1: [FieldAccess] access to field _backingArray -# 27| 0: [ParameterAccess] access to parameter index -# 28| 4: [Setter] set_Item +# 29| 0: [Parameter] index +# 31| 4: [BlockStmt] {...} +# 31| 0: [ReturnStmt] return ...; +# 31| 0: [ArrayAccess] access to array element +# 31| -1: [FieldAccess] access to field _backingArray +# 31| 0: [ParameterAccess] access to parameter index +# 32| 4: [Setter] set_Item #-----| 2: (Parameters) -# 25| 0: [Parameter] index -# 28| 1: [Parameter] value -# 28| 4: [BlockStmt] {...} -# 28| 0: [ExprStmt] ...; -# 28| 0: [AssignExpr] ... = ... -# 28| 0: [ArrayAccess] access to array element -# 28| -1: [FieldAccess] access to field _backingArray -# 28| 0: [ParameterAccess] access to parameter index -# 28| 1: [ParameterAccess] access to parameter value -# 32| [Class] OnePartPartialClass -# 34| 6: [Method] PartialMethodWithoutBody2 -# 34| -1: [TypeMention] Void -# 35| 7: [Method] Method4 -# 35| -1: [TypeMention] Void -# 35| 4: [BlockStmt] {...} -# 38| [Class] NonPartialClass -# 40| 6: [Method] Method5 -# 40| -1: [TypeMention] Void -# 40| 4: [BlockStmt] {...} -# 41| 7: [Property] Property -# 41| -1: [TypeMention] object -# 41| 3: [Getter] get_Property -# 41| 4: [Setter] set_Property +# 29| 0: [Parameter] index +# 32| 1: [Parameter] value +# 32| 4: [BlockStmt] {...} +# 32| 0: [ExprStmt] ...; +# 32| 0: [AssignExpr] ... = ... +# 32| 0: [ArrayAccess] access to array element +# 32| -1: [FieldAccess] access to field _backingArray +# 32| 0: [ParameterAccess] access to parameter index +# 32| 1: [ParameterAccess] access to parameter value +# 39| [Class] OnePartPartialClass +# 41| 6: [Method] PartialMethodWithoutBody2 +# 41| -1: [TypeMention] Void +# 42| 7: [Method] Method4 +# 42| -1: [TypeMention] Void +# 42| 4: [BlockStmt] {...} +# 45| [Class] NonPartialClass +# 47| 6: [Method] Method5 +# 47| -1: [TypeMention] Void +# 47| 4: [BlockStmt] {...} +# 48| 7: [Property] Property +# 48| -1: [TypeMention] object +# 48| 3: [Getter] get_Property +# 48| 4: [Setter] set_Property #-----| 2: (Parameters) -# 41| 0: [Parameter] value -# 42| 8: [Indexer] Item -# 42| -1: [TypeMention] object +# 48| 0: [Parameter] value +# 49| 8: [Indexer] Item +# 49| -1: [TypeMention] object #-----| 1: (Parameters) -# 42| 0: [Parameter] index -# 42| -1: [TypeMention] int -# 44| 3: [Getter] get_Item +# 49| 0: [Parameter] index +# 49| -1: [TypeMention] int +# 51| 3: [Getter] get_Item +#-----| 2: (Parameters) +# 49| 0: [Parameter] index +# 51| 4: [BlockStmt] {...} +# 51| 0: [ReturnStmt] return ...; +# 51| 0: [NullLiteral] null +# 52| 4: [Setter] set_Item +#-----| 2: (Parameters) +# 49| 0: [Parameter] index +# 52| 1: [Parameter] value +# 52| 4: [BlockStmt] {...} +# 54| 9: [Event] Event +# 54| -1: [TypeMention] EventHandler +# 54| 3: [AddEventAccessor] add_Event #-----| 2: (Parameters) -# 42| 0: [Parameter] index -# 44| 4: [BlockStmt] {...} -# 44| 0: [ReturnStmt] return ...; -# 44| 0: [NullLiteral] null -# 45| 4: [Setter] set_Item +# 54| 0: [Parameter] value +# 54| 4: [RemoveEventAccessor] remove_Event #-----| 2: (Parameters) -# 42| 0: [Parameter] index -# 45| 1: [Parameter] value -# 45| 4: [BlockStmt] {...} +# 54| 0: [Parameter] value PartialMultipleFiles1.cs: # 1| [Class] PartialMultipleFiles PartialMultipleFiles2.cs: From eec47394972bb2955728dd702fb17c900ed8d824 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 16 Feb 2026 16:00:26 +0100 Subject: [PATCH 089/243] C#: Add viable callable test for partial event. --- .../ql/test/library-tests/dispatch/CallGraph.expected | 10 ++++++---- .../library-tests/dispatch/GetADynamicTarget.expected | 10 ++++++---- .../ql/test/library-tests/dispatch/ViableCallable.cs | 8 ++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/csharp/ql/test/library-tests/dispatch/CallGraph.expected b/csharp/ql/test/library-tests/dispatch/CallGraph.expected index 4eed880f0a3e..0ed729859a43 100644 --- a/csharp/ql/test/library-tests/dispatch/CallGraph.expected +++ b/csharp/ql/test/library-tests/dispatch/CallGraph.expected @@ -270,7 +270,9 @@ | ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:637:21:637:21 | M | | ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:646:21:646:21 | M | | ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:648:21:648:21 | M | -| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:702:42:702:44 | get_Property | -| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:702:63:702:65 | set_Property | -| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:704:49:704:51 | get_Item | -| ViableCallable.cs:707:17:707:20 | Run1 | ViableCallable.cs:704:70:704:72 | set_Item | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:698:43:698:47 | add_Event | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:698:43:698:47 | remove_Event | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:703:42:703:44 | get_Property | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:703:63:703:65 | set_Property | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:705:49:705:51 | get_Item | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:705:70:705:72 | set_Item | diff --git a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected index b38eed691b9c..5d6b4be4f878 100644 --- a/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected +++ b/csharp/ql/test/library-tests/dispatch/GetADynamicTarget.expected @@ -518,7 +518,9 @@ | ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution2.M(Int32[]) | | ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution1.M(List) | | ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution2.M(List) | -| ViableCallable.cs:712:9:712:18 | access to property Property | C23+Partial1.set_Property(object) | -| ViableCallable.cs:715:13:715:22 | access to property Property | C23+Partial1.get_Property() | -| ViableCallable.cs:718:9:718:12 | access to indexer | C23+Partial1.set_Item(int, object) | -| ViableCallable.cs:721:13:721:16 | access to indexer | C23+Partial1.get_Item(int) | +| ViableCallable.cs:714:9:714:18 | access to property Property | C23+Partial1.set_Property(object) | +| ViableCallable.cs:717:13:717:22 | access to property Property | C23+Partial1.get_Property() | +| ViableCallable.cs:720:9:720:12 | access to indexer | C23+Partial1.set_Item(int, object) | +| ViableCallable.cs:723:13:723:16 | access to indexer | C23+Partial1.get_Item(int) | +| ViableCallable.cs:726:9:726:15 | access to event Event | C23+Partial1.add_Event(EventHandler) | +| ViableCallable.cs:729:9:729:15 | access to event Event | C23+Partial1.remove_Event(EventHandler) | diff --git a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs index 99b4ec54a99d..e904eb01a862 100644 --- a/csharp/ql/test/library-tests/dispatch/ViableCallable.cs +++ b/csharp/ql/test/library-tests/dispatch/ViableCallable.cs @@ -695,6 +695,7 @@ public partial class Partial1 public partial object Property { get; set; } public partial object this[int index] { get; set; } + public partial event EventHandler Event; } public partial class Partial1 @@ -702,6 +703,7 @@ public partial class Partial1 public partial object Property { get { return null; } set { } } public partial object this[int index] { get { return null; } set { } } + public partial event EventHandler Event { add { } remove { } } } public void Run1(Partial1 p) @@ -719,5 +721,11 @@ public void Run1(Partial1 p) // Viable callable: Partial1.get_Item(int) o = p[0]; + + // Viable callable: Partial1.add_Event + p.Event += (sender, e) => { }; + + // Viable callable: Partial1.remove_Event + p.Event -= (sender, e) => { }; } } From 9289ac283871d030a57abc1890611c076e8866d7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 13 Feb 2026 16:24:06 +0100 Subject: [PATCH 090/243] C#: Support for partial event declarations. --- .../Semmle.Extraction.CSharp/Entities/Event.cs | 12 ++++++++---- .../Entities/EventAccessor.cs | 4 ++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs index bbd90989617c..c93df9ccc4f7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs @@ -11,6 +11,10 @@ internal class Event : CachedSymbol private Event(Context cx, IEventSymbol init) : base(cx, init) { } + protected override IEventSymbol BodyDeclaringSymbol => Symbol.PartialImplementationPart ?? Symbol; + + public override Microsoft.CodeAnalysis.Location? ReportingLocation => BodyDeclaringSymbol.Locations.BestOrDefault(); + public override void WriteId(EscapingTextWriter trapFile) { trapFile.WriteSubId(ContainingType!); @@ -27,13 +31,13 @@ public override void Populate(TextWriter trapFile) var type = Type.Create(Context, Symbol.Type); trapFile.events(this, Symbol.GetName(), ContainingType!, type.TypeRef, Create(Context, Symbol.OriginalDefinition)); - var adder = Symbol.AddMethod; - var remover = Symbol.RemoveMethod; + var adder = BodyDeclaringSymbol.AddMethod; + var remover = BodyDeclaringSymbol.RemoveMethod; - if (!(adder is null)) + if (adder is not null) Method.Create(Context, adder); - if (!(remover is null)) + if (remover is not null) Method.Create(Context, remover); PopulateModifiers(trapFile); diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs index 254e7c769569..3e8ab9431be7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/EventAccessor.cs @@ -13,6 +13,10 @@ private EventAccessor(Context cx, IMethodSymbol init, IEventSymbol @event) this.@event = @event; } + public override bool NeedsPopulation => + base.NeedsPopulation && + !Symbol.IsPartialDefinition; // Accessors always have an implementing declaration as well. + /// /// Gets the event symbol associated with accessor `symbol`, or `null` /// if there is no associated symbol. From 43c6e7d2500ea7518a55a8794bc7270c5f3b491b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 16 Feb 2026 15:29:01 +0100 Subject: [PATCH 091/243] C#: Update test expected output. --- .../library-tests/dispatch/CallGraph.expected | 4 +-- .../library-tests/partial/Partial1.expected | 3 ++ .../partial/PartialAccessors.expected | 4 +-- .../partial/PartialEvents.expected | 2 +- .../library-tests/partial/PrintAst.expected | 30 ++++++++++--------- 5 files changed, 24 insertions(+), 19 deletions(-) diff --git a/csharp/ql/test/library-tests/dispatch/CallGraph.expected b/csharp/ql/test/library-tests/dispatch/CallGraph.expected index 0ed729859a43..2feb959dd863 100644 --- a/csharp/ql/test/library-tests/dispatch/CallGraph.expected +++ b/csharp/ql/test/library-tests/dispatch/CallGraph.expected @@ -270,9 +270,9 @@ | ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:637:21:637:21 | M | | ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:646:21:646:21 | M | | ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:648:21:648:21 | M | -| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:698:43:698:47 | add_Event | -| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:698:43:698:47 | remove_Event | | ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:703:42:703:44 | get_Property | | ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:703:63:703:65 | set_Property | | ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:705:49:705:51 | get_Item | | ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:705:70:705:72 | set_Item | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:706:51:706:53 | add_Event | +| ViableCallable.cs:709:17:709:20 | Run1 | ViableCallable.cs:706:59:706:64 | remove_Event | diff --git a/csharp/ql/test/library-tests/partial/Partial1.expected b/csharp/ql/test/library-tests/partial/Partial1.expected index 3fd8b9e2fd45..fe8f5658f48e 100644 --- a/csharp/ql/test/library-tests/partial/Partial1.expected +++ b/csharp/ql/test/library-tests/partial/Partial1.expected @@ -8,6 +8,9 @@ | Partial.cs:29:27:29:30 | Item | | Partial.cs:31:9:31:11 | get_Item | | Partial.cs:32:9:32:11 | set_Item | +| Partial.cs:36:39:36:51 | PartialEvent1 | +| Partial.cs:36:55:36:57 | add_PartialEvent1 | +| Partial.cs:36:63:36:68 | remove_PartialEvent1 | | Partial.cs:39:15:39:33 | OnePartPartialClass | | Partial.cs:41:18:41:42 | PartialMethodWithoutBody2 | | PartialMultipleFiles1.cs:1:22:1:41 | PartialMultipleFiles | diff --git a/csharp/ql/test/library-tests/partial/PartialAccessors.expected b/csharp/ql/test/library-tests/partial/PartialAccessors.expected index e9180ffce566..a9d70645420b 100644 --- a/csharp/ql/test/library-tests/partial/PartialAccessors.expected +++ b/csharp/ql/test/library-tests/partial/PartialAccessors.expected @@ -1,9 +1,9 @@ -| Partial.cs:13:39:13:51 | add_PartialEvent1 | false | -| Partial.cs:13:39:13:51 | remove_PartialEvent1 | false | | Partial.cs:24:9:24:11 | get_PartialProperty1 | true | | Partial.cs:25:9:25:11 | set_PartialProperty1 | true | | Partial.cs:31:9:31:11 | get_Item | true | | Partial.cs:32:9:32:11 | set_Item | true | +| Partial.cs:36:55:36:57 | add_PartialEvent1 | true | +| Partial.cs:36:63:36:68 | remove_PartialEvent1 | true | | Partial.cs:48:30:48:32 | get_Property | false | | Partial.cs:48:35:48:37 | set_Property | false | | Partial.cs:51:9:51:11 | get_Item | false | diff --git a/csharp/ql/test/library-tests/partial/PartialEvents.expected b/csharp/ql/test/library-tests/partial/PartialEvents.expected index e3ee325248a8..b12f8a07a9df 100644 --- a/csharp/ql/test/library-tests/partial/PartialEvents.expected +++ b/csharp/ql/test/library-tests/partial/PartialEvents.expected @@ -1,2 +1,2 @@ -| Partial.cs:13:39:13:51 | PartialEvent1 | false | +| Partial.cs:36:39:36:51 | PartialEvent1 | true | | Partial.cs:54:31:54:35 | Event | false | diff --git a/csharp/ql/test/library-tests/partial/PrintAst.expected b/csharp/ql/test/library-tests/partial/PrintAst.expected index 90471e0a80c8..315de869fb3d 100644 --- a/csharp/ql/test/library-tests/partial/PrintAst.expected +++ b/csharp/ql/test/library-tests/partial/PrintAst.expected @@ -5,23 +5,15 @@ Partial.cs: # 7| 7: [Method] Method2 # 7| -1: [TypeMention] Void # 7| 4: [BlockStmt] {...} -# 13| 8: [Event] PartialEvent1 -# 13| -1: [TypeMention] EventHandler -# 13| 3: [AddEventAccessor] add_PartialEvent1 -#-----| 2: (Parameters) -# 13| 0: [Parameter] value -# 13| 4: [RemoveEventAccessor] remove_PartialEvent1 -#-----| 2: (Parameters) -# 13| 0: [Parameter] value -# 18| 9: [Method] PartialMethodWithBody1 +# 18| 8: [Method] PartialMethodWithBody1 # 5| -1: [TypeMention] Void # 18| 4: [BlockStmt] {...} -# 19| 10: [Method] Method3 +# 19| 9: [Method] Method3 # 19| -1: [TypeMention] Void # 19| 4: [BlockStmt] {...} -# 20| 11: [Field] _backingField +# 20| 10: [Field] _backingField # 20| -1: [TypeMention] object -# 22| 12: [Property] PartialProperty1 +# 22| 11: [Property] PartialProperty1 # 9| -1: [TypeMention] object # 22| -1: [TypeMention] object # 24| 3: [Getter] get_PartialProperty1 @@ -36,10 +28,10 @@ Partial.cs: # 25| 0: [AssignExpr] ... = ... # 25| 0: [FieldAccess] access to field _backingField # 25| 1: [ParameterAccess] access to parameter value -# 27| 13: [Field] _backingArray +# 27| 12: [Field] _backingArray # 27| -1: [TypeMention] Object[] # 27| 1: [TypeMention] object -# 29| 14: [Indexer] Item +# 29| 13: [Indexer] Item # 11| -1: [TypeMention] object # 29| -1: [TypeMention] object #-----| 1: (Parameters) @@ -65,6 +57,16 @@ Partial.cs: # 32| -1: [FieldAccess] access to field _backingArray # 32| 0: [ParameterAccess] access to parameter index # 32| 1: [ParameterAccess] access to parameter value +# 36| 14: [Event] PartialEvent1 +# 13| -1: [TypeMention] EventHandler +# 36| 3: [AddEventAccessor] add_PartialEvent1 +#-----| 2: (Parameters) +# 36| 0: [Parameter] value +# 36| 4: [BlockStmt] {...} +# 36| 4: [RemoveEventAccessor] remove_PartialEvent1 +#-----| 2: (Parameters) +# 36| 0: [Parameter] value +# 36| 4: [BlockStmt] {...} # 39| [Class] OnePartPartialClass # 41| 6: [Method] PartialMethodWithoutBody2 # 41| -1: [TypeMention] Void From c29bac2bc19409afda9bf777c9258f348128249f Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 16 Feb 2026 16:13:06 +0100 Subject: [PATCH 092/243] C#: Add change-note. --- csharp/ql/lib/change-notes/2026-02-16-partial-events.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2026-02-16-partial-events.md diff --git a/csharp/ql/lib/change-notes/2026-02-16-partial-events.md b/csharp/ql/lib/change-notes/2026-02-16-partial-events.md new file mode 100644 index 000000000000..3bbc1ae829ad --- /dev/null +++ b/csharp/ql/lib/change-notes/2026-02-16-partial-events.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* C# 14: Added support for partial events. From 26a1f4888a7fc82e3361d880e0abb31a8c52f5b4 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 16 Feb 2026 17:19:44 +0100 Subject: [PATCH 093/243] C++: Modernize `MustFlow` using parameterized modules --- .../semmle/code/cpp/ir/dataflow/MustFlow.qll | 539 +++++++++--------- .../ReturnStackAllocatedMemory.ql | 24 +- .../Memory Management/UninitializedLocal.ql | 21 +- cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql | 26 +- 4 files changed, 299 insertions(+), 311 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll index b085440f6bcd..07e79a907c73 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll @@ -7,290 +7,279 @@ private import cpp private import semmle.code.cpp.ir.IR -/** - * A configuration of a data flow analysis that performs must-flow analysis. This is different - * from `DataFlow.qll` which performs may-flow analysis (i.e., it finds paths where the source _may_ - * flow to the sink). - * - * Like in `DataFlow.qll`, each use of the `MustFlow.qll` library must define its own unique extension - * of this abstract class. To create a configuration, extend this class with a subclass whose - * characteristic predicate is a unique singleton string and override `isSource`, `isSink` (and - * `isAdditionalFlowStep` if additional steps are required). - */ -abstract class MustFlowConfiguration extends string { - bindingset[this] - MustFlowConfiguration() { any() } - - /** - * Holds if `source` is a relevant data flow source. - */ - abstract predicate isSource(Instruction source); - - /** - * Holds if `sink` is a relevant data flow sink. - */ - abstract predicate isSink(Operand sink); - - /** - * Holds if data flow through `instr` is prohibited. - */ - predicate isBarrier(Instruction instr) { none() } - - /** - * Holds if the additional flow step from `node1` to `node2` must be taken - * into account in the analysis. - */ - predicate isAdditionalFlowStep(Operand node1, Instruction node2) { none() } - - /** Holds if this configuration allows flow from arguments to parameters. */ - predicate allowInterproceduralFlow() { any() } - - /** - * Holds if data must flow from `source` to `sink` for this configuration. - * - * The corresponding paths are generated from the end-points and the graph - * included in the module `PathGraph`. - */ - final predicate hasFlowPath(MustFlowPathNode source, MustFlowPathSink sink) { - this.isSource(source.getInstruction()) and - source.getASuccessor*() = sink - } -} - -/** Holds if `node` flows from a source. */ -pragma[nomagic] -private predicate flowsFromSource(Instruction node, MustFlowConfiguration config) { - not config.isBarrier(node) and - ( - config.isSource(node) - or - exists(Instruction mid | - step(mid, node, config) and - flowsFromSource(mid, pragma[only_bind_into](config)) - ) - ) -} - -/** Holds if `node` flows to a sink. */ -pragma[nomagic] -private predicate flowsToSink(Instruction node, MustFlowConfiguration config) { - flowsFromSource(node, pragma[only_bind_into](config)) and - ( - config.isSink(node.getAUse()) - or - exists(Instruction mid | - step(node, mid, config) and - flowsToSink(mid, pragma[only_bind_into](config)) - ) - ) -} - -cached -private module Cached { - /** Holds if `p` is the `n`'th parameter of the non-virtual function `f`. */ - private predicate parameterOf(Parameter p, Function f, int n) { - not f.isVirtual() and f.getParameter(n) = p - } - - /** - * Holds if `instr` is the `n`'th argument to a call to the non-virtual function `f`, and - * `init` is the corresponding initialization instruction that receives the value of `instr` in `f`. - */ - private predicate flowIntoParameter( - Function f, int n, CallInstruction call, Instruction instr, InitializeParameterInstruction init - ) { - not f.isVirtual() and - call.getPositionalArgument(n) = instr and - f = call.getStaticCallTarget() and - getEnclosingNonVirtualFunctionInitializeParameter(init, f) and - init.getParameter().getIndex() = pragma[only_bind_into](pragma[only_bind_out](n)) - } - - /** - * Holds if `instr` is an argument to a call to the function `f`, and `init` is the - * corresponding initialization instruction that receives the value of `instr` in `f`. - */ - pragma[noinline] - private predicate getPositionalArgumentInitParam( - CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f - ) { - exists(int n | - parameterOf(_, f, n) and - flowIntoParameter(f, pragma[only_bind_into](pragma[only_bind_out](n)), call, instr, init) - ) - } - +module MustFlow { /** - * Holds if `instr` is the qualifier to a call to the non-virtual function `f`, and - * `init` is the corresponding initialization instruction that receives the value of - * `instr` in `f`. + * An input configuration of a data flow analysis that performs must-flow analysis. This is different + * from `DataFlow.qll` which performs may-flow analysis (i.e., it finds paths where the source _may_ + * flow to the sink). */ - pragma[noinline] - private predicate getThisArgumentInitParam( - CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f - ) { - not f.isVirtual() and - call.getStaticCallTarget() = f and - getEnclosingNonVirtualFunctionInitializeParameter(init, f) and - call.getThisArgument() = instr and - init.getIRVariable() instanceof IRThisVariable + signature module ConfigSig { + /** + * Holds if `source` is a relevant data flow source. + */ + predicate isSource(Instruction source); + + /** + * Holds if `sink` is a relevant data flow sink. + */ + predicate isSink(Operand sink); + + /** + * Holds if data flow through `instr` is prohibited. + */ + default predicate isBarrier(Instruction instr) { none() } + + /** + * Holds if the additional flow step from `node1` to `node2` must be taken + * into account in the analysis. + */ + default predicate isAdditionalFlowStep(Operand node1, Instruction node2) { none() } + + /** Holds if this configuration allows flow from arguments to parameters. */ + default predicate allowInterproceduralFlow() { any() } } - /** Holds if `f` is the enclosing non-virtual function of `init`. */ - private predicate getEnclosingNonVirtualFunctionInitializeParameter( - InitializeParameterInstruction init, Function f - ) { - not f.isVirtual() and - init.getEnclosingFunction() = f - } - - /** Holds if `f` is the enclosing non-virtual function of `init`. */ - private predicate getEnclosingNonVirtualFunctionInitializeIndirection( - InitializeIndirectionInstruction init, Function f - ) { - not f.isVirtual() and - init.getEnclosingFunction() = f - } - - /** - * Holds if `instr` is an argument (or argument indirection) to a call, and - * `succ` is the corresponding initialization instruction in the call target. - */ - private predicate flowThroughCallable(Instruction argument, Instruction parameter) { - // Flow from an argument to a parameter - exists(CallInstruction call, InitializeParameterInstruction init | init = parameter | - getPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget()) - or - getThisArgumentInitParam(call, argument, init, call.getStaticCallTarget()) - ) - or - // Flow from argument indirection to parameter indirection - exists( - CallInstruction call, ReadSideEffectInstruction read, InitializeIndirectionInstruction init - | - init = parameter and - read.getPrimaryInstruction() = call and - getEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget()) - | - exists(int n | - read.getSideEffectOperand().getAnyDef() = argument and - read.getIndex() = pragma[only_bind_into](n) and - init.getParameter().getIndex() = pragma[only_bind_into](n) + module Global { + import Config + + /** + * Holds if data must flow from `source` to `sink`. + * + * The corresponding paths are generated from the end-points and the graph + * included in the module `PathGraph`. + */ + predicate flowPath(PathNode source, PathSink sink) { + isSource(source.getInstruction()) and + source.getASuccessor*() = sink + } + + /** Holds if `node` flows from a source. */ + pragma[nomagic] + private predicate flowsFromSource(Instruction node) { + not isBarrier(node) and + ( + isSource(node) + or + exists(Instruction mid | + step(mid, node) and + flowsFromSource(mid) + ) + ) + } + + /** Holds if `node` flows to a sink. */ + pragma[nomagic] + private predicate flowsToSink(Instruction node) { + flowsFromSource(node) and + ( + isSink(node.getAUse()) + or + exists(Instruction mid | + step(node, mid) and + flowsToSink(mid) + ) + ) + } + + /** + * Gets the enclosing callable of `n`. Unlike `n.getEnclosingCallable()`, this + * predicate ensures that joins go from `n` to the result instead of the other + * way around. + */ + pragma[inline] + private IRFunction getEnclosingCallable(Instruction n) { + pragma[only_bind_into](result) = pragma[only_bind_out](n).getEnclosingIRFunction() + } + + /** Holds if `nodeFrom` flows to `nodeTo`. */ + private predicate step(Instruction nodeFrom, Instruction nodeTo) { + Cached::step(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) and + ( + allowInterproceduralFlow() + or + getEnclosingCallable(nodeFrom) = getEnclosingCallable(nodeTo) ) or - call.getThisArgument() = argument and - init.getIRVariable() instanceof IRThisVariable - ) - } - - private predicate instructionToOperandStep(Instruction instr, Operand operand) { - operand.getDef() = instr - } - - /** - * Holds if data flows from `operand` to `instr`. - * - * This predicate ignores flow through `PhiInstruction`s to create a 'must flow' relation. - */ - private predicate operandToInstructionStep(Operand operand, Instruction instr) { - instr.(CopyInstruction).getSourceValueOperand() = operand - or - instr.(ConvertInstruction).getUnaryOperand() = operand - or - instr.(CheckedConvertOrNullInstruction).getUnaryOperand() = operand - or - instr.(InheritanceConversionInstruction).getUnaryOperand() = operand - or - instr.(ChiInstruction).getTotalOperand() = operand + isAdditionalFlowStep(nodeFrom.getAUse(), nodeTo) + } + + private newtype TLocalPathNode = + MkLocalPathNode(Instruction n) { + flowsToSink(n) and + ( + isSource(n) + or + exists(PathNode mid | step(mid.getInstruction(), n)) + ) + } + + /** A `Node` that is in a path from a source to a sink. */ + class PathNode extends TLocalPathNode { + Instruction n; + + PathNode() { this = MkLocalPathNode(n) } + + /** Gets the underlying node. */ + Instruction getInstruction() { result = n } + + /** Gets a textual representation of this node. */ + string toString() { result = n.getAst().toString() } + + /** Gets the location of this element. */ + Location getLocation() { result = n.getLocation() } + + /** Gets a successor node, if any. */ + PathNode getASuccessor() { step(this.getInstruction(), result.getInstruction()) } + } + + private class PathSink extends PathNode { + PathSink() { isSink(this.getInstruction().getAUse()) } + } + + /** + * Provides the query predicates needed to include a graph in a path-problem query. + */ + module PathGraph { + private predicate reach(PathNode n) { n instanceof PathSink or reach(n.getASuccessor()) } + + /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ + query predicate edges(PathNode a, PathNode b) { a.getASuccessor() = b and reach(b) } + + /** Holds if `n` is a node in the graph of data flow path explanations. */ + query predicate nodes(PathNode n, string key, string val) { + reach(n) and key = "semmle.label" and val = n.toString() + } + } } cached - predicate step(Instruction nodeFrom, Instruction nodeTo) { - exists(Operand mid | - instructionToOperandStep(nodeFrom, mid) and - operandToInstructionStep(mid, nodeTo) - ) - or - flowThroughCallable(nodeFrom, nodeTo) - } -} - -/** - * Gets the enclosing callable of `n`. Unlike `n.getEnclosingCallable()`, this - * predicate ensures that joins go from `n` to the result instead of the other - * way around. - */ -pragma[inline] -private IRFunction getEnclosingCallable(Instruction n) { - pragma[only_bind_into](result) = pragma[only_bind_out](n).getEnclosingIRFunction() -} - -/** Holds if `nodeFrom` flows to `nodeTo`. */ -private predicate step(Instruction nodeFrom, Instruction nodeTo, MustFlowConfiguration config) { - exists(config) and - Cached::step(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) and - ( - config.allowInterproceduralFlow() - or - getEnclosingCallable(nodeFrom) = getEnclosingCallable(nodeTo) - ) - or - config.isAdditionalFlowStep(nodeFrom.getAUse(), nodeTo) -} - -private newtype TLocalPathNode = - MkLocalPathNode(Instruction n, MustFlowConfiguration config) { - flowsToSink(n, config) and - ( - config.isSource(n) + private module Cached { + /** Holds if `p` is the `n`'th parameter of the non-virtual function `f`. */ + private predicate parameterOf(Parameter p, Function f, int n) { + not f.isVirtual() and f.getParameter(n) = p + } + + /** + * Holds if `instr` is the `n`'th argument to a call to the non-virtual function `f`, and + * `init` is the corresponding initialization instruction that receives the value of `instr` in `f`. + */ + private predicate flowIntoParameter( + Function f, int n, CallInstruction call, Instruction instr, + InitializeParameterInstruction init + ) { + not f.isVirtual() and + call.getPositionalArgument(n) = instr and + f = call.getStaticCallTarget() and + getEnclosingNonVirtualFunctionInitializeParameter(init, f) and + init.getParameter().getIndex() = pragma[only_bind_into](pragma[only_bind_out](n)) + } + + /** + * Holds if `instr` is an argument to a call to the function `f`, and `init` is the + * corresponding initialization instruction that receives the value of `instr` in `f`. + */ + pragma[noinline] + private predicate getPositionalArgumentInitParam( + CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f + ) { + exists(int n | + parameterOf(_, f, n) and + flowIntoParameter(f, pragma[only_bind_into](pragma[only_bind_out](n)), call, instr, init) + ) + } + + /** + * Holds if `instr` is the qualifier to a call to the non-virtual function `f`, and + * `init` is the corresponding initialization instruction that receives the value of + * `instr` in `f`. + */ + pragma[noinline] + private predicate getThisArgumentInitParam( + CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f + ) { + not f.isVirtual() and + call.getStaticCallTarget() = f and + getEnclosingNonVirtualFunctionInitializeParameter(init, f) and + call.getThisArgument() = instr and + init.getIRVariable() instanceof IRThisVariable + } + + /** Holds if `f` is the enclosing non-virtual function of `init`. */ + private predicate getEnclosingNonVirtualFunctionInitializeParameter( + InitializeParameterInstruction init, Function f + ) { + not f.isVirtual() and + init.getEnclosingFunction() = f + } + + /** Holds if `f` is the enclosing non-virtual function of `init`. */ + private predicate getEnclosingNonVirtualFunctionInitializeIndirection( + InitializeIndirectionInstruction init, Function f + ) { + not f.isVirtual() and + init.getEnclosingFunction() = f + } + + /** + * Holds if `instr` is an argument (or argument indirection) to a call, and + * `succ` is the corresponding initialization instruction in the call target. + */ + private predicate flowThroughCallable(Instruction argument, Instruction parameter) { + // Flow from an argument to a parameter + exists(CallInstruction call, InitializeParameterInstruction init | init = parameter | + getPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget()) + or + getThisArgumentInitParam(call, argument, init, call.getStaticCallTarget()) + ) or - exists(MustFlowPathNode mid | step(mid.getInstruction(), n, config)) - ) - } - -/** A `Node` that is in a path from a source to a sink. */ -class MustFlowPathNode extends TLocalPathNode { - Instruction n; - - MustFlowPathNode() { this = MkLocalPathNode(n, _) } - - /** Gets the underlying node. */ - Instruction getInstruction() { result = n } - - /** Gets a textual representation of this node. */ - string toString() { result = n.getAst().toString() } - - /** Gets the location of this element. */ - Location getLocation() { result = n.getLocation() } - - /** Gets a successor node, if any. */ - MustFlowPathNode getASuccessor() { - step(this.getInstruction(), result.getInstruction(), this.getConfiguration()) - } - - /** Gets the associated configuration. */ - MustFlowConfiguration getConfiguration() { this = MkLocalPathNode(_, result) } -} - -private class MustFlowPathSink extends MustFlowPathNode { - MustFlowPathSink() { this.getConfiguration().isSink(this.getInstruction().getAUse()) } -} - -/** - * Provides the query predicates needed to include a graph in a path-problem query. - */ -module PathGraph { - private predicate reach(MustFlowPathNode n) { - n instanceof MustFlowPathSink or reach(n.getASuccessor()) - } - - /** Holds if `(a,b)` is an edge in the graph of data flow path explanations. */ - query predicate edges(MustFlowPathNode a, MustFlowPathNode b) { - a.getASuccessor() = b and reach(b) - } - - /** Holds if `n` is a node in the graph of data flow path explanations. */ - query predicate nodes(MustFlowPathNode n, string key, string val) { - reach(n) and key = "semmle.label" and val = n.toString() + // Flow from argument indirection to parameter indirection + exists( + CallInstruction call, ReadSideEffectInstruction read, InitializeIndirectionInstruction init + | + init = parameter and + read.getPrimaryInstruction() = call and + getEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget()) + | + exists(int n | + read.getSideEffectOperand().getAnyDef() = argument and + read.getIndex() = pragma[only_bind_into](n) and + init.getParameter().getIndex() = pragma[only_bind_into](n) + ) + or + call.getThisArgument() = argument and + init.getIRVariable() instanceof IRThisVariable + ) + } + + private predicate instructionToOperandStep(Instruction instr, Operand operand) { + operand.getDef() = instr + } + + /** + * Holds if data flows from `operand` to `instr`. + * + * This predicate ignores flow through `PhiInstruction`s to create a 'must flow' relation. + */ + private predicate operandToInstructionStep(Operand operand, Instruction instr) { + instr.(CopyInstruction).getSourceValueOperand() = operand + or + instr.(ConvertInstruction).getUnaryOperand() = operand + or + instr.(CheckedConvertOrNullInstruction).getUnaryOperand() = operand + or + instr.(InheritanceConversionInstruction).getUnaryOperand() = operand + or + instr.(ChiInstruction).getTotalOperand() = operand + } + + cached + predicate step(Instruction nodeFrom, Instruction nodeTo) { + exists(Operand mid | + instructionToOperandStep(nodeFrom, mid) and + operandToInstructionStep(mid, nodeTo) + ) + or + flowThroughCallable(nodeFrom, nodeTo) + } } } diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql index b87889103322..efd136bcd2df 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql @@ -16,17 +16,15 @@ import cpp import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow -import PathGraph +import ReturnStackAllocatedMemory::PathGraph /** Holds if `f` has a name that we interpret as evidence of intentionally returning the value of the stack pointer. */ predicate intentionallyReturnsStackPointer(Function f) { f.getName().toLowerCase().matches(["%stack%", "%sp%"]) } -class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration { - ReturnStackAllocatedMemoryConfig() { this = "ReturnStackAllocatedMemoryConfig" } - - override predicate isSource(Instruction source) { +module ReturnStackAllocatedMemoryConfig implements MustFlow::ConfigSig { + predicate isSource(Instruction source) { exists(Function func | // Rule out FPs caused by extraction errors. not func.hasErrors() and @@ -50,7 +48,7 @@ class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration { ) } - override predicate isSink(Operand sink) { + predicate isSink(Operand sink) { // Holds if `sink` is a node that represents the `StoreInstruction` that is subsequently used in // a `ReturnValueInstruction`. // We use the `StoreInstruction` instead of the instruction that defines the @@ -72,7 +70,7 @@ class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration { // int* px = id(&x); // } // ``` - override predicate allowInterproceduralFlow() { none() } + predicate allowInterproceduralFlow() { none() } /** * This configuration intentionally conflates addresses of fields and their object, and pointer offsets @@ -87,20 +85,22 @@ class ReturnStackAllocatedMemoryConfig extends MustFlowConfiguration { * } * ``` */ - override predicate isAdditionalFlowStep(Operand node1, Instruction node2) { + predicate isAdditionalFlowStep(Operand node1, Instruction node2) { node2.(FieldAddressInstruction).getObjectAddressOperand() = node1 or node2.(PointerOffsetInstruction).getLeftOperand() = node1 } - override predicate isBarrier(Instruction n) { n.getResultType() instanceof ErroneousType } + predicate isBarrier(Instruction n) { n.getResultType() instanceof ErroneousType } } +module ReturnStackAllocatedMemory = MustFlow::Global; + from - MustFlowPathNode source, MustFlowPathNode sink, Instruction instr, - ReturnStackAllocatedMemoryConfig conf + ReturnStackAllocatedMemory::PathNode source, ReturnStackAllocatedMemory::PathNode sink, + Instruction instr where - conf.hasFlowPath(pragma[only_bind_into](source), pragma[only_bind_into](sink)) and + ReturnStackAllocatedMemory::flowPath(pragma[only_bind_into](source), pragma[only_bind_into](sink)) and source.getInstruction() = instr select sink.getInstruction(), source, sink, "May return stack-allocated memory from $@.", instr.getAst(), instr.getAst().toString() diff --git a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql index 763a142f1b90..1697ad318105 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/UninitializedLocal.ql @@ -15,7 +15,7 @@ import cpp import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow -import PathGraph +import UninitializedLocal::PathGraph /** * Auxiliary predicate: Types that don't require initialization @@ -70,25 +70,26 @@ predicate isSinkImpl(Instruction sink, VariableAccess va) { ) } -class MustFlow extends MustFlowConfiguration { - MustFlow() { this = "MustFlow" } - - override predicate isSource(Instruction source) { +module UninitializedLocalConfig implements MustFlow::ConfigSig { + predicate isSource(Instruction source) { source instanceof UninitializedInstruction and exists(Type t | t = source.getResultType() | not allocatedType(t)) } - override predicate isSink(Operand sink) { isSinkImpl(sink.getDef(), _) } + predicate isSink(Operand sink) { isSinkImpl(sink.getDef(), _) } - override predicate allowInterproceduralFlow() { none() } + predicate allowInterproceduralFlow() { none() } - override predicate isBarrier(Instruction instr) { instr instanceof ChiInstruction } + predicate isBarrier(Instruction instr) { instr instanceof ChiInstruction } } +module UninitializedLocal = MustFlow::Global; + from - VariableAccess va, LocalVariable v, MustFlow conf, MustFlowPathNode source, MustFlowPathNode sink + VariableAccess va, LocalVariable v, UninitializedLocal::PathNode source, + UninitializedLocal::PathNode sink where - conf.hasFlowPath(source, sink) and + UninitializedLocal::flowPath(source, sink) and isSinkImpl(sink.getInstruction(), va) and v = va.getTarget() select va, source, sink, "The variable $@ may not be initialized at this access.", v, v.getName() diff --git a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql index bb62cfc17553..63b56d470e2d 100644 --- a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql +++ b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql @@ -17,16 +17,16 @@ import cpp import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow -import PathGraph +import UnsafeUseOfThis::PathGraph -class UnsafeUseOfThisConfig extends MustFlowConfiguration { - UnsafeUseOfThisConfig() { this = "UnsafeUseOfThisConfig" } +module UnsafeUseOfThisConfig implements MustFlow::ConfigSig { + predicate isSource(Instruction source) { isSource(source, _, _) } - override predicate isSource(Instruction source) { isSource(source, _, _) } - - override predicate isSink(Operand sink) { isSink(sink, _) } + predicate isSink(Operand sink) { isSink(sink, _) } } +module UnsafeUseOfThis = MustFlow::Global; + /** Holds if `sink` is a `this` pointer used by the call instruction `call`. */ predicate isSink(Operand sink, CallInstruction call) { exists(PureVirtualFunction func | @@ -66,19 +66,17 @@ predicate isSource(InitializeParameterInstruction source, string msg, Class c) { * - `msg` is a string describing whether `source` is from a constructor or destructor. */ predicate flows( - MustFlowPathNode source, string msg, Class sourceClass, MustFlowPathNode sink, + UnsafeUseOfThis::PathNode source, string msg, Class sourceClass, UnsafeUseOfThis::PathNode sink, CallInstruction call ) { - exists(UnsafeUseOfThisConfig conf | - conf.hasFlowPath(source, sink) and - isSource(source.getInstruction(), msg, sourceClass) and - isSink(sink.getInstruction().getAUse(), call) - ) + UnsafeUseOfThis::flowPath(source, sink) and + isSource(source.getInstruction(), msg, sourceClass) and + isSink(sink.getInstruction().getAUse(), call) } from - MustFlowPathNode source, MustFlowPathNode sink, CallInstruction call, string msg, - Class sourceClass + UnsafeUseOfThis::PathNode source, UnsafeUseOfThis::PathNode sink, CallInstruction call, + string msg, Class sourceClass where flows(source, msg, sourceClass, sink, call) and // Only raise an alert if there is no override of the pure virtual function in any base class. From 73194a5e86b5e6abc614fa75caaeed3110857554 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 16 Feb 2026 17:40:18 +0100 Subject: [PATCH 094/243] C++: Fix QL-for-QL warnings and missing QLDoc --- .../semmle/code/cpp/ir/dataflow/MustFlow.qll | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll index 07e79a907c73..5a0f34c6dc1a 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll @@ -7,6 +7,9 @@ private import cpp private import semmle.code.cpp.ir.IR +/** + * Provides an inter-procedural must-flow data flow analysis. + */ module MustFlow { /** * An input configuration of a data flow analysis that performs must-flow analysis. This is different @@ -39,6 +42,9 @@ module MustFlow { default predicate allowInterproceduralFlow() { any() } } + /** + * Constructs a global must-flow computation. + */ module Global { import Config @@ -170,7 +176,7 @@ module MustFlow { not f.isVirtual() and call.getPositionalArgument(n) = instr and f = call.getStaticCallTarget() and - getEnclosingNonVirtualFunctionInitializeParameter(init, f) and + isEnclosingNonVirtualFunctionInitializeParameter(init, f) and init.getParameter().getIndex() = pragma[only_bind_into](pragma[only_bind_out](n)) } @@ -179,7 +185,7 @@ module MustFlow { * corresponding initialization instruction that receives the value of `instr` in `f`. */ pragma[noinline] - private predicate getPositionalArgumentInitParam( + private predicate isPositionalArgumentInitParam( CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f ) { exists(int n | @@ -194,18 +200,18 @@ module MustFlow { * `instr` in `f`. */ pragma[noinline] - private predicate getThisArgumentInitParam( + private predicate isThisArgumentInitParam( CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f ) { not f.isVirtual() and call.getStaticCallTarget() = f and - getEnclosingNonVirtualFunctionInitializeParameter(init, f) and + isEnclosingNonVirtualFunctionInitializeParameter(init, f) and call.getThisArgument() = instr and init.getIRVariable() instanceof IRThisVariable } /** Holds if `f` is the enclosing non-virtual function of `init`. */ - private predicate getEnclosingNonVirtualFunctionInitializeParameter( + private predicate isEnclosingNonVirtualFunctionInitializeParameter( InitializeParameterInstruction init, Function f ) { not f.isVirtual() and @@ -213,7 +219,7 @@ module MustFlow { } /** Holds if `f` is the enclosing non-virtual function of `init`. */ - private predicate getEnclosingNonVirtualFunctionInitializeIndirection( + private predicate isEnclosingNonVirtualFunctionInitializeIndirection( InitializeIndirectionInstruction init, Function f ) { not f.isVirtual() and @@ -221,15 +227,15 @@ module MustFlow { } /** - * Holds if `instr` is an argument (or argument indirection) to a call, and - * `succ` is the corresponding initialization instruction in the call target. + * Holds if `argument` is an argument (or argument indirection) to a call, and + * `parameter` is the corresponding initialization instruction in the call target. */ private predicate flowThroughCallable(Instruction argument, Instruction parameter) { // Flow from an argument to a parameter exists(CallInstruction call, InitializeParameterInstruction init | init = parameter | - getPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget()) + isPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget()) or - getThisArgumentInitParam(call, argument, init, call.getStaticCallTarget()) + isThisArgumentInitParam(call, argument, init, call.getStaticCallTarget()) ) or // Flow from argument indirection to parameter indirection @@ -238,7 +244,7 @@ module MustFlow { | init = parameter and read.getPrimaryInstruction() = call and - getEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget()) + isEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget()) | exists(int n | read.getSideEffectOperand().getAnyDef() = argument and From cd62cdadff1ce9c14f521a06660954774a76cf77 Mon Sep 17 00:00:00 2001 From: Taus Date: Mon, 16 Feb 2026 16:24:22 +0000 Subject: [PATCH 095/243] Python: Fix bad join in `returnStep` --- .../python/dataflow/new/internal/TypeTrackingImpl.qll | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll index 2f98ab70719b..95434b05451d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/TypeTrackingImpl.qll @@ -202,11 +202,18 @@ module TypeTrackingInput implements Shared::TypeTrackingInput { */ predicate returnStep(Node nodeFrom, LocalSourceNode nodeTo) { exists(DataFlowPrivate::ExtractedDataFlowCall call | - nodeFrom.(DataFlowPrivate::ReturnNode).getEnclosingCallable() = call.getCallable() and + returnNodeEnclosingCallable(nodeFrom) = call.getCallable() and nodeTo.(DataFlowPublic::CfgNode).getNode() = call.getNode() ) } + pragma[nomagic] + private DataFlowDispatch::DataFlowCallable returnNodeEnclosingCallable( + DataFlowPrivate::ReturnNode returnNode + ) { + result = returnNode.getEnclosingCallable() + } + /** * Holds if `nodeFrom` is being written to the `content` content of the object in `nodeTo`. */ From b5898c5a3035c9d56fd6dc33fef79ebd38f0dfdd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 16 Feb 2026 17:07:45 +0000 Subject: [PATCH 096/243] Post-release preparation for codeql-cli-2.24.2 --- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/concepts/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/quantum/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 5725fb5f9aab..a9d5b7e61f63 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.28 +version: 0.4.29-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index e41369b51932..f4e731dc26da 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.6.20 +version: 0.6.21-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index d2b42410887c..31ce003aadc6 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 7.1.1 +version: 7.1.2-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 51a78ddd3fcb..d8620439fe62 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.5.11 +version: 1.5.12-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index bb75fe4cfffe..2bf13d256c9b 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.59 +version: 1.7.60-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 0ab19080276a..780301f353c8 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.59 +version: 1.7.60-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index d873c0c3b082..30f75e743043 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.4.7 +version: 5.4.8-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 7986040d2b66..d43afd632c10 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.6.2 +version: 1.6.3-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 96304fa9a182..6f9302c9ac46 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.42 +version: 1.0.43-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 94a5b04b3908..ac5f63a29bc5 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 7.0.0 +version: 7.0.1-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 43b5c67bc3f3..bbac3ffc2124 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.5.6 +version: 1.5.7-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 2d891f9ac5f3..a1737f2d1cbb 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 8.1.0 +version: 8.1.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 2f9b44790086..fda7663d6864 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.10.7 +version: 1.10.8-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 30d166fb610b..2415cf3d3b72 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.22 +version: 2.6.23-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 5e72fce54327..1f57b3e99e2f 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 2.3.2 +version: 2.3.3-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index ba00d002da93..48e31175a000 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.42 +version: 1.0.43-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index b00b30158bef..36b8813f8dec 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 6.1.1 +version: 6.1.2-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index dea81a838178..c6b7d29f6312 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.7.7 +version: 1.7.8-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index a9e713a73e7f..1d14ca0e3d26 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 5.1.10 +version: 5.1.11-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 20706f6f0acd..b027389bc632 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.5.7 +version: 1.5.8-dev groups: - ruby - queries diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index c23251f51ef2..f7428ef10877 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.2.6 +version: 0.2.7-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 3ce8fab18ffc..21011bd93d53 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.27 +version: 0.1.28-dev groups: - rust - queries diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml index fcce8c5cac32..240ee962cfd4 100644 --- a/shared/concepts/qlpack.yml +++ b/shared/concepts/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/concepts -version: 0.0.16 +version: 0.0.17-dev groups: shared library: true dependencies: diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 99b795145120..6ae58a799e62 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.26 +version: 2.0.27-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index 243db1c539cc..d16d8379bbb5 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.26 +version: 2.0.27-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 358b90c92b59..9adf5d48ad5e 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml index 84b0091c2432..91774b4db2df 100644 --- a/shared/quantum/qlpack.yml +++ b/shared/quantum/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/quantum -version: 0.0.20 +version: 0.0.21-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 0220e2370654..a5e5998c4a76 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 915c2fb7c347..2dd532583184 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 2c51888e5124..5e567790cfef 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 2.0.18 +version: 2.0.19-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 197379a2b2ff..65539cd3c1b9 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.42 +version: 1.0.43-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index f7d1592cc2f2..d632d0426b4a 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 717d5e5c9a55..19f169087689 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index e740633b8523..cd15cfac9861 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.23 +version: 0.0.24-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index a8b74e13d69b..41e4b42ff3b3 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.26 +version: 2.0.27-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index c339ed16159c..cf3df223c88c 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index 81efc5bf9af7..18d1315e0da5 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.29 +version: 2.0.30-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index e84e83a927ed..63b5786ba440 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 263fd7d87a76..1ecff982de77 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.42 +version: 1.0.43-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 0f240082bf7c..da06170849bc 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 6.2.2 +version: 6.2.3-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index d6128248bd75..58dd667f57b0 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.2.16 +version: 1.2.17-dev groups: - swift - queries From 366ebcad834dc2a8b93e314fa80624f7ed7b5124 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 16 Feb 2026 18:58:39 +0100 Subject: [PATCH 097/243] C++: Add `cpp/return-stack-allocated-memory` test case --- .../ReturnStackAllocatedMemory.expected | 8 ++++++++ .../Memory Management/ReturnStackAllocatedMemory/test.cpp | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected index 6aa457b1e8a4..23b23dc4a3b2 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected @@ -48,6 +48,9 @@ edges | test.cpp:249:13:249:20 | call to strndupa | test.cpp:249:13:249:20 | call to strndupa | | test.cpp:249:13:249:20 | call to strndupa | test.cpp:250:9:250:10 | s2 | | test.cpp:250:9:250:10 | s2 | test.cpp:250:9:250:10 | (void *)... | +| test.cpp:253:17:253:17 | p | test.cpp:256:10:256:10 | p | +| test.cpp:255:19:255:20 | & ... | test.cpp:253:17:253:17 | p | +| test.cpp:255:20:255:20 | x | test.cpp:255:19:255:20 | & ... | nodes | test.cpp:17:9:17:11 | & ... | semmle.label | & ... | | test.cpp:17:10:17:11 | mc | semmle.label | mc | @@ -114,6 +117,10 @@ nodes | test.cpp:249:13:249:20 | call to strndupa | semmle.label | call to strndupa | | test.cpp:250:9:250:10 | (void *)... | semmle.label | (void *)... | | test.cpp:250:9:250:10 | s2 | semmle.label | s2 | +| test.cpp:253:17:253:17 | p | semmle.label | p | +| test.cpp:255:19:255:20 | & ... | semmle.label | & ... | +| test.cpp:255:20:255:20 | x | semmle.label | x | +| test.cpp:256:10:256:10 | p | semmle.label | p | #select | test.cpp:17:9:17:11 | CopyValue: & ... | test.cpp:17:10:17:11 | mc | test.cpp:17:9:17:11 | & ... | May return stack-allocated memory from $@. | test.cpp:17:10:17:11 | mc | mc | | test.cpp:25:9:25:11 | Load: ptr | test.cpp:23:18:23:19 | mc | test.cpp:25:9:25:11 | ptr | May return stack-allocated memory from $@. | test.cpp:23:18:23:19 | mc | mc | @@ -131,3 +138,4 @@ nodes | test.cpp:238:9:238:9 | Load: p | test.cpp:237:12:237:17 | call to alloca | test.cpp:238:9:238:9 | p | May return stack-allocated memory from $@. | test.cpp:237:12:237:17 | call to alloca | call to alloca | | test.cpp:245:9:245:15 | Call: call to strdupa | test.cpp:245:9:245:15 | call to strdupa | test.cpp:245:9:245:15 | call to strdupa | May return stack-allocated memory from $@. | test.cpp:245:9:245:15 | call to strdupa | call to strdupa | | test.cpp:250:9:250:10 | Convert: (void *)... | test.cpp:249:13:249:20 | call to strndupa | test.cpp:250:9:250:10 | (void *)... | May return stack-allocated memory from $@. | test.cpp:249:13:249:20 | call to strndupa | call to strndupa | +| test.cpp:256:10:256:10 | Load: p | test.cpp:255:20:255:20 | x | test.cpp:256:10:256:10 | p | May return stack-allocated memory from $@. | test.cpp:255:20:255:20 | x | x | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp index abc21aa74d81..ab1a626a4b07 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp @@ -250,3 +250,8 @@ void* test_strndupa(const char* s, size_t size) { return s2; // BAD } +int* f_rec(int *p, bool b) { + int x; + int* px = f_rec(&x, b); // GOOD [FALSE POSITIVE] + return p; +} From 4efbc6ea9beebfe21544fee894c2e0dcf1cdc11f Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 16 Feb 2026 19:04:23 +0100 Subject: [PATCH 098/243] C++: Handle `allowInterproceduralFlow` correctly in case of recursive functions --- .../semmle/code/cpp/ir/dataflow/MustFlow.qll | 27 +++++-------------- .../ReturnStackAllocatedMemory.expected | 8 ------ .../ReturnStackAllocatedMemory/test.cpp | 2 +- 3 files changed, 8 insertions(+), 29 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll index 5a0f34c6dc1a..a8adb16849c8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll @@ -87,24 +87,12 @@ module MustFlow { ) } - /** - * Gets the enclosing callable of `n`. Unlike `n.getEnclosingCallable()`, this - * predicate ensures that joins go from `n` to the result instead of the other - * way around. - */ - pragma[inline] - private IRFunction getEnclosingCallable(Instruction n) { - pragma[only_bind_into](result) = pragma[only_bind_out](n).getEnclosingIRFunction() - } - /** Holds if `nodeFrom` flows to `nodeTo`. */ private predicate step(Instruction nodeFrom, Instruction nodeTo) { - Cached::step(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) and - ( - allowInterproceduralFlow() - or - getEnclosingCallable(nodeFrom) = getEnclosingCallable(nodeTo) - ) + Cached::localStep(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) + or + allowInterproceduralFlow() and + Cached::flowThroughCallable(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) or isAdditionalFlowStep(nodeFrom.getAUse(), nodeTo) } @@ -230,7 +218,8 @@ module MustFlow { * Holds if `argument` is an argument (or argument indirection) to a call, and * `parameter` is the corresponding initialization instruction in the call target. */ - private predicate flowThroughCallable(Instruction argument, Instruction parameter) { + cached + predicate flowThroughCallable(Instruction argument, Instruction parameter) { // Flow from an argument to a parameter exists(CallInstruction call, InitializeParameterInstruction init | init = parameter | isPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget()) @@ -279,13 +268,11 @@ module MustFlow { } cached - predicate step(Instruction nodeFrom, Instruction nodeTo) { + predicate localStep(Instruction nodeFrom, Instruction nodeTo) { exists(Operand mid | instructionToOperandStep(nodeFrom, mid) and operandToInstructionStep(mid, nodeTo) ) - or - flowThroughCallable(nodeFrom, nodeTo) } } } diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected index 23b23dc4a3b2..6aa457b1e8a4 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/ReturnStackAllocatedMemory.expected @@ -48,9 +48,6 @@ edges | test.cpp:249:13:249:20 | call to strndupa | test.cpp:249:13:249:20 | call to strndupa | | test.cpp:249:13:249:20 | call to strndupa | test.cpp:250:9:250:10 | s2 | | test.cpp:250:9:250:10 | s2 | test.cpp:250:9:250:10 | (void *)... | -| test.cpp:253:17:253:17 | p | test.cpp:256:10:256:10 | p | -| test.cpp:255:19:255:20 | & ... | test.cpp:253:17:253:17 | p | -| test.cpp:255:20:255:20 | x | test.cpp:255:19:255:20 | & ... | nodes | test.cpp:17:9:17:11 | & ... | semmle.label | & ... | | test.cpp:17:10:17:11 | mc | semmle.label | mc | @@ -117,10 +114,6 @@ nodes | test.cpp:249:13:249:20 | call to strndupa | semmle.label | call to strndupa | | test.cpp:250:9:250:10 | (void *)... | semmle.label | (void *)... | | test.cpp:250:9:250:10 | s2 | semmle.label | s2 | -| test.cpp:253:17:253:17 | p | semmle.label | p | -| test.cpp:255:19:255:20 | & ... | semmle.label | & ... | -| test.cpp:255:20:255:20 | x | semmle.label | x | -| test.cpp:256:10:256:10 | p | semmle.label | p | #select | test.cpp:17:9:17:11 | CopyValue: & ... | test.cpp:17:10:17:11 | mc | test.cpp:17:9:17:11 | & ... | May return stack-allocated memory from $@. | test.cpp:17:10:17:11 | mc | mc | | test.cpp:25:9:25:11 | Load: ptr | test.cpp:23:18:23:19 | mc | test.cpp:25:9:25:11 | ptr | May return stack-allocated memory from $@. | test.cpp:23:18:23:19 | mc | mc | @@ -138,4 +131,3 @@ nodes | test.cpp:238:9:238:9 | Load: p | test.cpp:237:12:237:17 | call to alloca | test.cpp:238:9:238:9 | p | May return stack-allocated memory from $@. | test.cpp:237:12:237:17 | call to alloca | call to alloca | | test.cpp:245:9:245:15 | Call: call to strdupa | test.cpp:245:9:245:15 | call to strdupa | test.cpp:245:9:245:15 | call to strdupa | May return stack-allocated memory from $@. | test.cpp:245:9:245:15 | call to strdupa | call to strdupa | | test.cpp:250:9:250:10 | Convert: (void *)... | test.cpp:249:13:249:20 | call to strndupa | test.cpp:250:9:250:10 | (void *)... | May return stack-allocated memory from $@. | test.cpp:249:13:249:20 | call to strndupa | call to strndupa | -| test.cpp:256:10:256:10 | Load: p | test.cpp:255:20:255:20 | x | test.cpp:256:10:256:10 | p | May return stack-allocated memory from $@. | test.cpp:255:20:255:20 | x | x | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp index ab1a626a4b07..abde10eb6e75 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp @@ -252,6 +252,6 @@ void* test_strndupa(const char* s, size_t size) { int* f_rec(int *p, bool b) { int x; - int* px = f_rec(&x, b); // GOOD [FALSE POSITIVE] + int* px = f_rec(&x, b); // GOOD return p; } From e299cccb6e7133c05bbb1e6c0fcc2f55151bd766 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Mon, 16 Feb 2026 19:09:30 +0100 Subject: [PATCH 099/243] C++: Simplify test --- .../Memory Management/ReturnStackAllocatedMemory/test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp index abde10eb6e75..07e3520fa814 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/ReturnStackAllocatedMemory/test.cpp @@ -250,8 +250,8 @@ void* test_strndupa(const char* s, size_t size) { return s2; // BAD } -int* f_rec(int *p, bool b) { +int* f_rec(int *p) { int x; - int* px = f_rec(&x, b); // GOOD + int* px = f_rec(&x); // GOOD return p; } From 31895c04f80e56b832cba8f39359a4a56a0d45f4 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 17 Feb 2026 09:06:36 +0100 Subject: [PATCH 100/243] C++: `MustFlow` minor clean up --- .../semmle/code/cpp/ir/dataflow/MustFlow.qll | 237 +++++++++--------- 1 file changed, 118 insertions(+), 119 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll index a8adb16849c8..2b61190fb71e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/MustFlow.qll @@ -89,10 +89,10 @@ module MustFlow { /** Holds if `nodeFrom` flows to `nodeTo`. */ private predicate step(Instruction nodeFrom, Instruction nodeTo) { - Cached::localStep(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) + Cached::localStep(nodeFrom, nodeTo) or allowInterproceduralFlow() and - Cached::flowThroughCallable(pragma[only_bind_into](nodeFrom), pragma[only_bind_into](nodeTo)) + Cached::flowThroughCallable(nodeFrom, nodeTo) or isAdditionalFlowStep(nodeFrom.getAUse(), nodeTo) } @@ -145,134 +145,133 @@ module MustFlow { } } } +} - cached - private module Cached { - /** Holds if `p` is the `n`'th parameter of the non-virtual function `f`. */ - private predicate parameterOf(Parameter p, Function f, int n) { - not f.isVirtual() and f.getParameter(n) = p - } +cached +private module Cached { + /** Holds if `p` is the `n`'th parameter of the non-virtual function `f`. */ + private predicate parameterOf(Parameter p, Function f, int n) { + not f.isVirtual() and f.getParameter(n) = p + } - /** - * Holds if `instr` is the `n`'th argument to a call to the non-virtual function `f`, and - * `init` is the corresponding initialization instruction that receives the value of `instr` in `f`. - */ - private predicate flowIntoParameter( - Function f, int n, CallInstruction call, Instruction instr, - InitializeParameterInstruction init - ) { - not f.isVirtual() and - call.getPositionalArgument(n) = instr and - f = call.getStaticCallTarget() and - isEnclosingNonVirtualFunctionInitializeParameter(init, f) and - init.getParameter().getIndex() = pragma[only_bind_into](pragma[only_bind_out](n)) - } + /** + * Holds if `instr` is the `n`'th argument to a call to the non-virtual function `f`, and + * `init` is the corresponding initialization instruction that receives the value of `instr` in `f`. + */ + private predicate flowIntoParameter( + Function f, int n, CallInstruction call, Instruction instr, InitializeParameterInstruction init + ) { + not f.isVirtual() and + call.getPositionalArgument(n) = instr and + f = call.getStaticCallTarget() and + isEnclosingNonVirtualFunctionInitializeParameter(init, f) and + init.getParameter().getIndex() = pragma[only_bind_into](pragma[only_bind_out](n)) + } - /** - * Holds if `instr` is an argument to a call to the function `f`, and `init` is the - * corresponding initialization instruction that receives the value of `instr` in `f`. - */ - pragma[noinline] - private predicate isPositionalArgumentInitParam( - CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f - ) { - exists(int n | - parameterOf(_, f, n) and - flowIntoParameter(f, pragma[only_bind_into](pragma[only_bind_out](n)), call, instr, init) - ) - } + /** + * Holds if `instr` is an argument to a call to the function `f`, and `init` is the + * corresponding initialization instruction that receives the value of `instr` in `f`. + */ + pragma[noinline] + private predicate isPositionalArgumentInitParam( + CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f + ) { + exists(int n | + parameterOf(_, f, n) and + flowIntoParameter(f, pragma[only_bind_into](pragma[only_bind_out](n)), call, instr, init) + ) + } - /** - * Holds if `instr` is the qualifier to a call to the non-virtual function `f`, and - * `init` is the corresponding initialization instruction that receives the value of - * `instr` in `f`. - */ - pragma[noinline] - private predicate isThisArgumentInitParam( - CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f - ) { - not f.isVirtual() and - call.getStaticCallTarget() = f and - isEnclosingNonVirtualFunctionInitializeParameter(init, f) and - call.getThisArgument() = instr and - init.getIRVariable() instanceof IRThisVariable - } + /** + * Holds if `instr` is the qualifier to a call to the non-virtual function `f`, and + * `init` is the corresponding initialization instruction that receives the value of + * `instr` in `f`. + */ + pragma[noinline] + private predicate isThisArgumentInitParam( + CallInstruction call, Instruction instr, InitializeParameterInstruction init, Function f + ) { + not f.isVirtual() and + call.getStaticCallTarget() = f and + isEnclosingNonVirtualFunctionInitializeParameter(init, f) and + call.getThisArgument() = instr and + init.getIRVariable() instanceof IRThisVariable + } - /** Holds if `f` is the enclosing non-virtual function of `init`. */ - private predicate isEnclosingNonVirtualFunctionInitializeParameter( - InitializeParameterInstruction init, Function f - ) { - not f.isVirtual() and - init.getEnclosingFunction() = f - } + /** Holds if `f` is the enclosing non-virtual function of `init`. */ + private predicate isEnclosingNonVirtualFunctionInitializeParameter( + InitializeParameterInstruction init, Function f + ) { + not f.isVirtual() and + init.getEnclosingFunction() = f + } - /** Holds if `f` is the enclosing non-virtual function of `init`. */ - private predicate isEnclosingNonVirtualFunctionInitializeIndirection( - InitializeIndirectionInstruction init, Function f - ) { - not f.isVirtual() and - init.getEnclosingFunction() = f - } + /** Holds if `f` is the enclosing non-virtual function of `init`. */ + private predicate isEnclosingNonVirtualFunctionInitializeIndirection( + InitializeIndirectionInstruction init, Function f + ) { + not f.isVirtual() and + init.getEnclosingFunction() = f + } - /** - * Holds if `argument` is an argument (or argument indirection) to a call, and - * `parameter` is the corresponding initialization instruction in the call target. - */ - cached - predicate flowThroughCallable(Instruction argument, Instruction parameter) { - // Flow from an argument to a parameter - exists(CallInstruction call, InitializeParameterInstruction init | init = parameter | - isPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget()) - or - isThisArgumentInitParam(call, argument, init, call.getStaticCallTarget()) - ) + /** + * Holds if `argument` is an argument (or argument indirection) to a call, and + * `parameter` is the corresponding initialization instruction in the call target. + */ + cached + predicate flowThroughCallable(Instruction argument, Instruction parameter) { + // Flow from an argument to a parameter + exists(CallInstruction call, InitializeParameterInstruction init | init = parameter | + isPositionalArgumentInitParam(call, argument, init, call.getStaticCallTarget()) or - // Flow from argument indirection to parameter indirection - exists( - CallInstruction call, ReadSideEffectInstruction read, InitializeIndirectionInstruction init - | - init = parameter and - read.getPrimaryInstruction() = call and - isEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget()) - | - exists(int n | - read.getSideEffectOperand().getAnyDef() = argument and - read.getIndex() = pragma[only_bind_into](n) and - init.getParameter().getIndex() = pragma[only_bind_into](n) - ) - or - call.getThisArgument() = argument and - init.getIRVariable() instanceof IRThisVariable + isThisArgumentInitParam(call, argument, init, call.getStaticCallTarget()) + ) + or + // Flow from argument indirection to parameter indirection + exists( + CallInstruction call, ReadSideEffectInstruction read, InitializeIndirectionInstruction init + | + init = parameter and + read.getPrimaryInstruction() = call and + isEnclosingNonVirtualFunctionInitializeIndirection(init, call.getStaticCallTarget()) + | + exists(int n | + read.getSideEffectOperand().getAnyDef() = argument and + read.getIndex() = pragma[only_bind_into](n) and + init.getParameter().getIndex() = pragma[only_bind_into](n) ) - } + or + call.getThisArgument() = argument and + init.getIRVariable() instanceof IRThisVariable + ) + } - private predicate instructionToOperandStep(Instruction instr, Operand operand) { - operand.getDef() = instr - } + private predicate instructionToOperandStep(Instruction instr, Operand operand) { + operand.getDef() = instr + } - /** - * Holds if data flows from `operand` to `instr`. - * - * This predicate ignores flow through `PhiInstruction`s to create a 'must flow' relation. - */ - private predicate operandToInstructionStep(Operand operand, Instruction instr) { - instr.(CopyInstruction).getSourceValueOperand() = operand - or - instr.(ConvertInstruction).getUnaryOperand() = operand - or - instr.(CheckedConvertOrNullInstruction).getUnaryOperand() = operand - or - instr.(InheritanceConversionInstruction).getUnaryOperand() = operand - or - instr.(ChiInstruction).getTotalOperand() = operand - } + /** + * Holds if data flows from `operand` to `instr`. + * + * This predicate ignores flow through `PhiInstruction`s to create a 'must flow' relation. + */ + private predicate operandToInstructionStep(Operand operand, Instruction instr) { + instr.(CopyInstruction).getSourceValueOperand() = operand + or + instr.(ConvertInstruction).getUnaryOperand() = operand + or + instr.(CheckedConvertOrNullInstruction).getUnaryOperand() = operand + or + instr.(InheritanceConversionInstruction).getUnaryOperand() = operand + or + instr.(ChiInstruction).getTotalOperand() = operand + } - cached - predicate localStep(Instruction nodeFrom, Instruction nodeTo) { - exists(Operand mid | - instructionToOperandStep(nodeFrom, mid) and - operandToInstructionStep(mid, nodeTo) - ) - } + cached + predicate localStep(Instruction nodeFrom, Instruction nodeTo) { + exists(Operand mid | + instructionToOperandStep(nodeFrom, mid) and + operandToInstructionStep(mid, nodeTo) + ) } } From 3aa21242cdf08ac14dfc0ef85832734a2251df87 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Tue, 17 Feb 2026 10:28:29 +0100 Subject: [PATCH 101/243] C++: Add change notes --- cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md | 4 ++++ cpp/ql/lib/change-notes/2026-02-14-must-flow.md | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md create mode 100644 cpp/ql/lib/change-notes/2026-02-14-must-flow.md diff --git a/cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md b/cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md new file mode 100644 index 000000000000..fc838f51c068 --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-02-14-must-flow-fix.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* The `allowInterproceduralFlow` predicate of must-flow data flow configurations now correctly handles direct recursion. diff --git a/cpp/ql/lib/change-notes/2026-02-14-must-flow.md b/cpp/ql/lib/change-notes/2026-02-14-must-flow.md new file mode 100644 index 000000000000..3d1afaa6344b --- /dev/null +++ b/cpp/ql/lib/change-notes/2026-02-14-must-flow.md @@ -0,0 +1,4 @@ +--- +category: breaking +--- +* `MustFlow`, the inter-procedural must-flow data flow analysis library, has been re-worked to use parameterized modules. Like in the case of data flow and taint tracking, instead of extending the `MustFlowConfiguration` class, the user should now implement a module with the `MustFlow::ConfigSig` signature, and instantiate the `MustFlow::Global` parameterized module with the implemented module. From c3f0967e9bde3ab6251d6492a8511271ec23f109 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Fri, 12 Dec 2025 09:03:16 +0100 Subject: [PATCH 102/243] C/C++ overlay: discard single location elements --- .../lib/semmle/code/cpp/internal/Overlay.qll | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll b/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll index 7e98177f3236..3dea144bbf67 100644 --- a/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll +++ b/cpp/ql/lib/semmle/code/cpp/internal/Overlay.qll @@ -34,6 +34,38 @@ private string getSingleLocationFilePath(@element e) { macroinvocations(e, _, loc, _) or preprocdirects(e, _, loc) + or + diagnostics(e, _, _, _, _, loc) + or + usings(e, _, loc, _) + or + static_asserts(e, _, _, loc, _) + or + derivations(e, _, _, _, loc) + or + frienddecls(e, _, _, loc) + or + comments(e, _, loc) + or + exprs(e, _, loc) + or + stmts(e, _, loc) + or + initialisers(e, _, _, loc) + or + attributes(e, _, _, _, loc) + or + attribute_args(e, _, _, _, loc) + or + namequalifiers(e, _, _, loc) + or + enumconstants(e, _, _, _, _, loc) + or + type_mentions(e, _, loc, _) + or + lambda_capture(e, _, _, _, _, _, loc) + or + concept_templates(e, _, loc) | result = getLocationFilePath(loc) ) From d3541b87d6d7945f6758092c305ba137c49b34aa Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 11 Feb 2026 16:07:43 +0100 Subject: [PATCH 103/243] Rust: Make path resolution robust against invalid code with conflicting declarations --- .../codeql/rust/internal/PathResolution.qll | 73 +++++++++++++------ .../path-resolution/invalid/main.rs | 6 ++ .../path-resolution/invalid/options.yml | 1 + .../path-resolution/path-resolution.expected | 1 + 4 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 rust/ql/test/library-tests/path-resolution/invalid/main.rs create mode 100644 rust/ql/test/library-tests/path-resolution/invalid/options.yml diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 432608f6f9d6..76c15485bb9a 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -107,7 +107,7 @@ class SuccessorKind extends TSuccessorKind { } pragma[nomagic] -private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind kind) { +private ItemNode getAChildSuccessor0(ItemNode item, string name, SuccessorKind kind) { item = result.getImmediateParent() and name = result.getName() and // Associated items in `impl` and `trait` blocks are handled elsewhere @@ -116,7 +116,7 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki if result instanceof TypeParam then kind.isInternal() else - if result.isPublic() + if result.isPublic() or item instanceof SourceFile then kind.isBoth() else kind.isInternal() or @@ -130,6 +130,41 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki result = item } +pragma[nomagic] +private NamedItemNode getANamedNonModuleChildSuccessor( + ItemNode item, string name, Namespace ns, int startline, int startcolumn, int endline, + int endcolumn +) { + result.getLocation().hasLocationInfo(_, startline, startcolumn, endline, endcolumn) and + result = getAChildSuccessor0(item, name, _) and + ns = result.getNamespace() and + not result instanceof ModuleItemNode +} + +pragma[nomagic] +private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind kind) { + result = getAChildSuccessor0(item, name, kind) and + // In valid Rust code, there cannot be multiple children with the same name and namespace, + // but to safeguard against combinatorial explosions in invalid code, we always pick the + // last child, except for modules, where we take the union. + ( + not result instanceof NamedItemNode + or + result instanceof ModuleItemNode + or + exists(Namespace ns | + result = + max(NamedItemNode i, int startline, int startcolumn, int endline, int endcolumn | + i = + getANamedNonModuleChildSuccessor(item, name, ns, startline, startcolumn, endline, + endcolumn) + | + i order by startline, startcolumn, endline, endcolumn + ) + ) + ) +} + private module UseOption = Option; private class UseOption = UseOption::Option; @@ -288,10 +323,6 @@ abstract class ItemNode extends Locatable { cached ItemNode getASuccessor(string name, SuccessorKind kind, UseOption useOpt) { Stages::PathResolutionStage::ref() and - sourceFileEdge(this, name, result) and - kind.isBoth() and - useOpt.isNone() - or result = getAChildSuccessor(this, name, kind) and useOpt.isNone() or @@ -471,6 +502,8 @@ abstract class ItemNode extends Locatable { Location getLocation() { result = super.getLocation() } } +abstract class NamedItemNode extends ItemNode { } + abstract class TypeItemNode extends ItemNode { } /** A module or a source file. */ @@ -509,7 +542,7 @@ private class SourceFileItemNode extends ModuleLikeNode instanceof SourceFile { override string getCanonicalPath(Crate c) { none() } } -class CrateItemNode extends ItemNode instanceof Crate { +class CrateItemNode extends NamedItemNode instanceof Crate { /** * Gets the source file that defines this crate. */ @@ -565,7 +598,7 @@ class CrateItemNode extends ItemNode instanceof Crate { override string getCanonicalPath(Crate c) { c = this and result = Crate.super.getName() } } -class ExternCrateItemNode extends ItemNode instanceof ExternCrate { +class ExternCrateItemNode extends NamedItemNode instanceof ExternCrate { override string getName() { result = super.getRename().getName().getText() or @@ -573,7 +606,7 @@ class ExternCrateItemNode extends ItemNode instanceof ExternCrate { result = super.getIdentifier().getText() } - override Namespace getNamespace() { none() } + override Namespace getNamespace() { result.isType() } override Visibility getVisibility() { result = ExternCrate.super.getVisibility() } @@ -587,7 +620,7 @@ class ExternCrateItemNode extends ItemNode instanceof ExternCrate { } /** An item that can occur in a trait or an `impl` block. */ -abstract private class AssocItemNode extends ItemNode instanceof AssocItem { +abstract private class AssocItemNode extends NamedItemNode instanceof AssocItem { /** Holds if this associated item has an implementation. */ abstract predicate hasImplementation(); @@ -626,7 +659,7 @@ private class ConstItemNode extends AssocItemNode instanceof Const { override TypeParam getTypeParam(int i) { none() } } -private class TypeItemTypeItemNode extends TypeItemNode instanceof TypeItem { +private class TypeItemTypeItemNode extends NamedItemNode, TypeItemNode instanceof TypeItem { override string getName() { result = TypeItem.super.getName().getText() } override Namespace getNamespace() { result.isType() } @@ -659,7 +692,7 @@ private class TypeItemTypeItemNode extends TypeItemNode instanceof TypeItem { } /** An item that can be referenced with arguments. */ -abstract class ParameterizableItemNode extends ItemNode { +abstract class ParameterizableItemNode extends NamedItemNode { /** Gets the arity this item. */ abstract int getArity(); } @@ -911,7 +944,7 @@ private class ImplTraitTypeReprItemNodeImpl extends ImplTraitTypeReprItemNode { ItemNode resolveABoundCand() { result = resolvePathCand(this.getABoundPath()) } } -private class ModuleItemNode extends ModuleLikeNode instanceof Module { +private class ModuleItemNode extends NamedItemNode, ModuleLikeNode instanceof Module { override string getName() { result = Module.super.getName().getText() } override Namespace getNamespace() { result.isType() } @@ -929,7 +962,7 @@ private class ModuleItemNode extends ModuleLikeNode instanceof Module { ( exists(SourceFile f | fileImport(this, f) and - sourceFileEdge(f, _, child) + child = getAChildSuccessor(f, _, _) ) or this = child.getImmediateParent() @@ -1001,7 +1034,7 @@ private class StructItemNode extends TypeItemTypeItemNode, ParameterizableItemNo } } -final class TraitItemNode extends ImplOrTraitItemNode, TypeItemNode instanceof Trait { +final class TraitItemNode extends ImplOrTraitItemNode, NamedItemNode, TypeItemNode instanceof Trait { pragma[nomagic] Path getABoundPath() { result = super.getATypeBound().getTypeRepr().(PathTypeRepr).getPath() } @@ -1126,7 +1159,7 @@ private class BlockExprItemNode extends ItemNode instanceof BlockExpr { pragma[nomagic] private Path getWherePredPath(WherePred wp) { result = wp.getTypeRepr().(PathTypeRepr).getPath() } -final class TypeParamItemNode extends TypeItemNode instanceof TypeParam { +final class TypeParamItemNode extends NamedItemNode, TypeItemNode instanceof TypeParam { /** Gets a where predicate for this type parameter, if any */ pragma[nomagic] private WherePred getAWherePred() { @@ -1214,7 +1247,7 @@ final private class TypeParamItemNodeImpl extends TypeParamItemNode instanceof T ItemNode resolveABoundCand() { result = resolvePathCand(this.getABoundPathCand()) } } -abstract private class MacroItemNode extends ItemNode { +abstract private class MacroItemNode extends NamedItemNode { override Namespace getNamespace() { result.isMacro() } override TypeParam getTypeParam(int i) { none() } @@ -1256,12 +1289,6 @@ private class MacroDefItemNode extends MacroItemNode instanceof MacroDef { override Attr getAnAttr() { result = MacroDef.super.getAnAttr() } } -/** Holds if `item` has the name `name` and is a top-level item inside `f`. */ -private predicate sourceFileEdge(SourceFile f, string name, ItemNode item) { - item = f.(ItemNode).getADescendant() and - name = item.getName() -} - /** Holds if `f` is available as `mod name;` inside `folder`. */ pragma[nomagic] private predicate fileModule(SourceFile f, string name, Folder folder) { diff --git a/rust/ql/test/library-tests/path-resolution/invalid/main.rs b/rust/ql/test/library-tests/path-resolution/invalid/main.rs new file mode 100644 index 000000000000..b58fcb2d9346 --- /dev/null +++ b/rust/ql/test/library-tests/path-resolution/invalid/main.rs @@ -0,0 +1,6 @@ +// The code in this file is not valid Rust code + +struct A; // A1 +struct A; // A2 + +fn f(x: A) {} // $ item=A2 (the latter occurence takes precedence) diff --git a/rust/ql/test/library-tests/path-resolution/invalid/options.yml b/rust/ql/test/library-tests/path-resolution/invalid/options.yml new file mode 100644 index 000000000000..cf148dd35f86 --- /dev/null +++ b/rust/ql/test/library-tests/path-resolution/invalid/options.yml @@ -0,0 +1 @@ +qltest_cargo_check: false diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 153d80db4cca..e85bb7876dab 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -51,6 +51,7 @@ mod | my/nested.rs:1:1:17:1 | mod nested1 | | my/nested.rs:2:5:11:5 | mod nested2 | resolvePath +| invalid/main.rs:6:9:6:9 | A | invalid/main.rs:3:11:4:9 | struct A | | main.rs:4:8:4:9 | my | main.rs:1:1:1:7 | mod my | | main.rs:4:14:4:17 | self | main.rs:1:1:1:7 | mod my | | main.rs:6:5:6:6 | my | main.rs:1:1:1:7 | mod my | From 8a051d7e578792814bd787de4eb9c37591c544f7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Feb 2026 12:10:33 +0100 Subject: [PATCH 104/243] Rust: Add type inference test --- .../test/library-tests/type-inference/main.rs | 1 + .../type-inference/regressions.rs | 34 + .../type-inference/type-inference.expected | 603 +++++++++++++++--- 3 files changed, 554 insertions(+), 84 deletions(-) create mode 100644 rust/ql/test/library-tests/type-inference/regressions.rs diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 204bd7e55cb5..06d54b5ba968 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -2740,6 +2740,7 @@ mod blanket_impl; mod closure; mod dereference; mod dyn_type; +mod regressions; fn main() { field_access::f(); // $ target=f diff --git a/rust/ql/test/library-tests/type-inference/regressions.rs b/rust/ql/test/library-tests/type-inference/regressions.rs new file mode 100644 index 000000000000..17475d50166b --- /dev/null +++ b/rust/ql/test/library-tests/type-inference/regressions.rs @@ -0,0 +1,34 @@ +mod regression1 { + + pub struct S(T); + + pub enum E { + V { vec: Vec }, + } + + impl From> for Option { + fn from(s: S) -> Self { + Some(s.0) // $ fieldof=S + } + } + + pub fn f() -> E { + let mut vec_e = Vec::new(); // $ target=new + let mut opt_e = None; + + let e = E::V { vec: Vec::new() }; // $ target=new + + if let Some(e) = opt_e { + vec_e.push(e); // $ target=push + } + opt_e = e.into(); // $ target=into + + #[rustfmt::skip] + let _ = if let Some(last) = vec_e.pop() // $ target=pop + { + opt_e = last.into(); // $ target=into + }; + + opt_e.unwrap() // $ target=unwrap + } +} diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 1b750fab4586..24005c2cdbdd 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -3711,48 +3711,48 @@ inferCertainType | main.rs:2730:21:2730:21 | y | | {EXTERNAL LOCATION} | & | | main.rs:2733:13:2733:13 | y | | {EXTERNAL LOCATION} | usize | | main.rs:2734:23:2734:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2744:11:2779:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2745:5:2745:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2746:5:2746:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:5:2747:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:20:2747:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:41:2747:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:5:2748:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2749:5:2749:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2750:5:2750:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2751:5:2751:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2752:5:2752:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2753:5:2753:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2754:5:2754:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2755:5:2755:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2758:5:2758:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2759:5:2759:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2763:5:2763:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2763:5:2763:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2772:5:2772:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2777:5:2777:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2777:5:2777:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2777:5:2777:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2777:16:2777:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2778:5:2778:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2745:11:2780:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2746:5:2746:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2747:5:2747:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:5:2748:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:20:2748:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:41:2748:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2749:5:2749:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2750:5:2750:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2751:5:2751:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2752:5:2752:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2753:5:2753:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2754:5:2754:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2755:5:2755:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2756:5:2756:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2757:5:2757:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2758:5:2758:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2759:5:2759:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2760:5:2760:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2761:5:2761:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2762:5:2762:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2763:5:2763:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2764:5:2764:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2765:5:2765:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2766:5:2766:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2778:5:2778:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2778:5:2778:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2778:5:2778:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2778:16:2778:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2779:5:2779:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | @@ -4920,6 +4920,30 @@ inferCertainType | raw_pointer.rs:58:19:58:23 | false | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | +| regressions.rs:10:17:10:17 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:10:17:10:17 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:10:34:12:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| regressions.rs:10:34:12:9 | { ... } | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:18:11:18 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:11:18:11:18 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:15:21:33:5 | { ... } | | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:17:16:21 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:16:25:16:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:25:16:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:19:13:19:13 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:17:19:40 | ...::V {...} | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:29:19:38 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:19:29:19:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:21:9:23:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:21:32:23:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:22:13:22:17 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:22:13:22:17 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:24:17:24:17 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:17:30:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () | inferType | associated_types.rs:5:15:5:18 | SelfParam | | associated_types.rs:1:1:2:21 | Wrapper | | associated_types.rs:5:15:5:18 | SelfParam | A | associated_types.rs:4:6:4:6 | A | @@ -12134,48 +12158,48 @@ inferType | main.rs:2734:17:2734:17 | x | | {EXTERNAL LOCATION} | i32 | | main.rs:2734:17:2734:24 | x.max(...) | | {EXTERNAL LOCATION} | i32 | | main.rs:2734:23:2734:23 | y | | {EXTERNAL LOCATION} | usize | -| main.rs:2744:11:2779:1 | { ... } | | {EXTERNAL LOCATION} | () | -| main.rs:2745:5:2745:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2746:5:2746:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:5:2747:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:20:2747:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2747:41:2747:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | -| main.rs:2748:5:2748:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2749:5:2749:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2750:5:2750:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2751:5:2751:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2752:5:2752:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2753:5:2753:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2754:5:2754:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2755:5:2755:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2756:5:2756:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2757:5:2757:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2758:5:2758:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2759:5:2759:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2760:5:2760:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2761:5:2761:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2762:5:2762:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2763:5:2763:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | -| main.rs:2763:5:2763:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | -| main.rs:2764:5:2764:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2765:5:2765:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2766:5:2766:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2767:5:2767:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2768:5:2768:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2769:5:2769:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2770:5:2770:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2771:5:2771:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2772:5:2772:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2773:5:2773:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2774:5:2774:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2775:5:2775:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2776:5:2776:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | -| main.rs:2777:5:2777:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | -| main.rs:2777:5:2777:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | -| main.rs:2777:5:2777:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | -| main.rs:2777:5:2777:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | -| main.rs:2777:16:2777:19 | true | | {EXTERNAL LOCATION} | bool | -| main.rs:2778:5:2778:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2745:11:2780:1 | { ... } | | {EXTERNAL LOCATION} | () | +| main.rs:2746:5:2746:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2747:5:2747:20 | ...::f(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:5:2748:60 | ...::g(...) | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:20:2748:38 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2748:41:2748:59 | ...::Foo {...} | | main.rs:72:5:72:21 | Foo | +| main.rs:2749:5:2749:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2750:5:2750:41 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2751:5:2751:45 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2752:5:2752:30 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2753:5:2753:21 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2754:5:2754:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2755:5:2755:32 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2756:5:2756:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2757:5:2757:36 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2758:5:2758:35 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2759:5:2759:29 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2760:5:2760:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2761:5:2761:24 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2762:5:2762:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2763:5:2763:18 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2764:5:2764:15 | ...::f(...) | | {EXTERNAL LOCATION} | dyn Future | +| main.rs:2764:5:2764:15 | ...::f(...) | dyn(Output) | {EXTERNAL LOCATION} | () | +| main.rs:2765:5:2765:19 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2766:5:2766:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2767:5:2767:14 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2768:5:2768:27 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2769:5:2769:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2770:5:2770:43 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2771:5:2771:15 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2772:5:2772:17 | ...::f(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2773:5:2773:28 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2774:5:2774:23 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2775:5:2775:41 | ...::test_all_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2776:5:2776:49 | ...::box_patterns(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2777:5:2777:20 | ...::test(...) | | {EXTERNAL LOCATION} | () | +| main.rs:2778:5:2778:20 | ...::f(...) | | {EXTERNAL LOCATION} | Box | +| main.rs:2778:5:2778:20 | ...::f(...) | A | {EXTERNAL LOCATION} | Global | +| main.rs:2778:5:2778:20 | ...::f(...) | T | main.rs:2547:5:2549:5 | dyn MyTrait | +| main.rs:2778:5:2778:20 | ...::f(...) | T.dyn(T) | {EXTERNAL LOCATION} | i32 | +| main.rs:2778:16:2778:19 | true | | {EXTERNAL LOCATION} | bool | +| main.rs:2779:5:2779:23 | ...::f(...) | | {EXTERNAL LOCATION} | () | | overloading.rs:4:19:4:23 | SelfParam | | {EXTERNAL LOCATION} | & | | overloading.rs:4:19:4:23 | SelfParam | TRef | overloading.rs:2:5:11:5 | Self [trait FirstTrait] | | overloading.rs:4:34:6:9 | { ... } | | {EXTERNAL LOCATION} | bool | @@ -14681,4 +14705,415 @@ inferType | raw_pointer.rs:58:19:58:23 | false | | {EXTERNAL LOCATION} | bool | | raw_pointer.rs:59:5:59:30 | raw_type_from_deref(...) | | {EXTERNAL LOCATION} | () | | raw_pointer.rs:59:25:59:29 | false | | {EXTERNAL LOCATION} | bool | +| regressions.rs:10:17:10:17 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:10:17:10:17 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:10:34:12:9 | { ... } | | {EXTERNAL LOCATION} | Option | +| regressions.rs:10:34:12:9 | { ... } | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:13:11:21 | Some(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:11:13:11:21 | Some(...) | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:18:11:18 | s | | regressions.rs:3:5:3:23 | S | +| regressions.rs:11:18:11:18 | s | T | regressions.rs:9:10:9:10 | T | +| regressions.rs:11:18:11:20 | s.0 | | regressions.rs:9:10:9:10 | T | +| regressions.rs:15:21:33:5 | { ... } | | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:17:16:21 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:16:25:16:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | | {EXTERNAL LOCATION} | Option | +| regressions.rs:17:25:17:28 | None | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:13:19:13 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:17:19:40 | ...::V {...} | | regressions.rs:5:5:7:5 | E | +| regressions.rs:19:29:19:38 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:19:29:19:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:19:29:19:38 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:9:23:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:21:16:21:22 | Some(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:21:32:23:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:22:13:22:17 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:22:13:22:17 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:13:22:25 | vec_e.push(...) | | {EXTERNAL LOCATION} | () | +| regressions.rs:22:24:22:24 | e | | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:9:24:24 | ... = ... | | {EXTERNAL LOCATION} | () | +| regressions.rs:24:17:24:17 | e | | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | | {EXTERNAL LOCATION} | Option | +| regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:13:27:13 | _ | | {EXTERNAL LOCATION} | () | +| regressions.rs:27:17:30:9 | if ... {...} | | {EXTERNAL LOCATION} | () | +| regressions.rs:27:24:27:33 | Some(...) | | {EXTERNAL LOCATION} | Option | +| regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec | +| regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global | +| regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | | {EXTERNAL LOCATION} | Option | +| regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () | +| regressions.rs:29:13:29:17 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:13:29:31 | ... = ... | | {EXTERNAL LOCATION} | () | +| regressions.rs:29:21:29:24 | last | | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | | {EXTERNAL LOCATION} | Option | +| regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | | {EXTERNAL LOCATION} | Option | +| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | +| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | testFailures From e587541e55b0c5602948222566d39236c452d160 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 17 Feb 2026 08:59:44 +0100 Subject: [PATCH 105/243] Rust: Restrict type propagation into receivers --- .../internal/typeinference/TypeInference.qll | 123 +++--- .../type-inference/type-inference.expected | 349 ------------------ 2 files changed, 75 insertions(+), 397 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll index a4812ad08786..08ef69ff5965 100644 --- a/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/typeinference/TypeInference.qll @@ -778,13 +778,6 @@ private predicate typeEquality(AstNode n1, TypePath prefix1, AstNode n2, TypePat prefix1 = TypePath::singleton(getArrayTypeParameter()) and prefix2.isEmpty() or - exists(Struct s | - n2 = [n1.(RangeExpr).getStart(), n1.(RangeExpr).getEnd()] and - prefix1 = TypePath::singleton(TTypeParamTypeParameter(s.getGenericParamList().getATypeParam())) and - prefix2.isEmpty() and - s = getRangeType(n1) - ) - or exists(ClosureExpr ce, int index | n1 = ce and n2 = ce.getParam(index).getPat() and @@ -829,6 +822,12 @@ private predicate lubCoercion(AstNode parent, AstNode child, TypePath prefix) { bodyReturns(parent, child) and strictcount(Expr e | bodyReturns(parent, e)) > 1 and prefix.isEmpty() + or + exists(Struct s | + child = [parent.(RangeExpr).getStart(), parent.(RangeExpr).getEnd()] and + prefix = TypePath::singleton(TTypeParamTypeParameter(s.getGenericParamList().getATypeParam())) and + s = getRangeType(parent) + ) } /** @@ -1031,10 +1030,10 @@ private module StructExprMatchingInput implements MatchingInputSig { private module StructExprMatching = Matching; pragma[nomagic] -private Type inferStructExprType0(AstNode n, boolean isReturn, TypePath path) { +private Type inferStructExprType0(AstNode n, FunctionPosition pos, TypePath path) { exists(StructExprMatchingInput::Access a, StructExprMatchingInput::AccessPosition apos | n = a.getNodeAt(apos) and - if apos.isStructPos() then isReturn = true else isReturn = false + if apos.isStructPos() then pos.isReturn() else pos.asPosition() = 0 // the acutal position doesn't matter, as long as it is positional | result = StructExprMatching::inferAccessType(a, apos, path) or @@ -1113,6 +1112,25 @@ private Trait getCallExprTraitQualifier(CallExpr ce) { * Provides functionality related to context-based typing of calls. */ private module ContextTyping { + /** + * Holds if `f` mentions type parameter `tp` at some non-return position, + * possibly via a constraint on another mentioned type parameter. + */ + pragma[nomagic] + private predicate assocFunctionMentionsTypeParameterAtNonRetPos( + ImplOrTraitItemNode i, Function f, TypeParameter tp + ) { + exists(FunctionPosition nonRetPos | + not nonRetPos.isReturn() and + tp = getAssocFunctionTypeAt(f, i, nonRetPos, _) + ) + or + exists(TypeParameter mid | + assocFunctionMentionsTypeParameterAtNonRetPos(i, f, mid) and + tp = getATypeParameterConstraint(mid, _) + ) + } + /** * Holds if the return type of the function `f` inside `i` at `path` is type * parameter `tp`, and `tp` does not appear in the type of any parameter of @@ -1129,12 +1147,7 @@ private module ContextTyping { ) { pos.isReturn() and tp = getAssocFunctionTypeAt(f, i, pos, path) and - not exists(FunctionPosition nonResPos | not nonResPos.isReturn() | - tp = getAssocFunctionTypeAt(f, i, nonResPos, _) - or - // `Self` types in traits implicitly mention all type parameters of the trait - getAssocFunctionTypeAt(f, i, nonResPos, _) = TSelfTypeParameter(i) - ) + not assocFunctionMentionsTypeParameterAtNonRetPos(i, f, tp) } /** @@ -1184,7 +1197,7 @@ private module ContextTyping { pragma[nomagic] private predicate hasUnknownType(AstNode n) { hasUnknownTypeAt(n, _) } - signature Type inferCallTypeSig(AstNode n, boolean isReturn, TypePath path); + signature Type inferCallTypeSig(AstNode n, FunctionPosition pos, TypePath path); /** * Given a predicate `inferCallType` for inferring the type of a call at a given @@ -1194,19 +1207,34 @@ private module ContextTyping { */ module CheckContextTyping { pragma[nomagic] - private Type inferCallTypeFromContextCand(AstNode n, TypePath prefix, TypePath path) { - result = inferCallType(n, false, path) and + private Type inferCallNonReturnType(AstNode n, FunctionPosition pos, TypePath path) { + result = inferCallType(n, pos, path) and + not pos.isReturn() + } + + pragma[nomagic] + private Type inferCallNonReturnType( + AstNode n, FunctionPosition pos, TypePath prefix, TypePath path + ) { + result = inferCallNonReturnType(n, pos, path) and hasUnknownType(n) and prefix = path.getAPrefix() } pragma[nomagic] Type check(AstNode n, TypePath path) { - result = inferCallType(n, true, path) + result = inferCallType(n, any(FunctionPosition pos | pos.isReturn()), path) or - exists(TypePath prefix | - result = inferCallTypeFromContextCand(n, prefix, path) and + exists(FunctionPosition pos, TypePath prefix | + result = inferCallNonReturnType(n, pos, prefix, path) and hasUnknownTypeAt(n, prefix) + | + pos.isPosition() + or + // Never propagate type information directly into the receiver, since its type + // must already have been known in order to resolve the call + pos.isSelf() and + not prefix.isEmpty() ) } } @@ -2607,12 +2635,9 @@ private Type inferMethodCallType0( } pragma[nomagic] -private Type inferMethodCallTypeNonSelf(AstNode n, boolean isReturn, TypePath path) { - exists(MethodCallMatchingInput::AccessPosition apos | - result = inferMethodCallType0(_, apos, n, _, path) and - not apos.isSelf() and - if apos.isReturn() then isReturn = true else isReturn = false - ) +private Type inferMethodCallTypeNonSelf(AstNode n, FunctionPosition pos, TypePath path) { + result = inferMethodCallType0(_, pos, n, _, path) and + not pos.isSelf() } /** @@ -2664,11 +2689,11 @@ private Type inferMethodCallTypeSelf(AstNode n, DerefChain derefChain, TypePath ) } -private Type inferMethodCallTypePreCheck(AstNode n, boolean isReturn, TypePath path) { - result = inferMethodCallTypeNonSelf(n, isReturn, path) +private Type inferMethodCallTypePreCheck(AstNode n, FunctionPosition pos, TypePath path) { + result = inferMethodCallTypeNonSelf(n, pos, path) or result = inferMethodCallTypeSelf(n, DerefChain::nil(), path) and - isReturn = false + pos.isSelf() } /** @@ -3301,14 +3326,11 @@ private module NonMethodCallMatchingInput implements MatchingInputSig { private module NonMethodCallMatching = Matching; pragma[nomagic] -private Type inferNonMethodCallType0(AstNode n, boolean isReturn, TypePath path) { - exists(NonMethodCallMatchingInput::Access a, NonMethodCallMatchingInput::AccessPosition apos | - n = a.getNodeAt(apos) and - if apos.isReturn() then isReturn = true else isReturn = false - | - result = NonMethodCallMatching::inferAccessType(a, apos, path) +private Type inferNonMethodCallType0(AstNode n, FunctionPosition pos, TypePath path) { + exists(NonMethodCallMatchingInput::Access a | n = a.getNodeAt(pos) | + result = NonMethodCallMatching::inferAccessType(a, pos, path) or - a.hasUnknownTypeAt(apos, path) and + a.hasUnknownTypeAt(pos, path) and result = TUnknownType() ) } @@ -3379,11 +3401,10 @@ private module OperationMatchingInput implements MatchingInputSig { private module OperationMatching = Matching; pragma[nomagic] -private Type inferOperationType0(AstNode n, boolean isReturn, TypePath path) { - exists(OperationMatchingInput::Access a, OperationMatchingInput::AccessPosition apos | - n = a.getNodeAt(apos) and - result = OperationMatching::inferAccessType(a, apos, path) and - if apos.isReturn() then isReturn = true else isReturn = false +private Type inferOperationType0(AstNode n, FunctionPosition pos, TypePath path) { + exists(OperationMatchingInput::Access a | + n = a.getNodeAt(pos) and + result = OperationMatching::inferAccessType(a, pos, path) ) } @@ -3716,11 +3737,13 @@ private module AwaitSatisfiesConstraintInput implements SatisfiesConstraintInput } } +private module AwaitSatisfiesConstraint = + SatisfiesConstraint; + pragma[nomagic] private Type inferAwaitExprType(AstNode n, TypePath path) { exists(TypePath exprPath | - SatisfiesConstraint::satisfiesConstraintType(n.(AwaitExpr) - .getExpr(), _, exprPath, result) and + AwaitSatisfiesConstraint::satisfiesConstraintType(n.(AwaitExpr).getExpr(), _, exprPath, result) and exprPath.isCons(getFutureOutputTypeParameter(), path) ) } @@ -3922,13 +3945,15 @@ private AssociatedTypeTypeParameter getIntoIteratorItemTypeParameter() { result = getAssociatedTypeTypeParameter(any(IntoIteratorTrait t).getItemType()) } +private module ForIterableSatisfiesConstraint = + SatisfiesConstraint; + pragma[nomagic] private Type inferForLoopExprType(AstNode n, TypePath path) { // type of iterable -> type of pattern (loop variable) exists(ForExpr fe, TypePath exprPath, AssociatedTypeTypeParameter tp | n = fe.getPat() and - SatisfiesConstraint::satisfiesConstraintType(fe.getIterable(), - _, exprPath, result) and + ForIterableSatisfiesConstraint::satisfiesConstraintType(fe.getIterable(), _, exprPath, result) and exprPath.isCons(tp, path) | tp = getIntoIteratorItemTypeParameter() @@ -3963,10 +3988,12 @@ private module InvokedClosureSatisfiesConstraintInput implements } } +private module InvokedClosureSatisfiesConstraint = + SatisfiesConstraint; + /** Gets the type of `ce` when viewed as an implementation of `FnOnce`. */ private Type invokedClosureFnTypeAt(InvokedClosureExpr ce, TypePath path) { - SatisfiesConstraint::satisfiesConstraintType(ce, - _, path, result) + InvokedClosureSatisfiesConstraint::satisfiesConstraintType(ce, _, path, result) } /** diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 24005c2cdbdd..0f94d3d43f42 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -9512,7 +9512,6 @@ inferType | main.rs:1412:17:1412:20 | self | TRef.TSlice | main.rs:1410:14:1410:23 | T | | main.rs:1412:17:1412:27 | self.get(...) | | {EXTERNAL LOCATION} | Option | | main.rs:1412:17:1412:27 | self.get(...) | T | {EXTERNAL LOCATION} | & | -| main.rs:1412:17:1412:27 | self.get(...) | T.TRef | main.rs:1410:14:1410:23 | T | | main.rs:1412:17:1412:36 | ... .unwrap() | | {EXTERNAL LOCATION} | & | | main.rs:1412:17:1412:36 | ... .unwrap() | TRef | main.rs:1410:14:1410:23 | T | | main.rs:1412:26:1412:26 | 0 | | {EXTERNAL LOCATION} | i32 | @@ -14717,82 +14716,14 @@ inferType | regressions.rs:15:21:33:5 | { ... } | | regressions.rs:5:5:7:5 | E | | regressions.rs:16:17:16:21 | vec_e | | {EXTERNAL LOCATION} | Vec | | regressions.rs:16:17:16:21 | vec_e | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:16:17:16:21 | vec_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:17:16:21 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:16:25:16:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | | regressions.rs:16:25:16:34 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:3:5:3:23 | S | | regressions.rs:16:25:16:34 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:16:25:16:34 | ...::new(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:17:17:17:21 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:17:17:17:21 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:17:17:21 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:17:25:17:28 | None | | {EXTERNAL LOCATION} | Option | -| regressions.rs:17:25:17:28 | None | T | regressions.rs:3:5:3:23 | S | | regressions.rs:17:25:17:28 | None | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:17:25:17:28 | None | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:19:13:19:13 | e | | regressions.rs:5:5:7:5 | E | | regressions.rs:19:17:19:40 | ...::V {...} | | regressions.rs:5:5:7:5 | E | | regressions.rs:19:29:19:38 | ...::new(...) | | {EXTERNAL LOCATION} | Vec | @@ -14800,320 +14731,40 @@ inferType | regressions.rs:19:29:19:38 | ...::new(...) | T | regressions.rs:5:5:7:5 | E | | regressions.rs:21:9:23:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | regressions.rs:21:16:21:22 | Some(...) | | {EXTERNAL LOCATION} | Option | -| regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:3:5:3:23 | S | | regressions.rs:21:16:21:22 | Some(...) | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:16:21:22 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | | regressions.rs:3:5:3:23 | S | | regressions.rs:21:21:21:21 | e | | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:21:21:21 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:21:26:21:30 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:21:26:21:30 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:21:26:21:30 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:21:32:23:9 | { ... } | | {EXTERNAL LOCATION} | () | | regressions.rs:22:13:22:17 | vec_e | | {EXTERNAL LOCATION} | Vec | | regressions.rs:22:13:22:17 | vec_e | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:22:13:22:17 | vec_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:13:22:17 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:22:13:22:25 | vec_e.push(...) | | {EXTERNAL LOCATION} | () | -| regressions.rs:22:24:22:24 | e | | regressions.rs:3:5:3:23 | S | | regressions.rs:22:24:22:24 | e | | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:22:24:22:24 | e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:24:9:24:13 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:24:9:24:13 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:9:24:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:24:9:24:24 | ... = ... | | {EXTERNAL LOCATION} | () | | regressions.rs:24:17:24:17 | e | | regressions.rs:5:5:7:5 | E | | regressions.rs:24:17:24:24 | e.into() | | {EXTERNAL LOCATION} | Option | -| regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:3:5:3:23 | S | | regressions.rs:24:17:24:24 | e.into() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:24:17:24:24 | e.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:27:13:27:13 | _ | | {EXTERNAL LOCATION} | () | | regressions.rs:27:17:30:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | regressions.rs:27:24:27:33 | Some(...) | | {EXTERNAL LOCATION} | Option | -| regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:3:5:3:23 | S | | regressions.rs:27:24:27:33 | Some(...) | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:24:27:33 | Some(...) | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | | regressions.rs:3:5:3:23 | S | | regressions.rs:27:29:27:32 | last | | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:29:27:32 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:27:37:27:41 | vec_e | | {EXTERNAL LOCATION} | Vec | | regressions.rs:27:37:27:41 | vec_e | A | {EXTERNAL LOCATION} | Global | -| regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:27:37:27:41 | vec_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:41 | vec_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:27:37:27:47 | vec_e.pop() | | {EXTERNAL LOCATION} | Option | -| regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:3:5:3:23 | S | | regressions.rs:27:37:27:47 | vec_e.pop() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:27:37:27:47 | vec_e.pop() | T.T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:28:9:30:9 | { ... } | | {EXTERNAL LOCATION} | () | | regressions.rs:29:13:29:17 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:29:13:29:17 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:13:29:17 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:29:13:29:31 | ... = ... | | {EXTERNAL LOCATION} | () | -| regressions.rs:29:21:29:24 | last | | regressions.rs:3:5:3:23 | S | | regressions.rs:29:21:29:24 | last | | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:24 | last | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:29:21:29:31 | last.into() | | {EXTERNAL LOCATION} | Option | -| regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:3:5:3:23 | S | | regressions.rs:29:21:29:31 | last.into() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:29:21:29:31 | last.into() | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | | regressions.rs:32:9:32:13 | opt_e | | {EXTERNAL LOCATION} | Option | -| regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:3:5:3:23 | S | | regressions.rs:32:9:32:13 | opt_e | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:13 | opt_e | T.T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:3:5:3:23 | S | | regressions.rs:32:9:32:22 | opt_e.unwrap() | | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:3:5:3:23 | S | -| regressions.rs:32:9:32:22 | opt_e.unwrap() | T.T.T.T.T.T.T.T | regressions.rs:5:5:7:5 | E | testFailures From 61e8f9140456611201d8f3beefe7d4f97671becd Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Fri, 30 Jan 2026 11:40:41 +0000 Subject: [PATCH 106/243] Accept MaD sanitizers for queries with MaD sinks --- .../CorsPermissiveConfigurationCustomizations.qll | 4 ++++ .../dataflow/ClientSideUrlRedirectCustomizations.qll | 4 ++++ .../security/dataflow/CodeInjectionCustomizations.qll | 4 ++++ .../dataflow/CommandInjectionCustomizations.qll | 4 ++++ .../security/dataflow/DomBasedXssCustomizations.qll | 4 ++++ .../dataflow/HardcodedCredentialsCustomizations.qll | 10 ++++++++++ .../javascript/security/dataflow/LogInjectionQuery.qll | 4 ++++ .../security/dataflow/NosqlInjectionCustomizations.qll | 4 ++++ .../security/dataflow/ReflectedXssCustomizations.qll | 4 ++++ .../security/dataflow/RequestForgeryCustomizations.qll | 4 ++++ .../dataflow/ServerSideUrlRedirectCustomizations.qll | 4 ++++ .../security/dataflow/SqlInjectionCustomizations.qll | 4 ++++ .../security/dataflow/TaintedPathCustomizations.qll | 4 ++++ .../dataflow/UnsafeDeserializationCustomizations.qll | 4 ++++ 14 files changed, 62 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll index e67b9e0d38cb..aa43f4607d86 100644 --- a/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/CorsPermissiveConfigurationCustomizations.qll @@ -82,4 +82,8 @@ module CorsPermissiveConfiguration { ) } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "cors-origin") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/ClientSideUrlRedirectCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/ClientSideUrlRedirectCustomizations.qll index a8d15d0e6989..01fc7ee5e5d9 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/ClientSideUrlRedirectCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/ClientSideUrlRedirectCustomizations.qll @@ -270,4 +270,8 @@ module ClientSideUrlRedirect { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "url-redirection") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "url-redirection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/CodeInjectionCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/CodeInjectionCustomizations.qll index 9a72ae4a2315..1d181d975919 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/CodeInjectionCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/CodeInjectionCustomizations.qll @@ -438,4 +438,8 @@ module CodeInjection { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "code-injection") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "code-injection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionCustomizations.qll index 6b17adcb773c..b3516a79bf49 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/CommandInjectionCustomizations.qll @@ -58,4 +58,8 @@ module CommandInjection { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "command-injection") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "command-injection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/DomBasedXssCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/DomBasedXssCustomizations.qll index b7639ccc3aad..b5c0be71f452 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/DomBasedXssCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/DomBasedXssCustomizations.qll @@ -421,4 +421,8 @@ module DomBasedXss { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "html-injection") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "html-injection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/HardcodedCredentialsCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/HardcodedCredentialsCustomizations.qll index 8bd9b290fc6b..54811baf14fd 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/HardcodedCredentialsCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/HardcodedCredentialsCustomizations.qll @@ -44,4 +44,14 @@ module HardcodedCredentials { not (super.getCredentialsKind() = "jwt key" and isTestFile(this.getFile())) } } + + /** + * Note that a sanitizer with kind `credentials-key` will sanitize flow to + * all sinks, not just sinks with the same kind. + */ + private class CredentialSanitizerFromModel extends Sanitizer { + CredentialSanitizerFromModel() { + exists(string kind | ModelOutput::barrierNode(this, "credentials-" + kind)) + } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/LogInjectionQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/LogInjectionQuery.qll index 25474297d09f..6e4dbbf396ed 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/LogInjectionQuery.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/LogInjectionQuery.qll @@ -88,3 +88,7 @@ class JsonStringifySanitizer extends Sanitizer { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "log-injection") } } + +private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "log-injection") } +} diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/NosqlInjectionCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/NosqlInjectionCustomizations.qll index 36c0601d501c..3d3eaadf9d3d 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/NosqlInjectionCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/NosqlInjectionCustomizations.qll @@ -47,4 +47,8 @@ module NosqlInjection { /** An expression interpreted as a NoSql query, viewed as a sink. */ class NosqlQuerySink extends Sink instanceof NoSql::Query { } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "nosql-injection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/ReflectedXssCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/ReflectedXssCustomizations.qll index 82b6e99dc217..87a522df7a5e 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/ReflectedXssCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/ReflectedXssCustomizations.qll @@ -147,4 +147,8 @@ module ReflectedXss { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "html-injection") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "html-injection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/RequestForgeryCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/RequestForgeryCustomizations.qll index de2a1e3c6bf6..8d9310d46c24 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/RequestForgeryCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/RequestForgeryCustomizations.qll @@ -114,4 +114,8 @@ module RequestForgery { class UriEncodingSanitizer extends Sanitizer instanceof Xss::Shared::UriEncodingSanitizer { UriEncodingSanitizer() { this.encodesPathSeparators() } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "request-forgery") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/ServerSideUrlRedirectCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/ServerSideUrlRedirectCustomizations.qll index 18cfaf6f7420..5827e95900da 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/ServerSideUrlRedirectCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/ServerSideUrlRedirectCustomizations.qll @@ -66,4 +66,8 @@ module ServerSideUrlRedirect { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "url-redirection") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "url-redirection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/SqlInjectionCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/SqlInjectionCustomizations.qll index 8afb65519ad4..6a3a9df41de6 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/SqlInjectionCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/SqlInjectionCustomizations.qll @@ -74,4 +74,8 @@ module SqlInjection { ) } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "sql-injection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/TaintedPathCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/TaintedPathCustomizations.qll index bb1da3f4a236..735026095dff 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/TaintedPathCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/TaintedPathCustomizations.qll @@ -1124,4 +1124,8 @@ module TaintedPath { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "path-injection") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "path-injection") } + } } diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeDeserializationCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeDeserializationCustomizations.qll index 82f11ec80030..44ce8d56bcd3 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeDeserializationCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeDeserializationCustomizations.qll @@ -69,4 +69,8 @@ module UnsafeDeserialization { private class SinkFromModel extends Sink { SinkFromModel() { ModelOutput::sinkNode(this, "unsafe-deserialization") } } + + private class SanitizerFromModel extends Sanitizer { + SanitizerFromModel() { ModelOutput::barrierNode(this, "unsafe-deserialization") } + } } From 3dc465f167536d9a6ece5044bebc2eaedd6e00f2 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 09:57:14 +0000 Subject: [PATCH 107/243] Accept MaD sanitizers for queries with MaD sinks --- .../lib/codeql/ruby/security/CodeInjectionCustomizations.qll | 4 ++++ .../codeql/ruby/security/CommandInjectionCustomizations.qll | 4 ++++ ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll | 4 ++++ .../lib/codeql/ruby/security/PathInjectionCustomizations.qll | 4 ++++ .../ruby/security/ServerSideRequestForgeryCustomizations.qll | 4 ++++ .../lib/codeql/ruby/security/SqlInjectionCustomizations.qll | 4 ++++ .../ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll | 4 ++++ 7 files changed, 28 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll index ca79a079a107..0e84aa710b5b 100644 --- a/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/CodeInjectionCustomizations.qll @@ -118,4 +118,8 @@ module CodeInjection { private class ExternalCodeInjectionSink extends Sink { ExternalCodeInjectionSink() { ModelOutput::sinkNode(this, "code-injection") } } + + private class ExternalCodeInjectionSanitizer extends Sanitizer { + ExternalCodeInjectionSanitizer() { ModelOutput::barrierNode(this, "code-injection") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll index f36b72ae6b79..d9551177875c 100644 --- a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll @@ -57,4 +57,8 @@ module CommandInjection { private class ExternalCommandInjectionSink extends Sink { ExternalCommandInjectionSink() { ModelOutput::sinkNode(this, "command-injection") } } + + private class ExternalCommandInjectionSanitizer extends Sanitizer { + ExternalCommandInjectionSanitizer() { ModelOutput::barrierNode(this, "command-injection") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll b/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll index 8111932c7df4..a5230a8b8450 100644 --- a/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll +++ b/ruby/ql/lib/codeql/ruby/security/LogInjectionQuery.qll @@ -67,6 +67,10 @@ class HtmlEscapingAsSanitizer extends Sanitizer { HtmlEscapingAsSanitizer() { this = any(HtmlEscaping esc).getOutput() } } +private class ExternalLogInjectionSanitizer extends Sanitizer { + ExternalLogInjectionSanitizer() { ModelOutput::barrierNode(this, "log-injection") } +} + private module LogInjectionConfig implements DataFlow::ConfigSig { predicate isSource(DataFlow::Node source) { source instanceof Source } diff --git a/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll index 8a8b916f6275..beab1af5dc4c 100644 --- a/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/PathInjectionCustomizations.qll @@ -57,4 +57,8 @@ module PathInjection { private class ExternalPathInjectionSink extends Sink { ExternalPathInjectionSink() { ModelOutput::sinkNode(this, "path-injection") } } + + private class ExternalPathInjectionSanitizer extends Sanitizer { + ExternalPathInjectionSanitizer() { ModelOutput::barrierNode(this, "path-injection") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll index 509900a12e15..e64abe413b8f 100644 --- a/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/ServerSideRequestForgeryCustomizations.qll @@ -46,4 +46,8 @@ module ServerSideRequestForgery { private class ExternalRequestForgerySink extends Sink { ExternalRequestForgerySink() { ModelOutput::sinkNode(this, "request-forgery") } } + + private class ExternalRequestForgerySanitizer extends Sanitizer { + ExternalRequestForgerySanitizer() { ModelOutput::barrierNode(this, "request-forgery") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll index 1bf14dc3b280..7d6f16731a56 100644 --- a/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll @@ -61,4 +61,8 @@ module SqlInjection { private class ExternalSqlInjectionSink extends Sink { ExternalSqlInjectionSink() { ModelOutput::sinkNode(this, "sql-injection") } } + + private class ExternalSqlInjectionSanitizer extends Sanitizer { + ExternalSqlInjectionSanitizer() { ModelOutput::barrierNode(this, "sql-injection") } + } } diff --git a/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll index 4e02b3181e35..0cef83070a64 100644 --- a/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/UrlRedirectCustomizations.qll @@ -125,6 +125,10 @@ module UrlRedirect { */ class StringInterpolationAsSanitizer extends PrefixedStringInterpolation, Sanitizer { } + private class ExternalUrlRedirectSanitizer extends Sanitizer { + ExternalUrlRedirectSanitizer() { ModelOutput::barrierNode(this, "url-redirection") } + } + /** * These methods return a new `ActionController::Parameters` or a `Hash` containing a subset of * the original values. This may still contain user input, so the results are tainted. From bd94ceddd9b2a23082b3920270b520543c70db03 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Tue, 17 Feb 2026 13:58:55 +0100 Subject: [PATCH 108/243] Java: Add change note for JDK 26 --- java/ql/src/change-notes/2026-02-17-support-java-26 | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/src/change-notes/2026-02-17-support-java-26 diff --git a/java/ql/src/change-notes/2026-02-17-support-java-26 b/java/ql/src/change-notes/2026-02-17-support-java-26 new file mode 100644 index 000000000000..50feec4224d4 --- /dev/null +++ b/java/ql/src/change-notes/2026-02-17-support-java-26 @@ -0,0 +1,4 @@ +--- +category: feature +--- +* The Java extractor and QL libraries now support Java 26. From 1a35a05cccee80af03871f31fad1f7422e58c8cd Mon Sep 17 00:00:00 2001 From: idrissrio Date: Tue, 17 Feb 2026 13:59:45 +0100 Subject: [PATCH 109/243] Java: Update supported language versions to include Java 26 --- docs/codeql/reusables/supported-versions-compilers.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 6216bae08df3..566238658f37 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -18,7 +18,7 @@ .NET 5, .NET 6, .NET 7, .NET 8, .NET 9","``.sln``, ``.slnx``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" GitHub Actions,"Not applicable",Not applicable,"``.github/workflows/*.yml``, ``.github/workflows/*.yaml``, ``**/action.yml``, ``**/action.yaml``" Go (aka Golang), "Go up to 1.26", "Go 1.11 or more recent", ``.go`` - Java,"Java 7 to 25 [6]_","javac (OpenJDK and Oracle JDK), + Java,"Java 7 to 26 [6]_","javac (OpenJDK and Oracle JDK), Eclipse compiler for Java (ECJ) [7]_",``.java`` Kotlin,"Kotlin 1.8.0 to 2.3.0\ *x*","kotlinc",``.kt`` @@ -36,7 +36,7 @@ .. [3] Objective-C, Objective-C++, C++/CLI, and C++/CX are not supported. .. [4] Support for the clang-cl compiler is preliminary. .. [5] Support for the Arm Compiler (armcc) is preliminary. - .. [6] Builds that execute on Java 7 to 25 can be analyzed. The analysis understands standard language features in Java 8 to 25; "preview" and "incubator" features are not supported. Source code using Java language versions older than Java 8 are analyzed as Java 8 code. + .. [6] Builds that execute on Java 7 to 26 can be analyzed. The analysis understands standard language features in Java 8 to 26; "preview" and "incubator" features are not supported. Source code using Java language versions older than Java 8 are analyzed as Java 8 code. .. [7] ECJ is supported when the build invokes it via the Maven Compiler plugin or the Takari Lifecycle plugin. .. [8] JSX and Flow code, YAML, JSON, HTML, and XML files may also be analyzed with JavaScript files. .. [9] The extractor requires Python 3 to run. To analyze Python 2.7 you should install both versions of Python. From 8aa839f4c0a8f9c9e30926fd7515db8f49276b98 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Tue, 17 Feb 2026 14:19:12 +0100 Subject: [PATCH 110/243] Java: Address review comments --- ...2026-02-17-support-java-26 => 2026-02-17-support-java-26.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename java/ql/src/change-notes/{2026-02-17-support-java-26 => 2026-02-17-support-java-26.md} (73%) diff --git a/java/ql/src/change-notes/2026-02-17-support-java-26 b/java/ql/src/change-notes/2026-02-17-support-java-26.md similarity index 73% rename from java/ql/src/change-notes/2026-02-17-support-java-26 rename to java/ql/src/change-notes/2026-02-17-support-java-26.md index 50feec4224d4..db0a108f0cab 100644 --- a/java/ql/src/change-notes/2026-02-17-support-java-26 +++ b/java/ql/src/change-notes/2026-02-17-support-java-26.md @@ -1,4 +1,4 @@ --- -category: feature +category: minorAnalysis --- * The Java extractor and QL libraries now support Java 26. From 5151df456ce482483850faa24f1172776cd5a3ce Mon Sep 17 00:00:00 2001 From: idrissrio Date: Tue, 17 Feb 2026 14:27:27 +0100 Subject: [PATCH 111/243] Java: Fix Maven change note --- ...-maven-default-java-17 => 2025-11-13-maven-default-java-17.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/src/change-notes/{2025-11-13-maven-default-java-17 => 2025-11-13-maven-default-java-17.md} (100%) diff --git a/java/ql/src/change-notes/2025-11-13-maven-default-java-17 b/java/ql/src/change-notes/2025-11-13-maven-default-java-17.md similarity index 100% rename from java/ql/src/change-notes/2025-11-13-maven-default-java-17 rename to java/ql/src/change-notes/2025-11-13-maven-default-java-17.md From b8f9dd9de5e9250a4ec331690b5e8a863088c5cc Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 14:38:56 +0000 Subject: [PATCH 112/243] Revert "javascript: add MaD model" This reverts commit 75bd4a7a12e2a0565189734df42c9ab8e2de6995. --- .../lib/semmle/javascript/frameworks/NodeJSLib.model.yml | 6 ------ .../IncompleteHtmlAttributeSanitizationCustomizations.qll | 4 ---- .../IncompleteHtmlAttributeSanitization.expected | 7 +++++++ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.model.yml b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.model.yml index ce6e0f684257..43035615a126 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.model.yml +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.model.yml @@ -8,9 +8,3 @@ extensions: - ['global', 'Member[process].Member[stdin].Member[on,addListener].WithStringArgument[0=data].Argument[1].Parameter[0]', 'stdin'] - ['readline', 'Member[createInterface].ReturnValue.Member[question].Argument[1].Parameter[0]', 'stdin'] - ['readline', 'Member[createInterface].ReturnValue.Member[on,addListener].WithStringArgument[0=line].Argument[1].Parameter[0]', 'stdin'] - - - addsTo: - pack: codeql/javascript-all - extensible: barrierModel - data: - - ['global', 'Member[encodeURIComponent,encodeURI].ReturnValue', 'request-forgery'] diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll index c93cb07bbc71..f237304be88b 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll @@ -100,8 +100,4 @@ module IncompleteHtmlAttributeSanitization { result = this.getQuote() } } - - private class SanitizerFromModel extends Sanitizer { - SanitizerFromModel() { ModelOutput::barrierNode(this, "request-forgery") } - } } diff --git a/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected b/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected index 3f1ac1685d79..171c7f07cab2 100644 --- a/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected +++ b/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected @@ -6,6 +6,7 @@ | tst.js:253:21:253:45 | s().rep ... /g, '') | tst.js:253:21:253:45 | s().rep ... /g, '') | tst.js:253:21:253:45 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain ampersands or double quotes when it reaches this attribute definition. | tst.js:253:21:253:45 | s().rep ... /g, '') | this final HTML sanitizer step | | tst.js:254:32:254:56 | s().rep ... /g, '') | tst.js:254:32:254:56 | s().rep ... /g, '') | tst.js:254:32:254:56 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain ampersands or double quotes when it reaches this attribute definition. | tst.js:254:32:254:56 | s().rep ... /g, '') | this final HTML sanitizer step | | tst.js:270:61:270:85 | s().rep ... /g, '') | tst.js:270:61:270:85 | s().rep ... /g, '') | tst.js:270:61:270:85 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain ampersands or double quotes when it reaches this attribute definition. | tst.js:270:61:270:85 | s().rep ... /g, '') | this final HTML sanitizer step | +| tst.js:272:9:272:51 | encodeU ... /g,'')) | tst.js:272:28:272:50 | s().rep ... ]/g,'') | tst.js:272:9:272:51 | encodeU ... /g,'')) | Cross-site scripting vulnerability as the output of $@ may contain double quotes when it reaches this attribute definition. | tst.js:272:28:272:50 | s().rep ... ]/g,'') | this final HTML sanitizer step | | tst.js:275:9:275:21 | arr.join(" ") | tst.js:274:12:274:94 | s().val ... g , '') | tst.js:275:9:275:21 | arr.join(" ") | Cross-site scripting vulnerability as the output of $@ may contain double quotes when it reaches this attribute definition. | tst.js:274:12:274:94 | s().val ... g , '') | this final HTML sanitizer step | | tst.js:300:10:300:33 | s().rep ... ]/g,'') | tst.js:300:10:300:33 | s().rep ... ]/g,'') | tst.js:300:10:300:33 | s().rep ... ]/g,'') | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:300:10:300:33 | s().rep ... ]/g,'') | this final HTML sanitizer step | | tst.js:301:10:301:32 | s().rep ... ]/g,'') | tst.js:301:10:301:32 | s().rep ... ]/g,'') | tst.js:301:10:301:32 | s().rep ... ]/g,'') | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:301:10:301:32 | s().rep ... ]/g,'') | this final HTML sanitizer step | @@ -13,6 +14,7 @@ | tst.js:303:10:303:34 | s().rep ... /g, '') | tst.js:303:10:303:34 | s().rep ... /g, '') | tst.js:303:10:303:34 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:303:10:303:34 | s().rep ... /g, '') | this final HTML sanitizer step | | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | this final HTML sanitizer step | edges +| tst.js:272:28:272:50 | s().rep ... ]/g,'') | tst.js:272:9:272:51 | encodeU ... /g,'')) | provenance | | | tst.js:274:6:274:8 | arr | tst.js:275:9:275:11 | arr | provenance | | | tst.js:274:12:274:94 | s().val ... g , '') | tst.js:274:6:274:8 | arr | provenance | | | tst.js:275:9:275:11 | arr | tst.js:275:9:275:21 | arr.join(" ") | provenance | | @@ -24,6 +26,8 @@ nodes | tst.js:253:21:253:45 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:254:32:254:56 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:270:61:270:85 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | +| tst.js:272:9:272:51 | encodeU ... /g,'')) | semmle.label | encodeU ... /g,'')) | +| tst.js:272:28:272:50 | s().rep ... ]/g,'') | semmle.label | s().rep ... ]/g,'') | | tst.js:274:6:274:8 | arr | semmle.label | arr | | tst.js:274:12:274:94 | s().val ... g , '') | semmle.label | s().val ... g , '') | | tst.js:275:9:275:11 | arr | semmle.label | arr | @@ -34,3 +38,6 @@ nodes | tst.js:303:10:303:34 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | semmle.label | s().rep ... ;";\\n\\t}) | subpaths +testFailures +| tst.js:272:9:272:51 | encodeU ... /g,'')) | Unexpected result: Alert | +| tst.js:272:28:272:50 | s().rep ... ]/g,'') | Unexpected result: Alert | From 05f9b4124dbfb09b7c3d0d7cbaa3959e4104c0cc Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 14:39:04 +0000 Subject: [PATCH 113/243] Revert "javascript: remove sanitizer to be replaced by model" This reverts commit da2f77d6159bacad91d85040416e69561f2061e2. --- ...completeHtmlAttributeSanitizationCustomizations.qll | 10 ++++++++++ .../IncompleteHtmlAttributeSanitization.expected | 7 ------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll index f237304be88b..f421a92298f9 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/IncompleteHtmlAttributeSanitizationCustomizations.qll @@ -100,4 +100,14 @@ module IncompleteHtmlAttributeSanitization { result = this.getQuote() } } + + /** + * An encoder for potentially malicious characters, as a sanitizer + * for incomplete HTML sanitization vulnerabilities. + */ + class EncodingSanitizer extends Sanitizer { + EncodingSanitizer() { + this = DataFlow::globalVarRef(["encodeURIComponent", "encodeURI"]).getACall() + } + } } diff --git a/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected b/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected index 171c7f07cab2..3f1ac1685d79 100644 --- a/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected +++ b/javascript/ql/test/query-tests/Security/CWE-116/IncompleteSanitization/IncompleteHtmlAttributeSanitization.expected @@ -6,7 +6,6 @@ | tst.js:253:21:253:45 | s().rep ... /g, '') | tst.js:253:21:253:45 | s().rep ... /g, '') | tst.js:253:21:253:45 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain ampersands or double quotes when it reaches this attribute definition. | tst.js:253:21:253:45 | s().rep ... /g, '') | this final HTML sanitizer step | | tst.js:254:32:254:56 | s().rep ... /g, '') | tst.js:254:32:254:56 | s().rep ... /g, '') | tst.js:254:32:254:56 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain ampersands or double quotes when it reaches this attribute definition. | tst.js:254:32:254:56 | s().rep ... /g, '') | this final HTML sanitizer step | | tst.js:270:61:270:85 | s().rep ... /g, '') | tst.js:270:61:270:85 | s().rep ... /g, '') | tst.js:270:61:270:85 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain ampersands or double quotes when it reaches this attribute definition. | tst.js:270:61:270:85 | s().rep ... /g, '') | this final HTML sanitizer step | -| tst.js:272:9:272:51 | encodeU ... /g,'')) | tst.js:272:28:272:50 | s().rep ... ]/g,'') | tst.js:272:9:272:51 | encodeU ... /g,'')) | Cross-site scripting vulnerability as the output of $@ may contain double quotes when it reaches this attribute definition. | tst.js:272:28:272:50 | s().rep ... ]/g,'') | this final HTML sanitizer step | | tst.js:275:9:275:21 | arr.join(" ") | tst.js:274:12:274:94 | s().val ... g , '') | tst.js:275:9:275:21 | arr.join(" ") | Cross-site scripting vulnerability as the output of $@ may contain double quotes when it reaches this attribute definition. | tst.js:274:12:274:94 | s().val ... g , '') | this final HTML sanitizer step | | tst.js:300:10:300:33 | s().rep ... ]/g,'') | tst.js:300:10:300:33 | s().rep ... ]/g,'') | tst.js:300:10:300:33 | s().rep ... ]/g,'') | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:300:10:300:33 | s().rep ... ]/g,'') | this final HTML sanitizer step | | tst.js:301:10:301:32 | s().rep ... ]/g,'') | tst.js:301:10:301:32 | s().rep ... ]/g,'') | tst.js:301:10:301:32 | s().rep ... ]/g,'') | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:301:10:301:32 | s().rep ... ]/g,'') | this final HTML sanitizer step | @@ -14,7 +13,6 @@ | tst.js:303:10:303:34 | s().rep ... /g, '') | tst.js:303:10:303:34 | s().rep ... /g, '') | tst.js:303:10:303:34 | s().rep ... /g, '') | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:303:10:303:34 | s().rep ... /g, '') | this final HTML sanitizer step | | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | Cross-site scripting vulnerability as the output of $@ may contain single quotes when it reaches this attribute definition. | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | this final HTML sanitizer step | edges -| tst.js:272:28:272:50 | s().rep ... ]/g,'') | tst.js:272:9:272:51 | encodeU ... /g,'')) | provenance | | | tst.js:274:6:274:8 | arr | tst.js:275:9:275:11 | arr | provenance | | | tst.js:274:12:274:94 | s().val ... g , '') | tst.js:274:6:274:8 | arr | provenance | | | tst.js:275:9:275:11 | arr | tst.js:275:9:275:21 | arr.join(" ") | provenance | | @@ -26,8 +24,6 @@ nodes | tst.js:253:21:253:45 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:254:32:254:56 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:270:61:270:85 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | -| tst.js:272:9:272:51 | encodeU ... /g,'')) | semmle.label | encodeU ... /g,'')) | -| tst.js:272:28:272:50 | s().rep ... ]/g,'') | semmle.label | s().rep ... ]/g,'') | | tst.js:274:6:274:8 | arr | semmle.label | arr | | tst.js:274:12:274:94 | s().val ... g , '') | semmle.label | s().val ... g , '') | | tst.js:275:9:275:11 | arr | semmle.label | arr | @@ -38,6 +34,3 @@ nodes | tst.js:303:10:303:34 | s().rep ... /g, '') | semmle.label | s().rep ... /g, '') | | tst.js:309:10:318:3 | s().rep ... ;";\\n\\t}) | semmle.label | s().rep ... ;";\\n\\t}) | subpaths -testFailures -| tst.js:272:9:272:51 | encodeU ... /g,'')) | Unexpected result: Alert | -| tst.js:272:28:272:50 | s().rep ... ]/g,'') | Unexpected result: Alert | From 549dcb31be650e08cde76924817c5c6357b0e476 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 10:13:55 -0500 Subject: [PATCH 114/243] Update cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 87733f0f69db..a6c11c30c675 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -142,7 +142,7 @@ predicate isLikelyConversionConstant(int c) { 146097, // days in 400-year Gregorian cycle 36524, // days in 100-year Gregorian subcycle 1461, // days in 4-year cycle (incl. 1 leap) - 32044, // Fliegel–van Flandern JDN epoch shift + 32044, // Fliegel-van Flandern JDN epoch shift 1721425, // JDN of 0001‑01‑01 (Gregorian) 1721119, // alt epoch offset 2400000, // MJD → JDN conversion From c811fae87627a2c11e9096714163e2389a48bb03 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 10:14:11 -0500 Subject: [PATCH 115/243] Update cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index a6c11c30c675..064fc5a71d44 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -145,8 +145,8 @@ predicate isLikelyConversionConstant(int c) { 32044, // Fliegel-van Flandern JDN epoch shift 1721425, // JDN of 0001‑01‑01 (Gregorian) 1721119, // alt epoch offset - 2400000, // MJD → JDN conversion - 2400001, // alt MJD → JDN conversion + 2400000, // MJD -> JDN conversion + 2400001, // alt MJD -> JDN conversion 2141, // fixed‑point month/day extraction 65536, // observed in some conversions 7834, // observed in some conversions From ceb3b21e0f2e27f7cf2926fa235c286eea34c1e9 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 10:28:43 -0500 Subject: [PATCH 116/243] Update python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll Co-authored-by: Taus --- ...ServerSideRequestForgeryCustomizations.qll | 46 +++++++------------ 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll index afce799d8acd..3fb260e425d3 100644 --- a/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll +++ b/python/ql/lib/semmle/python/security/dataflow/ServerSideRequestForgeryCustomizations.qll @@ -186,37 +186,25 @@ module ServerSideRequestForgery { private predicate uri_validator(DataFlow::GuardNode g, ControlFlowNode node, boolean branch) { exists(DataFlow::CallCfgNode call, string funcs | - funcs in ["in_domain", "in_azure_keyvault_domain", "in_azure_storage_domain"] - | + funcs in ["in_domain", "in_azure_keyvault_domain", "in_azure_storage_domain"] and call = API::moduleImport("AntiSSRF").getMember("URIValidator").getMember(funcs).getACall() and - call.getArg(0).asCfgNode() = node and - ( - // validator used in a comparison - exists(CompareNode cn, Cmpop op, Node n | cn = g and n.getALocalSource() = call | - ( - // validator == true or validator == false or validator is True or validator is False - (op instanceof Eq or op instanceof Is) and - exists(ControlFlowNode l, boolean bool | - l.getNode().(BooleanLiteral).booleanValue() = bool and - bool in [true, false] and - branch = bool and - cn.operands(n.asCfgNode(), op, l) - ) - or - // validator != false or validator != true or validator is not True or validator is not False - (op instanceof NotEq or op instanceof IsNot) and - exists(ControlFlowNode l, boolean bool | - l.getNode().(BooleanLiteral).booleanValue() = bool and - bool in [true, false] and - branch = bool.booleanNot() and - cn.operands(n.asCfgNode(), op, l) - ) - ) - ) + call.getArg(0).asCfgNode() = node + | + // validator call directly (e.g., if URIValidator.in_domain(...) ) + g = call.asCfgNode() and + branch = true + or + // validator used in a comparison + exists(Cmpop op, Node n, ControlFlowNode l | + n.getALocalSource() = call and g.(CompareNode).operands(n.asCfgNode(), op, l) + | + // validator == true or validator == false or validator is True or validator is False + (op instanceof Eq or op instanceof Is) and + branch = l.getNode().(BooleanLiteral).booleanValue() or - // validator call directly (e.g., if URIValidator.in_domain(...) ) - g = call.asCfgNode() and - branch = true + // validator != false or validator != true or validator is not True or validator is not False + (op instanceof NotEq or op instanceof IsNot) and + branch = l.getNode().(BooleanLiteral).booleanValue().booleanNot() ) ) } From 1072d6a7b756c98114692b34c31ae14d9ae645e6 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 10:49:58 -0500 Subject: [PATCH 117/243] Apply suggestion from @geoffw0 Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 064fc5a71d44..9f1c15690eec 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -257,6 +257,7 @@ class IgnorablePointerOrCharArithmetic extends IgnorableOperation { ) or // Operations on calls to functions named like "strlen", "wcslen", etc + // for example `strlen(foo) + bar` this.(BinaryArithmeticOperation).getAnOperand().(Call).getTarget().getName().matches("%len%") ) } From 0676ba1c07d9741b04fe077379588ccbf6d06fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20San=20Jos=C3=A9?= Date: Tue, 17 Feb 2026 17:23:38 +0100 Subject: [PATCH 118/243] Skip csharp integration tests on macos-26 --- .../posix/standalone_dependencies_no_framework/test.py | 6 ++++-- .../posix/standalone_dependencies_nuget with_space/test.py | 6 ++++-- .../posix/standalone_dependencies_nuget/test.py | 6 ++++-- .../posix/standalone_dependencies_nuget_no_sources/test.py | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py index d1c1745d69b6..e0181a1ec5df 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py @@ -3,10 +3,12 @@ import os -# Skipping the test on the ARM runners and macos-15, as we're running into trouble with Mono and nuget. +# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running +# into trouble with Mono and nuget. @pytest.mark.only_if( runs_on.linux - or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15) + or (runs_on.macos and runs_on.x86_64 + and not runs_on.macos_15 and not runs_on.macos_26) ) def test(codeql, csharp): os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES"] = ( diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py index 6d2058c684c2..4f3097bb3872 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py @@ -3,10 +3,12 @@ import pytest -# Skipping the test on the ARM runners and macos-15, as we're running into trouble with Mono and nuget. +# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running +# into trouble with Mono and nuget. @pytest.mark.only_if( runs_on.linux - or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15) + or (runs_on.macos and runs_on.x86_64 + and not runs_on.macos_15 and not runs_on.macos_26) ) def test(codeql, csharp): # making sure we're not doing any fallback restore: diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py index 7f88196097ff..9a8c9b2291e4 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py @@ -2,10 +2,12 @@ import pytest -# Skipping the test on the ARM runners and macos-15, as we're running into trouble with Mono and nuget. +# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running +# into trouble with Mono and nuget. @pytest.mark.only_if( runs_on.linux - or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15) + or (runs_on.macos and runs_on.x86_64 + and not runs_on.macos_15 and not runs_on.macos_26) ) def test(codeql, csharp): codeql.database.create(build_mode="none") diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py index 185fb5201f95..f095580d34dc 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py @@ -2,10 +2,12 @@ import pytest -# Skipping the test on the ARM runners, as we're running into trouble with Mono and nuget. +# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running +# into trouble with Mono and nuget. @pytest.mark.only_if( runs_on.linux - or (runs_on.macos and runs_on.x86_64 and not runs_on.macos_15) + or (runs_on.macos and runs_on.x86_64 + and not runs_on.macos_15 and not runs_on.macos_26) ) def test(codeql, csharp): codeql.database.create(source_root="proj", build_mode="none") From 5cf281a1b6b9fe060e00811a56056ba7845edd78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20San=20Jos=C3=A9?= Date: Tue, 17 Feb 2026 18:16:51 +0100 Subject: [PATCH 119/243] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../posix/standalone_dependencies_no_framework/test.py | 2 +- .../posix/standalone_dependencies_nuget/test.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py index e0181a1ec5df..8f66ebf714e1 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py @@ -3,7 +3,7 @@ import os -# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running +# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running # into trouble with Mono and nuget. @pytest.mark.only_if( runs_on.linux diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py index 9a8c9b2291e4..ebdad77e7168 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py @@ -6,8 +6,14 @@ # into trouble with Mono and nuget. @pytest.mark.only_if( runs_on.linux - or (runs_on.macos and runs_on.x86_64 - and not runs_on.macos_15 and not runs_on.macos_26) + or ( + runs_on.macos + and runs_on.x86_64 + and not ( + runs_on.macos_15 + or runs_on.macos_26 + ) + ) ) def test(codeql, csharp): codeql.database.create(build_mode="none") From 9efe1120260b306d86282e8da35828581b1b9ef0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 17:16:54 +0000 Subject: [PATCH 120/243] Initial plan From 004ebd386c85c7548f39e37c0efd2fdb4d4afa71 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 17:21:50 +0000 Subject: [PATCH 121/243] Centralize mono/nuget skip predicate in conftest.py Co-authored-by: oscarsj <1410188+oscarsj@users.noreply.github.com> --- csharp/ql/integration-tests/posix/conftest.py | 20 +++++++++++++++++++ .../test.py | 10 ++-------- .../test.py | 10 ++-------- .../standalone_dependencies_nuget/test.py | 16 ++------------- .../test.py | 10 ++-------- 5 files changed, 28 insertions(+), 38 deletions(-) create mode 100644 csharp/ql/integration-tests/posix/conftest.py diff --git a/csharp/ql/integration-tests/posix/conftest.py b/csharp/ql/integration-tests/posix/conftest.py new file mode 100644 index 000000000000..0cd4ee6cfa0d --- /dev/null +++ b/csharp/ql/integration-tests/posix/conftest.py @@ -0,0 +1,20 @@ +import runs_on +import pytest + + +def _supports_mono_nuget(): + """ + Helper function to determine if the current platform supports Mono and nuget. + + Returns True if running on Linux or on macOS x86_64 (excluding macos-15 and macos-26). + macOS ARM runners (macos-15 and macos-26) are excluded due to issues with Mono and nuget. + """ + return ( + runs_on.linux + or ( + runs_on.macos + and runs_on.x86_64 + and not runs_on.macos_15 + and not runs_on.macos_26 + ) + ) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py index 8f66ebf714e1..3d0d011f73d7 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py @@ -1,15 +1,9 @@ -import runs_on import pytest import os +from conftest import _supports_mono_nuget -# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running -# into trouble with Mono and nuget. -@pytest.mark.only_if( - runs_on.linux - or (runs_on.macos and runs_on.x86_64 - and not runs_on.macos_15 and not runs_on.macos_26) -) +@pytest.mark.only_if(_supports_mono_nuget()) def test(codeql, csharp): os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES"] = ( "/non-existent-path" diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py index 4f3097bb3872..1b111d082397 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py @@ -1,15 +1,9 @@ import os -import runs_on import pytest +from conftest import _supports_mono_nuget -# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running -# into trouble with Mono and nuget. -@pytest.mark.only_if( - runs_on.linux - or (runs_on.macos and runs_on.x86_64 - and not runs_on.macos_15 and not runs_on.macos_26) -) +@pytest.mark.only_if(_supports_mono_nuget()) def test(codeql, csharp): # making sure we're not doing any fallback restore: os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_TIMEOUT"] = "1" diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py index ebdad77e7168..2d887a522445 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py @@ -1,19 +1,7 @@ -import runs_on import pytest +from conftest import _supports_mono_nuget -# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running -# into trouble with Mono and nuget. -@pytest.mark.only_if( - runs_on.linux - or ( - runs_on.macos - and runs_on.x86_64 - and not ( - runs_on.macos_15 - or runs_on.macos_26 - ) - ) -) +@pytest.mark.only_if(_supports_mono_nuget()) def test(codeql, csharp): codeql.database.create(build_mode="none") diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py index f095580d34dc..a2bb13e921b9 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py @@ -1,13 +1,7 @@ -import runs_on import pytest +from conftest import _supports_mono_nuget -# Skipping the test on the ARM runners, macos-15 and macos-26, as we're running -# into trouble with Mono and nuget. -@pytest.mark.only_if( - runs_on.linux - or (runs_on.macos and runs_on.x86_64 - and not runs_on.macos_15 and not runs_on.macos_26) -) +@pytest.mark.only_if(_supports_mono_nuget()) def test(codeql, csharp): codeql.database.create(source_root="proj", build_mode="none") From 60b8213fdda848af3dfc2eca803f252fcf98ede6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 17:22:27 +0000 Subject: [PATCH 122/243] Remove unused pytest import from conftest.py Co-authored-by: oscarsj <1410188+oscarsj@users.noreply.github.com> --- csharp/ql/integration-tests/posix/conftest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/csharp/ql/integration-tests/posix/conftest.py b/csharp/ql/integration-tests/posix/conftest.py index 0cd4ee6cfa0d..543bc046c982 100644 --- a/csharp/ql/integration-tests/posix/conftest.py +++ b/csharp/ql/integration-tests/posix/conftest.py @@ -1,5 +1,4 @@ import runs_on -import pytest def _supports_mono_nuget(): From 779fd757a397a7585d50d4a5810a8920b6ea2288 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 12:35:15 -0500 Subject: [PATCH 123/243] Update cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 9f1c15690eec..ce7d73b1bfcf 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -143,7 +143,7 @@ predicate isLikelyConversionConstant(int c) { 36524, // days in 100-year Gregorian subcycle 1461, // days in 4-year cycle (incl. 1 leap) 32044, // Fliegel-van Flandern JDN epoch shift - 1721425, // JDN of 0001‑01‑01 (Gregorian) + 1721425, // JDN of 0001-01-01 (Gregorian) 1721119, // alt epoch offset 2400000, // MJD -> JDN conversion 2400001, // alt MJD -> JDN conversion From 0106072b882b7f3752db9bd86978cffe9f01478f Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 12:35:27 -0500 Subject: [PATCH 124/243] Update cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index ce7d73b1bfcf..28271d5c3a6a 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -147,7 +147,7 @@ predicate isLikelyConversionConstant(int c) { 1721119, // alt epoch offset 2400000, // MJD -> JDN conversion 2400001, // alt MJD -> JDN conversion - 2141, // fixed‑point month/day extraction + 2141, // fixed-point month/day extraction 65536, // observed in some conversions 7834, // observed in some conversions 256, // observed in some conversions From ea0d1bf2620defc288276708137c94eb1fdc2590 Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 12:38:59 -0500 Subject: [PATCH 125/243] Apply suggestion from @bdrodes --- .../Leap Year/UncheckedLeapYearAfterYearModification.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql index 28271d5c3a6a..0a52a2b0ff4c 100644 --- a/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql +++ b/cpp/ql/src/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification.ql @@ -162,7 +162,8 @@ predicate isLikelyConversionConstant(int c) { 1400, // Hijri base year, used when converting a 2 digit year 1980, // FAT filesystem epoch start year 227013, // constant observed for Hirji year conversion, and Hirji years are not applicable for gregorian leap year - 10631, // constant observed for Hirji year conversion, and Hirji years are not applicable for gregorian leap year + 10631, // constant observed for Hirji year conversion, and Hirji years are not applicable for gregorian leap year, + 80, // 1980/01/01 is the start of the epoch on DOS 0 ] ) From 6760390d754b01d020cfef2652791bc715770683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20San=20Jos=C3=A9?= Date: Tue, 17 Feb 2026 18:49:11 +0100 Subject: [PATCH 126/243] Fix imports --- .../posix/standalone_dependencies_no_framework/test.py | 3 ++- .../posix/standalone_dependencies_nuget with_space/test.py | 2 +- .../posix/standalone_dependencies_nuget/test.py | 2 +- .../posix/standalone_dependencies_nuget_no_sources/test.py | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py index 3d0d011f73d7..21987ed7a2d9 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py @@ -1,6 +1,7 @@ import pytest import os -from conftest import _supports_mono_nuget +from ..conftest import _supports_mono_nuget + @pytest.mark.only_if(_supports_mono_nuget()) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py index 1b111d082397..662178aa3c0f 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget with_space/test.py @@ -1,6 +1,6 @@ import os import pytest -from conftest import _supports_mono_nuget +from ..conftest import _supports_mono_nuget @pytest.mark.only_if(_supports_mono_nuget()) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py index 2d887a522445..d8e8c8055ad5 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget/test.py @@ -1,5 +1,5 @@ import pytest -from conftest import _supports_mono_nuget +from ..conftest import _supports_mono_nuget @pytest.mark.only_if(_supports_mono_nuget()) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py index a2bb13e921b9..ccd8f61a3845 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_nuget_no_sources/test.py @@ -1,5 +1,5 @@ import pytest -from conftest import _supports_mono_nuget +from ..conftest import _supports_mono_nuget @pytest.mark.only_if(_supports_mono_nuget()) From fa73cd5d5c8233a1a1633f0f8fcc5147627df1e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20San=20Jos=C3=A9?= Date: Tue, 17 Feb 2026 18:49:51 +0100 Subject: [PATCH 127/243] Remove unnecessary blank line in test.py --- .../posix/standalone_dependencies_no_framework/test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py index 21987ed7a2d9..725ded1899c9 100644 --- a/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py +++ b/csharp/ql/integration-tests/posix/standalone_dependencies_no_framework/test.py @@ -3,7 +3,6 @@ from ..conftest import _supports_mono_nuget - @pytest.mark.only_if(_supports_mono_nuget()) def test(codeql, csharp): os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_DOTNET_FRAMEWORK_REFERENCES"] = ( From a1eaf42cbf5fd1ee9695db7c6423e48d6bd19f0c Mon Sep 17 00:00:00 2001 From: Ben Rodes Date: Tue, 17 Feb 2026 13:05:51 -0500 Subject: [PATCH 128/243] Update python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md Co-authored-by: Owen Mansel-Chan <62447351+owen-mc@users.noreply.github.com> --- .../2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md | 1 - 1 file changed, 1 deletion(-) diff --git a/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md b/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md index d4373eadfb26..c3b4194e7b83 100644 --- a/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md +++ b/python/ql/lib/change-notes/2026-02-09-ssrf_test_case_cleanup_and_new_ssrf_barriers.md @@ -1,5 +1,4 @@ --- category: minorAnalysis --- -* Modified SSRF tests to use postprocessing to more easily debug results. * Added new full SSRF sanitization barrier from the new AntiSSRF library. \ No newline at end of file From 1d7a39a093a748276b454645ecd8be7703ed97d6 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 12:58:38 +0000 Subject: [PATCH 129/243] Change how sql-injection barriers are accepted --- ruby/ql/lib/codeql/ruby/Concepts.qll | 5 +++++ .../lib/codeql/ruby/security/SqlInjectionCustomizations.qll | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/Concepts.qll b/ruby/ql/lib/codeql/ruby/Concepts.qll index 2ddcb433e1be..642a2fd0b1bf 100644 --- a/ruby/ql/lib/codeql/ruby/Concepts.qll +++ b/ruby/ql/lib/codeql/ruby/Concepts.qll @@ -9,6 +9,7 @@ private import codeql.ruby.CFG private import codeql.ruby.DataFlow private import codeql.ruby.dataflow.internal.DataFlowImplSpecific private import codeql.ruby.Frameworks +private import codeql.ruby.frameworks.data.internal.ApiGraphModels private import codeql.ruby.dataflow.RemoteFlowSources private import codeql.ruby.ApiGraphs private import codeql.ruby.Regexp as RE @@ -95,6 +96,10 @@ module SqlSanitization { abstract class Range extends DataFlow::Node { } } +private class ExternalSqlInjectionSanitizer extends SqlSanitization::Range { + ExternalSqlInjectionSanitizer() { ModelOutput::barrierNode(this, "sql-injection") } +} + /** * A data-flow node that executes a regular expression. * diff --git a/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll index 7d6f16731a56..1bf14dc3b280 100644 --- a/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/SqlInjectionCustomizations.qll @@ -61,8 +61,4 @@ module SqlInjection { private class ExternalSqlInjectionSink extends Sink { ExternalSqlInjectionSink() { ModelOutput::sinkNode(this, "sql-injection") } } - - private class ExternalSqlInjectionSanitizer extends Sanitizer { - ExternalSqlInjectionSanitizer() { ModelOutput::barrierNode(this, "sql-injection") } - } } From fc429c175799f150470f6dbdbaa8e20664187807 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 15:30:10 +0000 Subject: [PATCH 130/243] Improve Mysql2 test --- .../library-tests/frameworks/mysql2/Mysql2.rb | 8 ++++---- .../frameworks/mysql2/SqlInjection.expected | 15 +++++++++++++++ .../frameworks/mysql2/SqlInjection.qlref | 4 ++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected create mode 100644 ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.qlref diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb b/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb index b9b3b5a7b575..1294f1614757 100644 --- a/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb +++ b/ruby/ql/test/library-tests/frameworks/mysql2/Mysql2.rb @@ -1,6 +1,6 @@ class UsersController < ActionController::Base def mysql2_handler(event:, context:) - name = params[:user_name] + name = params[:user_name] # $ Source[rb/sql-injection] conn = Mysql2::Client.new( host: "127.0.0.1", @@ -10,7 +10,7 @@ def mysql2_handler(event:, context:) results1 = conn.query("SELECT * FROM users") # BAD: SQL statement constructed from user input - results2 = conn.query("SELECT * FROM users WHERE username='#{name}'") + results2 = conn.query("SELECT * FROM users WHERE username='#{name}'") # $ Alert[rb/sql-injection] # GOOD: user input is escaped escaped = Mysql2::Client.escape(name) @@ -21,10 +21,10 @@ def mysql2_handler(event:, context:) results4 = statement1.execute(1, name, :as => :array) # BAD: SQL statement constructed from user input - statement2 = conn.prepare("SELECT * FROM users WHERE username='#{name}' AND password = ?") + statement2 = conn.prepare("SELECT * FROM users WHERE username='#{name}' AND password = ?") # $ Alert[rb/sql-injection] results4 = statement2.execute("password", :as => :array) # NOT EXECUTED statement3 = conn.prepare("SELECT * FROM users WHERE username = ?") end -end \ No newline at end of file +end diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected new file mode 100644 index 000000000000..f29b1738394e --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected @@ -0,0 +1,15 @@ +#select +| Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | +| Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | +edges +| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | +| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | +| Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:3:12:3:29 | ...[...] | provenance | | +| Mysql2.rb:3:12:3:29 | ...[...] | Mysql2.rb:3:5:3:8 | name | provenance | | +nodes +| Mysql2.rb:3:5:3:8 | name | semmle.label | name | +| Mysql2.rb:3:12:3:17 | call to params | semmle.label | call to params | +| Mysql2.rb:3:12:3:29 | ...[...] | semmle.label | ...[...] | +| Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | +| Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | +subpaths diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.qlref b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.qlref new file mode 100644 index 000000000000..ff400a718e22 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.qlref @@ -0,0 +1,4 @@ +query: queries/security/cwe-089/SqlInjection.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql From 3e4f42f8a3c5117e16f746446aa60abe898a1b69 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 15:40:10 +0000 Subject: [PATCH 131/243] Move Mysql2 flow model to MaD and remove ql sanitizer --- .../codeql/ruby/frameworks/Mysql2.model.yml | 6 +++++ ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll | 22 ------------------- .../frameworks/mysql2/SqlInjection.expected | 13 +++++++++++ 3 files changed, 19 insertions(+), 22 deletions(-) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml new file mode 100644 index 000000000000..c0a20d0d32d2 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - ['Mysql2::Client!', 'Method[escape]', 'Argument[0]', 'ReturnValue', 'taint'] diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll index baca5bba95f3..67cf762f9850 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.qll @@ -48,26 +48,4 @@ module Mysql2 { override DataFlow::Node getSql() { result = query } } - - /** - * A call to `Mysql2::Client.escape`, considered as a sanitizer for SQL statements. - */ - private class Mysql2EscapeSanitization extends SqlSanitization::Range { - Mysql2EscapeSanitization() { - this = API::getTopLevelMember("Mysql2").getMember("Client").getAMethodCall("escape") - } - } - - /** - * Flow summary for `Mysql2::Client.escape()`. - */ - private class EscapeSummary extends SummarizedCallable::Range { - EscapeSummary() { this = "Mysql2::Client.escape()" } - - override MethodCall getACall() { result = any(Mysql2EscapeSanitization c).asExpr().getExpr() } - - override predicate propagatesFlow(string input, string output, boolean preservesValue) { - input = "Argument[0]" and output = "ReturnValue" and preservesValue = false - } - } } diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected index f29b1738394e..5f4905e2ccb7 100644 --- a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected +++ b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected @@ -1,15 +1,28 @@ #select | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | +| Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | edges | Mysql2.rb:3:5:3:8 | name | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | +| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:16:37:16:40 | name | provenance | | | Mysql2.rb:3:5:3:8 | name | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:3:12:3:29 | ...[...] | provenance | | | Mysql2.rb:3:12:3:29 | ...[...] | Mysql2.rb:3:5:3:8 | name | provenance | | +| Mysql2.rb:16:5:16:11 | escaped | Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | +| Mysql2.rb:16:15:16:41 | call to escape | Mysql2.rb:16:5:16:11 | escaped | provenance | | +| Mysql2.rb:16:37:16:40 | name | Mysql2.rb:16:15:16:41 | call to escape | provenance | MaD:1 | +models +| 1 | Summary: Mysql2::Client!; Method[escape]; Argument[0]; ReturnValue; taint | nodes | Mysql2.rb:3:5:3:8 | name | semmle.label | name | | Mysql2.rb:3:12:3:17 | call to params | semmle.label | call to params | | Mysql2.rb:3:12:3:29 | ...[...] | semmle.label | ...[...] | | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | +| Mysql2.rb:16:5:16:11 | escaped | semmle.label | escaped | +| Mysql2.rb:16:15:16:41 | call to escape | semmle.label | call to escape | +| Mysql2.rb:16:37:16:40 | name | semmle.label | name | +| Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | subpaths +testFailures +| Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | Unexpected result: Alert | From d4bb92b038567a61b7f55fb10bff8729467c2f05 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 15:42:21 +0000 Subject: [PATCH 132/243] Reinstate Mysql2 sanitizer in MaD --- ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml | 5 +++++ .../frameworks/mysql2/SqlInjection.expected | 13 ------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml index c0a20d0d32d2..1b6c8c754f57 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml +++ b/ruby/ql/lib/codeql/ruby/frameworks/Mysql2.model.yml @@ -4,3 +4,8 @@ extensions: extensible: summaryModel data: - ['Mysql2::Client!', 'Method[escape]', 'Argument[0]', 'ReturnValue', 'taint'] + - addsTo: + pack: codeql/ruby-all + extensible: barrierModel + data: + - ['Mysql2::Client!', 'Method[escape].ReturnValue', 'sql-injection'] diff --git a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected index 5f4905e2ccb7..f29b1738394e 100644 --- a/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected +++ b/ruby/ql/test/library-tests/frameworks/mysql2/SqlInjection.expected @@ -1,28 +1,15 @@ #select | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | -| Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | This SQL query depends on a $@. | Mysql2.rb:3:12:3:17 | call to params | user-provided value | edges | Mysql2.rb:3:5:3:8 | name | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | -| Mysql2.rb:3:5:3:8 | name | Mysql2.rb:16:37:16:40 | name | provenance | | | Mysql2.rb:3:5:3:8 | name | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | | Mysql2.rb:3:12:3:17 | call to params | Mysql2.rb:3:12:3:29 | ...[...] | provenance | | | Mysql2.rb:3:12:3:29 | ...[...] | Mysql2.rb:3:5:3:8 | name | provenance | | -| Mysql2.rb:16:5:16:11 | escaped | Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | provenance | AdditionalTaintStep | -| Mysql2.rb:16:15:16:41 | call to escape | Mysql2.rb:16:5:16:11 | escaped | provenance | | -| Mysql2.rb:16:37:16:40 | name | Mysql2.rb:16:15:16:41 | call to escape | provenance | MaD:1 | -models -| 1 | Summary: Mysql2::Client!; Method[escape]; Argument[0]; ReturnValue; taint | nodes | Mysql2.rb:3:5:3:8 | name | semmle.label | name | | Mysql2.rb:3:12:3:17 | call to params | semmle.label | call to params | | Mysql2.rb:3:12:3:29 | ...[...] | semmle.label | ...[...] | | Mysql2.rb:13:27:13:72 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | -| Mysql2.rb:16:5:16:11 | escaped | semmle.label | escaped | -| Mysql2.rb:16:15:16:41 | call to escape | semmle.label | call to escape | -| Mysql2.rb:16:37:16:40 | name | semmle.label | name | -| Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | | Mysql2.rb:24:31:24:93 | "SELECT * FROM users WHERE use..." | semmle.label | "SELECT * FROM users WHERE use..." | subpaths -testFailures -| Mysql2.rb:17:27:17:75 | "SELECT * FROM users WHERE use..." | Unexpected result: Alert | From 1fa183ee2a73b886dea62c9c220c4082d1337a6f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 22:16:14 +0000 Subject: [PATCH 133/243] Improve Sqlite3 test --- .../frameworks/sqlite3/SqlInjection.expected | 12 +++++++++++ .../frameworks/sqlite3/SqlInjection.qlref | 4 ++++ .../frameworks/sqlite3/sqlite3.rb | 20 +++++++++++-------- 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected create mode 100644 ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.qlref diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected new file mode 100644 index 000000000000..e094f9603c8d --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected @@ -0,0 +1,12 @@ +#select +| sqlite3.rb:29:16:29:67 | "select * from table where cat..." | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | This SQL query depends on a $@. | sqlite3.rb:25:16:25:21 | call to params | user-provided value | +edges +| sqlite3.rb:25:5:25:12 | category | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | provenance | AdditionalTaintStep | +| sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:25:16:25:32 | ...[...] | provenance | | +| sqlite3.rb:25:16:25:32 | ...[...] | sqlite3.rb:25:5:25:12 | category | provenance | | +nodes +| sqlite3.rb:25:5:25:12 | category | semmle.label | category | +| sqlite3.rb:25:16:25:21 | call to params | semmle.label | call to params | +| sqlite3.rb:25:16:25:32 | ...[...] | semmle.label | ...[...] | +| sqlite3.rb:29:16:29:67 | "select * from table where cat..." | semmle.label | "select * from table where cat..." | +subpaths diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.qlref b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.qlref new file mode 100644 index 000000000000..ff400a718e22 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.qlref @@ -0,0 +1,4 @@ +query: queries/security/cwe-089/SqlInjection.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb b/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb index 465bb708598d..36b146abe8d3 100644 --- a/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/sqlite3.rb @@ -20,12 +20,16 @@ end -class MyDatabaseWrapper - def initialize(filename) - @db = SQLite3::Database.new(filename, results_as_hash: true) - end - - def select_rows(category) - @db.execute("select * from table") - end +class SqliteController < ActionController::Base + def sqlite3_handler + category = params[:category] # $ Source[rb/sql-injection] + db = SQLite3::Database.new "test.db" + + # BAD: SQL injection vulnerability + db.execute("select * from table where category = '#{category}'") # $ Alert[rb/sql-injection] + + # GOOD: Sanitized by SQLite3::Database.quote + sanitized_category = SQLite3::Database.quote(category) + db.execute("select * from table where category = '#{sanitized_category}'") + end end From 5df695bec93e39b3495da70aa826b92cccb9c5dd Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 22:22:13 +0000 Subject: [PATCH 134/243] Move SQLite3 flow model to MaD and remove ql sanitizer --- .../codeql/ruby/frameworks/Sqlite3.model.yml | 6 +++++ .../ql/lib/codeql/ruby/frameworks/Sqlite3.qll | 22 ------------------- .../frameworks/sqlite3/SqlInjection.expected | 13 +++++++++++ 3 files changed, 19 insertions(+), 22 deletions(-) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml new file mode 100644 index 000000000000..e6aeb2c82409 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - ['SQLite3::Database!', 'Method[quote]', 'Argument[0]', 'ReturnValue', 'taint'] diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll index f3e7626f7337..1cf167baa72f 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.qll @@ -76,26 +76,4 @@ module Sqlite3 { override DataFlow::Node getSql() { result = this.getArgument(0) } } - - /** - * A call to `SQLite3::Database.quote`, considered as a sanitizer for SQL statements. - */ - private class SQLite3QuoteSanitization extends SqlSanitization { - SQLite3QuoteSanitization() { - this = API::getTopLevelMember("SQLite3").getMember("Database").getAMethodCall("quote") - } - } - - /** - * Flow summary for `SQLite3::Database.quote()`. - */ - private class QuoteSummary extends SummarizedCallable::Range { - QuoteSummary() { this = "SQLite3::Database.quote()" } - - override MethodCall getACall() { result = any(SQLite3QuoteSanitization c).asExpr().getExpr() } - - override predicate propagatesFlow(string input, string output, boolean preservesValue) { - input = "Argument[0]" and output = "ReturnValue" and preservesValue = false - } - } } diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected index e094f9603c8d..47bbcc10c276 100644 --- a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected @@ -1,12 +1,25 @@ #select | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | This SQL query depends on a $@. | sqlite3.rb:25:16:25:21 | call to params | user-provided value | +| sqlite3.rb:33:16:33:77 | "select * from table where cat..." | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | This SQL query depends on a $@. | sqlite3.rb:25:16:25:21 | call to params | user-provided value | edges | sqlite3.rb:25:5:25:12 | category | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | provenance | AdditionalTaintStep | +| sqlite3.rb:25:5:25:12 | category | sqlite3.rb:32:50:32:57 | category | provenance | | | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:25:16:25:32 | ...[...] | provenance | | | sqlite3.rb:25:16:25:32 | ...[...] | sqlite3.rb:25:5:25:12 | category | provenance | | +| sqlite3.rb:32:5:32:22 | sanitized_category | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | provenance | AdditionalTaintStep | +| sqlite3.rb:32:26:32:58 | call to quote | sqlite3.rb:32:5:32:22 | sanitized_category | provenance | | +| sqlite3.rb:32:50:32:57 | category | sqlite3.rb:32:26:32:58 | call to quote | provenance | MaD:1 | +models +| 1 | Summary: SQLite3::Database!; Method[quote]; Argument[0]; ReturnValue; taint | nodes | sqlite3.rb:25:5:25:12 | category | semmle.label | category | | sqlite3.rb:25:16:25:21 | call to params | semmle.label | call to params | | sqlite3.rb:25:16:25:32 | ...[...] | semmle.label | ...[...] | | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | semmle.label | "select * from table where cat..." | +| sqlite3.rb:32:5:32:22 | sanitized_category | semmle.label | sanitized_category | +| sqlite3.rb:32:26:32:58 | call to quote | semmle.label | call to quote | +| sqlite3.rb:32:50:32:57 | category | semmle.label | category | +| sqlite3.rb:33:16:33:77 | "select * from table where cat..." | semmle.label | "select * from table where cat..." | subpaths +testFailures +| sqlite3.rb:33:16:33:77 | "select * from table where cat..." | Unexpected result: Alert | From 4aee99f0ebe290273a32f2c0970c69cee7fe95a5 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 22:23:18 +0000 Subject: [PATCH 135/243] Reinstate SQLite3 sanitizer in MaD --- .../ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml | 5 +++++ .../frameworks/sqlite3/SqlInjection.expected | 13 ------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml index e6aeb2c82409..13b7b5b48712 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml +++ b/ruby/ql/lib/codeql/ruby/frameworks/Sqlite3.model.yml @@ -4,3 +4,8 @@ extensions: extensible: summaryModel data: - ['SQLite3::Database!', 'Method[quote]', 'Argument[0]', 'ReturnValue', 'taint'] + - addsTo: + pack: codeql/ruby-all + extensible: barrierModel + data: + - ['SQLite3::Database!', 'Method[quote].ReturnValue', 'sql-injection'] diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected index 47bbcc10c276..e094f9603c8d 100644 --- a/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/SqlInjection.expected @@ -1,25 +1,12 @@ #select | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | This SQL query depends on a $@. | sqlite3.rb:25:16:25:21 | call to params | user-provided value | -| sqlite3.rb:33:16:33:77 | "select * from table where cat..." | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | This SQL query depends on a $@. | sqlite3.rb:25:16:25:21 | call to params | user-provided value | edges | sqlite3.rb:25:5:25:12 | category | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | provenance | AdditionalTaintStep | -| sqlite3.rb:25:5:25:12 | category | sqlite3.rb:32:50:32:57 | category | provenance | | | sqlite3.rb:25:16:25:21 | call to params | sqlite3.rb:25:16:25:32 | ...[...] | provenance | | | sqlite3.rb:25:16:25:32 | ...[...] | sqlite3.rb:25:5:25:12 | category | provenance | | -| sqlite3.rb:32:5:32:22 | sanitized_category | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | provenance | AdditionalTaintStep | -| sqlite3.rb:32:26:32:58 | call to quote | sqlite3.rb:32:5:32:22 | sanitized_category | provenance | | -| sqlite3.rb:32:50:32:57 | category | sqlite3.rb:32:26:32:58 | call to quote | provenance | MaD:1 | -models -| 1 | Summary: SQLite3::Database!; Method[quote]; Argument[0]; ReturnValue; taint | nodes | sqlite3.rb:25:5:25:12 | category | semmle.label | category | | sqlite3.rb:25:16:25:21 | call to params | semmle.label | call to params | | sqlite3.rb:25:16:25:32 | ...[...] | semmle.label | ...[...] | | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | semmle.label | "select * from table where cat..." | -| sqlite3.rb:32:5:32:22 | sanitized_category | semmle.label | sanitized_category | -| sqlite3.rb:32:26:32:58 | call to quote | semmle.label | call to quote | -| sqlite3.rb:32:50:32:57 | category | semmle.label | category | -| sqlite3.rb:33:16:33:77 | "select * from table where cat..." | semmle.label | "select * from table where cat..." | subpaths -testFailures -| sqlite3.rb:33:16:33:77 | "select * from table where cat..." | Unexpected result: Alert | From 6294c3b3b8de70109da4edd0b27a836f277690f2 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 12:39:07 +0000 Subject: [PATCH 136/243] Remove Shellwords sanitizer in ql Note that some sanitizers had no effect because flow through those functions wasn't modeled. --- .../ruby/security/CommandInjectionCustomizations.qll | 12 ------------ .../CommandInjection/CommandInjection.expected | 9 +++++++++ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll index d9551177875c..b1001b372e2a 100644 --- a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll @@ -42,18 +42,6 @@ module CommandInjection { SystemCommandExecutionSink() { exists(SystemCommandExecution c | c.isShellInterpreted(this)) } } - /** - * A call to `Shellwords.escape` or `Shellwords.shellescape` sanitizes its input. - */ - class ShellwordsEscapeAsSanitizer extends Sanitizer { - ShellwordsEscapeAsSanitizer() { - this = API::getTopLevelMember("Shellwords").getAMethodCall(["escape", "shellescape"]) - or - // The method is also added as `String#shellescape`. - this.(DataFlow::CallNode).getMethodName() = "shellescape" - } - } - private class ExternalCommandInjectionSink extends Sink { ExternalCommandInjectionSink() { ModelOutput::sinkNode(this, "command-injection") } } diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected index 2173fed576a2..34d75aa6431a 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected @@ -13,6 +13,7 @@ | CommandInjection.rb:83:14:83:34 | "echo #{...}" | CommandInjection.rb:82:23:82:33 | blah_number | CommandInjection.rb:83:14:83:34 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:82:23:82:33 | blah_number | user-provided value | | CommandInjection.rb:92:14:92:39 | "echo #{...}" | CommandInjection.rb:92:22:92:37 | ...[...] | CommandInjection.rb:92:14:92:39 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:92:22:92:37 | ...[...] | user-provided value | | CommandInjection.rb:105:16:105:28 | "cat #{...}" | CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:105:16:105:28 | "cat #{...}" | This command depends on a $@. | CommandInjection.rb:104:16:104:21 | call to params | user-provided value | +| CommandInjection.rb:107:16:107:40 | "cat #{...}" | CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:107:16:107:40 | "cat #{...}" | This command depends on a $@. | CommandInjection.rb:104:16:104:21 | call to params | user-provided value | | CommandInjection.rb:112:33:112:44 | ...[...] | CommandInjection.rb:112:33:112:38 | call to params | CommandInjection.rb:112:33:112:44 | ...[...] | This command depends on a $@. | CommandInjection.rb:112:33:112:38 | call to params | user-provided value | | CommandInjection.rb:114:41:114:56 | "#{...}" | CommandInjection.rb:114:44:114:49 | call to params | CommandInjection.rb:114:41:114:56 | "#{...}" | This command depends on a $@. | CommandInjection.rb:114:44:114:49 | call to params | user-provided value | edges @@ -36,8 +37,11 @@ edges | CommandInjection.rb:82:23:82:33 | blah_number | CommandInjection.rb:83:14:83:34 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:92:22:92:37 | ...[...] | CommandInjection.rb:92:14:92:39 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:104:9:104:12 | file | CommandInjection.rb:105:16:105:28 | "cat #{...}" | provenance | AdditionalTaintStep | +| CommandInjection.rb:104:9:104:12 | file | CommandInjection.rb:107:23:107:26 | file | provenance | | | CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:104:16:104:28 | ...[...] | provenance | | | CommandInjection.rb:104:16:104:28 | ...[...] | CommandInjection.rb:104:9:104:12 | file | provenance | | +| CommandInjection.rb:107:23:107:26 | file | CommandInjection.rb:107:23:107:38 | call to shellescape | provenance | | +| CommandInjection.rb:107:23:107:38 | call to shellescape | CommandInjection.rb:107:16:107:40 | "cat #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:112:33:112:38 | call to params | CommandInjection.rb:112:33:112:44 | ...[...] | provenance | Sink:MaD:1 | | CommandInjection.rb:114:44:114:49 | call to params | CommandInjection.rb:114:44:114:54 | ...[...] | provenance | | | CommandInjection.rb:114:44:114:54 | ...[...] | CommandInjection.rb:114:41:114:56 | "#{...}" | provenance | AdditionalTaintStep Sink:MaD:2 | @@ -74,9 +78,14 @@ nodes | CommandInjection.rb:104:16:104:21 | call to params | semmle.label | call to params | | CommandInjection.rb:104:16:104:28 | ...[...] | semmle.label | ...[...] | | CommandInjection.rb:105:16:105:28 | "cat #{...}" | semmle.label | "cat #{...}" | +| CommandInjection.rb:107:16:107:40 | "cat #{...}" | semmle.label | "cat #{...}" | +| CommandInjection.rb:107:23:107:26 | file | semmle.label | file | +| CommandInjection.rb:107:23:107:38 | call to shellescape | semmle.label | call to shellescape | | CommandInjection.rb:112:33:112:38 | call to params | semmle.label | call to params | | CommandInjection.rb:112:33:112:44 | ...[...] | semmle.label | ...[...] | | CommandInjection.rb:114:41:114:56 | "#{...}" | semmle.label | "#{...}" | | CommandInjection.rb:114:44:114:49 | call to params | semmle.label | call to params | | CommandInjection.rb:114:44:114:54 | ...[...] | semmle.label | ...[...] | subpaths +testFailures +| CommandInjection.rb:107:16:107:40 | "cat #{...}" | Unexpected result: Alert | From b3681f7a0c3128fb1dbb1d1e9f9814c43a4def64 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 12:39:54 +0000 Subject: [PATCH 137/243] Model flow through Shellwords escape and shellescape --- .../frameworks/stdlib/Shellwords.model.yml | 6 ++++++ .../CommandInjection.expected | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml new file mode 100644 index 000000000000..ec3f0430dbaf --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml @@ -0,0 +1,6 @@ +extensions: + - addsTo: + pack: codeql/ruby-all + extensible: summaryModel + data: + - ['Shellwords!', 'Method[escape,shellescape]', 'Argument[0]', 'ReturnValue', 'taint'] diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected index 34d75aa6431a..59881ddff97e 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected @@ -4,6 +4,8 @@ | CommandInjection.rb:10:14:10:16 | cmd | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:10:14:10:16 | cmd | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:11:17:11:22 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:11:17:11:22 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:13:9:13:14 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:13:9:13:14 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:18:15:18:27 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:18:15:18:27 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | +| CommandInjection.rb:21:15:21:27 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:21:15:21:27 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:30:19:30:24 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:30:19:30:24 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:34:24:34:36 | "echo #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:34:24:34:36 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:35:39:35:51 | "grep #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:35:39:35:51 | "grep #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | @@ -22,11 +24,19 @@ edges | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:10:14:10:16 | cmd | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:11:17:11:22 | #{...} | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:13:9:13:14 | #{...} | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:17:40:17:42 | cmd | provenance | | +| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:20:45:20:47 | cmd | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:30:19:30:24 | #{...} | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:34:24:34:36 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:35:39:35:51 | "grep #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:6:15:6:26 | ...[...] | provenance | | | CommandInjection.rb:6:15:6:26 | ...[...] | CommandInjection.rb:6:9:6:11 | cmd | provenance | | +| CommandInjection.rb:17:9:17:18 | safe_cmd_1 | CommandInjection.rb:18:15:18:27 | #{...} | provenance | | +| CommandInjection.rb:17:22:17:43 | call to escape | CommandInjection.rb:17:9:17:18 | safe_cmd_1 | provenance | | +| CommandInjection.rb:17:40:17:42 | cmd | CommandInjection.rb:17:22:17:43 | call to escape | provenance | MaD:3 | +| CommandInjection.rb:20:9:20:18 | safe_cmd_2 | CommandInjection.rb:21:15:21:27 | #{...} | provenance | | +| CommandInjection.rb:20:22:20:48 | call to shellescape | CommandInjection.rb:20:9:20:18 | safe_cmd_2 | provenance | | +| CommandInjection.rb:20:45:20:47 | cmd | CommandInjection.rb:20:22:20:48 | call to shellescape | provenance | MaD:3 | | CommandInjection.rb:47:9:47:11 | cmd | CommandInjection.rb:51:24:51:36 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:47:15:47:20 | call to params | CommandInjection.rb:47:15:47:26 | ...[...] | provenance | | | CommandInjection.rb:47:15:47:26 | ...[...] | CommandInjection.rb:47:9:47:11 | cmd | provenance | | @@ -48,6 +58,7 @@ edges models | 1 | Sink: Terrapin::CommandLine!; Method[new].Argument[0]; command-injection | | 2 | Sink: Terrapin::CommandLine!; Method[new].Argument[1]; command-injection | +| 3 | Summary: Shellwords!; Method[escape,shellescape]; Argument[0]; ReturnValue; taint | nodes | CommandInjection.rb:6:9:6:11 | cmd | semmle.label | cmd | | CommandInjection.rb:6:15:6:20 | call to params | semmle.label | call to params | @@ -57,6 +68,14 @@ nodes | CommandInjection.rb:10:14:10:16 | cmd | semmle.label | cmd | | CommandInjection.rb:11:17:11:22 | #{...} | semmle.label | #{...} | | CommandInjection.rb:13:9:13:14 | #{...} | semmle.label | #{...} | +| CommandInjection.rb:17:9:17:18 | safe_cmd_1 | semmle.label | safe_cmd_1 | +| CommandInjection.rb:17:22:17:43 | call to escape | semmle.label | call to escape | +| CommandInjection.rb:17:40:17:42 | cmd | semmle.label | cmd | +| CommandInjection.rb:18:15:18:27 | #{...} | semmle.label | #{...} | +| CommandInjection.rb:20:9:20:18 | safe_cmd_2 | semmle.label | safe_cmd_2 | +| CommandInjection.rb:20:22:20:48 | call to shellescape | semmle.label | call to shellescape | +| CommandInjection.rb:20:45:20:47 | cmd | semmle.label | cmd | +| CommandInjection.rb:21:15:21:27 | #{...} | semmle.label | #{...} | | CommandInjection.rb:30:19:30:24 | #{...} | semmle.label | #{...} | | CommandInjection.rb:34:24:34:36 | "echo #{...}" | semmle.label | "echo #{...}" | | CommandInjection.rb:35:39:35:51 | "grep #{...}" | semmle.label | "grep #{...}" | @@ -88,4 +107,6 @@ nodes | CommandInjection.rb:114:44:114:54 | ...[...] | semmle.label | ...[...] | subpaths testFailures +| CommandInjection.rb:18:15:18:27 | #{...} | Unexpected result: Alert | +| CommandInjection.rb:21:15:21:27 | #{...} | Unexpected result: Alert | | CommandInjection.rb:107:16:107:40 | "cat #{...}" | Unexpected result: Alert | From de5470a85c6342b97d1e0e2041f686de8dad17ff Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 12:41:28 +0000 Subject: [PATCH 138/243] Add MaD barriers for Shellwords.escape and shellescape Note that this will only block flow for queries that use the kind `command-injection`. --- .../frameworks/stdlib/Shellwords.model.yml | 6 ++++++ .../CommandInjection.expected | 21 ------------------- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml index ec3f0430dbaf..283b1daa8fa3 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml +++ b/ruby/ql/lib/codeql/ruby/frameworks/stdlib/Shellwords.model.yml @@ -4,3 +4,9 @@ extensions: extensible: summaryModel data: - ['Shellwords!', 'Method[escape,shellescape]', 'Argument[0]', 'ReturnValue', 'taint'] + + - addsTo: + pack: codeql/ruby-all + extensible: barrierModel + data: + - ['Shellwords!', 'Method[escape,shellescape].ReturnValue', 'command-injection'] diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected index 59881ddff97e..34d75aa6431a 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected @@ -4,8 +4,6 @@ | CommandInjection.rb:10:14:10:16 | cmd | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:10:14:10:16 | cmd | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:11:17:11:22 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:11:17:11:22 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:13:9:13:14 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:13:9:13:14 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:18:15:18:27 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:18:15:18:27 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | -| CommandInjection.rb:21:15:21:27 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:21:15:21:27 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:30:19:30:24 | #{...} | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:30:19:30:24 | #{...} | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:34:24:34:36 | "echo #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:34:24:34:36 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | | CommandInjection.rb:35:39:35:51 | "grep #{...}" | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:35:39:35:51 | "grep #{...}" | This command depends on a $@. | CommandInjection.rb:6:15:6:20 | call to params | user-provided value | @@ -24,19 +22,11 @@ edges | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:10:14:10:16 | cmd | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:11:17:11:22 | #{...} | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:13:9:13:14 | #{...} | provenance | | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:17:40:17:42 | cmd | provenance | | -| CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:20:45:20:47 | cmd | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:30:19:30:24 | #{...} | provenance | | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:34:24:34:36 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:6:9:6:11 | cmd | CommandInjection.rb:35:39:35:51 | "grep #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:6:15:6:20 | call to params | CommandInjection.rb:6:15:6:26 | ...[...] | provenance | | | CommandInjection.rb:6:15:6:26 | ...[...] | CommandInjection.rb:6:9:6:11 | cmd | provenance | | -| CommandInjection.rb:17:9:17:18 | safe_cmd_1 | CommandInjection.rb:18:15:18:27 | #{...} | provenance | | -| CommandInjection.rb:17:22:17:43 | call to escape | CommandInjection.rb:17:9:17:18 | safe_cmd_1 | provenance | | -| CommandInjection.rb:17:40:17:42 | cmd | CommandInjection.rb:17:22:17:43 | call to escape | provenance | MaD:3 | -| CommandInjection.rb:20:9:20:18 | safe_cmd_2 | CommandInjection.rb:21:15:21:27 | #{...} | provenance | | -| CommandInjection.rb:20:22:20:48 | call to shellescape | CommandInjection.rb:20:9:20:18 | safe_cmd_2 | provenance | | -| CommandInjection.rb:20:45:20:47 | cmd | CommandInjection.rb:20:22:20:48 | call to shellescape | provenance | MaD:3 | | CommandInjection.rb:47:9:47:11 | cmd | CommandInjection.rb:51:24:51:36 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:47:15:47:20 | call to params | CommandInjection.rb:47:15:47:26 | ...[...] | provenance | | | CommandInjection.rb:47:15:47:26 | ...[...] | CommandInjection.rb:47:9:47:11 | cmd | provenance | | @@ -58,7 +48,6 @@ edges models | 1 | Sink: Terrapin::CommandLine!; Method[new].Argument[0]; command-injection | | 2 | Sink: Terrapin::CommandLine!; Method[new].Argument[1]; command-injection | -| 3 | Summary: Shellwords!; Method[escape,shellescape]; Argument[0]; ReturnValue; taint | nodes | CommandInjection.rb:6:9:6:11 | cmd | semmle.label | cmd | | CommandInjection.rb:6:15:6:20 | call to params | semmle.label | call to params | @@ -68,14 +57,6 @@ nodes | CommandInjection.rb:10:14:10:16 | cmd | semmle.label | cmd | | CommandInjection.rb:11:17:11:22 | #{...} | semmle.label | #{...} | | CommandInjection.rb:13:9:13:14 | #{...} | semmle.label | #{...} | -| CommandInjection.rb:17:9:17:18 | safe_cmd_1 | semmle.label | safe_cmd_1 | -| CommandInjection.rb:17:22:17:43 | call to escape | semmle.label | call to escape | -| CommandInjection.rb:17:40:17:42 | cmd | semmle.label | cmd | -| CommandInjection.rb:18:15:18:27 | #{...} | semmle.label | #{...} | -| CommandInjection.rb:20:9:20:18 | safe_cmd_2 | semmle.label | safe_cmd_2 | -| CommandInjection.rb:20:22:20:48 | call to shellescape | semmle.label | call to shellescape | -| CommandInjection.rb:20:45:20:47 | cmd | semmle.label | cmd | -| CommandInjection.rb:21:15:21:27 | #{...} | semmle.label | #{...} | | CommandInjection.rb:30:19:30:24 | #{...} | semmle.label | #{...} | | CommandInjection.rb:34:24:34:36 | "echo #{...}" | semmle.label | "echo #{...}" | | CommandInjection.rb:35:39:35:51 | "grep #{...}" | semmle.label | "grep #{...}" | @@ -107,6 +88,4 @@ nodes | CommandInjection.rb:114:44:114:54 | ...[...] | semmle.label | ...[...] | subpaths testFailures -| CommandInjection.rb:18:15:18:27 | #{...} | Unexpected result: Alert | -| CommandInjection.rb:21:15:21:27 | #{...} | Unexpected result: Alert | | CommandInjection.rb:107:16:107:40 | "cat #{...}" | Unexpected result: Alert | From eb7f1989c72149ebea41f242ee8998ff1174970f Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 12:43:22 +0000 Subject: [PATCH 139/243] Reinstate ql model for `String#shellescape` --- .../ruby/security/CommandInjectionCustomizations.qll | 10 ++++++++++ .../cwe-078/CommandInjection/CommandInjection.expected | 9 --------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll index b1001b372e2a..479907d2052d 100644 --- a/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/CommandInjectionCustomizations.qll @@ -42,6 +42,16 @@ module CommandInjection { SystemCommandExecutionSink() { exists(SystemCommandExecution c | c.isShellInterpreted(this)) } } + /** + * A call to `String#shellescape` sanitizes its input. + */ + class ShellwordsEscapeAsSanitizer extends Sanitizer { + ShellwordsEscapeAsSanitizer() { + // The `Shellwords.shellescape` method is also added as `String#shellescape`. + this.(DataFlow::CallNode).getMethodName() = "shellescape" + } + } + private class ExternalCommandInjectionSink extends Sink { ExternalCommandInjectionSink() { ModelOutput::sinkNode(this, "command-injection") } } diff --git a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected index 34d75aa6431a..2173fed576a2 100644 --- a/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-078/CommandInjection/CommandInjection.expected @@ -13,7 +13,6 @@ | CommandInjection.rb:83:14:83:34 | "echo #{...}" | CommandInjection.rb:82:23:82:33 | blah_number | CommandInjection.rb:83:14:83:34 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:82:23:82:33 | blah_number | user-provided value | | CommandInjection.rb:92:14:92:39 | "echo #{...}" | CommandInjection.rb:92:22:92:37 | ...[...] | CommandInjection.rb:92:14:92:39 | "echo #{...}" | This command depends on a $@. | CommandInjection.rb:92:22:92:37 | ...[...] | user-provided value | | CommandInjection.rb:105:16:105:28 | "cat #{...}" | CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:105:16:105:28 | "cat #{...}" | This command depends on a $@. | CommandInjection.rb:104:16:104:21 | call to params | user-provided value | -| CommandInjection.rb:107:16:107:40 | "cat #{...}" | CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:107:16:107:40 | "cat #{...}" | This command depends on a $@. | CommandInjection.rb:104:16:104:21 | call to params | user-provided value | | CommandInjection.rb:112:33:112:44 | ...[...] | CommandInjection.rb:112:33:112:38 | call to params | CommandInjection.rb:112:33:112:44 | ...[...] | This command depends on a $@. | CommandInjection.rb:112:33:112:38 | call to params | user-provided value | | CommandInjection.rb:114:41:114:56 | "#{...}" | CommandInjection.rb:114:44:114:49 | call to params | CommandInjection.rb:114:41:114:56 | "#{...}" | This command depends on a $@. | CommandInjection.rb:114:44:114:49 | call to params | user-provided value | edges @@ -37,11 +36,8 @@ edges | CommandInjection.rb:82:23:82:33 | blah_number | CommandInjection.rb:83:14:83:34 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:92:22:92:37 | ...[...] | CommandInjection.rb:92:14:92:39 | "echo #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:104:9:104:12 | file | CommandInjection.rb:105:16:105:28 | "cat #{...}" | provenance | AdditionalTaintStep | -| CommandInjection.rb:104:9:104:12 | file | CommandInjection.rb:107:23:107:26 | file | provenance | | | CommandInjection.rb:104:16:104:21 | call to params | CommandInjection.rb:104:16:104:28 | ...[...] | provenance | | | CommandInjection.rb:104:16:104:28 | ...[...] | CommandInjection.rb:104:9:104:12 | file | provenance | | -| CommandInjection.rb:107:23:107:26 | file | CommandInjection.rb:107:23:107:38 | call to shellescape | provenance | | -| CommandInjection.rb:107:23:107:38 | call to shellescape | CommandInjection.rb:107:16:107:40 | "cat #{...}" | provenance | AdditionalTaintStep | | CommandInjection.rb:112:33:112:38 | call to params | CommandInjection.rb:112:33:112:44 | ...[...] | provenance | Sink:MaD:1 | | CommandInjection.rb:114:44:114:49 | call to params | CommandInjection.rb:114:44:114:54 | ...[...] | provenance | | | CommandInjection.rb:114:44:114:54 | ...[...] | CommandInjection.rb:114:41:114:56 | "#{...}" | provenance | AdditionalTaintStep Sink:MaD:2 | @@ -78,14 +74,9 @@ nodes | CommandInjection.rb:104:16:104:21 | call to params | semmle.label | call to params | | CommandInjection.rb:104:16:104:28 | ...[...] | semmle.label | ...[...] | | CommandInjection.rb:105:16:105:28 | "cat #{...}" | semmle.label | "cat #{...}" | -| CommandInjection.rb:107:16:107:40 | "cat #{...}" | semmle.label | "cat #{...}" | -| CommandInjection.rb:107:23:107:26 | file | semmle.label | file | -| CommandInjection.rb:107:23:107:38 | call to shellescape | semmle.label | call to shellescape | | CommandInjection.rb:112:33:112:38 | call to params | semmle.label | call to params | | CommandInjection.rb:112:33:112:44 | ...[...] | semmle.label | ...[...] | | CommandInjection.rb:114:41:114:56 | "#{...}" | semmle.label | "#{...}" | | CommandInjection.rb:114:44:114:49 | call to params | semmle.label | call to params | | CommandInjection.rb:114:44:114:54 | ...[...] | semmle.label | ...[...] | subpaths -testFailures -| CommandInjection.rb:107:16:107:40 | "cat #{...}" | Unexpected result: Alert | From 1bff7a3eb8cc6ccb7ab6d79023efc6e58637c085 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Tue, 17 Feb 2026 22:29:35 +0000 Subject: [PATCH 140/243] Add change note --- .../2026-02-17-flow-through-shellwords-escape-shellescape.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ruby/ql/lib/change-notes/2026-02-17-flow-through-shellwords-escape-shellescape.md diff --git a/ruby/ql/lib/change-notes/2026-02-17-flow-through-shellwords-escape-shellescape.md b/ruby/ql/lib/change-notes/2026-02-17-flow-through-shellwords-escape-shellescape.md new file mode 100644 index 000000000000..43042f553f69 --- /dev/null +++ b/ruby/ql/lib/change-notes/2026-02-17-flow-through-shellwords-escape-shellescape.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* We now track taint flow through `Shellwords.escape` and `Shellwords.shellescape` for all queries except command injection, for which they are sanitizers. From 93d417049c4196d0dddc7cd58959c5c57c5505b6 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 18 Feb 2026 08:41:13 +0100 Subject: [PATCH 141/243] C#: Add tests for `Equals` methods with nullable parameter types --- .../NullableTest.cs | 86 +++++++++++++++++++ .../IncorrectEqualsSignature/NullableTest.cs | 86 +++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/NullableTest.cs create mode 100644 csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/NullableTest.cs diff --git a/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/NullableTest.cs b/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/NullableTest.cs new file mode 100644 index 000000000000..a66ffbec9a0f --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/ClassDoesNotImplementEquals/NullableTest.cs @@ -0,0 +1,86 @@ +using System; + +#nullable enable + +namespace Test +{ + class TestClass1 : IEquatable + { + private int field1; + + public bool Equals(TestClass1? param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object? param2) + { + return param2 is TestClass1 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } + + class TestClass2 : IEquatable + { + private int field1; + + public bool Equals(TestClass2 param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object? param2) + { + return param2 is TestClass2 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } + + class TestClass3 : IEquatable + { + private int field1; + + public bool Equals(TestClass3? param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object param2) + { + return param2 is TestClass3 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } + + class TestClass4 : IEquatable + { + private int field1; + + public bool Equals(TestClass4 param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object param2) + { + return param2 is TestClass4 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } +} \ No newline at end of file diff --git a/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/NullableTest.cs b/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/NullableTest.cs new file mode 100644 index 000000000000..a66ffbec9a0f --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/IncorrectEqualsSignature/NullableTest.cs @@ -0,0 +1,86 @@ +using System; + +#nullable enable + +namespace Test +{ + class TestClass1 : IEquatable + { + private int field1; + + public bool Equals(TestClass1? param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object? param2) + { + return param2 is TestClass1 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } + + class TestClass2 : IEquatable + { + private int field1; + + public bool Equals(TestClass2 param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object? param2) + { + return param2 is TestClass2 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } + + class TestClass3 : IEquatable + { + private int field1; + + public bool Equals(TestClass3? param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object param2) + { + return param2 is TestClass3 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } + + class TestClass4 : IEquatable + { + private int field1; + + public bool Equals(TestClass4 param1) + { + return param1 != null && field1 == param1.field1; + } + + public override bool Equals(object param2) + { + return param2 is TestClass4 tc && Equals(tc); + } + + public override int GetHashCode() + { + return field1; + } + } +} \ No newline at end of file From 116f5a253c4ce388b56f0b5a2eb7a6b16d545842 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 18 Feb 2026 12:22:01 +0100 Subject: [PATCH 142/243] Bazel: Update Rust toolchain to nightly/2026-01-22 and rules_rust to 0.68.1.codeql.1 Update the Rust nightly toolchain from nightly/2025-08-01 to nightly/2026-01-22 (rustc 1.95.0-nightly), and rules_rust from 0.66.0 to 0.68.1.codeql.1. The new nightly changed how stdlib metadata is distributed: .rlib files now contain only a metadata stub, with full metadata in separate .rmeta files. rules_rust's stdlib glob doesn't include *.rmeta, causing 'only metadata stub found' errors. This is patched via a custom registry entry (0.68.1.codeql.1). Upstream bug: https://github.com/bazelbuild/rules_rust/issues/3859 --- MODULE.bazel | 44 ++--- .../rules_rust/0.68.1.codeql.1/MODULE.bazel | 151 ++++++++++++++++++ .../patches/include_rmeta_in_stdlib.patch | 12 ++ .../rules_rust/0.68.1.codeql.1/source.json | 9 ++ .../registry/modules/rules_rust/metadata.json | 11 ++ .../src/nightly-toolchain/rust-toolchain.toml | 2 +- rust/ql/test/rust-toolchain.toml | 2 +- 7 files changed, 207 insertions(+), 24 deletions(-) create mode 100644 misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel create mode 100644 misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch create mode 100644 misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json create mode 100644 misc/bazel/registry/modules/rules_rust/metadata.json diff --git a/MODULE.bazel b/MODULE.bazel index 9b326127ce7b..5ace37479cb4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -28,7 +28,7 @@ bazel_dep(name = "rules_kotlin", version = "2.2.0-codeql.1") bazel_dep(name = "gazelle", version = "0.40.0") bazel_dep(name = "rules_dotnet", version = "0.21.5-codeql.1") bazel_dep(name = "googletest", version = "1.14.0.bcr.1") -bazel_dep(name = "rules_rust", version = "0.66.0") +bazel_dep(name = "rules_rust", version = "0.68.1.codeql.1") bazel_dep(name = "zstd", version = "1.5.5.bcr.1") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True) @@ -41,7 +41,7 @@ RUST_EDITION = "2024" # a nightly toolchain is required to enable experimental_use_cc_common_link, which we require internally # we prefer to run the same version as internally, even if experimental_use_cc_common_link is not really # required in this repo -RUST_VERSION = "nightly/2025-08-01" +RUST_VERSION = "nightly/2026-01-22" rust = use_extension("@rules_rust//rust:extensions.bzl", "rust") rust.toolchain( @@ -53,26 +53,26 @@ rust.toolchain( ], # generated by buildutils-internal/scripts/fill-rust-sha256s.py (internal repo) sha256s = { - "2025-08-01/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "9bbeaf5d3fc7247d31463a9083aa251c995cc50662c8219e7a2254d76a72a9a4", - "2025-08-01/rustc-nightly-x86_64-apple-darwin.tar.xz": "c9ea539a8eff0d5d162701f99f9e1aabe14dd0dfb420d62362817a5d09219de7", - "2025-08-01/rustc-nightly-aarch64-apple-darwin.tar.xz": "ae83feebbc39cfd982e4ecc8297731fe79c185173aee138467b334c5404b3773", - "2025-08-01/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "9f170c30d802a349be60cf52ec46260802093cb1013ad667fc0d528b7b10152f", - "2025-08-01/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "9ae5f3cd8f557c4f6df522597c69d14398cf604cfaed2b83e767c4b77a7eaaf6", - "2025-08-01/clippy-nightly-x86_64-apple-darwin.tar.xz": "983cb9ee0b6b968188e04ab2d33743d54764b2681ce565e1b3f2b9135c696a3e", - "2025-08-01/clippy-nightly-aarch64-apple-darwin.tar.xz": "ed2219dbc49d088225e1b7c5c4390fa295066e071fddaa2714018f6bb39ddbf0", - "2025-08-01/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "911f40ab5cbdd686f40e00965271fe47c4805513a308ed01f30eafb25b448a50", - "2025-08-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "106463c284e48e4904c717471eeec2be5cc83a9d2cae8d6e948b52438cad2e69", - "2025-08-01/cargo-nightly-x86_64-apple-darwin.tar.xz": "6ad35c40efc41a8c531ea43235058347b6902d98a9693bf0aed7fc16d5590cef", - "2025-08-01/cargo-nightly-aarch64-apple-darwin.tar.xz": "dd28c365e9d298abc3154c797720ad36a0058f131265c9978b4c8e4e37012c8a", - "2025-08-01/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "7b431286e12d6b3834b038f078389a00cac73f351e8c3152b2504a3c06420b3b", - "2025-08-01/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "e342e305d7927cc288d386983b2bc253cfad3776b113386e903d0b302648ef47", - "2025-08-01/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "e44dd3506524d85c37b3a54bcc91d01378fd2c590b2db5c5974d12f05c1b84d1", - "2025-08-01/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "0c1b5f46dd81be4a9227b10283a0fcaa39c14fea7e81aea6fd6d9887ff6cdc41", - "2025-08-01/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "423e5fd11406adccbc31b8456ceb7375ce055cdf45e90d2c3babeb2d7f58383f", - "2025-08-01/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "3c0ceb46a252647a1d4c7116d9ccae684fa5e42aaf3296419febd2c962c3b41d", - "2025-08-01/rust-std-nightly-x86_64-apple-darwin.tar.xz": "3be416003cab10f767390a753d1d16ae4d26c7421c03c98992cf1943e5b0efe8", - "2025-08-01/rust-std-nightly-aarch64-apple-darwin.tar.xz": "4046ac0ef951cb056b5028a399124f60999fa37792eab69d008d8d7965f389b4", - "2025-08-01/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "191ed9d8603c3a4fe5a7bbbc2feb72049078dae2df3d3b7d5dedf3abbf823e6e", + "2026-01-22/rustc-nightly-x86_64-unknown-linux-gnu.tar.xz": "88db619323cc1321630d124efa51ed02fabc5e020f08cfa0eda2c0ac1afbe69a", + "2026-01-22/rustc-nightly-x86_64-apple-darwin.tar.xz": "08484da3fa38db56f93629aeabdc0ae9ff8ed9704c0792d35259cbc849b3f54c", + "2026-01-22/rustc-nightly-aarch64-apple-darwin.tar.xz": "a39c0b21b7058e364ea1bd43144e42e4bf1efade036b2e82455f2afce194ee81", + "2026-01-22/rustc-nightly-x86_64-pc-windows-msvc.tar.xz": "d00248ee9850dbb6932b2578e32ff74fc7c429854c1aa071066ca31b65385a3b", + "2026-01-22/clippy-nightly-x86_64-unknown-linux-gnu.tar.xz": "70656a0ce994ffff16d5a35a7b170a0acd41e9bb54a589c96ed45bf97b094a4d", + "2026-01-22/clippy-nightly-x86_64-apple-darwin.tar.xz": "fe242519fa961522734733009705aec3c2d9a20cc57291f2aa614e5e6262c88f", + "2026-01-22/clippy-nightly-aarch64-apple-darwin.tar.xz": "38bb226363ec97c9722edf966cd58774a683e19fd2ff2a6030094445d51e06f9", + "2026-01-22/clippy-nightly-x86_64-pc-windows-msvc.tar.xz": "6da9b4470beea67abfebf046f141eee0d2a8db7c7a9e4e2294478734fd477228", + "2026-01-22/cargo-nightly-x86_64-unknown-linux-gnu.tar.xz": "99004e9d10c43a01499642f53bb3184d41137a95d65bfb217098840a9e79e892", + "2026-01-22/cargo-nightly-x86_64-apple-darwin.tar.xz": "6e021394cf8d8400ac6cfdfcef24e4d74f988e91eb8028b36de3a64ce3502990", + "2026-01-22/cargo-nightly-aarch64-apple-darwin.tar.xz": "4b2494cb69ab64132cddbc411a38ea9f1105e54d6f986e43168d54f79510c673", + "2026-01-22/cargo-nightly-x86_64-pc-windows-msvc.tar.xz": "c36613cf57407212d10d37b76e49a60ff42336e953cdff9e177283f530a83fc1", + "2026-01-22/llvm-tools-nightly-x86_64-unknown-linux-gnu.tar.xz": "0b123c5027dbd833aae6845ffe9bd07d309bf798746a7176aadaea68fbcbd05d", + "2026-01-22/llvm-tools-nightly-x86_64-apple-darwin.tar.xz": "a47864491ad5619158c950ab7570fb6e487d5117338585c27334d45824b406d8", + "2026-01-22/llvm-tools-nightly-aarch64-apple-darwin.tar.xz": "db9bc826d6e2e7e914505d50157682e516ceb90357e83d77abddc32c2d962f41", + "2026-01-22/llvm-tools-nightly-x86_64-pc-windows-msvc.tar.xz": "ffaa406932b2fe62e01dad61cf4ed34860a5d2a6f9306ca340d79e630d930039", + "2026-01-22/rust-std-nightly-x86_64-unknown-linux-gnu.tar.xz": "e9c0d5e06e18a4b509391b3088f29293e310cdc8ccc865be8fa3f09733326925", + "2026-01-22/rust-std-nightly-x86_64-apple-darwin.tar.xz": "25d75995cee679a4828ca9fe48c5a31a67c3b0846018440ef912e5a6208f53f6", + "2026-01-22/rust-std-nightly-aarch64-apple-darwin.tar.xz": "e4132bf3f2eed4684c86756a02315bcf481c23e675e3e25630fc604c9cb4594c", + "2026-01-22/rust-std-nightly-x86_64-pc-windows-msvc.tar.xz": "961bb535ef95ae8a5fa4e224cb94aff190f155c45a9bcf7a53e184b024aa41b1", }, versions = [RUST_VERSION], ) diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel new file mode 100644 index 000000000000..aedc5a8a242e --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/MODULE.bazel @@ -0,0 +1,151 @@ +"""bazelbuild/rules_rust""" + +module( + name = "rules_rust", + version = "0.68.1.codeql.1", +) + +############################################################################### +## Core +############################################################################### + +bazel_dep(name = "bazel_features", version = "1.32.0") +bazel_dep(name = "bazel_skylib", version = "1.8.2") +bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "rules_cc", version = "0.2.4") +bazel_dep(name = "rules_license", version = "1.0.0") +bazel_dep(name = "rules_shell", version = "0.6.1") +bazel_dep(name = "apple_support", version = "1.24.1", repo_name = "build_bazel_apple_support") + +internal_deps = use_extension("//rust/private:internal_extensions.bzl", "i") +use_repo( + internal_deps, + "rrra", + "rrra__anyhow-1.0.71", + "rrra__camino-1.1.9", + "rrra__clap-4.3.11", + "rrra__env_logger-0.10.0", + "rrra__itertools-0.11.0", + "rrra__log-0.4.19", + "rrra__serde-1.0.171", + "rrra__serde_json-1.0.102", + "rules_rust_tinyjson", +) + +cargo_internal_deps = use_extension("//cargo/private:internal_extensions.bzl", "i") +use_repo( + cargo_internal_deps, + "rrc", + "rrc__cargo-util-schemas-0.3.1", + "rrc__cargo_toml-0.20.5", + "rrc__pathdiff-0.1.0", + "rrc__semver-1.0.25", + "rrc__toml-0.8.20", +) + +rust = use_extension("//rust:extensions.bzl", "rust") +rust.toolchain(edition = "2021") +use_repo(rust, "rust_toolchains") + +register_toolchains( + "@rust_toolchains//:all", +) + +rust_host_tools = use_extension("//rust:extensions.bzl", "rust_host_tools") +rust_host_tools.host_tools( + name = "rust_host_tools", +) +use_repo( + rust_host_tools, + "rust_host_tools", +) + +rust_test = use_extension("//test:test_extensions.bzl", "rust_test", dev_dependency = True) +use_repo( + rust_test, + "buildkite_config", + "generated_inputs_in_external_repo", + "libc", + "rtra", + "rtra__serde-1.0.228", + "rtra__serde_json-1.0.145", + "rtvsc", + "rtvsc__serde-1.0.228", + "rtvsc__serde_json-1.0.145", + "rules_rust_test_load_arbitrary_tool", + "rules_rust_toolchain_test_target_json", +) + +bazel_dep(name = "rules_python", version = "0.40.0", dev_dependency = True) +bazel_dep(name = "rules_testing", version = "0.7.0", dev_dependency = True) +bazel_dep(name = "bazel_ci_rules", version = "1.0.0", dev_dependency = True) + +############################################################################### +## Crate Universe +############################################################################### + +crate_universe_internal_deps = use_extension( + "//crate_universe/private:internal_extensions.bzl", + "cu", +) +use_repo( + crate_universe_internal_deps, + "cargo_bazel.buildifier-darwin-amd64", + "cargo_bazel.buildifier-darwin-arm64", + "cargo_bazel.buildifier-linux-amd64", + "cargo_bazel.buildifier-linux-arm64", + "cargo_bazel.buildifier-windows-amd64.exe", + "cui", + "cui__anyhow-1.0.98", + "cui__camino-1.1.9", + "cui__cargo-lock-10.1.0", + "cui__cargo-platform-0.1.9", + "cui__cargo_metadata-0.19.2", + "cui__cargo_toml-0.22.1", + "cui__cfg-expr-0.18.0", + "cui__clap-4.5.37", + "cui__crates-index-3.7.0", + "cui__glob-0.3.2", + "cui__hex-0.4.3", + "cui__indoc-2.0.6", + "cui__itertools-0.14.0", + "cui__maplit-1.0.2", + "cui__normpath-1.3.0", + "cui__once_cell-1.21.3", + "cui__pathdiff-0.2.3", + "cui__regex-1.11.1", + "cui__semver-1.0.26", + "cui__serde-1.0.219", + "cui__serde_json-1.0.140", + "cui__serde_starlark-0.1.17", + "cui__sha2-0.10.8", + "cui__spdx-0.10.8", + "cui__tempfile-3.19.1", + "cui__tera-1.20.0", + "cui__textwrap-0.16.2", + "cui__toml-0.8.21", + "cui__tracing-0.1.41", + "cui__tracing-subscriber-0.3.19", + "cui__url-2.5.4", + "cui__walkdir-2.5.0", +) + +crate_universe_internal_non_repro_deps = use_extension( + "//crate_universe/private:internal_extensions.bzl", + "cu_nr", +) +use_repo( + crate_universe_internal_non_repro_deps, + "cargo_bazel_bootstrap", +) + +crate_universe_internal_dev_deps = use_extension( + "//crate_universe/private:internal_extensions.bzl", + "cu_dev", + dev_dependency = True, +) +use_repo( + crate_universe_internal_dev_deps, + "cross_rs", + "cross_rs_host_bin", +) diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch new file mode 100644 index 000000000000..3707cb51b636 --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/patches/include_rmeta_in_stdlib.patch @@ -0,0 +1,12 @@ +diff --git a/rust/private/repository_utils.bzl b/rust/private/repository_utils.bzl +index 05b741947..f88074af6 100644 +--- a/rust/private/repository_utils.bzl ++++ b/rust/private/repository_utils.bzl +@@ -280,6 +280,7 @@ rust_stdlib_filegroup( + srcs = glob( + [ + "lib/rustlib/{target_triple}/lib/*.rlib", ++ "lib/rustlib/{target_triple}/lib/*.rmeta", + "lib/rustlib/{target_triple}/lib/*{dylib_ext}*", + "lib/rustlib/{target_triple}/lib/*{staticlib_ext}", + "lib/rustlib/{target_triple}/lib/self-contained/**", diff --git a/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json new file mode 100644 index 000000000000..6048521ce2fd --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/0.68.1.codeql.1/source.json @@ -0,0 +1,9 @@ +{ + "integrity": "sha256-yKqAbPYGZnmsI0YyQe6ArWkiZdrQRl9RERy74wuJA1I=", + "strip_prefix": "", + "url": "https://github.com/bazelbuild/rules_rust/releases/download/0.68.1/rules_rust-0.68.1.tar.gz", + "patches": { + "include_rmeta_in_stdlib.patch": "sha256-7n8XHpfkLUMEbRG6lKqdhLWydsWlRRG+Ywkxk6LvY9c=" + }, + "patch_strip": 1 +} diff --git a/misc/bazel/registry/modules/rules_rust/metadata.json b/misc/bazel/registry/modules/rules_rust/metadata.json new file mode 100644 index 000000000000..deffe6f6dfad --- /dev/null +++ b/misc/bazel/registry/modules/rules_rust/metadata.json @@ -0,0 +1,11 @@ +{ + "homepage": "https://github.com/bazelbuild/rules_rust", + "maintainers": [], + "repository": [ + "github:bazelbuild/rules_rust" + ], + "versions": [ + "0.68.1.codeql.1" + ], + "yanked_versions": {} +} diff --git a/rust/extractor/src/nightly-toolchain/rust-toolchain.toml b/rust/extractor/src/nightly-toolchain/rust-toolchain.toml index 7ed21df91218..4e2d228630ef 100644 --- a/rust/extractor/src/nightly-toolchain/rust-toolchain.toml +++ b/rust/extractor/src/nightly-toolchain/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2025-06-01" +channel = "nightly-2026-01-22" components = [ "rust-src" ] diff --git a/rust/ql/test/rust-toolchain.toml b/rust/ql/test/rust-toolchain.toml index 9343bef27c61..15f54ec6b429 100644 --- a/rust/ql/test/rust-toolchain.toml +++ b/rust/ql/test/rust-toolchain.toml @@ -2,6 +2,6 @@ # IMPORTANT: this can also have an impact on QL test results [toolchain] -channel = "1.90" +channel = "1.93" profile = "minimal" components = [ "rust-src" ] From d7250a8abe4c606e3412c78f81ee9141a8898bd8 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Feb 2026 11:23:01 +0000 Subject: [PATCH 143/243] Address more non-ascii characters. --- .../test.cpp | 153 +++++++++--------- 1 file changed, 76 insertions(+), 77 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp index 28bf66b34369..850ef560536f 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp @@ -1,4 +1,4 @@ -typedef unsigned short WORD; +typedef unsigned short WORD; typedef unsigned long DWORD, HANDLE; typedef int BOOL, BOOLEAN, errno_t; typedef char CHAR; @@ -392,7 +392,7 @@ void AntiPattern_unchecked_filetime_conversion2(SYSTEMTIME* st) } /** - * Positive (Out of Scope) + * Positive (Out of Scope) * SYSTEMTIME.wDay is incremented by one (and no guard exists) */ void AntiPattern_unchecked_filetime_conversion2() @@ -409,7 +409,7 @@ void AntiPattern_unchecked_filetime_conversion2() /** * Positive Cases - * - Anti-pattern 1: [year ±n, month, day] + * - Anti-pattern 1: [year +-n, month, day] * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions */ void AntiPattern_unchecked_filetime_conversion2a() @@ -427,7 +427,7 @@ void AntiPattern_unchecked_filetime_conversion2a() /** * Positive Cases - * - Anti-pattern 1: [year ±n, month, day] + * - Anti-pattern 1: [year +-n, month, day] * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions */ void AntiPattern_unchecked_filetime_conversion2b() @@ -445,7 +445,7 @@ void AntiPattern_unchecked_filetime_conversion2b() /** * Positive Cases - * - Anti-pattern 1: [year ±n, month, day] + * - Anti-pattern 1: [year +-n, month, day] * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions */ void AntiPattern_unchecked_filetime_conversion2b(SYSTEMTIME* st) @@ -461,7 +461,7 @@ void AntiPattern_unchecked_filetime_conversion2b(SYSTEMTIME* st) /** * Positive Cases - * - Anti-pattern 3: datetime.AddDays(±28) + * - Anti-pattern 3: datetime.AddDays(+-28) * - Generic (Out of Scope) - UncheckedReturnValueForTimeFunctions */ void AntiPattern_unchecked_filetime_conversion3() @@ -472,7 +472,7 @@ void AntiPattern_unchecked_filetime_conversion3() if (st.wMonth < 12) { - // Anti-pattern 3: datetime.AddDays(±28) + // Anti-pattern 3: datetime.AddDays(+-28) st.wMonth++; } else @@ -489,7 +489,7 @@ void AntiPattern_unchecked_filetime_conversion3() ////////////////////////////////////////////// /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Year is incremented and if we are on Feb the 29th, set to the 28th if the new year is a common year. */ void CorrectPattern_check1() @@ -515,7 +515,7 @@ void CorrectPattern_check1() } /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer and then the leap year case is correctly guarded and handled. */ void CorrectPattern_check2(int yearsToAdd) @@ -542,7 +542,7 @@ bool isLeapYear(SYSTEMTIME& st) } /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer and then the leap year case is correctly guarded and handled. */ void CorrectPattern_check3() @@ -580,7 +580,7 @@ bool fixDate(int day, int month, int year) } /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer and then the leap year case is correctly guarded and handled. */ void CorrectPattern_check4() @@ -635,7 +635,7 @@ void CorrectPattern_NotManipulated_DateFromAPI_1(HANDLE hWatchdog) ///////////////////////////////////////////////////////////////// /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Year is incremented by some integer and checked through a conversion through an inter procedural function check */ void AntiPattern_1_year_addition() @@ -644,7 +644,7 @@ void AntiPattern_1_year_addition() GetSystemTime(&st); // Safe, checked interprocedurally through Correct_filetime_conversion_check - st.wYear++; + st.wYear++; // Usage of potentially invalid date Correct_filetime_conversion_check(st); @@ -653,7 +653,7 @@ void AntiPattern_1_year_addition() /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer and checked through a conversion through an inter procedural function check */ void AntiPattern_simple_addition(int yearAddition) @@ -662,14 +662,14 @@ void AntiPattern_simple_addition(int yearAddition) GetSystemTime(&st); - st.wYear += yearAddition; + st.wYear += yearAddition; // Usage of potentially invalid date Correct_filetime_conversion_check(st); } /** - * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Positive Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer but a leap year is not handled *correctly*. */ void AntiPattern_IncorrectGuard(int yearsToAdd) @@ -683,7 +683,7 @@ void AntiPattern_IncorrectGuard(int yearsToAdd) // Incorrect Guard if (st.wMonth == 2 && st.wDay == 29) { - // Part of a different anti-pattern (AntiPattern 5). + // Part of a different anti-pattern (AntiPattern 5). // Make sure the guard includes the proper check bool isLeapYear = st.wYear % 4 == 0; if (!isLeapYear) @@ -724,7 +724,7 @@ void AntiPattern_uncheckedUsageOf_mkgmtime(struct tm& timeinfo) ////////////////////////////////////////////////////////// /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer and leap year is not handled correctly. */ void Correct_year_addition_struct_tm() @@ -744,7 +744,7 @@ void Correct_year_addition_struct_tm() timeinfo.tm_year++; // Guard - // move back a day when landing on Feb 29 in an non-leap year + // move back a day when landing on Feb 29 in an non-leap year bool isLeapYear = timeinfo.tm_year % 4 == 0 && (timeinfo.tm_year % 100 != 0 || (timeinfo.tm_year + 1900) % 400 == 0); timeinfo.tm_mday = timeinfo.tm_mon == 1 && timeinfo.tm_mday == 29 && !isLeapYear ? 28 : timeinfo.tm_mday; @@ -753,7 +753,7 @@ void Correct_year_addition_struct_tm() } /** - * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Positive Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer and leap year is not handled correctly. */ void Incorrect_LinuxPattern() @@ -779,9 +779,9 @@ void Incorrect_LinuxPattern() ////////////////////////////////////////// /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] + * Negative Case - Anti-pattern 1: [year +-n, month, day] * Years is incremented by some integer and leap year is assumed checked through - * check of a conversion functions return value. + * check of a conversion functions return value. */ void AntiPattern_year_addition_struct_tm() { @@ -789,7 +789,7 @@ void AntiPattern_year_addition_struct_tm() struct tm timeinfo; time(&rawtime); gmtime_s(&timeinfo, &rawtime); - timeinfo.tm_year++; + timeinfo.tm_year++; // mkgmtime result checked in nested call here, assume leap year conversion is potentially handled CorrectUsageOf_mkgmtime(timeinfo); @@ -799,7 +799,7 @@ void AntiPattern_year_addition_struct_tm() /** - * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Positive Case - Anti-pattern 1: [year +-n, month, day] */ void test(int x) { @@ -809,12 +809,12 @@ void test(int x) timeinfo.tm_year = x; // BUG - UncheckedLeapYearAfterYearModification - // Positive Case - Anti-pattern 1: [year ±n, month, day] + // Positive Case - Anti-pattern 1: [year +-n, month, day] timeinfo.tm_year = x + timeinfo.tm_year; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] st.wYear = x; // BUG - UncheckedLeapYearAfterYearModification - // Positive Case - Anti-pattern 1: [year ±n, month, day] + // Positive Case - Anti-pattern 1: [year +-n, month, day] st.wYear = x + st.wYear; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] } @@ -848,10 +848,10 @@ void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) timestamp_remote.tm = tm_parsed; timestamp_remote.tm.tm_isdst = -1; timestamp_remote.usec = now.tv_nsec * 0.001; - for (year = tm_now.tm_year + 1;; --year) + for (year = tm_now.tm_year + 1;; --year) { // assert(year >= tm_now.tm_year - 1); - timestamp_remote.tm.tm_year = year; + timestamp_remote.tm.tm_year = year; if (mktime(×tamp_remote.tm) < t_now + 7 * 24 * 60 * 60) break; } @@ -936,7 +936,7 @@ void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) } /** - * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Positive Case - Anti-pattern 1: [year +-n, month, day] * Modification of SYSTEMTIME struct adding to year but no leap year guard is conducted. */ void modified3() @@ -954,7 +954,7 @@ void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) } /** - * Positive Case - Anti-pattern 1: [year ±n, month, day] + * Positive Case - Anti-pattern 1: [year +-n, month, day] * Modification of SYSTEMTIME struct adding to year but no leap year guard is conducted. */ void modified4() @@ -972,9 +972,9 @@ void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) } /** - * Negative Case - Anti-pattern 1: [year ±n, month, day] - * Modification of SYSTEMTIME struct adding to year but value passed to a - * conversion function that can be checked for success, and the result is checked. + * Negative Case - Anti-pattern 1: [year +-n, month, day] + * Modification of SYSTEMTIME struct adding to year but value passed to a + * conversion function that can be checked for success, and the result is checked. */ void modified5() { @@ -984,11 +984,11 @@ void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) GetSystemTime(&st); - st.wYear++; + st.wYear++; - // Presumed safe usage, as if the conversion is incorrect, a user can handle the error. + // Presumed safe usage, as if the conversion is incorrect, a user can handle the error. // NOTE: it doesn't mean the user actually does the correct conversion and it it also - // doesn't mean it will error our in all cases that may be invalid. + // doesn't mean it will error our in all cases that may be invalid. // For example, if a leap year and the date is 28, we may want 29 if the time is meant // to capture the end of the month, but 28 is still valid and will not error out. if (SystemTimeToFileTime(&st, &ft)) @@ -998,7 +998,7 @@ void tp_intermediaryVar(struct timespec now, struct logtime ×tamp_remote) } /** -* Negative Case - Anti-pattern 1: [year ±n, month, day] +* Negative Case - Anti-pattern 1: [year +-n, month, day] * Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. */ bool @@ -1018,7 +1018,7 @@ FMAPITimeToSysTimeW(LPCWSTR wszTime, SYSTEMTIME *psystime) } /** -* Negative Case - Anti-pattern 1: [year ±n, month, day] +* Negative Case - Anti-pattern 1: [year +-n, month, day] * Modification of SYSTEMTIME struct by copying from another struct, but no arithmetic is performed. */ void fp_daymonth_guard(){ @@ -1128,7 +1128,7 @@ void leap_year_checked_raw_false_positive1(WORD year, WORD offset, WORD day){ } // Assume the check handled leap year correctly - tmp.tm_year = year; // GOOD + tmp.tm_year = year; // GOOD tmp.tm_mday = day; } @@ -1313,7 +1313,7 @@ void compound_leap_year_check(WORD year, WORD offset, WORD month, WORD day){ tmp.tm_year = year + offset; bool isLeap = tmp.tm_year % 4 == 0 && (tmp.tm_year % 100 != 0 || tmp.tm_year % 400 == 0) && (month == 2 && day == 29); - + if(isLeap){ // do something } @@ -1331,7 +1331,7 @@ void indirect_time_conversion_check(WORD year, WORD offset){ // (out-of-scope) GeneralBug: Unchecked call to SystemTimeToFileTime. this may have failed, but we didn't check the return value! BOOL res = SystemTimeToFileTime(&tmp, &ft); - // Assume this check of the result is sufficient as an implicit leap year check. + // Assume this check of the result is sufficient as an implicit leap year check. bool x = (res == 0) ? true : false; } @@ -1365,10 +1365,10 @@ void constant_month_on_year_modification2(WORD year, WORD offset, WORD month){ tmp.wYear = year + 1;// OK since the year is incremented with a known non-leap year month change } - + if(month++ > 12){ // some heuristics to detect a false positive here rely on variable names - // which is often consistent in the wild. + // which is often consistent in the wild. // This variant uses the variable names yeartmp and monthtmp WORD yeartmp; WORD monthtmp; @@ -1400,7 +1400,7 @@ void intermediate_time_struct(WORD year, WORD offset){ SYSTEMTIME tm, tm2; FILETIME ftTime; - tm.wYear = year + offset; + tm.wYear = year + offset; tm2.wYear = tm.wYear; @@ -1428,7 +1428,7 @@ void constant_day_on_year_modification1(WORD year, WORD offset, WORD month){ if(month++ > 12){ // BAD, year incremented, month unknown in block, and date is set to 31 - // which is dangerous. + // which is dangerous. set_time(year+1, month, 31);// $ Source } } @@ -1460,7 +1460,7 @@ void constant_day_on_year_modification2(WORD year, WORD month){ if(month++ > 12){ // BAD, year incremented, month unknown in block, and date is set to 31 - // which is dangerous. + // which is dangerous. set_time(year, month, 31); } } @@ -1468,7 +1468,7 @@ void constant_day_on_year_modification2(WORD year, WORD month){ void modification_after_conversion1(tm timeinfo){ // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = timeinfo.tm_year + 1900; @@ -1481,7 +1481,7 @@ WORD get_civil_year(tm timeinfo){ void modification_after_conversion2(tm timeinfo){ // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = get_civil_year(timeinfo); year += 1; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] @@ -1489,14 +1489,14 @@ void modification_after_conversion2(tm timeinfo){ void modification_after_conversion_saved_to_other_time_struct1(tm timeinfo){ // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = timeinfo.tm_year + 1900; year += 1; // $ MISSING: Source SYSTEMTIME s; - // FALSE NEGATIVE: missing this because the conversion happens locally before + // FALSE NEGATIVE: missing this because the conversion happens locally before // the year adjustment, which seems as though it is part of a conversion itself s.wYear = year; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] } @@ -1505,7 +1505,7 @@ void modification_after_conversion_saved_to_other_time_struct1(tm timeinfo){ void modification_after_conversion_saved_to_other_time_struct2(tm timeinfo){ // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = get_civil_year(timeinfo); @@ -1517,25 +1517,25 @@ void modification_after_conversion_saved_to_other_time_struct2(tm timeinfo){ void modification_after_conversion_saved_to_other_time_struct3(tm timeinfo){ // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = timeinfo.tm_year + 1900; year = year + 1; // $ MISSING: Source SYSTEMTIME s; - // FALSE NEGATIVE: missing this because the conversion happens locally before + // FALSE NEGATIVE: missing this because the conversion happens locally before // the year adjustment, which seems as though it is part of a conversion itself s.wYear = year; // $ MISSING: Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] } void year_saved_to_variable_then_modified1(tm timeinfo){ - // A modified year is not directly assigned to the year, rather, the year is - // saved to a variable, modified, used, but never assigned back. + // A modified year is not directly assigned to the year, rather, the year is + // saved to a variable, modified, used, but never assigned back. WORD year = timeinfo.tm_year; - // NOTE: should we even try to detect cases like this? + // NOTE: should we even try to detect cases like this? // Our current rationale is that a year in a struct is more dangerous than a year in isolation // A year in isolation is harder to interpret year += 1; // MISSING: $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] @@ -1544,7 +1544,7 @@ void year_saved_to_variable_then_modified1(tm timeinfo){ void modification_before_conversion1(tm timeinfo){ timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = timeinfo.tm_year + 1900; } @@ -1552,7 +1552,7 @@ void modification_before_conversion1(tm timeinfo){ void modification_before_conversion2(tm timeinfo){ timeinfo.tm_year += 1; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = get_civil_year(timeinfo); } @@ -1560,11 +1560,11 @@ void modification_before_conversion2(tm timeinfo){ void year_saved_to_variable_then_modified_with_leap_check1(tm timeinfo){ - // A modified year is not directly assigned to the year, rather, the year is - // saved to a variable, modified, used, but never assigned back. + // A modified year is not directly assigned to the year, rather, the year is + // saved to a variable, modified, used, but never assigned back. WORD year = timeinfo.tm_year; - year += 1; + year += 1; // performing a check is considered good enough, even if not used correctly bool b = (year+1900) % 4 == 0 && ((year+1900) % 100 != 0 || (year+1900) % 400 == 0); @@ -1573,11 +1573,11 @@ void year_saved_to_variable_then_modified_with_leap_check1(tm timeinfo){ void modification_after_conversion_with_leap_check1(tm timeinfo){ // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = timeinfo.tm_year + 1900; - year += 1; + year += 1; // performing a check is considered good enough, even if not used correctly bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); @@ -1585,20 +1585,20 @@ void modification_after_conversion_with_leap_check1(tm timeinfo){ void modification_after_conversion_with_leap_check2(tm timeinfo){ // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = get_civil_year(timeinfo); - year += 1; + year += 1; // performing a check is considered good enough, even if not used correctly bool b = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); } void modification_before_conversion_with_leap_check1(tm timeinfo){ - timeinfo.tm_year += 1; + timeinfo.tm_year += 1; // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = timeinfo.tm_year + 1900; @@ -1607,9 +1607,9 @@ void modification_before_conversion_with_leap_check1(tm timeinfo){ } void modification_before_conversion_with_leap_check2(tm timeinfo){ - timeinfo.tm_year += 1; + timeinfo.tm_year += 1; // convert a tm year into a civil year, then modify after conversion - // This case shows a false negative where the year might be used and it is incorrectly modified, + // This case shows a false negative where the year might be used and it is incorrectly modified, // and never reassigned to another struct. WORD year = get_civil_year(timeinfo); @@ -1653,7 +1653,7 @@ void odd_leap_year_check3(tm timeinfo){ } void odd_leap_year_check4(tm timeinfo){ - timeinfo.tm_year += 1; + timeinfo.tm_year += 1; WORD year = timeinfo.tm_year + 1900; if( (year % 4 == 0) && (year % 100 > 0 || (year % 400 == 0))) @@ -1663,7 +1663,7 @@ void odd_leap_year_check4(tm timeinfo){ } void odd_leap_year_check5(tm timeinfo){ - timeinfo.tm_year += 1; + timeinfo.tm_year += 1; WORD year = timeinfo.tm_year + 1900; if( (year % 4 > 0) || (year % 100 == 0 && (year % 400 > 0))) @@ -1694,7 +1694,7 @@ void interproc_data_killer1(tm timeinfo, WORD delta){ WORD year = delta + 1; if(data_killer(&year)){ - timeinfo.tm_year = year; + timeinfo.tm_year = year; } } @@ -1703,18 +1703,18 @@ void leap_year_check_after_normalization(tm timeinfo, WORD delta){ WORD year = delta + 1; if(data_killer(&year)){ - timeinfo.tm_year = year; + timeinfo.tm_year = year; } } void leap_year_check_call_on_conversion1(tm timeinfo){ - timeinfo.tm_year += 1; + timeinfo.tm_year += 1; isLeapYearRaw(timeinfo.tm_year + 1900); } void leap_year_check_call_on_conversion2(tm timeinfo){ - timeinfo.tm_year += 1; + timeinfo.tm_year += 1; WORD year = get_civil_year(timeinfo); isLeapYearRaw(year); } @@ -1724,7 +1724,7 @@ WORD getDaysInMonth(WORD year, WORD month){ if(month == 2){ return isLeapYearRaw(year) ? 29 : 28; } - // else assume logic for every other month, + // else assume logic for every other month, // returning 30 for simplicity return 30; } @@ -1758,4 +1758,3 @@ void bad_leap_year_check_logic1(tm timeinfo){ //(year % 4) && ((year % 100) || !(year % 400 ))) WORD days = (!(year % 4) && (!(year % 100) || (year % 400))) ? 366 : 365; } - From 3d4785f29f9794c5e8610daf448092de3bcd861d Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 18 Feb 2026 12:51:35 +0000 Subject: [PATCH 144/243] Python: Add change note --- .../lib/change-notes/2026-02-18-add-overlay-annotations.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2026-02-18-add-overlay-annotations.md diff --git a/python/ql/lib/change-notes/2026-02-18-add-overlay-annotations.md b/python/ql/lib/change-notes/2026-02-18-add-overlay-annotations.md new file mode 100644 index 000000000000..5e9ceb0d753d --- /dev/null +++ b/python/ql/lib/change-notes/2026-02-18-add-overlay-annotations.md @@ -0,0 +1,5 @@ +--- +category: majorAnalysis +--- + +- The CodeQL Python libraries have been updated to be compatible with overlay evaluation. This should result in a significant speedup on analyses for which a base database already exists. Note that it may be necessary to add `overlay[local?] module;` to user-managed libraries that extend classes that are now marked as `overlay[local]`. From 24f3d9ede0653357329ba38e3768b319e38f2ddd Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 18 Feb 2026 13:56:48 +0100 Subject: [PATCH 145/243] Revert rust-toolchain.toml changes and update test expectations --- .../src/nightly-toolchain/rust-toolchain.toml | 2 +- .../NeverTypeRepr/NeverTypeRepr.expected | 1 - .../controlflow/BasicBlocks.expected | 4 --- .../library-tests/controlflow/Cfg.expected | 20 +++------------ .../type-inference/type-inference.expected | 25 +++++++++++++++++++ rust/ql/test/rust-toolchain.toml | 2 +- 6 files changed, 31 insertions(+), 23 deletions(-) diff --git a/rust/extractor/src/nightly-toolchain/rust-toolchain.toml b/rust/extractor/src/nightly-toolchain/rust-toolchain.toml index 4e2d228630ef..7ed21df91218 100644 --- a/rust/extractor/src/nightly-toolchain/rust-toolchain.toml +++ b/rust/extractor/src/nightly-toolchain/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2026-01-22" +channel = "nightly-2025-06-01" components = [ "rust-src" ] diff --git a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected index 7e8d7f8718b1..c02b6c823544 100644 --- a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected @@ -1,2 +1 @@ | gen_never_type_repr.rs:7:17:7:17 | ! | -| gen_never_type_repr.rs:7:21:7:26 | ! | diff --git a/rust/ql/test/library-tests/controlflow/BasicBlocks.expected b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected index 80357ae29f86..94760d6875e1 100644 --- a/rust/ql/test/library-tests/controlflow/BasicBlocks.expected +++ b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected @@ -743,7 +743,6 @@ dominates | test.rs:529:5:537:5 | enter fn const_block_assert | test.rs:533:21:533:48 | [boolean(true)] ! ... | | test.rs:529:5:537:5 | enter fn const_block_assert | test.rs:533:21:533:48 | if ... {...} | | test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | ExprStmt | -| test.rs:533:13:533:19 | enter fn panic_cold_explicit | test.rs:533:13:533:19 | enter fn panic_cold_explicit | | test.rs:533:21:533:48 | [boolean(false)] ! ... | test.rs:533:21:533:48 | [boolean(false)] ! ... | | test.rs:533:21:533:48 | [boolean(true)] ! ... | test.rs:533:13:533:19 | ExprStmt | | test.rs:533:21:533:48 | [boolean(true)] ! ... | test.rs:533:21:533:48 | [boolean(true)] ! ... | @@ -751,7 +750,6 @@ dominates | test.rs:539:5:548:5 | enter fn const_block_panic | test.rs:539:5:548:5 | enter fn const_block_panic | | test.rs:539:5:548:5 | enter fn const_block_panic | test.rs:541:9:546:9 | if false {...} | | test.rs:541:9:546:9 | if false {...} | test.rs:541:9:546:9 | if false {...} | -| test.rs:544:17:544:22 | enter fn panic_cold_explicit | test.rs:544:17:544:22 | enter fn panic_cold_explicit | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:551:1:556:1 | enter fn dead_code | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:553:9:553:17 | ExprStmt | | test.rs:553:9:553:17 | ExprStmt | test.rs:553:9:553:17 | ExprStmt | @@ -1424,7 +1422,6 @@ postDominance | test.rs:529:5:537:5 | enter fn const_block_assert | test.rs:529:5:537:5 | enter fn const_block_assert | | test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | ExprStmt | | test.rs:533:13:533:19 | ExprStmt | test.rs:533:21:533:48 | [boolean(true)] ! ... | -| test.rs:533:13:533:19 | enter fn panic_cold_explicit | test.rs:533:13:533:19 | enter fn panic_cold_explicit | | test.rs:533:21:533:48 | [boolean(false)] ! ... | test.rs:533:21:533:48 | [boolean(false)] ! ... | | test.rs:533:21:533:48 | [boolean(true)] ! ... | test.rs:533:21:533:48 | [boolean(true)] ! ... | | test.rs:533:21:533:48 | if ... {...} | test.rs:529:5:537:5 | enter fn const_block_assert | @@ -1435,7 +1432,6 @@ postDominance | test.rs:539:5:548:5 | enter fn const_block_panic | test.rs:539:5:548:5 | enter fn const_block_panic | | test.rs:541:9:546:9 | if false {...} | test.rs:539:5:548:5 | enter fn const_block_panic | | test.rs:541:9:546:9 | if false {...} | test.rs:541:9:546:9 | if false {...} | -| test.rs:544:17:544:22 | enter fn panic_cold_explicit | test.rs:544:17:544:22 | enter fn panic_cold_explicit | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:551:1:556:1 | enter fn dead_code | | test.rs:553:9:553:17 | ExprStmt | test.rs:551:1:556:1 | enter fn dead_code | | test.rs:553:9:553:17 | ExprStmt | test.rs:553:9:553:17 | ExprStmt | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index ef97a3b628f7..25fb8f29e04c 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -1288,20 +1288,13 @@ edges | test.rs:529:41:537:5 | { ... } | test.rs:529:5:537:5 | exit fn const_block_assert (normal) | | | test.rs:532:9:534:9 | ExprStmt | test.rs:533:13:533:50 | ExprStmt | | | test.rs:532:9:534:9 | { ... } | test.rs:536:9:536:10 | 42 | | +| test.rs:533:13:533:19 | "explicit panic" | test.rs:533:13:533:19 | ...::panic(...) | | +| test.rs:533:13:533:19 | ...::panic | test.rs:533:13:533:19 | "explicit panic" | | +| test.rs:533:13:533:19 | ...::panic(...) | test.rs:533:13:533:19 | { ... } | | | test.rs:533:13:533:19 | ...::panic_2021!... | test.rs:533:13:533:19 | MacroExpr | | -| test.rs:533:13:533:19 | ...::panic_explicit | test.rs:533:13:533:19 | ...::panic_explicit(...) | | -| test.rs:533:13:533:19 | ...::panic_explicit(...) | test.rs:533:13:533:19 | { ... } | | -| test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | fn panic_cold_explicit | | -| test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | panic_cold_explicit | | +| test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | ...::panic | | | test.rs:533:13:533:19 | MacroExpr | test.rs:533:13:533:19 | { ... } | | -| test.rs:533:13:533:19 | enter fn panic_cold_explicit | test.rs:533:13:533:19 | ...::panic_explicit | | -| test.rs:533:13:533:19 | exit fn panic_cold_explicit (normal) | test.rs:533:13:533:19 | exit fn panic_cold_explicit | | -| test.rs:533:13:533:19 | fn panic_cold_explicit | test.rs:533:13:533:19 | ExprStmt | | -| test.rs:533:13:533:19 | panic_cold_explicit | test.rs:533:13:533:19 | panic_cold_explicit(...) | | -| test.rs:533:13:533:19 | panic_cold_explicit(...) | test.rs:533:13:533:19 | { ... } | | | test.rs:533:13:533:19 | { ... } | test.rs:533:13:533:19 | ...::panic_2021!... | | -| test.rs:533:13:533:19 | { ... } | test.rs:533:13:533:19 | exit fn panic_cold_explicit (normal) | | -| test.rs:533:13:533:19 | { ... } | test.rs:533:13:533:19 | { ... } | | | test.rs:533:13:533:19 | { ... } | test.rs:533:21:533:48 | if ... {...} | | | test.rs:533:13:533:49 | MacroExpr | test.rs:532:9:534:9 | { ... } | | | test.rs:533:13:533:49 | assert!... | test.rs:533:13:533:49 | MacroExpr | | @@ -1324,11 +1317,6 @@ edges | test.rs:541:9:546:9 | ExprStmt | test.rs:541:12:541:16 | false | | | test.rs:541:9:546:9 | if false {...} | test.rs:547:9:547:9 | N | | | test.rs:541:12:541:16 | false | test.rs:541:9:546:9 | if false {...} | false | -| test.rs:544:17:544:22 | ...::panic_explicit | test.rs:544:17:544:22 | ...::panic_explicit(...) | | -| test.rs:544:17:544:22 | ...::panic_explicit(...) | test.rs:544:17:544:22 | { ... } | | -| test.rs:544:17:544:22 | enter fn panic_cold_explicit | test.rs:544:17:544:22 | ...::panic_explicit | | -| test.rs:544:17:544:22 | exit fn panic_cold_explicit (normal) | test.rs:544:17:544:22 | exit fn panic_cold_explicit | | -| test.rs:544:17:544:22 | { ... } | test.rs:544:17:544:22 | exit fn panic_cold_explicit (normal) | | | test.rs:547:9:547:9 | N | test.rs:539:35:548:5 | { ... } | | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:552:5:554:5 | ExprStmt | | | test.rs:551:1:556:1 | exit fn dead_code (normal) | test.rs:551:1:556:1 | exit fn dead_code | | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 1b750fab4586..a2322cdf9292 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -788,12 +788,14 @@ inferCertainType | dereference.rs:116:5:116:5 | x | | dereference.rs:18:1:20:1 | MySmartPointer | | dereference.rs:143:19:151:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:144:17:144:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:17:144:26 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:17:144:26 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:17:144:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:144:17:144:26 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:30:144:57 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:30:144:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:30:144:57 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | @@ -804,6 +806,7 @@ inferCertainType | dereference.rs:145:24:145:29 | Key {...} | | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:9:149:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | dereference.rs:146:32:146:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:146:32:146:41 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:146:32:146:41 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:146:32:146:41 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:32:146:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -813,6 +816,7 @@ inferCertainType | dereference.rs:146:52:149:9 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:148:13:148:15 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:150:9:150:18 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:150:9:150:18 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:150:9:150:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -3350,16 +3354,20 @@ inferCertainType | main.rs:2345:13:2346:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2345:29:2346:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2349:17:2349:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2349:17:2349:20 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:17:2349:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2349:24:2349:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2349:24:2349:55 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:24:2349:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2350:9:2350:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2350:9:2350:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2350:9:2350:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2350:24:2350:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2350:24:2350:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2350:33:2350:37 | "one" | | {EXTERNAL LOCATION} | & | | main.rs:2350:33:2350:37 | "one" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2351:9:2351:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2351:9:2351:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2351:9:2351:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2351:24:2351:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2351:24:2351:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | @@ -3367,21 +3375,25 @@ inferCertainType | main.rs:2351:33:2351:37 | "two" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2352:9:2352:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2352:20:2352:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2352:20:2352:23 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2352:20:2352:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2352:32:2352:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2353:9:2353:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2353:22:2353:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2353:22:2353:25 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2353:22:2353:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2353:36:2353:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2354:9:2354:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2354:13:2354:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2354:29:2354:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2354:29:2354:32 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2354:29:2354:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2354:41:2354:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2355:9:2355:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2355:13:2355:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2355:29:2355:33 | &map1 | | {EXTERNAL LOCATION} | & | | main.rs:2355:30:2355:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2355:30:2355:33 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2355:30:2355:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2355:35:2355:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2359:17:2359:17 | a | | {EXTERNAL LOCATION} | i64 | @@ -6452,12 +6464,14 @@ inferType | dereference.rs:116:12:116:12 | 0 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:143:19:151:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:144:17:144:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:17:144:26 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:17:144:26 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:17:144:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:144:17:144:26 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:144:30:144:57 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:30:144:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:30:144:57 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | @@ -6483,6 +6497,7 @@ inferType | dereference.rs:146:21:146:27 | ref_key | TRef | {EXTERNAL LOCATION} | & | | dereference.rs:146:21:146:27 | ref_key | TRef.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:32:146:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:146:32:146:41 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:146:32:146:41 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:146:32:146:41 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:32:146:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -6508,6 +6523,7 @@ inferType | dereference.rs:148:19:148:25 | ref_key | TRef | {EXTERNAL LOCATION} | & | | dereference.rs:148:19:148:25 | ref_key | TRef.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:150:9:150:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | +| dereference.rs:150:9:150:18 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:150:9:150:18 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:150:9:150:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -11262,6 +11278,7 @@ inferType | main.rs:2345:13:2346:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2345:29:2346:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2349:17:2349:20 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2349:17:2349:20 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:17:2349:20 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2349:17:2349:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2349:17:2349:20 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11269,6 +11286,7 @@ inferType | main.rs:2349:17:2349:20 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2349:17:2349:20 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2349:24:2349:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2349:24:2349:55 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:24:2349:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | | main.rs:2349:24:2349:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2349:24:2349:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | @@ -11276,6 +11294,7 @@ inferType | main.rs:2349:24:2349:55 | ...::new(...) | V.T | {EXTERNAL LOCATION} | & | | main.rs:2349:24:2349:55 | ...::new(...) | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2350:9:2350:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2350:9:2350:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2350:9:2350:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2350:9:2350:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2350:9:2350:12 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11295,6 +11314,7 @@ inferType | main.rs:2350:33:2350:37 | "one" | | {EXTERNAL LOCATION} | & | | main.rs:2350:33:2350:37 | "one" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2351:9:2351:12 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2351:9:2351:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2351:9:2351:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2351:9:2351:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2351:9:2351:12 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11317,6 +11337,7 @@ inferType | main.rs:2352:13:2352:15 | key | | {EXTERNAL LOCATION} | & | | main.rs:2352:13:2352:15 | key | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:2352:20:2352:23 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2352:20:2352:23 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2352:20:2352:23 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2352:20:2352:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2352:20:2352:23 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11337,6 +11358,7 @@ inferType | main.rs:2353:13:2353:17 | value | TRef.T | {EXTERNAL LOCATION} | & | | main.rs:2353:13:2353:17 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2353:22:2353:25 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2353:22:2353:25 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2353:22:2353:25 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2353:22:2353:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2353:22:2353:25 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11367,6 +11389,7 @@ inferType | main.rs:2354:19:2354:23 | value | TRef.T | {EXTERNAL LOCATION} | & | | main.rs:2354:19:2354:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2354:29:2354:32 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2354:29:2354:32 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2354:29:2354:32 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2354:29:2354:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2354:29:2354:32 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11398,6 +11421,7 @@ inferType | main.rs:2355:19:2355:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2355:29:2355:33 | &map1 | | {EXTERNAL LOCATION} | & | | main.rs:2355:29:2355:33 | &map1 | TRef | {EXTERNAL LOCATION} | HashMap | +| main.rs:2355:29:2355:33 | &map1 | TRef.A | {EXTERNAL LOCATION} | Global | | main.rs:2355:29:2355:33 | &map1 | TRef.K | {EXTERNAL LOCATION} | i32 | | main.rs:2355:29:2355:33 | &map1 | TRef.S | {EXTERNAL LOCATION} | RandomState | | main.rs:2355:29:2355:33 | &map1 | TRef.V | {EXTERNAL LOCATION} | Box | @@ -11405,6 +11429,7 @@ inferType | main.rs:2355:29:2355:33 | &map1 | TRef.V.T | {EXTERNAL LOCATION} | & | | main.rs:2355:29:2355:33 | &map1 | TRef.V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2355:30:2355:33 | map1 | | {EXTERNAL LOCATION} | HashMap | +| main.rs:2355:30:2355:33 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2355:30:2355:33 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2355:30:2355:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2355:30:2355:33 | map1 | V | {EXTERNAL LOCATION} | Box | diff --git a/rust/ql/test/rust-toolchain.toml b/rust/ql/test/rust-toolchain.toml index 15f54ec6b429..9343bef27c61 100644 --- a/rust/ql/test/rust-toolchain.toml +++ b/rust/ql/test/rust-toolchain.toml @@ -2,6 +2,6 @@ # IMPORTANT: this can also have an impact on QL test results [toolchain] -channel = "1.93" +channel = "1.90" profile = "minimal" components = [ "rust-src" ] From f577e973bc6c52bc06629e29ae235dc630935ef6 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 18 Feb 2026 13:39:06 +0000 Subject: [PATCH 146/243] Update other test in same folder --- .../test/library-tests/frameworks/sqlite3/Sqlite3.expected | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected b/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected index 9e7263aa3bb8..b3573ed217ea 100644 --- a/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected +++ b/ruby/ql/test/library-tests/frameworks/sqlite3/Sqlite3.expected @@ -2,9 +2,11 @@ sqlite3SqlConstruction | sqlite3.rb:5:1:5:17 | call to execute | sqlite3.rb:5:12:5:17 | <<-SQL | | sqlite3.rb:12:8:12:41 | call to prepare | sqlite3.rb:12:19:12:41 | "select * from numbers" | | sqlite3.rb:17:3:19:5 | call to execute | sqlite3.rb:17:15:17:35 | "select * from table" | -| sqlite3.rb:29:7:29:40 | call to execute | sqlite3.rb:29:19:29:39 | "select * from table" | +| sqlite3.rb:29:5:29:68 | call to execute | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | +| sqlite3.rb:33:5:33:78 | call to execute | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | sqlite3SqlExecution | sqlite3.rb:5:1:5:17 | call to execute | sqlite3.rb:5:12:5:17 | <<-SQL | | sqlite3.rb:14:1:14:12 | call to execute | sqlite3.rb:12:19:12:41 | "select * from numbers" | | sqlite3.rb:17:3:19:5 | call to execute | sqlite3.rb:17:15:17:35 | "select * from table" | -| sqlite3.rb:29:7:29:40 | call to execute | sqlite3.rb:29:19:29:39 | "select * from table" | +| sqlite3.rb:29:5:29:68 | call to execute | sqlite3.rb:29:16:29:67 | "select * from table where cat..." | +| sqlite3.rb:33:5:33:78 | call to execute | sqlite3.rb:33:16:33:77 | "select * from table where cat..." | From 05d681fe1955e4badedab6a9575262e422fa48d8 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 18 Feb 2026 13:44:01 +0000 Subject: [PATCH 147/243] Update taintstep test for models becoming MaD --- ruby/ql/test/library-tests/dataflow/local/TaintStep.expected | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index 4fa46d163b4c..353edd203f95 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -2921,13 +2921,11 @@ | file://:0:0:0:0 | [summary param] position 0 in File.realdirpath | file://:0:0:0:0 | [summary] to write: ReturnValue in File.realdirpath | | file://:0:0:0:0 | [summary param] position 0 in File.realpath | file://:0:0:0:0 | [summary] to write: ReturnValue in File.realpath | | file://:0:0:0:0 | [summary param] position 0 in Hash[] | file://:0:0:0:0 | [summary] read: Argument[0].Element[any] in Hash[] | -| file://:0:0:0:0 | [summary param] position 0 in Mysql2::Client.escape() | file://:0:0:0:0 | [summary] to write: ReturnValue in Mysql2::Client.escape() | | file://:0:0:0:0 | [summary param] position 0 in Mysql2::Client.new() | file://:0:0:0:0 | [summary] to write: ReturnValue in Mysql2::Client.new() | | file://:0:0:0:0 | [summary param] position 0 in Net::LDAP.new | file://:0:0:0:0 | [summary] to write: ReturnValue in Net::LDAP.new | | file://:0:0:0:0 | [summary param] position 0 in Net::LDAP::Filter | file://:0:0:0:0 | [summary] to write: ReturnValue in Net::LDAP::Filter | | file://:0:0:0:0 | [summary param] position 0 in PG.new() | file://:0:0:0:0 | [summary] to write: ReturnValue in PG.new() | | file://:0:0:0:0 | [summary param] position 0 in Rack::Utils.parse_query | file://:0:0:0:0 | [summary] to write: ReturnValue in Rack::Utils.parse_query | -| file://:0:0:0:0 | [summary param] position 0 in SQLite3::Database.quote() | file://:0:0:0:0 | [summary] to write: ReturnValue in SQLite3::Database.quote() | | file://:0:0:0:0 | [summary param] position 0 in Sequel.connect | file://:0:0:0:0 | [summary] to write: ReturnValue in Sequel.connect | | file://:0:0:0:0 | [summary param] position 0 in String.try_convert | file://:0:0:0:0 | [summary] to write: ReturnValue in String.try_convert | | file://:0:0:0:0 | [summary param] position 0 in \| | file://:0:0:0:0 | [summary] read: Argument[0].Element[any] in \| | From 1d6b8c5120ae49201b4043cef68e9b14b6cdee76 Mon Sep 17 00:00:00 2001 From: Owen Mansel-Chan Date: Wed, 18 Feb 2026 13:41:33 +0000 Subject: [PATCH 148/243] Use postprocessing queries for unrelated test Need to do this because the model numbering was changing. At the same time we may as well use inline expectations. --- .../CodeInjection/CodeInjection.expected | 112 +++++++++--------- .../cwe-094/CodeInjection/CodeInjection.qlref | 5 +- .../cwe-094/CodeInjection/CodeInjection.rb | 42 ++++--- 3 files changed, 85 insertions(+), 74 deletions(-) diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected index f598d37e32a5..07febf8cda63 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.expected @@ -1,3 +1,46 @@ +#select +| CodeInjection.rb:8:10:8:13 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:8:10:8:13 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | This code execution depends on a $@. | CodeInjection.rb:11:10:11:15 | call to params | user-provided value | +| CodeInjection.rb:20:20:20:23 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:20:20:20:23 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:23:21:23:24 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:23:21:23:24 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:29:15:29:18 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:29:15:29:18 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:32:19:32:22 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:32:19:32:22 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:38:10:38:28 | call to escape | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:38:10:38:28 | call to escape | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:41:40:41:43 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:41:40:41:43 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | +| CodeInjection.rb:81:16:81:19 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:81:16:81:19 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:90:10:90:37 | ... + ... | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:90:10:90:37 | ... + ... | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:96:10:96:13 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:96:10:96:13 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | +| CodeInjection.rb:118:10:118:13 | @foo | CodeInjection.rb:111:12:111:17 | call to params | CodeInjection.rb:118:10:118:13 | @foo | This code execution depends on a $@. | CodeInjection.rb:111:12:111:17 | call to params | user-provided value | +edges +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:29:15:29:18 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:32:19:32:22 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | provenance | | +| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:41:40:41:43 | code | provenance | | +| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | provenance | | +| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | provenance | | +| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | MaD:1 | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:81:16:81:19 | code | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:37 | ... + ... | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:22:90:25 | code | provenance | | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | provenance | AdditionalTaintStep | +| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:96:10:96:13 | code | provenance | | +| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | provenance | | +| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | +| CodeInjection.rb:90:10:90:25 | ... + ... : [collection] [element] | CodeInjection.rb:90:10:90:37 | ... + ... | provenance | | +| CodeInjection.rb:90:22:90:25 | code | CodeInjection.rb:90:10:90:25 | ... + ... : [collection] [element] | provenance | | +| CodeInjection.rb:107:3:108:5 | self in index : PostsController [@foo] | CodeInjection.rb:117:3:119:5 | self in baz : PostsController [@foo] | provenance | | +| CodeInjection.rb:111:5:111:8 | [post] self [@foo] | CodeInjection.rb:114:3:115:5 | self in bar : PostsController [@foo] | provenance | | +| CodeInjection.rb:111:12:111:17 | call to params | CodeInjection.rb:111:12:111:23 | ...[...] | provenance | | +| CodeInjection.rb:111:12:111:23 | ...[...] | CodeInjection.rb:111:5:111:8 | [post] self [@foo] | provenance | | +| CodeInjection.rb:114:3:115:5 | self in bar : PostsController [@foo] | CodeInjection.rb:107:3:108:5 | self in index : PostsController [@foo] | provenance | | +| CodeInjection.rb:117:3:119:5 | self in baz : PostsController [@foo] | CodeInjection.rb:118:10:118:13 | self : PostsController [@foo] | provenance | | +| CodeInjection.rb:118:10:118:13 | self : PostsController [@foo] | CodeInjection.rb:118:10:118:13 | @foo | provenance | | +models +| 1 | Summary: Regexp!; Method[escape,quote]; Argument[0]; ReturnValue; taint | nodes | CodeInjection.rb:5:5:5:8 | code | semmle.label | code | | CodeInjection.rb:5:12:5:17 | call to params | semmle.label | call to params | @@ -14,59 +57,18 @@ nodes | CodeInjection.rb:78:5:78:8 | code | semmle.label | code | | CodeInjection.rb:78:12:78:17 | call to params | semmle.label | call to params | | CodeInjection.rb:78:12:78:24 | ...[...] | semmle.label | ...[...] | -| CodeInjection.rb:80:16:80:19 | code | semmle.label | code | -| CodeInjection.rb:86:10:86:25 | ... + ... : [collection] [element] | semmle.label | ... + ... : [collection] [element] | -| CodeInjection.rb:86:10:86:37 | ... + ... | semmle.label | ... + ... | -| CodeInjection.rb:86:22:86:25 | code | semmle.label | code | -| CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | semmle.label | "prefix_#{...}_suffix" | -| CodeInjection.rb:90:10:90:13 | code | semmle.label | code | -| CodeInjection.rb:101:3:102:5 | self in index : PostsController [@foo] | semmle.label | self in index : PostsController [@foo] | -| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | -| CodeInjection.rb:105:12:105:17 | call to params | semmle.label | call to params | -| CodeInjection.rb:105:12:105:23 | ...[...] | semmle.label | ...[...] | -| CodeInjection.rb:108:3:109:5 | self in bar : PostsController [@foo] | semmle.label | self in bar : PostsController [@foo] | -| CodeInjection.rb:111:3:113:5 | self in baz : PostsController [@foo] | semmle.label | self in baz : PostsController [@foo] | -| CodeInjection.rb:112:10:112:13 | @foo | semmle.label | @foo | -| CodeInjection.rb:112:10:112:13 | self : PostsController [@foo] | semmle.label | self : PostsController [@foo] | -edges -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:8:10:8:13 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:20:20:20:23 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:23:21:23:24 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:29:15:29:18 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:32:19:32:22 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:38:24:38:27 | code | provenance | | -| CodeInjection.rb:5:5:5:8 | code | CodeInjection.rb:41:40:41:43 | code | provenance | | -| CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:5:12:5:24 | ...[...] | provenance | | -| CodeInjection.rb:5:12:5:24 | ...[...] | CodeInjection.rb:5:5:5:8 | code | provenance | | -| CodeInjection.rb:38:24:38:27 | code | CodeInjection.rb:38:10:38:28 | call to escape | provenance | MaD:21 | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:80:16:80:19 | code | provenance | | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:86:22:86:25 | code | provenance | | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | provenance | AdditionalTaintStep | -| CodeInjection.rb:78:5:78:8 | code | CodeInjection.rb:90:10:90:13 | code | provenance | | -| CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:78:12:78:24 | ...[...] | provenance | | -| CodeInjection.rb:78:12:78:24 | ...[...] | CodeInjection.rb:78:5:78:8 | code | provenance | | -| CodeInjection.rb:86:10:86:25 | ... + ... : [collection] [element] | CodeInjection.rb:86:10:86:37 | ... + ... | provenance | | -| CodeInjection.rb:86:22:86:25 | code | CodeInjection.rb:86:10:86:25 | ... + ... : [collection] [element] | provenance | | -| CodeInjection.rb:101:3:102:5 | self in index : PostsController [@foo] | CodeInjection.rb:111:3:113:5 | self in baz : PostsController [@foo] | provenance | | -| CodeInjection.rb:105:5:105:8 | [post] self [@foo] | CodeInjection.rb:108:3:109:5 | self in bar : PostsController [@foo] | provenance | | -| CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:105:12:105:23 | ...[...] | provenance | | -| CodeInjection.rb:105:12:105:23 | ...[...] | CodeInjection.rb:105:5:105:8 | [post] self [@foo] | provenance | | -| CodeInjection.rb:108:3:109:5 | self in bar : PostsController [@foo] | CodeInjection.rb:101:3:102:5 | self in index : PostsController [@foo] | provenance | | -| CodeInjection.rb:111:3:113:5 | self in baz : PostsController [@foo] | CodeInjection.rb:112:10:112:13 | self : PostsController [@foo] | provenance | | -| CodeInjection.rb:112:10:112:13 | self : PostsController [@foo] | CodeInjection.rb:112:10:112:13 | @foo | provenance | | +| CodeInjection.rb:81:16:81:19 | code | semmle.label | code | +| CodeInjection.rb:90:10:90:25 | ... + ... : [collection] [element] | semmle.label | ... + ... : [collection] [element] | +| CodeInjection.rb:90:10:90:37 | ... + ... | semmle.label | ... + ... | +| CodeInjection.rb:90:22:90:25 | code | semmle.label | code | +| CodeInjection.rb:93:10:93:32 | "prefix_#{...}_suffix" | semmle.label | "prefix_#{...}_suffix" | +| CodeInjection.rb:96:10:96:13 | code | semmle.label | code | +| CodeInjection.rb:107:3:108:5 | self in index : PostsController [@foo] | semmle.label | self in index : PostsController [@foo] | +| CodeInjection.rb:111:5:111:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | +| CodeInjection.rb:111:12:111:17 | call to params | semmle.label | call to params | +| CodeInjection.rb:111:12:111:23 | ...[...] | semmle.label | ...[...] | +| CodeInjection.rb:114:3:115:5 | self in bar : PostsController [@foo] | semmle.label | self in bar : PostsController [@foo] | +| CodeInjection.rb:117:3:119:5 | self in baz : PostsController [@foo] | semmle.label | self in baz : PostsController [@foo] | +| CodeInjection.rb:118:10:118:13 | @foo | semmle.label | @foo | +| CodeInjection.rb:118:10:118:13 | self : PostsController [@foo] | semmle.label | self : PostsController [@foo] | subpaths -#select -| CodeInjection.rb:8:10:8:13 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:8:10:8:13 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | CodeInjection.rb:11:10:11:15 | call to params | This code execution depends on a $@. | CodeInjection.rb:11:10:11:15 | call to params | user-provided value | -| CodeInjection.rb:20:20:20:23 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:20:20:20:23 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:23:21:23:24 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:23:21:23:24 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:29:15:29:18 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:29:15:29:18 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:32:19:32:22 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:32:19:32:22 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:38:10:38:28 | call to escape | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:38:10:38:28 | call to escape | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:41:40:41:43 | code | CodeInjection.rb:5:12:5:17 | call to params | CodeInjection.rb:41:40:41:43 | code | This code execution depends on a $@. | CodeInjection.rb:5:12:5:17 | call to params | user-provided value | -| CodeInjection.rb:80:16:80:19 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:80:16:80:19 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:86:10:86:37 | ... + ... | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:86:10:86:37 | ... + ... | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:88:10:88:32 | "prefix_#{...}_suffix" | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:90:10:90:13 | code | CodeInjection.rb:78:12:78:17 | call to params | CodeInjection.rb:90:10:90:13 | code | This code execution depends on a $@. | CodeInjection.rb:78:12:78:17 | call to params | user-provided value | -| CodeInjection.rb:112:10:112:13 | @foo | CodeInjection.rb:105:12:105:17 | call to params | CodeInjection.rb:112:10:112:13 | @foo | This code execution depends on a $@. | CodeInjection.rb:105:12:105:17 | call to params | user-provided value | diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref index 6dcbcb4448ed..c62d0af0a1b8 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.qlref @@ -1 +1,4 @@ -queries/security/cwe-094/CodeInjection.ql +query: queries/security/cwe-094/CodeInjection.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb index a8ed4a716136..f9c69d08e138 100644 --- a/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb +++ b/ruby/ql/test/query-tests/security/cwe-094/CodeInjection/CodeInjection.rb @@ -2,13 +2,13 @@ class UsersController < ActionController::Base def create - code = params[:code] + code = params[:code] # $ Source # BAD - eval(code) + eval(code) # $ Alert # BAD - eval(params) + eval(params) # $ Alert # GOOD - user input is in second argument, which is not evaluated as Ruby code send(:sanitize, params[:code]) @@ -17,28 +17,28 @@ def create Foo.new.bar(code) # BAD - Foo.class_eval(code) + Foo.class_eval(code) # $ Alert # BAD - Foo.module_eval(code) + Foo.module_eval(code) # $ Alert # GOOD Bar.class_eval(code) # BAD - const_get(code) + const_get(code) # $ Alert # BAD - Foo.const_get(code) + Foo.const_get(code) # $ Alert # GOOD Bar.const_get(code) # BAD - eval(Regexp.escape(code)) + eval(Regexp.escape(code)) # $ Alert # BAD - ActiveJob::Serializers.deserialize(code) + ActiveJob::Serializers.deserialize(code) # $ Alert end def update @@ -75,19 +75,25 @@ def self.const_get(x) class UsersController < ActionController::Base def create - code = params[:code] + code = params[:code] # $ Source - obj().send(code, "foo"); # BAD + # BAD + obj().send(code, "foo"); # $ Alert - obj().send("prefix_" + code + "_suffix", "foo"); # GOOD + # GOOD + obj().send("prefix_" + code + "_suffix", "foo"); - obj().send("prefix_#{code}_suffix", "foo"); # GOOD + # GOOD + obj().send("prefix_#{code}_suffix", "foo"); - eval("prefix_" + code + "_suffix"); # BAD + # BAD + eval("prefix_" + code + "_suffix"); # $ Alert - eval("prefix_#{code}_suffix"); # BAD + # BAD + eval("prefix_#{code}_suffix"); # $ Alert - eval(code); # BAD + # BAD + eval(code); # $ Alert end end @@ -102,13 +108,13 @@ def index end def foo - @foo = params[:foo] + @foo = params[:foo] # $ Source end def bar end def baz - eval(@foo) + eval(@foo) # $ Alert end end From e11363280a7a1162825da7f8e1d78dcbfce353bb Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 18 Feb 2026 16:56:28 +0100 Subject: [PATCH 149/243] Rust: accept test changes --- .../NeverTypeRepr/NeverTypeRepr.expected | 1 + .../controlflow/BasicBlocks.expected | 4 +++ .../library-tests/controlflow/Cfg.expected | 20 ++++++++++++--- .../type-inference/type-inference.expected | 25 ------------------- 4 files changed, 21 insertions(+), 29 deletions(-) diff --git a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected index c02b6c823544..7e8d7f8718b1 100644 --- a/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected +++ b/rust/ql/test/extractor-tests/generated/NeverTypeRepr/NeverTypeRepr.expected @@ -1 +1,2 @@ | gen_never_type_repr.rs:7:17:7:17 | ! | +| gen_never_type_repr.rs:7:21:7:26 | ! | diff --git a/rust/ql/test/library-tests/controlflow/BasicBlocks.expected b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected index 94760d6875e1..80357ae29f86 100644 --- a/rust/ql/test/library-tests/controlflow/BasicBlocks.expected +++ b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected @@ -743,6 +743,7 @@ dominates | test.rs:529:5:537:5 | enter fn const_block_assert | test.rs:533:21:533:48 | [boolean(true)] ! ... | | test.rs:529:5:537:5 | enter fn const_block_assert | test.rs:533:21:533:48 | if ... {...} | | test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | ExprStmt | +| test.rs:533:13:533:19 | enter fn panic_cold_explicit | test.rs:533:13:533:19 | enter fn panic_cold_explicit | | test.rs:533:21:533:48 | [boolean(false)] ! ... | test.rs:533:21:533:48 | [boolean(false)] ! ... | | test.rs:533:21:533:48 | [boolean(true)] ! ... | test.rs:533:13:533:19 | ExprStmt | | test.rs:533:21:533:48 | [boolean(true)] ! ... | test.rs:533:21:533:48 | [boolean(true)] ! ... | @@ -750,6 +751,7 @@ dominates | test.rs:539:5:548:5 | enter fn const_block_panic | test.rs:539:5:548:5 | enter fn const_block_panic | | test.rs:539:5:548:5 | enter fn const_block_panic | test.rs:541:9:546:9 | if false {...} | | test.rs:541:9:546:9 | if false {...} | test.rs:541:9:546:9 | if false {...} | +| test.rs:544:17:544:22 | enter fn panic_cold_explicit | test.rs:544:17:544:22 | enter fn panic_cold_explicit | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:551:1:556:1 | enter fn dead_code | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:553:9:553:17 | ExprStmt | | test.rs:553:9:553:17 | ExprStmt | test.rs:553:9:553:17 | ExprStmt | @@ -1422,6 +1424,7 @@ postDominance | test.rs:529:5:537:5 | enter fn const_block_assert | test.rs:529:5:537:5 | enter fn const_block_assert | | test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | ExprStmt | | test.rs:533:13:533:19 | ExprStmt | test.rs:533:21:533:48 | [boolean(true)] ! ... | +| test.rs:533:13:533:19 | enter fn panic_cold_explicit | test.rs:533:13:533:19 | enter fn panic_cold_explicit | | test.rs:533:21:533:48 | [boolean(false)] ! ... | test.rs:533:21:533:48 | [boolean(false)] ! ... | | test.rs:533:21:533:48 | [boolean(true)] ! ... | test.rs:533:21:533:48 | [boolean(true)] ! ... | | test.rs:533:21:533:48 | if ... {...} | test.rs:529:5:537:5 | enter fn const_block_assert | @@ -1432,6 +1435,7 @@ postDominance | test.rs:539:5:548:5 | enter fn const_block_panic | test.rs:539:5:548:5 | enter fn const_block_panic | | test.rs:541:9:546:9 | if false {...} | test.rs:539:5:548:5 | enter fn const_block_panic | | test.rs:541:9:546:9 | if false {...} | test.rs:541:9:546:9 | if false {...} | +| test.rs:544:17:544:22 | enter fn panic_cold_explicit | test.rs:544:17:544:22 | enter fn panic_cold_explicit | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:551:1:556:1 | enter fn dead_code | | test.rs:553:9:553:17 | ExprStmt | test.rs:551:1:556:1 | enter fn dead_code | | test.rs:553:9:553:17 | ExprStmt | test.rs:553:9:553:17 | ExprStmt | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 25fb8f29e04c..ef97a3b628f7 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -1288,13 +1288,20 @@ edges | test.rs:529:41:537:5 | { ... } | test.rs:529:5:537:5 | exit fn const_block_assert (normal) | | | test.rs:532:9:534:9 | ExprStmt | test.rs:533:13:533:50 | ExprStmt | | | test.rs:532:9:534:9 | { ... } | test.rs:536:9:536:10 | 42 | | -| test.rs:533:13:533:19 | "explicit panic" | test.rs:533:13:533:19 | ...::panic(...) | | -| test.rs:533:13:533:19 | ...::panic | test.rs:533:13:533:19 | "explicit panic" | | -| test.rs:533:13:533:19 | ...::panic(...) | test.rs:533:13:533:19 | { ... } | | | test.rs:533:13:533:19 | ...::panic_2021!... | test.rs:533:13:533:19 | MacroExpr | | -| test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | ...::panic | | +| test.rs:533:13:533:19 | ...::panic_explicit | test.rs:533:13:533:19 | ...::panic_explicit(...) | | +| test.rs:533:13:533:19 | ...::panic_explicit(...) | test.rs:533:13:533:19 | { ... } | | +| test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | fn panic_cold_explicit | | +| test.rs:533:13:533:19 | ExprStmt | test.rs:533:13:533:19 | panic_cold_explicit | | | test.rs:533:13:533:19 | MacroExpr | test.rs:533:13:533:19 | { ... } | | +| test.rs:533:13:533:19 | enter fn panic_cold_explicit | test.rs:533:13:533:19 | ...::panic_explicit | | +| test.rs:533:13:533:19 | exit fn panic_cold_explicit (normal) | test.rs:533:13:533:19 | exit fn panic_cold_explicit | | +| test.rs:533:13:533:19 | fn panic_cold_explicit | test.rs:533:13:533:19 | ExprStmt | | +| test.rs:533:13:533:19 | panic_cold_explicit | test.rs:533:13:533:19 | panic_cold_explicit(...) | | +| test.rs:533:13:533:19 | panic_cold_explicit(...) | test.rs:533:13:533:19 | { ... } | | | test.rs:533:13:533:19 | { ... } | test.rs:533:13:533:19 | ...::panic_2021!... | | +| test.rs:533:13:533:19 | { ... } | test.rs:533:13:533:19 | exit fn panic_cold_explicit (normal) | | +| test.rs:533:13:533:19 | { ... } | test.rs:533:13:533:19 | { ... } | | | test.rs:533:13:533:19 | { ... } | test.rs:533:21:533:48 | if ... {...} | | | test.rs:533:13:533:49 | MacroExpr | test.rs:532:9:534:9 | { ... } | | | test.rs:533:13:533:49 | assert!... | test.rs:533:13:533:49 | MacroExpr | | @@ -1317,6 +1324,11 @@ edges | test.rs:541:9:546:9 | ExprStmt | test.rs:541:12:541:16 | false | | | test.rs:541:9:546:9 | if false {...} | test.rs:547:9:547:9 | N | | | test.rs:541:12:541:16 | false | test.rs:541:9:546:9 | if false {...} | false | +| test.rs:544:17:544:22 | ...::panic_explicit | test.rs:544:17:544:22 | ...::panic_explicit(...) | | +| test.rs:544:17:544:22 | ...::panic_explicit(...) | test.rs:544:17:544:22 | { ... } | | +| test.rs:544:17:544:22 | enter fn panic_cold_explicit | test.rs:544:17:544:22 | ...::panic_explicit | | +| test.rs:544:17:544:22 | exit fn panic_cold_explicit (normal) | test.rs:544:17:544:22 | exit fn panic_cold_explicit | | +| test.rs:544:17:544:22 | { ... } | test.rs:544:17:544:22 | exit fn panic_cold_explicit (normal) | | | test.rs:547:9:547:9 | N | test.rs:539:35:548:5 | { ... } | | | test.rs:551:1:556:1 | enter fn dead_code | test.rs:552:5:554:5 | ExprStmt | | | test.rs:551:1:556:1 | exit fn dead_code (normal) | test.rs:551:1:556:1 | exit fn dead_code | | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index a2322cdf9292..1b750fab4586 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -788,14 +788,12 @@ inferCertainType | dereference.rs:116:5:116:5 | x | | dereference.rs:18:1:20:1 | MySmartPointer | | dereference.rs:143:19:151:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:144:17:144:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:144:17:144:26 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:17:144:26 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:17:144:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:144:17:144:26 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:144:30:144:57 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:30:144:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:30:144:57 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | @@ -806,7 +804,6 @@ inferCertainType | dereference.rs:145:24:145:29 | Key {...} | | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:9:149:9 | if ... {...} | | {EXTERNAL LOCATION} | () | | dereference.rs:146:32:146:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:146:32:146:41 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:146:32:146:41 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:146:32:146:41 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:32:146:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -816,7 +813,6 @@ inferCertainType | dereference.rs:146:52:149:9 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:148:13:148:15 | key | | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:150:9:150:18 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:150:9:150:18 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:150:9:150:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -3354,20 +3350,16 @@ inferCertainType | main.rs:2345:13:2346:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2345:29:2346:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2349:17:2349:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2349:17:2349:20 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:17:2349:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2349:24:2349:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2349:24:2349:55 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:24:2349:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2350:9:2350:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2350:9:2350:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2350:9:2350:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2350:24:2350:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2350:24:2350:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2350:33:2350:37 | "one" | | {EXTERNAL LOCATION} | & | | main.rs:2350:33:2350:37 | "one" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2351:9:2351:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2351:9:2351:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2351:9:2351:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2351:24:2351:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box | | main.rs:2351:24:2351:38 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | @@ -3375,25 +3367,21 @@ inferCertainType | main.rs:2351:33:2351:37 | "two" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2352:9:2352:33 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2352:20:2352:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2352:20:2352:23 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2352:20:2352:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2352:32:2352:33 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2353:9:2353:37 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2353:22:2353:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2353:22:2353:25 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2353:22:2353:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2353:36:2353:37 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2354:9:2354:42 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2354:13:2354:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2354:29:2354:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2354:29:2354:32 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2354:29:2354:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2354:41:2354:42 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2355:9:2355:36 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2355:13:2355:24 | TuplePat | | {EXTERNAL LOCATION} | (T_2) | | main.rs:2355:29:2355:33 | &map1 | | {EXTERNAL LOCATION} | & | | main.rs:2355:30:2355:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2355:30:2355:33 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2355:30:2355:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2355:35:2355:36 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2359:17:2359:17 | a | | {EXTERNAL LOCATION} | i64 | @@ -6464,14 +6452,12 @@ inferType | dereference.rs:116:12:116:12 | 0 | | {EXTERNAL LOCATION} | i32 | | dereference.rs:143:19:151:5 | { ... } | | {EXTERNAL LOCATION} | () | | dereference.rs:144:17:144:26 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:144:17:144:26 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:17:144:26 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:17:144:26 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | | dereference.rs:144:17:144:26 | key_to_key | V | {EXTERNAL LOCATION} | & | | dereference.rs:144:17:144:26 | key_to_key | V.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:144:30:144:57 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | dereference.rs:144:30:144:57 | ...::new(...) | K | {EXTERNAL LOCATION} | & | | dereference.rs:144:30:144:57 | ...::new(...) | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:144:30:144:57 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | @@ -6497,7 +6483,6 @@ inferType | dereference.rs:146:21:146:27 | ref_key | TRef | {EXTERNAL LOCATION} | & | | dereference.rs:146:21:146:27 | ref_key | TRef.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:32:146:41 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:146:32:146:41 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:146:32:146:41 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:146:32:146:41 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:146:32:146:41 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -6523,7 +6508,6 @@ inferType | dereference.rs:148:19:148:25 | ref_key | TRef | {EXTERNAL LOCATION} | & | | dereference.rs:148:19:148:25 | ref_key | TRef.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:150:9:150:18 | key_to_key | | {EXTERNAL LOCATION} | HashMap | -| dereference.rs:150:9:150:18 | key_to_key | A | {EXTERNAL LOCATION} | Global | | dereference.rs:150:9:150:18 | key_to_key | K | {EXTERNAL LOCATION} | & | | dereference.rs:150:9:150:18 | key_to_key | K.TRef | dereference.rs:122:5:123:21 | Key | | dereference.rs:150:9:150:18 | key_to_key | S | {EXTERNAL LOCATION} | RandomState | @@ -11278,7 +11262,6 @@ inferType | main.rs:2345:13:2346:13 | for ... in ... { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2345:29:2346:13 | { ... } | | {EXTERNAL LOCATION} | () | | main.rs:2349:17:2349:20 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2349:17:2349:20 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:17:2349:20 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2349:17:2349:20 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2349:17:2349:20 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11286,7 +11269,6 @@ inferType | main.rs:2349:17:2349:20 | map1 | V.T | {EXTERNAL LOCATION} | & | | main.rs:2349:17:2349:20 | map1 | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2349:24:2349:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2349:24:2349:55 | ...::new(...) | A | {EXTERNAL LOCATION} | Global | | main.rs:2349:24:2349:55 | ...::new(...) | K | {EXTERNAL LOCATION} | i32 | | main.rs:2349:24:2349:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2349:24:2349:55 | ...::new(...) | V | {EXTERNAL LOCATION} | Box | @@ -11294,7 +11276,6 @@ inferType | main.rs:2349:24:2349:55 | ...::new(...) | V.T | {EXTERNAL LOCATION} | & | | main.rs:2349:24:2349:55 | ...::new(...) | V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2350:9:2350:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2350:9:2350:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2350:9:2350:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2350:9:2350:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2350:9:2350:12 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11314,7 +11295,6 @@ inferType | main.rs:2350:33:2350:37 | "one" | | {EXTERNAL LOCATION} | & | | main.rs:2350:33:2350:37 | "one" | TRef | {EXTERNAL LOCATION} | str | | main.rs:2351:9:2351:12 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2351:9:2351:12 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2351:9:2351:12 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2351:9:2351:12 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2351:9:2351:12 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11337,7 +11317,6 @@ inferType | main.rs:2352:13:2352:15 | key | | {EXTERNAL LOCATION} | & | | main.rs:2352:13:2352:15 | key | TRef | {EXTERNAL LOCATION} | i32 | | main.rs:2352:20:2352:23 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2352:20:2352:23 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2352:20:2352:23 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2352:20:2352:23 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2352:20:2352:23 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11358,7 +11337,6 @@ inferType | main.rs:2353:13:2353:17 | value | TRef.T | {EXTERNAL LOCATION} | & | | main.rs:2353:13:2353:17 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2353:22:2353:25 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2353:22:2353:25 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2353:22:2353:25 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2353:22:2353:25 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2353:22:2353:25 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11389,7 +11367,6 @@ inferType | main.rs:2354:19:2354:23 | value | TRef.T | {EXTERNAL LOCATION} | & | | main.rs:2354:19:2354:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2354:29:2354:32 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2354:29:2354:32 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2354:29:2354:32 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2354:29:2354:32 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2354:29:2354:32 | map1 | V | {EXTERNAL LOCATION} | Box | @@ -11421,7 +11398,6 @@ inferType | main.rs:2355:19:2355:23 | value | TRef.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2355:29:2355:33 | &map1 | | {EXTERNAL LOCATION} | & | | main.rs:2355:29:2355:33 | &map1 | TRef | {EXTERNAL LOCATION} | HashMap | -| main.rs:2355:29:2355:33 | &map1 | TRef.A | {EXTERNAL LOCATION} | Global | | main.rs:2355:29:2355:33 | &map1 | TRef.K | {EXTERNAL LOCATION} | i32 | | main.rs:2355:29:2355:33 | &map1 | TRef.S | {EXTERNAL LOCATION} | RandomState | | main.rs:2355:29:2355:33 | &map1 | TRef.V | {EXTERNAL LOCATION} | Box | @@ -11429,7 +11405,6 @@ inferType | main.rs:2355:29:2355:33 | &map1 | TRef.V.T | {EXTERNAL LOCATION} | & | | main.rs:2355:29:2355:33 | &map1 | TRef.V.T.TRef | {EXTERNAL LOCATION} | str | | main.rs:2355:30:2355:33 | map1 | | {EXTERNAL LOCATION} | HashMap | -| main.rs:2355:30:2355:33 | map1 | A | {EXTERNAL LOCATION} | Global | | main.rs:2355:30:2355:33 | map1 | K | {EXTERNAL LOCATION} | i32 | | main.rs:2355:30:2355:33 | map1 | S | {EXTERNAL LOCATION} | RandomState | | main.rs:2355:30:2355:33 | map1 | V | {EXTERNAL LOCATION} | Box | From 97a02ed9037db367f24d64b1755af7de1698ec05 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Feb 2026 17:55:02 +0000 Subject: [PATCH 150/243] Rust: Remove MacroCallTargetStats from rust/diagnostic/database-quality. --- rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql | 2 -- 1 file changed, 2 deletions(-) diff --git a/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql b/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql index 02933b3bd5f6..9cd244c8c5d8 100644 --- a/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql +++ b/rust/ql/src/queries/telemetry/DatabaseQualityDiagnostics.ql @@ -12,8 +12,6 @@ import codeql.util.Unit private predicate diagnostic(string msg, float value, float threshold) { CallTargetStatsReport::percentageOfOk(msg, value) and threshold = 50 or - MacroCallTargetStatsReport::percentageOfOk(msg, value) and threshold = 50 - or ExprTypeStatsReport::percentageOfOk(msg, value) and threshold = 20 } From fd5c5b5635dabd2f29c94f15bcfc30d40dfb6567 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 18 Feb 2026 17:59:49 +0000 Subject: [PATCH 151/243] Rust: Change note. --- rust/ql/src/change-notes/2026-02-18-database-quality.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 rust/ql/src/change-notes/2026-02-18-database-quality.md diff --git a/rust/ql/src/change-notes/2026-02-18-database-quality.md b/rust/ql/src/change-notes/2026-02-18-database-quality.md new file mode 100644 index 000000000000..ef2f1b3139c2 --- /dev/null +++ b/rust/ql/src/change-notes/2026-02-18-database-quality.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The macro resolution metric has been removed from `rust/diagnostic/database-quality`. This metric was found to be an unreliable indicator of database quality in many cases, leading to false alarms on the tool status page. From a0099d64c893a4c176db449d176e8bdb01aad31a Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 19 Feb 2026 11:20:04 +0100 Subject: [PATCH 152/243] JS: Add mobx-react and mobx-react-lite tests --- .../frameworks/ReactJS/higherOrderComponent.jsx | 6 +++++- .../ql/test/library-tests/frameworks/ReactJS/tests.expected | 2 -- .../frameworks/ReactJS/useHigherOrderComponent.jsx | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/higherOrderComponent.jsx b/javascript/ql/test/library-tests/frameworks/ReactJS/higherOrderComponent.jsx index a2c6eeb36661..a917a9dc6834 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/higherOrderComponent.jsx +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/higherOrderComponent.jsx @@ -5,6 +5,8 @@ import styled from 'styled-components'; import unknownFunction from 'somewhere'; import { hot } from 'react-hot-loader'; import { withState } from 'recompose'; +import { observer as observer1 } from 'mobx-react'; +import { observer as observer2 } from 'mobx-react-lite'; import { MyComponent } from './exportedComponent'; @@ -25,4 +27,6 @@ const ConnectedComponent = compose(withConnect, unknownFunction)(StyledComponent const ConnectedComponent2 = withState('counter', 'setCounter', 0)(ConnectedComponent); -export default hot(module)(memo(forwardRef(ConnectedComponent2))); +const ConnectedComponent3 = observer1(observer2(ConnectedComponent2)); + +export default hot(module)(memo(forwardRef(ConnectedComponent3))); diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected index 16d31cd07e15..6186b99180c1 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected @@ -10,8 +10,6 @@ getACandidatePropsValue | props.js:30:46:30:67 | "propFr ... tProps" | | props.js:32:22:32:34 | "propFromJSX" | | props.js:34:33:34:53 | "propFr ... ructor" | -| useHigherOrderComponent.jsx:5:33:5:37 | "red" | -| useHigherOrderComponent.jsx:11:39:11:44 | "lazy" | | useHigherOrderComponent.jsx:17:40:17:46 | "lazy2" | getACandidateStateSource | es6.js:14:1:20:1 | class H ... }\\n} | es6.js:18:22:18:31 | { baz: 42} | diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx b/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx index dba28fd1c6c5..d44c307766ac 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx @@ -2,13 +2,13 @@ import SomeComponent from './higherOrderComponent'; import { lazy } from 'react'; function foo() { - return // $ getACandidatePropsValue + return // $ MISSING: getACandidatePropsValue } const LazyLoadedComponent = lazy(() => import('./higherOrderComponent')); function bar() { - return // $ getACandidatePropsValue + return // $ MISSING: getACandidatePropsValue } const LazyLoadedComponent2 = lazy(() => import('./exportedComponent').then(m => m.MyComponent)); From a684943bb7b5e72bfce7a5a656f8d4b4ad3fa048 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 19 Feb 2026 11:26:09 +0100 Subject: [PATCH 153/243] JS: Model mobx-react{-lite} as higher-order component builders --- javascript/ql/lib/semmle/javascript/frameworks/React.qll | 2 ++ .../ql/test/library-tests/frameworks/ReactJS/tests.expected | 2 ++ .../frameworks/ReactJS/useHigherOrderComponent.jsx | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/React.qll b/javascript/ql/lib/semmle/javascript/frameworks/React.qll index d55ace8636df..5d77a1e801c5 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/React.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/React.qll @@ -802,6 +802,8 @@ private DataFlow::SourceNode higherOrderComponentBuilder() { or result = DataFlow::moduleMember("recompose", _).getACall() or + result = DataFlow::moduleMember(["mobx-react", "mobx-react-lite"], "observer") + or result = reactRouterDom().getAPropertyRead("withRouter") or exists(FunctionCompositionCall compose | diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected index 6186b99180c1..16d31cd07e15 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/tests.expected @@ -10,6 +10,8 @@ getACandidatePropsValue | props.js:30:46:30:67 | "propFr ... tProps" | | props.js:32:22:32:34 | "propFromJSX" | | props.js:34:33:34:53 | "propFr ... ructor" | +| useHigherOrderComponent.jsx:5:33:5:37 | "red" | +| useHigherOrderComponent.jsx:11:39:11:44 | "lazy" | | useHigherOrderComponent.jsx:17:40:17:46 | "lazy2" | getACandidateStateSource | es6.js:14:1:20:1 | class H ... }\\n} | es6.js:18:22:18:31 | { baz: 42} | diff --git a/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx b/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx index d44c307766ac..dba28fd1c6c5 100644 --- a/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx +++ b/javascript/ql/test/library-tests/frameworks/ReactJS/useHigherOrderComponent.jsx @@ -2,13 +2,13 @@ import SomeComponent from './higherOrderComponent'; import { lazy } from 'react'; function foo() { - return // $ MISSING: getACandidatePropsValue + return // $ getACandidatePropsValue } const LazyLoadedComponent = lazy(() => import('./higherOrderComponent')); function bar() { - return // $ MISSING: getACandidatePropsValue + return // $ getACandidatePropsValue } const LazyLoadedComponent2 = lazy(() => import('./exportedComponent').then(m => m.MyComponent)); From 20fea3955ebac8b8e2de3f5613322e916f813811 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 18 Feb 2026 16:40:28 +0000 Subject: [PATCH 154/243] Python: Remove points-to from `Metrics.qll` Moves the classes/predicates that _actually_ depend on points-to to the `LegacyPointsTo` module, leaving behind a module that contains all of the metrics-related stuff (line counts, nesting depth, etc.) that don't need points-to to be evaluated. Consequently, `Metrics` is now no longer a private import in `python.qll`. --- python/ql/lib/LegacyPointsTo.qll | 176 ++++++++++++++++++++++++ python/ql/lib/python.qll | 2 +- python/ql/lib/semmle/python/Metrics.qll | 154 +-------------------- 3 files changed, 178 insertions(+), 154 deletions(-) diff --git a/python/ql/lib/LegacyPointsTo.qll b/python/ql/lib/LegacyPointsTo.qll index 45f4a80e8d1c..ffea2d93b66c 100644 --- a/python/ql/lib/LegacyPointsTo.qll +++ b/python/ql/lib/LegacyPointsTo.qll @@ -430,3 +430,179 @@ private predicate exits_early(BasicBlock b) { f.getACall().getBasicBlock() = b ) } + +/** The metrics for a function that require points-to analysis */ +class FunctionMetricsWithPointsTo extends FunctionMetrics { + /** + * Gets the cyclomatic complexity of the function: + * The number of linearly independent paths through the source code. + * Computed as E - N + 2P, + * where + * E = the number of edges of the graph. + * N = the number of nodes of the graph. + * P = the number of connected components, which for a single function is 1. + */ + int getCyclomaticComplexity() { + exists(int e, int n | + n = count(BasicBlockWithPointsTo b | b = this.getABasicBlock() and b.likelyReachable()) and + e = + count(BasicBlockWithPointsTo b1, BasicBlockWithPointsTo b2 | + b1 = this.getABasicBlock() and + b1.likelyReachable() and + b2 = this.getABasicBlock() and + b2.likelyReachable() and + b2 = b1.getASuccessor() and + not b1.unlikelySuccessor(b2) + ) + | + result = e - n + 2 + ) + } + + private BasicBlock getABasicBlock() { + result = this.getEntryNode().getBasicBlock() + or + exists(BasicBlock mid | mid = this.getABasicBlock() and result = mid.getASuccessor()) + } + + /** + * Dependency of Callables + * One callable "this" depends on another callable "result" + * if "this" makes some call to a method that may end up being "result". + */ + FunctionMetricsWithPointsTo getADependency() { + result != this and + not non_coupling_method(result) and + exists(Call call | call.getScope() = this | + exists(FunctionObject callee | callee.getFunction() = result | + call.getAFlowNode().getFunction().(ControlFlowNodeWithPointsTo).refersTo(callee) + ) + or + exists(Attribute a | call.getFunc() = a | + unique_root_method(result, a.getName()) + or + exists(Name n | a.getObject() = n and n.getId() = "self" | + result.getScope() = this.getScope() and + result.getName() = a.getName() + ) + ) + ) + } + + /** + * Afferent Coupling + * the number of callables that depend on this method. + * This is sometimes called the "fan-in" of a method. + */ + int getAfferentCoupling() { + result = count(FunctionMetricsWithPointsTo m | m.getADependency() = this) + } + + /** + * Efferent Coupling + * the number of methods that this method depends on + * This is sometimes called the "fan-out" of a method. + */ + int getEfferentCoupling() { + result = count(FunctionMetricsWithPointsTo m | this.getADependency() = m) + } + + override string getAQlClass() { result = "FunctionMetrics" } +} + +/** The metrics for a class that require points-to analysis */ +class ClassMetricsWithPointsTo extends ClassMetrics { + private predicate dependsOn(Class other) { + other != this and + ( + exists(FunctionMetricsWithPointsTo f1, FunctionMetricsWithPointsTo f2 | + f1.getADependency() = f2 + | + f1.getScope() = this and f2.getScope() = other + ) + or + exists(Function f, Call c, ClassObject cls | c.getScope() = f and f.getScope() = this | + c.getFunc().(ExprWithPointsTo).refersTo(cls) and + cls.getPyClass() = other + ) + ) + } + + /** + * Gets the afferent coupling of a class -- the number of classes that + * directly depend on it. + */ + int getAfferentCoupling() { result = count(ClassMetricsWithPointsTo t | t.dependsOn(this)) } + + /** + * Gets the efferent coupling of a class -- the number of classes that + * it directly depends on. + */ + int getEfferentCoupling() { result = count(ClassMetricsWithPointsTo t | this.dependsOn(t)) } + + /** Gets the depth of inheritance of the class. */ + int getInheritanceDepth() { + exists(ClassObject cls | cls.getPyClass() = this | result = max(classInheritanceDepth(cls))) + } + + override string getAQlClass() { result = "ClassMetrics" } +} + +private int classInheritanceDepth(ClassObject cls) { + /* Prevent run-away recursion in case of circular inheritance */ + not cls.getASuperType() = cls and + ( + exists(ClassObject sup | cls.getABaseType() = sup | result = classInheritanceDepth(sup) + 1) + or + not exists(cls.getABaseType()) and + ( + major_version() = 2 and result = 0 + or + major_version() > 2 and result = 1 + ) + ) +} + +/** The metrics for a module that require points-to analysis */ +class ModuleMetricsWithPointsTo extends ModuleMetrics { + /** + * Gets the afferent coupling of a module -- the number of modules that + * directly depend on it. + */ + int getAfferentCoupling() { result = count(ModuleMetricsWithPointsTo t | t.dependsOn(this)) } + + /** + * Gets the efferent coupling of a module -- the number of modules that + * it directly depends on. + */ + int getEfferentCoupling() { result = count(ModuleMetricsWithPointsTo t | this.dependsOn(t)) } + + private predicate dependsOn(Module other) { + other != this and + ( + exists(FunctionMetricsWithPointsTo f1, FunctionMetricsWithPointsTo f2 | + f1.getADependency() = f2 + | + f1.getEnclosingModule() = this and f2.getEnclosingModule() = other + ) + or + exists(Function f, Call c, ClassObject cls | c.getScope() = f and f.getScope() = this | + c.getFunc().(ExprWithPointsTo).refersTo(cls) and + cls.getPyClass().getEnclosingModule() = other + ) + ) + } + + override string getAQlClass() { result = "ModuleMetrics" } +} + +/** Helpers for coupling */ +predicate unique_root_method(Function func, string name) { + name = func.getName() and + not exists(FunctionObject f, FunctionObject other | + f.getFunction() = func and + other.getName() = name + | + not other.overrides(f) + ) +} diff --git a/python/ql/lib/python.qll b/python/ql/lib/python.qll index 54306408a333..d127e297dbb4 100644 --- a/python/ql/lib/python.qll +++ b/python/ql/lib/python.qll @@ -14,7 +14,7 @@ import semmle.python.Patterns import semmle.python.Keywords import semmle.python.Comprehensions import semmle.python.Flow -private import semmle.python.Metrics +import semmle.python.Metrics import semmle.python.Constants import semmle.python.Scope import semmle.python.Comment diff --git a/python/ql/lib/semmle/python/Metrics.qll b/python/ql/lib/semmle/python/Metrics.qll index 4959a06317ff..26560bad25c9 100644 --- a/python/ql/lib/semmle/python/Metrics.qll +++ b/python/ql/lib/semmle/python/Metrics.qll @@ -1,5 +1,5 @@ import python -private import LegacyPointsTo +private import semmle.python.SelfAttribute /** The metrics for a function */ class FunctionMetrics extends Function { @@ -18,76 +18,6 @@ class FunctionMetrics extends Function { /** Gets the number of lines of docstring in the function */ int getNumberOfLinesOfDocStrings() { py_docstringlines(this, result) } - /** - * Gets the cyclomatic complexity of the function: - * The number of linearly independent paths through the source code. - * Computed as E - N + 2P, - * where - * E = the number of edges of the graph. - * N = the number of nodes of the graph. - * P = the number of connected components, which for a single function is 1. - */ - int getCyclomaticComplexity() { - exists(int e, int n | - n = count(BasicBlockWithPointsTo b | b = this.getABasicBlock() and b.likelyReachable()) and - e = - count(BasicBlockWithPointsTo b1, BasicBlockWithPointsTo b2 | - b1 = this.getABasicBlock() and - b1.likelyReachable() and - b2 = this.getABasicBlock() and - b2.likelyReachable() and - b2 = b1.getASuccessor() and - not b1.unlikelySuccessor(b2) - ) - | - result = e - n + 2 - ) - } - - private BasicBlock getABasicBlock() { - result = this.getEntryNode().getBasicBlock() - or - exists(BasicBlock mid | mid = this.getABasicBlock() and result = mid.getASuccessor()) - } - - /** - * Dependency of Callables - * One callable "this" depends on another callable "result" - * if "this" makes some call to a method that may end up being "result". - */ - FunctionMetrics getADependency() { - result != this and - not non_coupling_method(result) and - exists(Call call | call.getScope() = this | - exists(FunctionObject callee | callee.getFunction() = result | - call.getAFlowNode().getFunction().(ControlFlowNodeWithPointsTo).refersTo(callee) - ) - or - exists(Attribute a | call.getFunc() = a | - unique_root_method(result, a.getName()) - or - exists(Name n | a.getObject() = n and n.getId() = "self" | - result.getScope() = this.getScope() and - result.getName() = a.getName() - ) - ) - ) - } - - /** - * Afferent Coupling - * the number of callables that depend on this method. - * This is sometimes called the "fan-in" of a method. - */ - int getAfferentCoupling() { result = count(FunctionMetrics m | m.getADependency() = this) } - - /** - * Efferent Coupling - * the number of methods that this method depends on - * This is sometimes called the "fan-out" of a method. - */ - int getEfferentCoupling() { result = count(FunctionMetrics m | this.getADependency() = m) } - int getNumberOfParametersWithoutDefault() { result = this.getPositionalParameterCount() - @@ -116,36 +46,6 @@ class ClassMetrics extends Class { /** Gets the number of lines of docstrings in the class */ int getNumberOfLinesOfDocStrings() { py_docstringlines(this, result) } - private predicate dependsOn(Class other) { - other != this and - ( - exists(FunctionMetrics f1, FunctionMetrics f2 | f1.getADependency() = f2 | - f1.getScope() = this and f2.getScope() = other - ) - or - exists(Function f, Call c, ClassObject cls | c.getScope() = f and f.getScope() = this | - c.getFunc().(ExprWithPointsTo).refersTo(cls) and - cls.getPyClass() = other - ) - ) - } - - /** - * Gets the afferent coupling of a class -- the number of classes that - * directly depend on it. - */ - int getAfferentCoupling() { result = count(ClassMetrics t | t.dependsOn(this)) } - - /** - * Gets the efferent coupling of a class -- the number of classes that - * it directly depends on. - */ - int getEfferentCoupling() { result = count(ClassMetrics t | this.dependsOn(t)) } - - int getInheritanceDepth() { - exists(ClassObject cls | cls.getPyClass() = this | result = max(classInheritanceDepth(cls))) - } - /* -------- CHIDAMBER AND KEMERER LACK OF COHESION IN METHODS ------------ */ /* * The aim of this metric is to try and determine whether a class @@ -245,21 +145,6 @@ class ClassMetrics extends Class { int getLackOfCohesionHM() { result = count(int line | this.unionSubgraph(_, line)) } } -private int classInheritanceDepth(ClassObject cls) { - /* Prevent run-away recursion in case of circular inheritance */ - not cls.getASuperType() = cls and - ( - exists(ClassObject sup | cls.getABaseType() = sup | result = classInheritanceDepth(sup) + 1) - or - not exists(cls.getABaseType()) and - ( - major_version() = 2 and result = 0 - or - major_version() > 2 and result = 1 - ) - ) -} - class ModuleMetrics extends Module { /** Gets the total number of lines (including blank lines) in the module */ int getNumberOfLines() { py_alllines(this, result) } @@ -272,43 +157,6 @@ class ModuleMetrics extends Module { /** Gets the number of lines of docstrings in the module */ int getNumberOfLinesOfDocStrings() { py_docstringlines(this, result) } - - /** - * Gets the afferent coupling of a class -- the number of classes that - * directly depend on it. - */ - int getAfferentCoupling() { result = count(ModuleMetrics t | t.dependsOn(this)) } - - /** - * Gets the efferent coupling of a class -- the number of classes that - * it directly depends on. - */ - int getEfferentCoupling() { result = count(ModuleMetrics t | this.dependsOn(t)) } - - private predicate dependsOn(Module other) { - other != this and - ( - exists(FunctionMetrics f1, FunctionMetrics f2 | f1.getADependency() = f2 | - f1.getEnclosingModule() = this and f2.getEnclosingModule() = other - ) - or - exists(Function f, Call c, ClassObject cls | c.getScope() = f and f.getScope() = this | - c.getFunc().(ExprWithPointsTo).refersTo(cls) and - cls.getPyClass().getEnclosingModule() = other - ) - ) - } -} - -/** Helpers for coupling */ -predicate unique_root_method(Function func, string name) { - name = func.getName() and - not exists(FunctionObject f, FunctionObject other | - f.getFunction() = func and - other.getName() = name - | - not other.overrides(f) - ) } predicate non_coupling_method(Function f) { From e8de8433f4a8493ffb50292f2d7f4ffd0cb7e258 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 18 Feb 2026 16:41:57 +0000 Subject: [PATCH 155/243] Python: Update all metrics-dependant queries The ones that no longer require points-to no longer import `LegacyPointsTo`. The ones that do use the specific `...MetricsWithPointsTo` classes that are applicable. --- python/ql/src/Functions/OverlyComplexDelMethod.ql | 2 +- python/ql/src/Metrics/CLinesOfCode.ql | 1 - python/ql/src/Metrics/ClassAfferentCoupling.ql | 2 +- python/ql/src/Metrics/ClassEfferentCoupling.ql | 2 +- python/ql/src/Metrics/CommentRatio.ql | 1 - python/ql/src/Metrics/CyclomaticComplexity.ql | 2 +- python/ql/src/Metrics/DocStringRatio.ql | 1 - python/ql/src/Metrics/FLines.ql | 1 - python/ql/src/Metrics/FLinesOfCode.ql | 1 - python/ql/src/Metrics/FLinesOfComments.ql | 1 - python/ql/src/Metrics/FunctionNumberOfCalls.ql | 1 - python/ql/src/Metrics/FunctionStatementNestingDepth.ql | 1 - python/ql/src/Metrics/History/HChurn.ql | 1 - python/ql/src/Metrics/History/HLinesAdded.ql | 1 - python/ql/src/Metrics/History/HLinesDeleted.ql | 1 - python/ql/src/Metrics/History/HNumberOfAuthors.ql | 1 - python/ql/src/Metrics/History/HNumberOfCoCommits.ql | 1 - python/ql/src/Metrics/History/HNumberOfReCommits.ql | 1 - python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql | 1 - python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql | 1 - python/ql/src/Metrics/LackofCohesionInMethodsCK.ql | 1 - python/ql/src/Metrics/LackofCohesionInMethodsHM.ql | 1 - python/ql/src/Metrics/ModuleAfferentCoupling.ql | 2 +- python/ql/src/Metrics/ModuleEfferentCoupling.ql | 2 +- python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql | 1 - python/ql/src/Summary/LinesOfCode.ql | 1 - python/ql/src/Summary/LinesOfUserCode.ql | 1 - python/ql/test/library-tests/ControlFlow/general/Cyclo.ql | 2 +- 28 files changed, 7 insertions(+), 28 deletions(-) diff --git a/python/ql/src/Functions/OverlyComplexDelMethod.ql b/python/ql/src/Functions/OverlyComplexDelMethod.ql index 12776db1b60f..6b08a40fa290 100644 --- a/python/ql/src/Functions/OverlyComplexDelMethod.ql +++ b/python/ql/src/Functions/OverlyComplexDelMethod.ql @@ -18,6 +18,6 @@ from FunctionValue method where exists(ClassValue c | c.declaredAttribute("__del__") = method and - method.getScope().(FunctionMetrics).getCyclomaticComplexity() > 3 + method.getScope().(FunctionMetricsWithPointsTo).getCyclomaticComplexity() > 3 ) select method, "Overly complex '__del__' method." diff --git a/python/ql/src/Metrics/CLinesOfCode.ql b/python/ql/src/Metrics/CLinesOfCode.ql index 66a107a521ff..274d45e84155 100644 --- a/python/ql/src/Metrics/CLinesOfCode.ql +++ b/python/ql/src/Metrics/CLinesOfCode.ql @@ -10,7 +10,6 @@ */ import python -private import LegacyPointsTo from FunctionMetrics f select f, f.getNumberOfLinesOfCode() as n order by n desc diff --git a/python/ql/src/Metrics/ClassAfferentCoupling.ql b/python/ql/src/Metrics/ClassAfferentCoupling.ql index 3faf714d09c9..69983f564ec6 100644 --- a/python/ql/src/Metrics/ClassAfferentCoupling.ql +++ b/python/ql/src/Metrics/ClassAfferentCoupling.ql @@ -13,5 +13,5 @@ import python private import LegacyPointsTo -from ClassMetrics cls +from ClassMetricsWithPointsTo cls select cls, cls.getAfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/ClassEfferentCoupling.ql b/python/ql/src/Metrics/ClassEfferentCoupling.ql index b4c5a29696bd..08016a838891 100644 --- a/python/ql/src/Metrics/ClassEfferentCoupling.ql +++ b/python/ql/src/Metrics/ClassEfferentCoupling.ql @@ -13,5 +13,5 @@ import python private import LegacyPointsTo -from ClassMetrics cls +from ClassMetricsWithPointsTo cls select cls, cls.getEfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/CommentRatio.ql b/python/ql/src/Metrics/CommentRatio.ql index 38394c1bf4fd..5886c9d09e73 100644 --- a/python/ql/src/Metrics/CommentRatio.ql +++ b/python/ql/src/Metrics/CommentRatio.ql @@ -12,7 +12,6 @@ */ import python -private import LegacyPointsTo from ModuleMetrics mm where mm.getNumberOfLines() > 0 diff --git a/python/ql/src/Metrics/CyclomaticComplexity.ql b/python/ql/src/Metrics/CyclomaticComplexity.ql index 3d9ca10dd99b..1d9874ac12c6 100644 --- a/python/ql/src/Metrics/CyclomaticComplexity.ql +++ b/python/ql/src/Metrics/CyclomaticComplexity.ql @@ -15,6 +15,6 @@ import python private import LegacyPointsTo -from FunctionMetrics func, int complexity +from FunctionMetricsWithPointsTo func, int complexity where complexity = func.getCyclomaticComplexity() select func, complexity order by complexity desc diff --git a/python/ql/src/Metrics/DocStringRatio.ql b/python/ql/src/Metrics/DocStringRatio.ql index 824ff5a35093..3c763c7742b1 100644 --- a/python/ql/src/Metrics/DocStringRatio.ql +++ b/python/ql/src/Metrics/DocStringRatio.ql @@ -11,7 +11,6 @@ */ import python -private import LegacyPointsTo from ModuleMetrics mm where mm.getNumberOfLines() > 0 diff --git a/python/ql/src/Metrics/FLines.ql b/python/ql/src/Metrics/FLines.ql index dc5418711c9c..01ea5a04f77f 100644 --- a/python/ql/src/Metrics/FLines.ql +++ b/python/ql/src/Metrics/FLines.ql @@ -9,7 +9,6 @@ */ import python -private import LegacyPointsTo from ModuleMetrics m, int n where n = m.getNumberOfLines() diff --git a/python/ql/src/Metrics/FLinesOfCode.ql b/python/ql/src/Metrics/FLinesOfCode.ql index 8159eb86c572..72131d3b74f8 100644 --- a/python/ql/src/Metrics/FLinesOfCode.ql +++ b/python/ql/src/Metrics/FLinesOfCode.ql @@ -11,7 +11,6 @@ */ import python -private import LegacyPointsTo from ModuleMetrics m, int n where n = m.getNumberOfLinesOfCode() diff --git a/python/ql/src/Metrics/FLinesOfComments.ql b/python/ql/src/Metrics/FLinesOfComments.ql index ac4b295003a1..33523054f0ca 100644 --- a/python/ql/src/Metrics/FLinesOfComments.ql +++ b/python/ql/src/Metrics/FLinesOfComments.ql @@ -10,7 +10,6 @@ */ import python -private import LegacyPointsTo from ModuleMetrics m, int n where n = m.getNumberOfLinesOfComments() + m.getNumberOfLinesOfDocStrings() diff --git a/python/ql/src/Metrics/FunctionNumberOfCalls.ql b/python/ql/src/Metrics/FunctionNumberOfCalls.ql index 60171c790bfb..fb4dfe5a9d2e 100644 --- a/python/ql/src/Metrics/FunctionNumberOfCalls.ql +++ b/python/ql/src/Metrics/FunctionNumberOfCalls.ql @@ -9,7 +9,6 @@ */ import python -private import LegacyPointsTo from FunctionMetrics func select func, func.getNumberOfCalls() as n order by n desc diff --git a/python/ql/src/Metrics/FunctionStatementNestingDepth.ql b/python/ql/src/Metrics/FunctionStatementNestingDepth.ql index 94f7e355750e..ab40cc6068dd 100644 --- a/python/ql/src/Metrics/FunctionStatementNestingDepth.ql +++ b/python/ql/src/Metrics/FunctionStatementNestingDepth.ql @@ -11,7 +11,6 @@ */ import python -private import LegacyPointsTo from FunctionMetrics func select func, func.getStatementNestingDepth() as n order by n desc diff --git a/python/ql/src/Metrics/History/HChurn.ql b/python/ql/src/Metrics/History/HChurn.ql index dba288436709..f9d90d5eb197 100644 --- a/python/ql/src/Metrics/History/HChurn.ql +++ b/python/ql/src/Metrics/History/HChurn.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo from ModuleMetrics m, int n where diff --git a/python/ql/src/Metrics/History/HLinesAdded.ql b/python/ql/src/Metrics/History/HLinesAdded.ql index 51a0af62460b..8d13986988d9 100644 --- a/python/ql/src/Metrics/History/HLinesAdded.ql +++ b/python/ql/src/Metrics/History/HLinesAdded.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo from ModuleMetrics m, int n where diff --git a/python/ql/src/Metrics/History/HLinesDeleted.ql b/python/ql/src/Metrics/History/HLinesDeleted.ql index 3016c9f128b2..a1e3ac0275cb 100644 --- a/python/ql/src/Metrics/History/HLinesDeleted.ql +++ b/python/ql/src/Metrics/History/HLinesDeleted.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo from ModuleMetrics m, int n where diff --git a/python/ql/src/Metrics/History/HNumberOfAuthors.ql b/python/ql/src/Metrics/History/HNumberOfAuthors.ql index ff00773d98ce..1bc1dbb70b00 100644 --- a/python/ql/src/Metrics/History/HNumberOfAuthors.ql +++ b/python/ql/src/Metrics/History/HNumberOfAuthors.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo from ModuleMetrics m where exists(m.getNumberOfLinesOfCode()) diff --git a/python/ql/src/Metrics/History/HNumberOfCoCommits.ql b/python/ql/src/Metrics/History/HNumberOfCoCommits.ql index 4192ecf57acd..e998aaa66d4a 100644 --- a/python/ql/src/Metrics/History/HNumberOfCoCommits.ql +++ b/python/ql/src/Metrics/History/HNumberOfCoCommits.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo int committedFiles(Commit commit) { result = count(commit.getAnAffectedFile()) } diff --git a/python/ql/src/Metrics/History/HNumberOfReCommits.ql b/python/ql/src/Metrics/History/HNumberOfReCommits.ql index f12c51840dc9..14330692ff93 100644 --- a/python/ql/src/Metrics/History/HNumberOfReCommits.ql +++ b/python/ql/src/Metrics/History/HNumberOfReCommits.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo predicate inRange(Commit first, Commit second) { first.getAnAffectedFile() = second.getAnAffectedFile() and diff --git a/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql b/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql index 9b787f529576..6469b393dcea 100644 --- a/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql +++ b/python/ql/src/Metrics/History/HNumberOfRecentAuthors.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo from ModuleMetrics m where exists(m.getNumberOfLinesOfCode()) diff --git a/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql b/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql index 501094907af0..9ec94df7e763 100644 --- a/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql +++ b/python/ql/src/Metrics/History/HNumberOfRecentChangedFiles.ql @@ -10,7 +10,6 @@ import python import external.VCS -private import LegacyPointsTo from ModuleMetrics m where diff --git a/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql b/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql index f06b050827cd..c0ef582c32b6 100644 --- a/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql +++ b/python/ql/src/Metrics/LackofCohesionInMethodsCK.ql @@ -9,7 +9,6 @@ */ import python -private import LegacyPointsTo from ClassMetrics cls select cls, cls.getLackOfCohesionCK() as n order by n desc diff --git a/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql b/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql index 1456b76b286f..5cc77ecfb4f7 100644 --- a/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql +++ b/python/ql/src/Metrics/LackofCohesionInMethodsHM.ql @@ -9,7 +9,6 @@ */ import python -private import LegacyPointsTo from ClassMetrics cls select cls, cls.getLackOfCohesionHM() as n order by n desc diff --git a/python/ql/src/Metrics/ModuleAfferentCoupling.ql b/python/ql/src/Metrics/ModuleAfferentCoupling.ql index d61cc61e4daf..7203d12ae843 100644 --- a/python/ql/src/Metrics/ModuleAfferentCoupling.ql +++ b/python/ql/src/Metrics/ModuleAfferentCoupling.ql @@ -13,5 +13,5 @@ import python private import LegacyPointsTo -from ModuleMetrics m +from ModuleMetricsWithPointsTo m select m, m.getAfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/ModuleEfferentCoupling.ql b/python/ql/src/Metrics/ModuleEfferentCoupling.ql index bfabf4b60128..a392a44e7519 100644 --- a/python/ql/src/Metrics/ModuleEfferentCoupling.ql +++ b/python/ql/src/Metrics/ModuleEfferentCoupling.ql @@ -13,5 +13,5 @@ import python private import LegacyPointsTo -from ModuleMetrics m +from ModuleMetricsWithPointsTo m select m, m.getEfferentCoupling() as n order by n desc diff --git a/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql b/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql index e5164499331c..00a4c1bf0db0 100644 --- a/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql +++ b/python/ql/src/Metrics/NumberOfParametersWithoutDefault.ql @@ -11,7 +11,6 @@ */ import python -private import LegacyPointsTo from FunctionMetrics func select func, func.getNumberOfParametersWithoutDefault() as n order by n desc diff --git a/python/ql/src/Summary/LinesOfCode.ql b/python/ql/src/Summary/LinesOfCode.ql index 04cb33a34515..24f1f38fbd70 100644 --- a/python/ql/src/Summary/LinesOfCode.ql +++ b/python/ql/src/Summary/LinesOfCode.ql @@ -10,6 +10,5 @@ */ import python -private import LegacyPointsTo select sum(ModuleMetrics m | | m.getNumberOfLinesOfCode()) diff --git a/python/ql/src/Summary/LinesOfUserCode.ql b/python/ql/src/Summary/LinesOfUserCode.ql index f920ebb51f41..331350dae4e8 100644 --- a/python/ql/src/Summary/LinesOfUserCode.ql +++ b/python/ql/src/Summary/LinesOfUserCode.ql @@ -14,7 +14,6 @@ import python import semmle.python.filters.GeneratedCode -private import LegacyPointsTo select sum(ModuleMetrics m | exists(m.getFile().getRelativePath()) and diff --git a/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql b/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql index a36375b7f3d7..5a35a35922c9 100644 --- a/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql +++ b/python/ql/test/library-tests/ControlFlow/general/Cyclo.ql @@ -1,5 +1,5 @@ import python private import LegacyPointsTo -from FunctionMetrics func +from FunctionMetricsWithPointsTo func select func.toString(), func.getCyclomaticComplexity() From 07099f17d670859846e59b9ecb83d948fe6f5754 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 18 Feb 2026 16:51:03 +0000 Subject: [PATCH 156/243] Python: Add change note --- .../change-notes/2026-02-18-remove-points-to-from-metrics.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/lib/change-notes/2026-02-18-remove-points-to-from-metrics.md diff --git a/python/ql/lib/change-notes/2026-02-18-remove-points-to-from-metrics.md b/python/ql/lib/change-notes/2026-02-18-remove-points-to-from-metrics.md new file mode 100644 index 000000000000..ed64206bd3b3 --- /dev/null +++ b/python/ql/lib/change-notes/2026-02-18-remove-points-to-from-metrics.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- + +- The `Metrics` library no longer contains code that depends on the points-to analysis. The removed functionality has instead been moved to the `LegacyPointsTo` module, to classes like `ModuleMetricsWithPointsTo` etc. If you depend on any of these classes, you must now remember to import `LegacyPointsTo`, and use the appropriate types in order to use the points-to-based functionality. From 38219f6ebb4612a6af966e80a31292437c810ec3 Mon Sep 17 00:00:00 2001 From: "REDMOND\\brodes" Date: Thu, 19 Feb 2026 14:08:36 -0500 Subject: [PATCH 157/243] C++: Fixing FP in unit tests. --- .../UncheckedLeapYearAfterYearModification.expected | 2 -- .../Leap Year/UncheckedLeapYearAfterYearModification/test.cpp | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected index 30b6dad12083..773cb92b0b13 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/UncheckedLeapYearAfterYearModification.expected @@ -3,7 +3,6 @@ | test.cpp:440:2:440:11 | ... ++ | test.cpp:440:2:440:11 | ... ++ | test.cpp:440:2:440:11 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:456:2:456:12 | ... ++ | test.cpp:456:2:456:12 | ... ++ | test.cpp:456:2:456:12 | ... ++ | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:681:2:681:23 | ... += ... | test.cpp:681:2:681:23 | ... += ... | test.cpp:681:2:681:23 | ... += ... | Year field has been modified, but no appropriate check for LeapYear was found. | -| test.cpp:769:2:769:23 | ... -= ... | test.cpp:769:2:769:23 | ... -= ... | test.cpp:769:2:769:23 | ... -= ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:813:2:813:40 | ... = ... | test.cpp:813:21:813:40 | ... + ... | test.cpp:813:2:813:40 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:818:2:818:24 | ... = ... | test.cpp:818:13:818:24 | ... + ... | test.cpp:818:2:818:24 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | | test.cpp:951:3:951:25 | ... = ... | test.cpp:951:14:951:25 | ... + ... | test.cpp:951:3:951:25 | ... = ... | Year field has been modified, but no appropriate check for LeapYear was found. | @@ -75,7 +74,6 @@ nodes | test.cpp:456:2:456:12 | ... ++ | semmle.label | ... ++ | | test.cpp:482:3:482:12 | ... ++ | semmle.label | ... ++ | | test.cpp:681:2:681:23 | ... += ... | semmle.label | ... += ... | -| test.cpp:769:2:769:23 | ... -= ... | semmle.label | ... -= ... | | test.cpp:813:2:813:40 | ... = ... | semmle.label | ... = ... | | test.cpp:813:21:813:40 | ... + ... | semmle.label | ... + ... | | test.cpp:818:2:818:24 | ... = ... | semmle.label | ... = ... | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp index 850ef560536f..a2dce39cc852 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp +++ b/cpp/ql/test/query-tests/Likely Bugs/Leap Year/UncheckedLeapYearAfterYearModification/test.cpp @@ -766,7 +766,7 @@ void Incorrect_LinuxPattern() /* from 1900 -> from 1980 */ // BUG - UncheckedLeapYearAfterYearModification - timeinfo.tm_year -= 80; // $ Alert[cpp/leap-year/unchecked-after-arithmetic-year-modification] + timeinfo.tm_year -= 80; /* 0~11 -> 1~12 */ timeinfo.tm_mon++; /* 0~59 -> 0~29(2sec counts) */ From 27638c70293cf1bc924716ea9659b28184eba1e1 Mon Sep 17 00:00:00 2001 From: Asger F Date: Fri, 20 Feb 2026 11:20:46 +0100 Subject: [PATCH 158/243] JS: Add change note --- .../ql/lib/change-notes/2026-02-20-mobx-react-observer.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2026-02-20-mobx-react-observer.md diff --git a/javascript/ql/lib/change-notes/2026-02-20-mobx-react-observer.md b/javascript/ql/lib/change-notes/2026-02-20-mobx-react-observer.md new file mode 100644 index 000000000000..fee41daa2903 --- /dev/null +++ b/javascript/ql/lib/change-notes/2026-02-20-mobx-react-observer.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added support for React components wrapped by `observer` from `mobx-react` and `mobx-react-lite`. From fdbd49a843b0ed77f4dc39d2c9cc58b68f2f82f1 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 20 Feb 2026 13:38:24 +0100 Subject: [PATCH 159/243] C++: Improve clarity in comment Co-authored-by: Mathias Vorreiter Pedersen --- .../lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index 3bf729836fc1..c41c221898bd 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -560,7 +560,7 @@ private module BoundsEstimate { // by the condition. In this case all lower bounds flow to `{ e1 }` and only // lower bounds that are smaller than `c` flow to `{ e2 }`. // - // The largest bound possible for `e3` is the number of bounds on `x` plus + // The largest number of bounds possible for `e3` is the number of bounds on `x` plus // one. This happens when all bounds flow from `x` to `e1` to `e3` and the // bound `c` can flow to `e2` to `e3`. // From 8eed18a8ff379e493b3983dcd64bdba73263d920 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 20 Feb 2026 16:24:19 +0100 Subject: [PATCH 160/243] C++: Fix typo Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com> --- .../lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll index c41c221898bd..86753abc5b79 100644 --- a/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll +++ b/cpp/ql/lib/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll @@ -586,7 +586,7 @@ private module BoundsEstimate { // "other" half flow from the condition to `e3` as a guard phi node. exists(float varBounds | // If there's different `access`es, then they refer to the same - // variable with the same lower bounds. Hence adding these guards make no + // variable with the same lower bounds. Hence adding these guards makes no // sense (the implementation will take the union, but they'll be removed by // deduplication). Hence we use `max` as an approximation. varBounds = From a935d97190e0a20ea41875e54325235d008b246d Mon Sep 17 00:00:00 2001 From: Jeroen Ketema Date: Thu, 8 Jan 2026 18:01:06 +0100 Subject: [PATCH 161/243] C++: Update expected test results after extractor changes --- .../builtins/complex/builtin.expected | 4 +- .../controlflow/guards/GuardsCompare.expected | 12 +- .../controlflow/guards/GuardsEnsure.expected | 12 +- .../SimpleRangeAnalysis/nrOfBounds.expected | 142 +++++++++--------- .../MistypedFunctionArguments.expected | 8 +- 5 files changed, 89 insertions(+), 89 deletions(-) diff --git a/cpp/ql/test/library-tests/builtins/complex/builtin.expected b/cpp/ql/test/library-tests/builtins/complex/builtin.expected index c1b9b18a4126..2537ff065ac6 100644 --- a/cpp/ql/test/library-tests/builtins/complex/builtin.expected +++ b/cpp/ql/test/library-tests/builtins/complex/builtin.expected @@ -1,4 +1,4 @@ | complex.c:3:23:3:51 | __builtin_complex | file://:0:0:0:0 | _Complex double | complex.c:3:41:3:44 | real | file://:0:0:0:0 | double | complex.c:3:47:3:50 | imag | file://:0:0:0:0 | double | -| complex.c:4:23:4:57 | __builtin_complex | file://:0:0:0:0 | _Complex double | complex.c:4:41:4:47 | 2.71828000000000003 | file://:0:0:0:0 | double | complex.c:4:50:4:56 | 3.141589999999999883 | file://:0:0:0:0 | double | +| complex.c:4:23:4:57 | __builtin_complex | file://:0:0:0:0 | _Complex double | complex.c:4:41:4:47 | 2.71828 | file://:0:0:0:0 | double | complex.c:4:50:4:56 | 3.14159 | file://:0:0:0:0 | double | | complex.c:8:22:8:52 | __builtin_complex | file://:0:0:0:0 | _Complex float | complex.c:8:40:8:44 | realf | file://:0:0:0:0 | float | complex.c:8:47:8:51 | imagf | file://:0:0:0:0 | float | -| complex.c:9:22:9:52 | __builtin_complex | file://:0:0:0:0 | _Complex float | complex.c:9:40:9:44 | 1.230000019 | file://:0:0:0:0 | float | complex.c:9:47:9:51 | 4.559999943 | file://:0:0:0:0 | float | +| complex.c:9:22:9:52 | __builtin_complex | file://:0:0:0:0 | _Complex float | complex.c:9:40:9:44 | 1.23 | file://:0:0:0:0 | float | complex.c:9:47:9:51 | 4.56 | file://:0:0:0:0 | float | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected index 4d78c4016dab..f6833ab4ff13 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected @@ -298,16 +298,16 @@ | test.c:182:8:182:34 | ! ... | ! ... == 1 when ! ... is true | | test.c:182:8:182:34 | ! ... | ... && ... != 0 when ! ... is false | | test.c:182:8:182:34 | ! ... | ... && ... == 0 when ! ... is true | -| test.c:182:10:182:20 | ... >= ... | 9.999999999999999547e-07 < foo+1 when ... >= ... is true | -| test.c:182:10:182:20 | ... >= ... | 9.999999999999999547e-07 >= foo+1 when ... >= ... is false | +| test.c:182:10:182:20 | ... >= ... | 1.0E-6 < foo+1 when ... >= ... is true | +| test.c:182:10:182:20 | ... >= ... | 1.0E-6 >= foo+1 when ... >= ... is false | | test.c:182:10:182:20 | ... >= ... | ... >= ... != 0 when ... >= ... is true | | test.c:182:10:182:20 | ... >= ... | ... >= ... != 1 when ... >= ... is false | | test.c:182:10:182:20 | ... >= ... | ... >= ... == 0 when ... >= ... is false | | test.c:182:10:182:20 | ... >= ... | ... >= ... == 1 when ... >= ... is true | -| test.c:182:10:182:20 | ... >= ... | foo < 9.999999999999999547e-07+0 when ... >= ... is false | -| test.c:182:10:182:20 | ... >= ... | foo >= 9.999999999999999547e-07+0 when ... >= ... is true | +| test.c:182:10:182:20 | ... >= ... | foo < 1.0E-6+0 when ... >= ... is false | +| test.c:182:10:182:20 | ... >= ... | foo >= 1.0E-6+0 when ... >= ... is true | | test.c:182:10:182:33 | ... && ... | 1.0 >= foo+1 when ... && ... is true | -| test.c:182:10:182:33 | ... && ... | 9.999999999999999547e-07 < foo+1 when ... && ... is true | +| test.c:182:10:182:33 | ... && ... | 1.0E-6 < foo+1 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | ! ... != 0 when ... && ... is false | | test.c:182:10:182:33 | ... && ... | ! ... != 1 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | ! ... == 0 when ... && ... is true | @@ -319,7 +319,7 @@ | test.c:182:10:182:33 | ... && ... | ... >= ... != 0 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | ... >= ... == 1 when ... && ... is true | | test.c:182:10:182:33 | ... && ... | foo < 1.0+0 when ... && ... is true | -| test.c:182:10:182:33 | ... && ... | foo >= 9.999999999999999547e-07+0 when ... && ... is true | +| test.c:182:10:182:33 | ... && ... | foo >= 1.0E-6+0 when ... && ... is true | | test.c:182:25:182:33 | ... < ... | 1.0 < foo+1 when ... < ... is false | | test.c:182:25:182:33 | ... < ... | 1.0 >= foo+1 when ... < ... is true | | test.c:182:25:182:33 | ... < ... | ... < ... != 0 when ... < ... is true | diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected index 5a364e3deaad..cf99d2c20b8d 100644 --- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected +++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected @@ -169,12 +169,12 @@ binary | test.c:176:8:176:15 | ! ... | test.c:176:14:176:14 | b | < | test.c:176:10:176:10 | a | 1 | test.c:176:18:178:5 | { ... } | | test.c:176:10:176:14 | ... < ... | test.c:176:10:176:10 | a | >= | test.c:176:14:176:14 | b | 0 | test.c:176:18:178:5 | { ... } | | test.c:176:10:176:14 | ... < ... | test.c:176:14:176:14 | b | < | test.c:176:10:176:10 | a | 1 | test.c:176:18:178:5 | { ... } | -| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | test.c:181:25:182:20 | { ... } | -| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | test.c:182:25:182:33 | foo | -| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | -| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | test.c:182:25:182:33 | foo | -| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 9.999999999999999547e-07 | 0 | test.c:181:25:182:20 | { ... } | -| test.c:182:10:182:33 | ... && ... | test.c:182:17:182:20 | 9.999999999999999547e-07 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 1.0E-6 | 0 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:20 | ... >= ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 1.0E-6 | 0 | test.c:182:25:182:33 | foo | +| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 1.0E-6 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:20 | ... >= ... | test.c:182:17:182:20 | 1.0E-6 | < | test.c:182:10:182:12 | foo | 1 | test.c:182:25:182:33 | foo | +| test.c:182:10:182:33 | ... && ... | test.c:182:10:182:12 | foo | >= | test.c:182:17:182:20 | 1.0E-6 | 0 | test.c:181:25:182:20 | { ... } | +| test.c:182:10:182:33 | ... && ... | test.c:182:17:182:20 | 1.0E-6 | < | test.c:182:10:182:12 | foo | 1 | test.c:181:25:182:20 | { ... } | | test.c:182:10:182:33 | ... && ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | test.c:181:25:182:20 | { ... } | | test.c:182:10:182:33 | ... && ... | test.c:182:31:182:33 | 1.0 | >= | test.c:182:25:182:27 | foo | 1 | test.c:181:25:182:20 | { ... } | | test.c:182:25:182:33 | ... < ... | test.c:182:25:182:27 | foo | < | test.c:182:31:182:33 | 1.0 | 0 | test.c:181:25:182:20 | { ... } | diff --git a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected index b8424b8f01ad..7d441d6293a6 100644 --- a/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected +++ b/cpp/ql/test/library-tests/rangeanalysis/SimpleRangeAnalysis/nrOfBounds.expected @@ -1293,12 +1293,12 @@ estimateNrOfBounds | test.c:415:26:415:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:415:30:415:30 | q | 1.0 | 1.0 | 1.0 | | test.c:415:30:415:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:415:34:415:43 | 0.4743882700000000008 | 1.0 | -1.0 | -1.0 | -| test.c:415:47:415:56 | 0.1433388700000000071 | 1.0 | -1.0 | -1.0 | -| test.c:415:60:415:69 | 0.3527920299999999787 | 1.0 | -1.0 | -1.0 | -| test.c:415:73:415:82 | 0.3920645799999999959 | 1.0 | -1.0 | -1.0 | -| test.c:415:86:415:95 | 0.2154022499999999896 | 1.0 | -1.0 | -1.0 | -| test.c:415:99:415:108 | 0.4049680500000000238 | 1.0 | -1.0 | -1.0 | +| test.c:415:34:415:43 | 0.47438827 | 1.0 | -1.0 | -1.0 | +| test.c:415:47:415:56 | 0.14333887 | 1.0 | -1.0 | -1.0 | +| test.c:415:60:415:69 | 0.35279203 | 1.0 | -1.0 | -1.0 | +| test.c:415:73:415:82 | 0.39206458 | 1.0 | -1.0 | -1.0 | +| test.c:415:86:415:95 | 0.21540225 | 1.0 | -1.0 | -1.0 | +| test.c:415:99:415:108 | 0.40496805 | 1.0 | -1.0 | -1.0 | | test.c:416:14:416:14 | m | 2.0 | 1.0 | 1.0 | | test.c:416:14:416:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:416:18:416:18 | n | 3.0 | 1.0 | 1.0 | @@ -1309,12 +1309,12 @@ estimateNrOfBounds | test.c:416:26:416:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:416:30:416:30 | q | 3.0 | 1.0 | 1.0 | | test.c:416:30:416:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:416:34:416:43 | 0.3418334800000000229 | 1.0 | -1.0 | -1.0 | -| test.c:416:47:416:56 | 0.3533464000000000049 | 1.0 | -1.0 | -1.0 | -| test.c:416:60:416:69 | 0.2224785300000000077 | 1.0 | -1.0 | -1.0 | -| test.c:416:73:416:82 | 0.326618929999999974 | 1.0 | -1.0 | -1.0 | -| test.c:416:86:416:95 | 0.5927046500000000551 | 1.0 | -1.0 | -1.0 | -| test.c:416:99:416:108 | 0.5297741000000000255 | 1.0 | -1.0 | -1.0 | +| test.c:416:34:416:43 | 0.34183348 | 1.0 | -1.0 | -1.0 | +| test.c:416:47:416:56 | 0.3533464 | 1.0 | -1.0 | -1.0 | +| test.c:416:60:416:69 | 0.22247853 | 1.0 | -1.0 | -1.0 | +| test.c:416:73:416:82 | 0.32661893 | 1.0 | -1.0 | -1.0 | +| test.c:416:86:416:95 | 0.59270465 | 1.0 | -1.0 | -1.0 | +| test.c:416:99:416:108 | 0.5297741 | 1.0 | -1.0 | -1.0 | | test.c:417:14:417:14 | m | 3.5 | 1.0 | 1.0 | | test.c:417:14:417:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:417:18:417:18 | n | 8.0 | 1.0 | 1.0 | @@ -1325,12 +1325,12 @@ estimateNrOfBounds | test.c:417:26:417:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:417:30:417:30 | q | 8.0 | 1.0 | 1.0 | | test.c:417:30:417:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:417:34:417:43 | 0.774296030000000024 | 1.0 | -1.0 | -1.0 | -| test.c:417:47:417:56 | 0.3147808400000000062 | 1.0 | -1.0 | -1.0 | -| test.c:417:60:417:69 | 0.3123551399999999756 | 1.0 | -1.0 | -1.0 | -| test.c:417:73:417:82 | 0.05121255999999999725 | 1.0 | -1.0 | -1.0 | -| test.c:417:86:417:95 | 0.7931074500000000471 | 1.0 | -1.0 | -1.0 | -| test.c:417:99:417:108 | 0.6798145100000000385 | 1.0 | -1.0 | -1.0 | +| test.c:417:34:417:43 | 0.77429603 | 1.0 | -1.0 | -1.0 | +| test.c:417:47:417:56 | 0.31478084 | 1.0 | -1.0 | -1.0 | +| test.c:417:60:417:69 | 0.31235514 | 1.0 | -1.0 | -1.0 | +| test.c:417:73:417:82 | 0.05121256 | 1.0 | -1.0 | -1.0 | +| test.c:417:86:417:95 | 0.79310745 | 1.0 | -1.0 | -1.0 | +| test.c:417:99:417:108 | 0.67981451 | 1.0 | -1.0 | -1.0 | | test.c:418:14:418:14 | m | 5.75 | 1.0 | 1.0 | | test.c:418:14:418:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:418:18:418:18 | n | 20.5 | 1.0 | 1.0 | @@ -1341,12 +1341,12 @@ estimateNrOfBounds | test.c:418:26:418:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:418:30:418:30 | q | 20.5 | 1.0 | 1.0 | | test.c:418:30:418:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:418:34:418:43 | 0.4472955599999999809 | 1.0 | -1.0 | -1.0 | -| test.c:418:47:418:56 | 0.8059920200000000312 | 1.0 | -1.0 | -1.0 | -| test.c:418:60:418:69 | 0.9899726199999999698 | 1.0 | -1.0 | -1.0 | -| test.c:418:73:418:82 | 0.5995273199999999747 | 1.0 | -1.0 | -1.0 | -| test.c:418:86:418:95 | 0.3697694799999999837 | 1.0 | -1.0 | -1.0 | -| test.c:418:99:418:108 | 0.8386683499999999514 | 1.0 | -1.0 | -1.0 | +| test.c:418:34:418:43 | 0.44729556 | 1.0 | -1.0 | -1.0 | +| test.c:418:47:418:56 | 0.80599202 | 1.0 | -1.0 | -1.0 | +| test.c:418:60:418:69 | 0.98997262 | 1.0 | -1.0 | -1.0 | +| test.c:418:73:418:82 | 0.59952732 | 1.0 | -1.0 | -1.0 | +| test.c:418:86:418:95 | 0.36976948 | 1.0 | -1.0 | -1.0 | +| test.c:418:99:418:108 | 0.83866835 | 1.0 | -1.0 | -1.0 | | test.c:419:14:419:14 | m | 9.125 | 1.0 | 1.0 | | test.c:419:14:419:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:419:18:419:18 | n | 51.75 | 1.0 | 1.0 | @@ -1357,12 +1357,12 @@ estimateNrOfBounds | test.c:419:26:419:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:419:30:419:30 | q | 51.75 | 1.0 | 1.0 | | test.c:419:30:419:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:419:34:419:43 | 0.4931182800000000199 | 1.0 | -1.0 | -1.0 | -| test.c:419:47:419:56 | 0.9038991100000000056 | 1.0 | -1.0 | -1.0 | -| test.c:419:60:419:69 | 0.1059771199999999941 | 1.0 | -1.0 | -1.0 | -| test.c:419:73:419:82 | 0.2177842600000000073 | 1.0 | -1.0 | -1.0 | -| test.c:419:86:419:95 | 0.7248596600000000167 | 1.0 | -1.0 | -1.0 | -| test.c:419:99:419:108 | 0.6873487400000000136 | 1.0 | -1.0 | -1.0 | +| test.c:419:34:419:43 | 0.49311828 | 1.0 | -1.0 | -1.0 | +| test.c:419:47:419:56 | 0.90389911 | 1.0 | -1.0 | -1.0 | +| test.c:419:60:419:69 | 0.10597712 | 1.0 | -1.0 | -1.0 | +| test.c:419:73:419:82 | 0.21778426 | 1.0 | -1.0 | -1.0 | +| test.c:419:86:419:95 | 0.72485966 | 1.0 | -1.0 | -1.0 | +| test.c:419:99:419:108 | 0.68734874 | 1.0 | -1.0 | -1.0 | | test.c:420:14:420:14 | m | 14.1875 | 1.0 | 1.0 | | test.c:420:14:420:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:420:18:420:18 | n | 129.875 | 1.0 | 1.0 | @@ -1373,12 +1373,12 @@ estimateNrOfBounds | test.c:420:26:420:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:420:30:420:30 | q | 129.875 | 1.0 | 1.0 | | test.c:420:30:420:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:420:34:420:43 | 0.4745284799999999747 | 1.0 | -1.0 | -1.0 | -| test.c:420:47:420:56 | 0.107866500000000004 | 1.0 | -1.0 | -1.0 | -| test.c:420:60:420:69 | 0.1188457599999999947 | 1.0 | -1.0 | -1.0 | -| test.c:420:73:420:82 | 0.7616405200000000431 | 1.0 | -1.0 | -1.0 | -| test.c:420:86:420:95 | 0.3480889200000000239 | 1.0 | -1.0 | -1.0 | -| test.c:420:99:420:108 | 0.584408649999999974 | 1.0 | -1.0 | -1.0 | +| test.c:420:34:420:43 | 0.47452848 | 1.0 | -1.0 | -1.0 | +| test.c:420:47:420:56 | 0.1078665 | 1.0 | -1.0 | -1.0 | +| test.c:420:60:420:69 | 0.11884576 | 1.0 | -1.0 | -1.0 | +| test.c:420:73:420:82 | 0.76164052 | 1.0 | -1.0 | -1.0 | +| test.c:420:86:420:95 | 0.34808892 | 1.0 | -1.0 | -1.0 | +| test.c:420:99:420:108 | 0.58440865 | 1.0 | -1.0 | -1.0 | | test.c:421:14:421:14 | m | 21.78125 | 1.0 | 1.0 | | test.c:421:14:421:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:421:18:421:18 | n | 325.1875 | 1.0 | 1.0 | @@ -1390,11 +1390,11 @@ estimateNrOfBounds | test.c:421:30:421:30 | q | 325.1875 | 1.0 | 1.0 | | test.c:421:30:421:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:421:34:421:43 | 0.02524326 | 1.0 | -1.0 | -1.0 | -| test.c:421:47:421:56 | 0.8290504600000000446 | 1.0 | -1.0 | -1.0 | -| test.c:421:60:421:69 | 0.95823075000000002 | 1.0 | -1.0 | -1.0 | -| test.c:421:73:421:82 | 0.1251655799999999985 | 1.0 | -1.0 | -1.0 | -| test.c:421:86:421:95 | 0.8523517900000000536 | 1.0 | -1.0 | -1.0 | -| test.c:421:99:421:108 | 0.3623238400000000081 | 1.0 | -1.0 | -1.0 | +| test.c:421:47:421:56 | 0.82905046 | 1.0 | -1.0 | -1.0 | +| test.c:421:60:421:69 | 0.95823075 | 1.0 | -1.0 | -1.0 | +| test.c:421:73:421:82 | 0.12516558 | 1.0 | -1.0 | -1.0 | +| test.c:421:86:421:95 | 0.85235179 | 1.0 | -1.0 | -1.0 | +| test.c:421:99:421:108 | 0.36232384 | 1.0 | -1.0 | -1.0 | | test.c:422:14:422:14 | m | 33.171875 | 1.0 | 1.0 | | test.c:422:14:422:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:422:18:422:18 | n | 813.46875 | 1.0 | 1.0 | @@ -1405,12 +1405,12 @@ estimateNrOfBounds | test.c:422:26:422:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:422:30:422:30 | q | 813.46875 | 1.0 | 1.0 | | test.c:422:30:422:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:422:34:422:43 | 0.3870862600000000153 | 1.0 | -1.0 | -1.0 | -| test.c:422:47:422:56 | 0.3287604399999999871 | 1.0 | -1.0 | -1.0 | -| test.c:422:60:422:69 | 0.1496348500000000137 | 1.0 | -1.0 | -1.0 | -| test.c:422:73:422:82 | 0.4504110800000000192 | 1.0 | -1.0 | -1.0 | -| test.c:422:86:422:95 | 0.4864090899999999884 | 1.0 | -1.0 | -1.0 | -| test.c:422:99:422:108 | 0.8433127200000000157 | 1.0 | -1.0 | -1.0 | +| test.c:422:34:422:43 | 0.38708626 | 1.0 | -1.0 | -1.0 | +| test.c:422:47:422:56 | 0.32876044 | 1.0 | -1.0 | -1.0 | +| test.c:422:60:422:69 | 0.14963485 | 1.0 | -1.0 | -1.0 | +| test.c:422:73:422:82 | 0.45041108 | 1.0 | -1.0 | -1.0 | +| test.c:422:86:422:95 | 0.48640909 | 1.0 | -1.0 | -1.0 | +| test.c:422:99:422:108 | 0.84331272 | 1.0 | -1.0 | -1.0 | | test.c:423:14:423:14 | m | 50.2578125 | 1.0 | 1.0 | | test.c:423:14:423:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:423:18:423:18 | n | 2034.171875 | 1.0 | 1.0 | @@ -1421,12 +1421,12 @@ estimateNrOfBounds | test.c:423:26:423:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:423:30:423:30 | q | 2034.171875 | 1.0 | 1.0 | | test.c:423:30:423:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:423:34:423:43 | 0.1575506299999999971 | 1.0 | -1.0 | -1.0 | -| test.c:423:47:423:56 | 0.7708683299999999905 | 1.0 | -1.0 | -1.0 | -| test.c:423:60:423:69 | 0.2642848099999999811 | 1.0 | -1.0 | -1.0 | -| test.c:423:73:423:82 | 0.1480050800000000111 | 1.0 | -1.0 | -1.0 | -| test.c:423:86:423:95 | 0.374281430000000026 | 1.0 | -1.0 | -1.0 | -| test.c:423:99:423:108 | 0.05328182000000000057 | 1.0 | -1.0 | -1.0 | +| test.c:423:34:423:43 | 0.15755063 | 1.0 | -1.0 | -1.0 | +| test.c:423:47:423:56 | 0.77086833 | 1.0 | -1.0 | -1.0 | +| test.c:423:60:423:69 | 0.26428481 | 1.0 | -1.0 | -1.0 | +| test.c:423:73:423:82 | 0.14800508 | 1.0 | -1.0 | -1.0 | +| test.c:423:86:423:95 | 0.37428143 | 1.0 | -1.0 | -1.0 | +| test.c:423:99:423:108 | 0.05328182 | 1.0 | -1.0 | -1.0 | | test.c:424:14:424:14 | m | 75.88671875 | 1.0 | 1.0 | | test.c:424:14:424:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:424:18:424:18 | n | 5085.9296875 | 1.0 | 1.0 | @@ -1437,12 +1437,12 @@ estimateNrOfBounds | test.c:424:26:424:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:424:30:424:30 | q | 5085.9296875 | 1.0 | 1.0 | | test.c:424:30:424:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:424:34:424:43 | 0.4173653600000000186 | 1.0 | -1.0 | -1.0 | -| test.c:424:47:424:56 | 0.7682662799999999681 | 1.0 | -1.0 | -1.0 | -| test.c:424:60:424:69 | 0.2764323799999999776 | 1.0 | -1.0 | -1.0 | -| test.c:424:73:424:82 | 0.5567927400000000082 | 1.0 | -1.0 | -1.0 | -| test.c:424:86:424:95 | 0.3946885700000000163 | 1.0 | -1.0 | -1.0 | -| test.c:424:99:424:108 | 0.6907214400000000198 | 1.0 | -1.0 | -1.0 | +| test.c:424:34:424:43 | 0.41736536 | 1.0 | -1.0 | -1.0 | +| test.c:424:47:424:56 | 0.76826628 | 1.0 | -1.0 | -1.0 | +| test.c:424:60:424:69 | 0.27643238 | 1.0 | -1.0 | -1.0 | +| test.c:424:73:424:82 | 0.55679274 | 1.0 | -1.0 | -1.0 | +| test.c:424:86:424:95 | 0.39468857 | 1.0 | -1.0 | -1.0 | +| test.c:424:99:424:108 | 0.69072144 | 1.0 | -1.0 | -1.0 | | test.c:425:14:425:14 | m | 114.330078125 | 1.0 | 1.0 | | test.c:425:14:425:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:425:18:425:18 | n | 12715.32421875 | 1.0 | 1.0 | @@ -1453,12 +1453,12 @@ estimateNrOfBounds | test.c:425:26:425:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:425:30:425:30 | q | 12715.32421875 | 1.0 | 1.0 | | test.c:425:30:425:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:425:34:425:43 | 0.8895534499999999678 | 1.0 | -1.0 | -1.0 | -| test.c:425:47:425:56 | 0.2990482400000000207 | 1.0 | -1.0 | -1.0 | -| test.c:425:60:425:69 | 0.7624258299999999711 | 1.0 | -1.0 | -1.0 | -| test.c:425:73:425:82 | 0.2051910999999999874 | 1.0 | -1.0 | -1.0 | -| test.c:425:86:425:95 | 0.8874555899999999609 | 1.0 | -1.0 | -1.0 | -| test.c:425:99:425:108 | 0.8137279800000000174 | 1.0 | -1.0 | -1.0 | +| test.c:425:34:425:43 | 0.88955345 | 1.0 | -1.0 | -1.0 | +| test.c:425:47:425:56 | 0.29904824 | 1.0 | -1.0 | -1.0 | +| test.c:425:60:425:69 | 0.76242583 | 1.0 | -1.0 | -1.0 | +| test.c:425:73:425:82 | 0.2051911 | 1.0 | -1.0 | -1.0 | +| test.c:425:86:425:95 | 0.88745559 | 1.0 | -1.0 | -1.0 | +| test.c:425:99:425:108 | 0.81372798 | 1.0 | -1.0 | -1.0 | | test.c:426:14:426:14 | m | 171.9951171875 | 1.0 | 1.0 | | test.c:426:14:426:108 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:426:18:426:18 | n | 31788.810546875 | 1.0 | 1.0 | @@ -1469,12 +1469,12 @@ estimateNrOfBounds | test.c:426:26:426:69 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | | test.c:426:30:426:30 | q | 31788.810546875 | 1.0 | 1.0 | | test.c:426:30:426:56 | ... ? ... : ... | 1.0 | 1.0 | 1.0 | -| test.c:426:34:426:43 | 0.4218627600000000033 | 1.0 | -1.0 | -1.0 | -| test.c:426:47:426:56 | 0.5384335799999999672 | 1.0 | -1.0 | -1.0 | -| test.c:426:60:426:69 | 0.4499667900000000054 | 1.0 | -1.0 | -1.0 | -| test.c:426:73:426:82 | 0.1320411400000000013 | 1.0 | -1.0 | -1.0 | -| test.c:426:86:426:95 | 0.5203124099999999475 | 1.0 | -1.0 | -1.0 | -| test.c:426:99:426:108 | 0.4276264699999999808 | 1.0 | -1.0 | -1.0 | +| test.c:426:34:426:43 | 0.42186276 | 1.0 | -1.0 | -1.0 | +| test.c:426:47:426:56 | 0.53843358 | 1.0 | -1.0 | -1.0 | +| test.c:426:60:426:69 | 0.44996679 | 1.0 | -1.0 | -1.0 | +| test.c:426:73:426:82 | 0.13204114 | 1.0 | -1.0 | -1.0 | +| test.c:426:86:426:95 | 0.52031241 | 1.0 | -1.0 | -1.0 | +| test.c:426:99:426:108 | 0.42762647 | 1.0 | -1.0 | -1.0 | | test.c:432:19:432:19 | a | 1.0 | 1.0 | 1.0 | | test.c:432:19:432:23 | ... + ... | 1.0 | 1.0 | 1.0 | | test.c:432:19:432:27 | ... + ... | 1.0 | 1.0 | 1.0 | diff --git a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected index d067430aba9c..162161e369b5 100644 --- a/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected +++ b/cpp/ql/test/query-tests/Likely Bugs/Underspecified Functions/MistypedFunctionArguments.expected @@ -2,10 +2,10 @@ | test.c:33:3:33:19 | call to not_yet_declared2 | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:77:6:77:22 | not_yet_declared2 | not_yet_declared2 | test.c:33:21:33:22 | ca | ca | file://:0:0:0:0 | int[4] | int[4] | test.c:77:24:77:26 | (unnamed parameter 0) | int (unnamed parameter 0) | | test.c:41:3:41:29 | call to declared_empty_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:78:6:78:32 | declared_empty_defined_with | declared_empty_defined_with | test.c:41:31:41:32 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:78:38:78:38 | x | int x | | test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:29:45:31 | 4 | 4 | file://:0:0:0:0 | long long | long long | test.c:81:36:81:36 | x | int x | -| test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:37:45:42 | 2500000000.0 | 2500000000.0 | file://:0:0:0:0 | float | float | test.c:81:50:81:50 | z | int z | -| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | +| test.c:45:3:45:27 | call to not_declared_defined_with | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:81:6:81:30 | not_declared_defined_with | not_declared_defined_with | test.c:45:37:45:42 | 2.5E9 | 2.5E9 | file://:0:0:0:0 | float | float | test.c:81:50:81:50 | z | int z | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3.5E15 | 3.5E15 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | | test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:5:6:5:27 | declared_with_pointers | declared_with_pointers | test.c:48:34:48:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:93:43:93:43 | y | void * y | -| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | +| test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:26:48:31 | 3.5E15 | 3.5E15 | file://:0:0:0:0 | double | double | test.c:93:34:93:34 | x | int * x | | test.c:48:3:48:24 | call to declared_with_pointers | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:93:6:93:27 | declared_with_pointers | declared_with_pointers | test.c:48:34:48:34 | 0 | 0 | file://:0:0:0:0 | int | int | test.c:93:43:93:43 | y | void * y | | test.c:50:3:50:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:6:6:6:24 | declared_with_array | declared_with_array | test.c:50:23:50:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:94:31:94:31 | a | char[6] a | | test.c:50:3:50:21 | call to declared_with_array | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:94:6:94:24 | declared_with_array | declared_with_array | test.c:50:23:50:24 | & ... | & ... | file://:0:0:0:0 | int * | int * | test.c:94:31:94:31 | a | char[6] a | @@ -15,4 +15,4 @@ | test.c:58:3:58:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:58:26:58:28 | 99 | 99 | file://:0:0:0:0 | int | int | test.c:104:44:104:45 | ll | long long ll | | test.c:59:3:59:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:59:26:59:26 | 3 | 3 | file://:0:0:0:0 | int | int | test.c:104:44:104:45 | ll | long long ll | | test.c:61:3:61:21 | call to defined_with_double | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:100:8:100:26 | defined_with_double | defined_with_double | test.c:61:23:61:25 | 2 | 2 | file://:0:0:0:0 | long long | long long | test.c:100:35:100:35 | d | double d | -| test.c:62:3:62:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:62:26:62:31 | 3500000000000000.0 | 3500000000000000.0 | file://:0:0:0:0 | double | double | test.c:104:44:104:45 | ll | long long ll | +| test.c:62:3:62:24 | call to defined_with_long_long | Calling $@: argument $@ of type $@ is incompatible with parameter $@. | test.c:104:11:104:32 | defined_with_long_long | defined_with_long_long | test.c:62:26:62:31 | 3.5E15 | 3.5E15 | file://:0:0:0:0 | double | double | test.c:104:44:104:45 | ll | long long ll | From 723a896b992291808daffa355f2a2cab75ab00a5 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 5 Feb 2026 09:59:38 +0100 Subject: [PATCH 162/243] Cfg: Add ConditionKind and getDual to ConditionalSuccessor. --- .../codeql/controlflow/SuccessorType.qll | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/shared/controlflow/codeql/controlflow/SuccessorType.qll b/shared/controlflow/codeql/controlflow/SuccessorType.qll index cc673c9e5cab..2e6666d2c204 100644 --- a/shared/controlflow/codeql/controlflow/SuccessorType.qll +++ b/shared/controlflow/codeql/controlflow/SuccessorType.qll @@ -28,6 +28,38 @@ module; private import codeql.util.Boolean +private newtype TConditionKind = + TBooleanCondition() or + TNullnessCondition() or + TMatchingCondition() or + TEmptinessCondition() + +/** A condition kind. This is used to classify different `ConditionalSuccessor`s. */ +class ConditionKind extends TConditionKind { + /** Gets a textual representation of this condition kind. */ + string toString() { + this instanceof TBooleanCondition and result = "Boolean" + or + this instanceof TNullnessCondition and result = "Nullness" + or + this instanceof TMatchingCondition and result = "Matching" + or + this instanceof TEmptinessCondition and result = "Emptiness" + } + + /** Holds if this condition kind identifies `BooleanSuccessor`s. */ + predicate isBoolean() { this instanceof TBooleanCondition } + + /** Holds if this condition kind identifies `NullnessSuccessor`s. */ + predicate isNullness() { this instanceof TNullnessCondition } + + /** Holds if this condition kind identifies `MatchingSuccessor`s. */ + predicate isMatching() { this instanceof TMatchingCondition } + + /** Holds if this condition kind identifies `EmptinessSuccessor`s. */ + predicate isEmptiness() { this instanceof TEmptinessCondition } +} + private newtype TSuccessorType = TDirectSuccessor() or TBooleanSuccessor(Boolean branch) or @@ -83,6 +115,18 @@ private class TConditionalSuccessor = abstract private class ConditionalSuccessorImpl extends NormalSuccessorImpl, TConditionalSuccessor { /** Gets the Boolean value of this successor. */ abstract boolean getValue(); + + /** Gets the condition kind of this conditional successor. */ + abstract ConditionKind getKind(); + + /** + * Gets the dual of this conditional successor. That is, the conditional + * successor of the same kind but with the opposite value. + */ + ConditionalSuccessor getDual() { + this.getValue().booleanNot() = result.getValue() and + this.getKind() = result.getKind() + } } final class ConditionalSuccessor = ConditionalSuccessorImpl; @@ -116,6 +160,8 @@ final class ConditionalSuccessor = ConditionalSuccessorImpl; class BooleanSuccessor extends ConditionalSuccessorImpl, TBooleanSuccessor { override boolean getValue() { this = TBooleanSuccessor(result) } + override ConditionKind getKind() { result = TBooleanCondition() } + override string toString() { result = this.getValue().toString() } } @@ -151,6 +197,8 @@ class NullnessSuccessor extends ConditionalSuccessorImpl, TNullnessSuccessor { override boolean getValue() { this = TNullnessSuccessor(result) } + override ConditionKind getKind() { result = TNullnessCondition() } + override string toString() { if this.isNull() then result = "null" else result = "non-null" } } @@ -192,6 +240,8 @@ class MatchingSuccessor extends ConditionalSuccessorImpl, TMatchingSuccessor { override boolean getValue() { this = TMatchingSuccessor(result) } + override ConditionKind getKind() { result = TMatchingCondition() } + override string toString() { if this.isMatch() then result = "match" else result = "no-match" } } @@ -233,6 +283,8 @@ class EmptinessSuccessor extends ConditionalSuccessorImpl, TEmptinessSuccessor { override boolean getValue() { this = TEmptinessSuccessor(result) } + override ConditionKind getKind() { result = TEmptinessCondition() } + override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" } } From 2e987343dd75be677eb5cb836de5c7f44c742bd7 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 6 Feb 2026 15:23:38 +0100 Subject: [PATCH 163/243] Java: Preparatory tweaks. --- java/ql/lib/semmle/code/java/Statement.qll | 2 +- java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll | 2 +- java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll | 2 +- java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index 4366334dfbdc..d7c091862dbf 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -61,7 +61,7 @@ class Stmt extends StmtParent, ExprParent, @stmt { } /** A statement parent is any element that can have a statement as its child. */ -class StmtParent extends @stmtparent, Top { } +class StmtParent extends @stmtparent, ExprParent { } /** * An error statement. diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 5e3a8550e3cc..962ff0bc169d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -132,7 +132,7 @@ private module BaseSsaImpl { inner != outer and inner.getDeclaringType() = innerclass and result = parentDef(desugaredGetEnclosingType*(innerclass)) and - result.getEnclosingStmt().getEnclosingCallable() = outer and + result.getEnclosingCallable() = outer and capturedvar = TLocalVar(outer, v) and closurevar = TLocalVar(inner, v) ) 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 409cf5863630..4610f5761684 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -115,7 +115,7 @@ private ControlFlowNode captureNode(TrackedVar capturedvar, TrackedVar closureva inner != outer and inner.getDeclaringType() = innerclass and result = parentDef(desugaredGetEnclosingType*(innerclass)) and - result.getEnclosingStmt().getEnclosingCallable() = outer and + result.getEnclosingCallable() = outer and capturedvar = TLocalVar(outer, v) and closurevar = TLocalVar(inner, v) ) diff --git a/java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll b/java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll index 776510b52ad1..1a20a7fa2b51 100644 --- a/java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll +++ b/java/ql/src/experimental/quantum/Examples/ArtifactReuse.qll @@ -42,7 +42,7 @@ private DataFlow::Node getGeneratingWrapperSet(Crypto::NonceArtifactNode a) { } private predicate ancestorOfArtifact( - Crypto::ArtifactNode a, Callable enclosingCallable, ControlFlow::Node midOrTarget + Crypto::ArtifactNode a, Callable enclosingCallable, ControlFlowNode midOrTarget ) { a.asElement().(Expr).getEnclosingCallable() = enclosingCallable and ( @@ -87,7 +87,7 @@ predicate isArtifactReuse(Crypto::ArtifactNode a, Crypto::ArtifactNode b) { ancestorOfArtifact(b, commonParent, _) ) implies - exists(Callable commonParent, ControlFlow::Node aMid, ControlFlow::Node bMid | + exists(Callable commonParent, ControlFlowNode aMid, ControlFlowNode bMid | ancestorOfArtifact(a, commonParent, aMid) and ancestorOfArtifact(b, commonParent, bMid) and a instanceof Crypto::NonceArtifactNode and From 4a97a449fc215717e58183c3af0ee0214cfc5cfd Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 6 Feb 2026 16:37:43 +0100 Subject: [PATCH 164/243] Java: Replace ControlFlowNode.asCall with Call.getControlFlowNode. --- java/ql/lib/semmle/code/java/ControlFlowGraph.qll | 6 ------ java/ql/lib/semmle/code/java/Expr.qll | 9 +++++++++ java/ql/lib/semmle/code/java/Statement.qll | 6 ++++++ java/ql/lib/semmle/code/java/controlflow/Paths.qll | 2 +- java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll | 2 +- .../lib/semmle/code/java/dataflow/internal/SsaImpl.qll | 9 ++++++--- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 64449b6f93d7..de1a239faeac 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -162,12 +162,6 @@ module ControlFlow { /** Gets the expression this `Node` corresponds to, if any. */ Expr asExpr() { this = TExprNode(result) } - /** Gets the call this `Node` corresponds to, if any. */ - Call asCall() { - result = this.asExpr() or - result = this.asStmt() - } - /** Gets a textual representation of this element. */ string toString() { none() } diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index c609c35cd71e..068ba100be98 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1245,6 +1245,9 @@ class ClassInstanceExpr extends Expr, ConstructorCall, @classinstancexpr { /** Gets the immediately enclosing statement of this class instance creation expression. */ override Stmt getEnclosingStmt() { result = Expr.super.getEnclosingStmt() } + /** Gets the `ControlFlowNode` corresponding to this call. */ + override ControlFlowNode getControlFlowNode() { result = Expr.super.getControlFlowNode() } + /** Gets a printable representation of this expression. */ override string toString() { result = "new " + this.getConstructor().getName() + "(...)" @@ -2113,6 +2116,9 @@ class MethodCall extends Expr, Call, @methodaccess { /** Gets the immediately enclosing statement that contains this method access. */ override Stmt getEnclosingStmt() { result = Expr.super.getEnclosingStmt() } + /** Gets the `ControlFlowNode` corresponding to this call. */ + override ControlFlowNode getControlFlowNode() { result = Expr.super.getControlFlowNode() } + /** Gets a printable representation of this expression. */ override string toString() { if exists(this.getMethod()) @@ -2305,6 +2311,9 @@ class Call extends ExprParent, @caller { /** Gets the enclosing statement of this call. */ /*abstract*/ Stmt getEnclosingStmt() { none() } + /** Gets the `ControlFlowNode` corresponding to this call. */ + /*abstract*/ ControlFlowNode getControlFlowNode() { none() } + /** Gets the number of arguments provided in this call. */ int getNumArgument() { count(this.getAnArgument()) = result } diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index d7c091862dbf..e2c7779b43cb 100644 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -960,6 +960,9 @@ class ThisConstructorInvocationStmt extends Stmt, ConstructorCall, @constructori /** Gets the immediately enclosing statement of this constructor invocation. */ override Stmt getEnclosingStmt() { result = this } + /** Gets the `ControlFlowNode` corresponding to this call. */ + override ControlFlowNode getControlFlowNode() { result = Stmt.super.getControlFlowNode() } + override string pp() { result = "this(...)" } override string toString() { result = "this(...)" } @@ -1001,6 +1004,9 @@ class SuperConstructorInvocationStmt extends Stmt, ConstructorCall, @superconstr /** Gets the immediately enclosing statement of this constructor invocation. */ override Stmt getEnclosingStmt() { result = this } + /** Gets the `ControlFlowNode` corresponding to this call. */ + override ControlFlowNode getControlFlowNode() { result = Stmt.super.getControlFlowNode() } + override string pp() { result = "super(...)" } override string toString() { result = "super(...)" } diff --git a/java/ql/lib/semmle/code/java/controlflow/Paths.qll b/java/ql/lib/semmle/code/java/controlflow/Paths.qll index abc56e32b5ca..23f0786966db 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Paths.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Paths.qll @@ -34,7 +34,7 @@ abstract class ActionConfiguration extends string { private BasicBlock actionBlock(ActionConfiguration conf) { exists(ControlFlowNode node | result = node.getBasicBlock() | conf.isAction(node) or - callAlwaysPerformsAction(node.asCall(), conf) + callAlwaysPerformsAction(any(Call call | call.getControlFlowNode() = node), conf) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll b/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll index feeb0d100c64..60ed5591a95f 100644 --- a/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll +++ b/java/ql/lib/semmle/code/java/dataflow/InstanceAccess.qll @@ -229,7 +229,7 @@ class InstanceAccessExt extends TInstanceAccessExt { /** Gets the control flow node associated with this instance access. */ ControlFlowNode getCfgNode() { exists(ExprParent e | e = this.getAssociatedExprOrStmt() | - result.asCall() = e + result = e.(Call).getControlFlowNode() or e.(InstanceAccess).getControlFlowNode() = result or 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 4610f5761684..160cf0303922 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -153,7 +153,7 @@ private predicate hasEntryDef(TrackedVar v, BasicBlock b) { overlay[global] pragma[nomagic] private predicate uncertainVariableUpdateImpl(TrackedVar v, ControlFlowNode n, BasicBlock b, int i) { - exists(Call c | c = n.asCall() | updatesNamedField(c, v, _)) and + exists(Call c | c.getControlFlowNode() = n | updatesNamedField(c, v, _)) and b.getNode(i) = n and hasDominanceInformation(b) or @@ -525,8 +525,11 @@ private module Cached { overlay[global] cached predicate defUpdatesNamedField(SsaImplicitWrite calldef, TrackedField f, Callable setter) { - f = calldef.getSourceVariable() and - updatesNamedField0(calldef.getControlFlowNode().asCall(), f, setter) + exists(Call call | + f = calldef.getSourceVariable() and + call.getControlFlowNode() = calldef.getControlFlowNode() and + updatesNamedField0(call, f, setter) + ) } /** Holds if `init` is a closure variable that captures the value of `capturedvar`. */ From 48d7d9cedb3d3bb97119df6b610df792ca152b28 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 6 Feb 2026 16:39:50 +0100 Subject: [PATCH 165/243] Cfg: Add getEnclosingCallable to shared BasicBlock --- shared/controlflow/codeql/controlflow/BasicBlock.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shared/controlflow/codeql/controlflow/BasicBlock.qll b/shared/controlflow/codeql/controlflow/BasicBlock.qll index ed86ae5aa8be..163ddee70f0b 100644 --- a/shared/controlflow/codeql/controlflow/BasicBlock.qll +++ b/shared/controlflow/codeql/controlflow/BasicBlock.qll @@ -177,6 +177,9 @@ module Make Input> implements CfgSig Date: Mon, 16 Feb 2026 14:34:18 +0100 Subject: [PATCH 166/243] Java: Replace idominance tests. --- .../controlflow/dominance/dominator.expected | 177 ++------------- .../controlflow/dominance/dominator.ql | 11 +- .../controlflow/dominance/dominator.expected | 177 ++------------- .../controlflow/dominance/dominator.ql | 11 +- .../controlflow/dominance/dominator.expected | 207 +++--------------- .../controlflow/dominance/dominator.ql | 11 +- 6 files changed, 86 insertions(+), 508 deletions(-) diff --git a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected index 31da586d6307..cdbc573a0e53 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected @@ -1,157 +1,20 @@ -| Test.kt:2:43:79:2 | { ... } | Test.kt:3:13:3:13 | var ...; | -| Test.kt:3:13:3:13 | var ...; | Test.kt:3:17:3:18 | px | -| Test.kt:3:13:3:13 | x | Test.kt:4:13:4:13 | var ...; | -| Test.kt:3:17:3:18 | px | Test.kt:3:13:3:13 | x | -| Test.kt:4:13:4:13 | var ...; | Test.kt:4:17:4:18 | pw | -| Test.kt:4:13:4:13 | w | Test.kt:5:13:5:13 | var ...; | -| Test.kt:4:17:4:18 | pw | Test.kt:4:13:4:13 | w | -| Test.kt:5:13:5:13 | var ...; | Test.kt:5:17:5:18 | pz | -| Test.kt:5:13:5:13 | z | Test.kt:7:7:7:7 | var ...; | -| Test.kt:5:17:5:18 | pz | Test.kt:5:13:5:13 | z | -| Test.kt:7:7:7:7 | j | Test.kt:8:7:8:7 | var ...; | -| Test.kt:7:7:7:7 | var ...; | Test.kt:7:7:7:7 | j | -| Test.kt:8:7:8:7 | var ...; | Test.kt:8:17:8:18 | 50 | -| Test.kt:8:7:8:7 | y | Test.kt:11:3:16:3 | ; | -| Test.kt:8:17:8:18 | 50 | Test.kt:8:7:8:7 | y | -| Test.kt:11:3:16:3 | ... -> ... | Test.kt:11:3:16:3 | true | -| Test.kt:11:3:16:3 | ... -> ... | Test.kt:11:7:11:7 | x | -| Test.kt:11:3:16:3 | ; | Test.kt:11:3:16:3 | when ... | -| Test.kt:11:3:16:3 | true | Test.kt:14:10:16:3 | { ... } | -| Test.kt:11:3:16:3 | when ... | Test.kt:11:3:16:3 | ... -> ... | -| Test.kt:11:7:11:7 | x | Test.kt:11:11:11:11 | 0 | -| Test.kt:11:7:11:11 | ... > ... | Test.kt:11:3:16:3 | ... -> ... | -| Test.kt:11:7:11:11 | ... > ... | Test.kt:11:14:14:3 | { ... } | -| Test.kt:11:7:11:11 | ... > ... | Test.kt:18:3:18:3 | ; | -| Test.kt:11:11:11:11 | 0 | Test.kt:11:7:11:11 | ... > ... | -| Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:4 | ; | -| Test.kt:12:4:12:4 | ; | Test.kt:12:8:12:9 | 20 | -| Test.kt:12:4:12:9 | ...=... | Test.kt:13:4:13:4 | ; | -| Test.kt:12:8:12:9 | 20 | Test.kt:12:4:12:9 | ...=... | -| Test.kt:13:4:13:4 | ; | Test.kt:13:8:13:9 | 10 | -| Test.kt:13:8:13:9 | 10 | Test.kt:13:4:13:9 | ...=... | -| Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:4 | ; | -| Test.kt:15:4:15:4 | ; | Test.kt:15:8:15:9 | 30 | -| Test.kt:15:8:15:9 | 30 | Test.kt:15:4:15:9 | ...=... | -| Test.kt:18:3:18:3 | ; | Test.kt:18:8:18:8 | x | -| Test.kt:18:3:18:20 | ...=... | Test.kt:21:3:24:11 | ; | -| Test.kt:18:7:18:20 | (...)... | Test.kt:18:3:18:20 | ...=... | -| Test.kt:18:8:18:8 | x | Test.kt:18:12:18:12 | y | -| Test.kt:18:8:18:12 | ... + ... | Test.kt:18:7:18:20 | (...)... | -| Test.kt:18:12:18:12 | y | Test.kt:18:8:18:12 | ... + ... | -| Test.kt:21:3:24:11 | ... -> ... | Test.kt:21:3:24:11 | true | -| Test.kt:21:3:24:11 | ... -> ... | Test.kt:21:7:21:7 | x | -| Test.kt:21:3:24:11 | ; | Test.kt:21:3:24:11 | when ... | -| Test.kt:21:3:24:11 | true | Test.kt:24:11:24:11 | z | -| Test.kt:21:3:24:11 | when ... | Test.kt:21:3:24:11 | ... -> ... | -| Test.kt:21:7:21:7 | x | Test.kt:21:11:21:11 | 0 | -| Test.kt:21:7:21:11 | ... < ... | Test.kt:2:2:79:2 | Normal Exit | -| Test.kt:21:7:21:11 | ... < ... | Test.kt:21:3:24:11 | ... -> ... | -| Test.kt:21:7:21:11 | ... < ... | Test.kt:22:4:22:4 | ; | -| Test.kt:21:11:21:11 | 0 | Test.kt:21:7:21:11 | ... < ... | -| Test.kt:22:4:22:4 | ; | Test.kt:22:8:22:9 | 40 | -| Test.kt:22:4:22:9 | ...=... | Test.kt:27:3:27:3 | ; | -| Test.kt:22:8:22:9 | 40 | Test.kt:22:4:22:9 | ...=... | -| Test.kt:24:11:24:11 | z | Test.kt:24:4:24:11 | return ... | -| Test.kt:27:3:27:3 | ; | Test.kt:27:7:27:8 | 10 | -| Test.kt:27:3:27:8 | ...=... | Test.kt:30:3:33:3 | ; | -| Test.kt:27:7:27:8 | 10 | Test.kt:27:3:27:8 | ...=... | -| Test.kt:30:3:33:3 | ... -> ... | Test.kt:30:7:30:7 | x | -| Test.kt:30:3:33:3 | ; | Test.kt:30:3:33:3 | when ... | -| Test.kt:30:3:33:3 | when ... | Test.kt:30:3:33:3 | ... -> ... | -| Test.kt:30:7:30:7 | x | Test.kt:30:12:30:12 | 0 | -| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:30:15:33:3 | { ... } | -| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:35:3:35:3 | ; | -| Test.kt:30:12:30:12 | 0 | Test.kt:30:7:30:12 | ... (value equals) ... | -| Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:4 | ; | -| Test.kt:31:4:31:4 | ; | Test.kt:31:8:31:9 | 60 | -| Test.kt:31:4:31:9 | ...=... | Test.kt:32:4:32:4 | ; | -| Test.kt:31:8:31:9 | 60 | Test.kt:31:4:31:9 | ...=... | -| Test.kt:32:4:32:4 | ; | Test.kt:32:8:32:9 | 10 | -| Test.kt:32:8:32:9 | 10 | Test.kt:32:4:32:9 | ...=... | -| Test.kt:35:3:35:3 | ; | Test.kt:35:3:35:3 | z | -| Test.kt:35:3:35:3 | z | Test.kt:35:8:35:8 | x | -| Test.kt:35:3:35:8 | ...+=... | Test.kt:38:3:41:3 | while (...) | -| Test.kt:35:8:35:8 | x | Test.kt:35:3:35:8 | ...+=... | -| Test.kt:38:3:41:3 | while (...) | Test.kt:38:10:38:10 | x | -| Test.kt:38:10:38:10 | x | Test.kt:38:14:38:14 | 0 | -| Test.kt:38:10:38:14 | ... > ... | Test.kt:38:17:41:3 | { ... } | -| Test.kt:38:10:38:14 | ... > ... | Test.kt:43:3:43:3 | ; | -| Test.kt:38:14:38:14 | 0 | Test.kt:38:10:38:14 | ... > ... | -| Test.kt:38:17:41:3 | { ... } | Test.kt:39:4:39:4 | ; | -| Test.kt:39:4:39:4 | ; | Test.kt:39:8:39:9 | 10 | -| Test.kt:39:4:39:9 | ...=... | Test.kt:40:4:40:6 | ; | -| Test.kt:39:8:39:9 | 10 | Test.kt:39:4:39:9 | ...=... | -| Test.kt:40:4:40:4 | ; | Test.kt:40:4:40:6 | tmp0 | -| Test.kt:40:4:40:4 | x | Test.kt:40:4:40:6 | tmp0 | -| Test.kt:40:4:40:6 | ...=... | Test.kt:40:4:40:6 | ; | -| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | | -| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | tmp0 | -| Test.kt:40:4:40:6 | | Test.kt:40:4:40:6 | { ... } | -| Test.kt:40:4:40:6 | dec(...) | Test.kt:40:4:40:6 | ...=... | -| Test.kt:40:4:40:6 | tmp0 | Test.kt:40:4:40:4 | ; | -| Test.kt:40:4:40:6 | tmp0 | Test.kt:40:4:40:6 | | -| Test.kt:40:4:40:6 | tmp0 | Test.kt:40:4:40:6 | dec(...) | -| Test.kt:40:4:40:6 | var ...; | Test.kt:40:4:40:4 | x | -| Test.kt:40:4:40:6 | { ... } | Test.kt:40:4:40:6 | var ...; | -| Test.kt:43:3:43:3 | ; | Test.kt:43:3:43:3 | z | -| Test.kt:43:3:43:3 | z | Test.kt:43:8:43:8 | y | -| Test.kt:43:3:43:15 | ...+=... | Test.kt:73:3:73:3 | ; | -| Test.kt:43:8:43:8 | y | Test.kt:43:8:43:15 | (...)... | -| Test.kt:43:8:43:15 | (...)... | Test.kt:43:3:43:15 | ...+=... | -| Test.kt:73:3:73:3 | ; | Test.kt:73:3:73:3 | z | -| Test.kt:73:3:73:3 | z | Test.kt:73:8:73:8 | x | -| Test.kt:73:3:73:16 | ...+=... | Test.kt:77:3:77:3 | ; | -| Test.kt:73:8:73:8 | x | Test.kt:73:12:73:12 | y | -| Test.kt:73:8:73:12 | ... + ... | Test.kt:73:16:73:16 | w | -| Test.kt:73:8:73:16 | ... + ... | Test.kt:73:3:73:16 | ...+=... | -| Test.kt:73:12:73:12 | | Test.kt:73:8:73:12 | ... + ... | -| Test.kt:73:12:73:12 | y | Test.kt:73:12:73:12 | | -| Test.kt:73:16:73:16 | w | Test.kt:73:8:73:16 | ... + ... | -| Test.kt:77:3:77:3 | ; | Test.kt:77:7:77:8 | 40 | -| Test.kt:77:3:77:8 | ...=... | Test.kt:78:10:78:10 | w | -| Test.kt:77:7:77:8 | 40 | Test.kt:77:3:77:8 | ...=... | -| Test.kt:78:10:78:10 | w | Test.kt:78:3:78:10 | return ... | -| Test.kt:81:25:98:2 | { ... } | Test.kt:83:7:83:7 | var ...; | -| Test.kt:83:7:83:7 | b | Test.kt:84:7:84:7 | var ...; | -| Test.kt:83:7:83:7 | var ...; | Test.kt:83:7:83:7 | b | -| Test.kt:84:7:84:7 | c | Test.kt:85:3:85:3 | ; | -| Test.kt:84:7:84:7 | var ...; | Test.kt:84:7:84:7 | c | -| Test.kt:85:3:85:3 | ; | Test.kt:85:7:85:7 | 0 | -| Test.kt:85:3:85:7 | ...=... | Test.kt:86:3:96:3 | while (...) | -| Test.kt:85:7:85:7 | 0 | Test.kt:85:3:85:7 | ...=... | -| Test.kt:86:3:96:3 | while (...) | Test.kt:86:9:86:12 | true | -| Test.kt:86:9:86:12 | true | Test.kt:86:15:96:3 | { ... } | -| Test.kt:86:15:96:3 | { ... } | Test.kt:87:4:87:4 | ; | -| Test.kt:87:4:87:4 | ; | Test.kt:87:8:87:9 | 10 | -| Test.kt:87:4:87:9 | ...=... | Test.kt:88:4:91:4 | ; | -| Test.kt:87:8:87:9 | 10 | Test.kt:87:4:87:9 | ...=... | -| Test.kt:88:4:91:4 | ... -> ... | Test.kt:88:8:88:8 | a | -| Test.kt:88:4:91:4 | ; | Test.kt:88:4:91:4 | when ... | -| Test.kt:88:4:91:4 | when ... | Test.kt:88:4:91:4 | ... -> ... | -| Test.kt:88:8:88:8 | a | Test.kt:88:12:88:14 | 100 | -| Test.kt:88:8:88:14 | ... > ... | Test.kt:88:17:91:4 | { ... } | -| Test.kt:88:8:88:14 | ... > ... | Test.kt:92:4:93:9 | ; | -| Test.kt:88:12:88:14 | 100 | Test.kt:88:8:88:14 | ... > ... | -| Test.kt:88:17:91:4 | { ... } | Test.kt:89:5:89:5 | ; | -| Test.kt:89:5:89:5 | ; | Test.kt:89:9:89:10 | 10 | -| Test.kt:89:5:89:10 | ...=... | Test.kt:90:5:90:5 | ; | -| Test.kt:89:9:89:10 | 10 | Test.kt:89:5:89:10 | ...=... | -| Test.kt:90:5:90:5 | ; | Test.kt:90:9:90:9 | c | -| Test.kt:90:9:90:9 | c | Test.kt:90:5:90:9 | ...=... | -| Test.kt:92:4:93:9 | ... -> ... | Test.kt:92:8:92:8 | a | -| Test.kt:92:4:93:9 | ; | Test.kt:92:4:93:9 | when ... | -| Test.kt:92:4:93:9 | when ... | Test.kt:92:4:93:9 | ... -> ... | -| Test.kt:92:8:92:8 | a | Test.kt:92:13:92:14 | 10 | -| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:81:2:98:2 | Normal Exit | -| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:93:5:93:9 | break | -| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:94:4:95:12 | ; | -| Test.kt:92:13:92:14 | 10 | Test.kt:92:8:92:14 | ... (value equals) ... | -| Test.kt:93:5:93:9 | break | Test.kt:97:10:97:10 | b | -| Test.kt:94:4:95:12 | ... -> ... | Test.kt:94:8:94:8 | a | -| Test.kt:94:4:95:12 | ; | Test.kt:94:4:95:12 | when ... | -| Test.kt:94:4:95:12 | when ... | Test.kt:94:4:95:12 | ... -> ... | -| Test.kt:94:8:94:8 | a | Test.kt:94:13:94:14 | 20 | -| Test.kt:94:8:94:14 | ... (value equals) ... | Test.kt:95:12:95:12 | c | -| Test.kt:94:13:94:14 | 20 | Test.kt:94:8:94:14 | ... (value equals) ... | -| Test.kt:95:12:95:12 | c | Test.kt:95:5:95:12 | return ... | -| Test.kt:97:10:97:10 | b | Test.kt:97:3:97:10 | return ... | +| Test.kt:2:2:79:2 | Normal Exit | Test.kt:2:2:79:2 | Exit | +| Test.kt:2:43:79:2 | { ... } | Test.kt:11:3:16:3 | ... -> ... | +| Test.kt:2:43:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | +| Test.kt:2:43:79:2 | { ... } | Test.kt:18:3:18:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:2:2:79:2 | Normal Exit | +| Test.kt:18:3:18:3 | ; | Test.kt:21:3:24:11 | ... -> ... | +| Test.kt:18:3:18:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:22:4:22:4 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:38:10:38:10 | x | +| Test.kt:38:10:38:10 | x | Test.kt:38:17:41:3 | { ... } | +| Test.kt:38:10:38:10 | x | Test.kt:43:3:43:3 | ; | +| Test.kt:81:2:98:2 | Normal Exit | Test.kt:81:2:98:2 | Exit | +| Test.kt:81:25:98:2 | { ... } | Test.kt:86:9:86:12 | true | +| Test.kt:86:9:86:12 | true | Test.kt:88:17:91:4 | { ... } | +| Test.kt:86:9:86:12 | true | Test.kt:92:4:93:9 | ; | +| Test.kt:92:4:93:9 | ; | Test.kt:81:2:98:2 | Normal Exit | +| Test.kt:92:4:93:9 | ; | Test.kt:93:5:93:9 | break | +| Test.kt:92:4:93:9 | ; | Test.kt:94:4:95:12 | ; | +| Test.kt:94:4:95:12 | ; | Test.kt:95:12:95:12 | c | diff --git a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql index 701640bf7209..b157cb5fca3d 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql +++ b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql @@ -1,9 +1,8 @@ -import default -import semmle.code.java.controlflow.Dominance +import java -from Method func, ControlFlowNode dominator, ControlFlowNode node +from Method func, BasicBlock dominator, BasicBlock bb where - iDominates(dominator, node) and - dominator.getEnclosingStmt().getEnclosingCallable() = func and + dominator.immediatelyDominates(bb) and + dominator.getEnclosingCallable() = func and func.getDeclaringType().hasName("Test") -select dominator, node +select dominator, bb diff --git a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected index 75662bfacd49..7b3908b4b5d2 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected @@ -1,157 +1,20 @@ -| Test.kt:2:43:79:2 | { ... } | Test.kt:3:9:3:18 | var ...; | -| Test.kt:3:9:3:18 | var ...; | Test.kt:3:17:3:18 | px | -| Test.kt:3:9:3:18 | x | Test.kt:4:9:4:18 | var ...; | -| Test.kt:3:17:3:18 | px | Test.kt:3:9:3:18 | x | -| Test.kt:4:9:4:18 | var ...; | Test.kt:4:17:4:18 | pw | -| Test.kt:4:9:4:18 | w | Test.kt:5:9:5:18 | var ...; | -| Test.kt:4:17:4:18 | pw | Test.kt:4:9:4:18 | w | -| Test.kt:5:9:5:18 | var ...; | Test.kt:5:17:5:18 | pz | -| Test.kt:5:9:5:18 | z | Test.kt:7:3:7:12 | var ...; | -| Test.kt:5:17:5:18 | pz | Test.kt:5:9:5:18 | z | -| Test.kt:7:3:7:12 | j | Test.kt:8:3:8:18 | var ...; | -| Test.kt:7:3:7:12 | var ...; | Test.kt:7:3:7:12 | j | -| Test.kt:8:3:8:18 | var ...; | Test.kt:8:17:8:18 | 50 | -| Test.kt:8:3:8:18 | y | Test.kt:11:3:16:3 | ; | -| Test.kt:8:17:8:18 | 50 | Test.kt:8:3:8:18 | y | -| Test.kt:11:3:16:3 | ; | Test.kt:11:3:16:3 | when ... | -| Test.kt:11:3:16:3 | when ... | Test.kt:11:7:14:3 | ... -> ... | -| Test.kt:11:7:11:7 | x | Test.kt:11:11:11:11 | 0 | -| Test.kt:11:7:11:11 | ... > ... | Test.kt:11:14:14:3 | { ... } | -| Test.kt:11:7:11:11 | ... > ... | Test.kt:14:10:16:3 | ... -> ... | -| Test.kt:11:7:11:11 | ... > ... | Test.kt:18:3:18:20 | ; | -| Test.kt:11:7:14:3 | ... -> ... | Test.kt:11:7:11:7 | x | -| Test.kt:11:11:11:11 | 0 | Test.kt:11:7:11:11 | ... > ... | -| Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:9 | ; | -| Test.kt:12:4:12:9 | ...=... | Test.kt:13:4:13:9 | ; | -| Test.kt:12:4:12:9 | ; | Test.kt:12:8:12:9 | 20 | -| Test.kt:12:8:12:9 | 20 | Test.kt:12:4:12:9 | ...=... | -| Test.kt:13:4:13:9 | ; | Test.kt:13:8:13:9 | 10 | -| Test.kt:13:8:13:9 | 10 | Test.kt:13:4:13:9 | ...=... | -| Test.kt:14:10:16:3 | ... -> ... | Test.kt:14:10:16:3 | true | -| Test.kt:14:10:16:3 | true | Test.kt:14:10:16:3 | { ... } | -| Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:9 | ; | -| Test.kt:15:4:15:9 | ; | Test.kt:15:8:15:9 | 30 | -| Test.kt:15:8:15:9 | 30 | Test.kt:15:4:15:9 | ...=... | -| Test.kt:18:3:18:20 | ...=... | Test.kt:21:3:24:11 | ; | -| Test.kt:18:3:18:20 | ; | Test.kt:18:8:18:8 | x | -| Test.kt:18:7:18:20 | (...)... | Test.kt:18:3:18:20 | ...=... | -| Test.kt:18:8:18:8 | x | Test.kt:18:12:18:12 | y | -| Test.kt:18:8:18:12 | ... + ... | Test.kt:18:7:18:20 | (...)... | -| Test.kt:18:12:18:12 | y | Test.kt:18:8:18:12 | ... + ... | -| Test.kt:21:3:24:11 | ; | Test.kt:21:3:24:11 | when ... | -| Test.kt:21:3:24:11 | when ... | Test.kt:21:7:22:9 | ... -> ... | -| Test.kt:21:7:21:7 | x | Test.kt:21:11:21:11 | 0 | -| Test.kt:21:7:21:11 | ... < ... | Test.kt:2:2:79:2 | Normal Exit | -| Test.kt:21:7:21:11 | ... < ... | Test.kt:22:4:22:9 | ; | -| Test.kt:21:7:21:11 | ... < ... | Test.kt:24:4:24:11 | ... -> ... | -| Test.kt:21:7:22:9 | ... -> ... | Test.kt:21:7:21:7 | x | -| Test.kt:21:11:21:11 | 0 | Test.kt:21:7:21:11 | ... < ... | -| Test.kt:22:4:22:9 | ...=... | Test.kt:27:3:27:8 | ; | -| Test.kt:22:4:22:9 | ; | Test.kt:22:8:22:9 | 40 | -| Test.kt:22:8:22:9 | 40 | Test.kt:22:4:22:9 | ...=... | -| Test.kt:24:4:24:11 | ... -> ... | Test.kt:24:4:24:11 | true | -| Test.kt:24:4:24:11 | true | Test.kt:24:11:24:11 | z | -| Test.kt:24:11:24:11 | z | Test.kt:24:4:24:11 | return ... | -| Test.kt:27:3:27:8 | ...=... | Test.kt:30:3:33:3 | ; | -| Test.kt:27:3:27:8 | ; | Test.kt:27:7:27:8 | 10 | -| Test.kt:27:7:27:8 | 10 | Test.kt:27:3:27:8 | ...=... | -| Test.kt:30:3:33:3 | ; | Test.kt:30:3:33:3 | when ... | -| Test.kt:30:3:33:3 | when ... | Test.kt:30:7:33:3 | ... -> ... | -| Test.kt:30:7:30:7 | x | Test.kt:30:12:30:12 | 0 | -| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:30:15:33:3 | { ... } | -| Test.kt:30:7:30:12 | ... (value equals) ... | Test.kt:35:3:35:8 | ; | -| Test.kt:30:7:33:3 | ... -> ... | Test.kt:30:7:30:7 | x | -| Test.kt:30:12:30:12 | 0 | Test.kt:30:7:30:12 | ... (value equals) ... | -| Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:9 | ; | -| Test.kt:31:4:31:9 | ...=... | Test.kt:32:4:32:9 | ; | -| Test.kt:31:4:31:9 | ; | Test.kt:31:8:31:9 | 60 | -| Test.kt:31:8:31:9 | 60 | Test.kt:31:4:31:9 | ...=... | -| Test.kt:32:4:32:9 | ; | Test.kt:32:8:32:9 | 10 | -| Test.kt:32:8:32:9 | 10 | Test.kt:32:4:32:9 | ...=... | -| Test.kt:35:3:35:8 | ...+=... | Test.kt:38:3:41:3 | while (...) | -| Test.kt:35:3:35:8 | ; | Test.kt:35:3:35:8 | z | -| Test.kt:35:3:35:8 | z | Test.kt:35:8:35:8 | x | -| Test.kt:35:8:35:8 | x | Test.kt:35:3:35:8 | ...+=... | -| Test.kt:38:3:41:3 | while (...) | Test.kt:38:10:38:10 | x | -| Test.kt:38:10:38:10 | x | Test.kt:38:14:38:14 | 0 | -| Test.kt:38:10:38:14 | ... > ... | Test.kt:38:17:41:3 | { ... } | -| Test.kt:38:10:38:14 | ... > ... | Test.kt:43:3:43:15 | ; | -| Test.kt:38:14:38:14 | 0 | Test.kt:38:10:38:14 | ... > ... | -| Test.kt:38:17:41:3 | { ... } | Test.kt:39:4:39:9 | ; | -| Test.kt:39:4:39:9 | ...=... | Test.kt:40:4:40:6 | ; | -| Test.kt:39:4:39:9 | ; | Test.kt:39:8:39:9 | 10 | -| Test.kt:39:8:39:9 | 10 | Test.kt:39:4:39:9 | ...=... | -| Test.kt:40:4:40:4 | x | Test.kt:40:4:40:6 | | -| Test.kt:40:4:40:6 | ...=... | Test.kt:40:4:40:6 | ; | -| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | | -| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | | -| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | | -| Test.kt:40:4:40:6 | | Test.kt:40:4:40:6 | { ... } | -| Test.kt:40:4:40:6 | | Test.kt:40:4:40:6 | ; | -| Test.kt:40:4:40:6 | | Test.kt:40:4:40:6 | | -| Test.kt:40:4:40:6 | | Test.kt:40:4:40:6 | dec(...) | -| Test.kt:40:4:40:6 | dec(...) | Test.kt:40:4:40:6 | ...=... | -| Test.kt:40:4:40:6 | var ...; | Test.kt:40:4:40:4 | x | -| Test.kt:40:4:40:6 | { ... } | Test.kt:40:4:40:6 | var ...; | -| Test.kt:43:3:43:15 | ...+=... | Test.kt:73:3:73:16 | ; | -| Test.kt:43:3:43:15 | ; | Test.kt:43:3:43:15 | z | -| Test.kt:43:3:43:15 | z | Test.kt:43:8:43:8 | y | -| Test.kt:43:8:43:8 | y | Test.kt:43:8:43:15 | (...)... | -| Test.kt:43:8:43:15 | (...)... | Test.kt:43:3:43:15 | ...+=... | -| Test.kt:73:3:73:16 | ...+=... | Test.kt:77:3:77:8 | ; | -| Test.kt:73:3:73:16 | ; | Test.kt:73:3:73:16 | z | -| Test.kt:73:3:73:16 | z | Test.kt:73:8:73:8 | x | -| Test.kt:73:8:73:8 | x | Test.kt:73:12:73:12 | y | -| Test.kt:73:8:73:12 | ... + ... | Test.kt:73:16:73:16 | w | -| Test.kt:73:8:73:16 | ... + ... | Test.kt:73:3:73:16 | ...+=... | -| Test.kt:73:12:73:12 | | Test.kt:73:8:73:12 | ... + ... | -| Test.kt:73:12:73:12 | y | Test.kt:73:12:73:12 | | -| Test.kt:73:16:73:16 | w | Test.kt:73:8:73:16 | ... + ... | -| Test.kt:77:3:77:8 | ...=... | Test.kt:78:10:78:10 | w | -| Test.kt:77:3:77:8 | ; | Test.kt:77:7:77:8 | 40 | -| Test.kt:77:7:77:8 | 40 | Test.kt:77:3:77:8 | ...=... | -| Test.kt:78:10:78:10 | w | Test.kt:78:3:78:10 | return ... | -| Test.kt:81:25:98:2 | { ... } | Test.kt:83:3:83:12 | var ...; | -| Test.kt:83:3:83:12 | b | Test.kt:84:3:84:12 | var ...; | -| Test.kt:83:3:83:12 | var ...; | Test.kt:83:3:83:12 | b | -| Test.kt:84:3:84:12 | c | Test.kt:85:3:85:7 | ; | -| Test.kt:84:3:84:12 | var ...; | Test.kt:84:3:84:12 | c | -| Test.kt:85:3:85:7 | ...=... | Test.kt:86:3:96:3 | while (...) | -| Test.kt:85:3:85:7 | ; | Test.kt:85:7:85:7 | 0 | -| Test.kt:85:7:85:7 | 0 | Test.kt:85:3:85:7 | ...=... | -| Test.kt:86:3:96:3 | while (...) | Test.kt:86:9:86:12 | true | -| Test.kt:86:9:86:12 | true | Test.kt:86:15:96:3 | { ... } | -| Test.kt:86:15:96:3 | { ... } | Test.kt:87:4:87:9 | ; | -| Test.kt:87:4:87:9 | ...=... | Test.kt:88:4:91:4 | ; | -| Test.kt:87:4:87:9 | ; | Test.kt:87:8:87:9 | 10 | -| Test.kt:87:8:87:9 | 10 | Test.kt:87:4:87:9 | ...=... | -| Test.kt:88:4:91:4 | ; | Test.kt:88:4:91:4 | when ... | -| Test.kt:88:4:91:4 | when ... | Test.kt:88:8:91:4 | ... -> ... | -| Test.kt:88:8:88:8 | a | Test.kt:88:12:88:14 | 100 | -| Test.kt:88:8:88:14 | ... > ... | Test.kt:88:17:91:4 | { ... } | -| Test.kt:88:8:88:14 | ... > ... | Test.kt:92:4:93:9 | ; | -| Test.kt:88:8:91:4 | ... -> ... | Test.kt:88:8:88:8 | a | -| Test.kt:88:12:88:14 | 100 | Test.kt:88:8:88:14 | ... > ... | -| Test.kt:88:17:91:4 | { ... } | Test.kt:89:5:89:10 | ; | -| Test.kt:89:5:89:10 | ...=... | Test.kt:90:5:90:9 | ; | -| Test.kt:89:5:89:10 | ; | Test.kt:89:9:89:10 | 10 | -| Test.kt:89:9:89:10 | 10 | Test.kt:89:5:89:10 | ...=... | -| Test.kt:90:5:90:9 | ; | Test.kt:90:9:90:9 | c | -| Test.kt:90:9:90:9 | c | Test.kt:90:5:90:9 | ...=... | -| Test.kt:92:4:93:9 | ; | Test.kt:92:4:93:9 | when ... | -| Test.kt:92:4:93:9 | when ... | Test.kt:92:8:93:9 | ... -> ... | -| Test.kt:92:8:92:8 | a | Test.kt:92:13:92:14 | 10 | -| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:81:2:98:2 | Normal Exit | -| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:93:5:93:9 | break | -| Test.kt:92:8:92:14 | ... (value equals) ... | Test.kt:94:4:95:12 | ; | -| Test.kt:92:8:93:9 | ... -> ... | Test.kt:92:8:92:8 | a | -| Test.kt:92:13:92:14 | 10 | Test.kt:92:8:92:14 | ... (value equals) ... | -| Test.kt:93:5:93:9 | break | Test.kt:97:10:97:10 | b | -| Test.kt:94:4:95:12 | ; | Test.kt:94:4:95:12 | when ... | -| Test.kt:94:4:95:12 | when ... | Test.kt:94:8:95:12 | ... -> ... | -| Test.kt:94:8:94:8 | a | Test.kt:94:13:94:14 | 20 | -| Test.kt:94:8:94:14 | ... (value equals) ... | Test.kt:95:12:95:12 | c | -| Test.kt:94:8:95:12 | ... -> ... | Test.kt:94:8:94:8 | a | -| Test.kt:94:13:94:14 | 20 | Test.kt:94:8:94:14 | ... (value equals) ... | -| Test.kt:95:12:95:12 | c | Test.kt:95:5:95:12 | return ... | -| Test.kt:97:10:97:10 | b | Test.kt:97:3:97:10 | return ... | +| Test.kt:2:2:79:2 | Normal Exit | Test.kt:2:2:79:2 | Exit | +| Test.kt:2:43:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | +| Test.kt:2:43:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... | +| Test.kt:2:43:79:2 | { ... } | Test.kt:18:3:18:20 | ; | +| Test.kt:18:3:18:20 | ; | Test.kt:2:2:79:2 | Normal Exit | +| Test.kt:18:3:18:20 | ; | Test.kt:22:4:22:9 | ; | +| Test.kt:18:3:18:20 | ; | Test.kt:24:4:24:11 | ... -> ... | +| Test.kt:22:4:22:9 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:22:4:22:9 | ; | Test.kt:35:3:35:8 | ; | +| Test.kt:35:3:35:8 | ; | Test.kt:38:10:38:10 | x | +| Test.kt:38:10:38:10 | x | Test.kt:38:17:41:3 | { ... } | +| Test.kt:38:10:38:10 | x | Test.kt:43:3:43:15 | ; | +| Test.kt:81:2:98:2 | Normal Exit | Test.kt:81:2:98:2 | Exit | +| Test.kt:81:25:98:2 | { ... } | Test.kt:86:9:86:12 | true | +| Test.kt:86:9:86:12 | true | Test.kt:88:17:91:4 | { ... } | +| Test.kt:86:9:86:12 | true | Test.kt:92:4:93:9 | ; | +| Test.kt:92:4:93:9 | ; | Test.kt:81:2:98:2 | Normal Exit | +| Test.kt:92:4:93:9 | ; | Test.kt:93:5:93:9 | break | +| Test.kt:92:4:93:9 | ; | Test.kt:94:4:95:12 | ; | +| Test.kt:94:4:95:12 | ; | Test.kt:95:12:95:12 | c | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql index 701640bf7209..b157cb5fca3d 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql +++ b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql @@ -1,9 +1,8 @@ -import default -import semmle.code.java.controlflow.Dominance +import java -from Method func, ControlFlowNode dominator, ControlFlowNode node +from Method func, BasicBlock dominator, BasicBlock bb where - iDominates(dominator, node) and - dominator.getEnclosingStmt().getEnclosingCallable() = func and + dominator.immediatelyDominates(bb) and + dominator.getEnclosingCallable() = func and func.getDeclaringType().hasName("Test") -select dominator, node +select dominator, bb diff --git a/java/ql/test/library-tests/controlflow/dominance/dominator.expected b/java/ql/test/library-tests/controlflow/dominance/dominator.expected index 1e385c4fd62f..e7eafe4ecaee 100644 --- a/java/ql/test/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test/library-tests/controlflow/dominance/dominator.expected @@ -1,176 +1,31 @@ -| Test.java:2:32:72:2 | { ... } | Test.java:3:3:3:8 | var ...; | -| Test.java:3:3:3:8 | var ...; | Test.java:3:7:3:7 | j | -| Test.java:3:7:3:7 | j | Test.java:4:3:4:14 | var ...; | -| Test.java:4:3:4:14 | var ...; | Test.java:4:12:4:13 | 50 | -| Test.java:4:8:4:13 | y | Test.java:7:3:7:12 | if (...) | -| Test.java:4:12:4:13 | 50 | Test.java:4:8:4:13 | y | -| Test.java:7:3:7:12 | if (...) | Test.java:7:7:7:7 | x | -| Test.java:7:7:7:7 | x | Test.java:7:11:7:11 | 0 | -| Test.java:7:7:7:11 | ... > ... | Test.java:7:14:10:3 | { ... } | -| Test.java:7:7:7:11 | ... > ... | Test.java:10:10:12:3 | { ... } | -| Test.java:7:7:7:11 | ... > ... | Test.java:14:3:14:20 | ; | -| Test.java:7:11:7:11 | 0 | Test.java:7:7:7:11 | ... > ... | -| Test.java:7:14:10:3 | { ... } | Test.java:8:4:8:10 | ; | -| Test.java:8:4:8:9 | ...=... | Test.java:9:4:9:10 | ; | -| Test.java:8:4:8:10 | ; | Test.java:8:8:8:9 | 20 | -| Test.java:8:8:8:9 | 20 | Test.java:8:4:8:9 | ...=... | -| Test.java:9:4:9:10 | ; | Test.java:9:8:9:9 | 10 | -| Test.java:9:8:9:9 | 10 | Test.java:9:4:9:9 | ...=... | -| Test.java:10:10:12:3 | { ... } | Test.java:11:4:11:10 | ; | -| Test.java:11:4:11:10 | ; | Test.java:11:8:11:9 | 30 | -| Test.java:11:8:11:9 | 30 | Test.java:11:4:11:9 | ...=... | -| Test.java:14:3:14:19 | ...=... | Test.java:17:3:17:12 | if (...) | -| Test.java:14:3:14:20 | ; | Test.java:14:14:14:14 | x | -| Test.java:14:7:14:19 | (...)... | Test.java:14:3:14:19 | ...=... | -| Test.java:14:14:14:14 | x | Test.java:14:18:14:18 | y | -| Test.java:14:14:14:18 | ... + ... | Test.java:14:7:14:19 | (...)... | -| Test.java:14:18:14:18 | y | Test.java:14:14:14:18 | ... + ... | -| Test.java:17:3:17:12 | if (...) | Test.java:17:7:17:7 | x | -| Test.java:17:7:17:7 | x | Test.java:17:11:17:11 | 0 | -| Test.java:17:7:17:11 | ... < ... | Test.java:2:6:2:9 | Normal Exit | -| Test.java:17:7:17:11 | ... < ... | Test.java:18:4:18:10 | ; | -| Test.java:17:7:17:11 | ... < ... | Test.java:20:11:20:11 | z | -| Test.java:17:11:17:11 | 0 | Test.java:17:7:17:11 | ... < ... | -| Test.java:18:4:18:9 | ...=... | Test.java:23:3:23:9 | ; | -| Test.java:18:4:18:10 | ; | Test.java:18:8:18:9 | 40 | -| Test.java:18:8:18:9 | 40 | Test.java:18:4:18:9 | ...=... | -| Test.java:20:11:20:11 | z | Test.java:20:4:20:12 | return ... | -| Test.java:23:3:23:8 | ...=... | Test.java:26:3:26:13 | if (...) | -| Test.java:23:3:23:9 | ; | Test.java:23:7:23:8 | 10 | -| Test.java:23:7:23:8 | 10 | Test.java:23:3:23:8 | ...=... | -| Test.java:26:3:26:13 | if (...) | Test.java:26:7:26:7 | x | -| Test.java:26:7:26:7 | x | Test.java:26:12:26:12 | 0 | -| Test.java:26:7:26:12 | ... == ... | Test.java:26:15:29:3 | { ... } | -| Test.java:26:7:26:12 | ... == ... | Test.java:31:3:31:9 | ; | -| Test.java:26:12:26:12 | 0 | Test.java:26:7:26:12 | ... == ... | -| Test.java:26:15:29:3 | { ... } | Test.java:27:4:27:10 | ; | -| Test.java:27:4:27:9 | ...=... | Test.java:28:4:28:10 | ; | -| Test.java:27:4:27:10 | ; | Test.java:27:8:27:9 | 60 | -| Test.java:27:8:27:9 | 60 | Test.java:27:4:27:9 | ...=... | -| Test.java:28:4:28:10 | ; | Test.java:28:8:28:9 | 10 | -| Test.java:28:8:28:9 | 10 | Test.java:28:4:28:9 | ...=... | -| Test.java:31:3:31:3 | z | Test.java:31:8:31:8 | x | -| Test.java:31:3:31:8 | ...+=... | Test.java:34:3:34:15 | while (...) | -| Test.java:31:3:31:9 | ; | Test.java:31:3:31:3 | z | -| Test.java:31:8:31:8 | x | Test.java:31:3:31:8 | ...+=... | -| Test.java:34:3:34:15 | while (...) | Test.java:34:10:34:10 | x | -| Test.java:34:10:34:10 | x | Test.java:34:14:34:14 | 0 | -| Test.java:34:10:34:14 | ... > ... | Test.java:34:17:37:3 | { ... } | -| Test.java:34:10:34:14 | ... > ... | Test.java:39:3:39:9 | ; | -| Test.java:34:14:34:14 | 0 | Test.java:34:10:34:14 | ... > ... | -| Test.java:34:17:37:3 | { ... } | Test.java:35:4:35:10 | ; | -| Test.java:35:4:35:9 | ...=... | Test.java:36:4:36:7 | ; | -| Test.java:35:4:35:10 | ; | Test.java:35:8:35:9 | 10 | -| Test.java:35:8:35:9 | 10 | Test.java:35:4:35:9 | ...=... | -| Test.java:36:4:36:4 | x | Test.java:36:4:36:6 | ...-- | -| Test.java:36:4:36:7 | ; | Test.java:36:4:36:4 | x | -| Test.java:39:3:39:3 | z | Test.java:39:8:39:8 | y | -| Test.java:39:3:39:8 | ...+=... | Test.java:42:3:42:26 | for (...;...;...) | -| Test.java:39:3:39:9 | ; | Test.java:39:3:39:3 | z | -| Test.java:39:8:39:8 | y | Test.java:39:3:39:8 | ...+=... | -| Test.java:42:3:42:26 | for (...;...;...) | Test.java:42:12:42:12 | 0 | -| Test.java:42:8:42:12 | ...=... | Test.java:42:15:42:15 | j | -| Test.java:42:12:42:12 | 0 | Test.java:42:8:42:12 | ...=... | -| Test.java:42:15:42:15 | j | Test.java:42:19:42:20 | 10 | -| Test.java:42:15:42:20 | ... < ... | Test.java:42:28:45:3 | { ... } | -| Test.java:42:15:42:20 | ... < ... | Test.java:47:3:47:9 | ; | -| Test.java:42:19:42:20 | 10 | Test.java:42:15:42:20 | ... < ... | -| Test.java:42:23:42:23 | j | Test.java:42:23:42:25 | ...++ | -| Test.java:42:28:45:3 | { ... } | Test.java:43:4:43:9 | ; | -| Test.java:43:4:43:8 | ...=... | Test.java:44:4:44:10 | ; | -| Test.java:43:4:43:9 | ; | Test.java:43:8:43:8 | 0 | -| Test.java:43:8:43:8 | 0 | Test.java:43:4:43:8 | ...=... | -| Test.java:44:4:44:9 | ...=... | Test.java:42:23:42:23 | j | -| Test.java:44:4:44:10 | ; | Test.java:44:8:44:9 | 10 | -| Test.java:44:8:44:9 | 10 | Test.java:44:4:44:9 | ...=... | -| Test.java:47:3:47:3 | z | Test.java:47:8:47:8 | w | -| Test.java:47:3:47:8 | ...+=... | Test.java:50:3:50:26 | for (...;...;...) | -| Test.java:47:3:47:9 | ; | Test.java:47:3:47:3 | z | -| Test.java:47:8:47:8 | w | Test.java:47:3:47:8 | ...+=... | -| Test.java:50:3:50:26 | for (...;...;...) | Test.java:50:12:50:12 | 0 | -| Test.java:50:8:50:12 | ...=... | Test.java:50:15:50:15 | j | -| Test.java:50:12:50:12 | 0 | Test.java:50:8:50:12 | ...=... | -| Test.java:50:15:50:15 | j | Test.java:50:19:50:20 | 10 | -| Test.java:50:15:50:20 | ... < ... | Test.java:50:28:64:3 | { ... } | -| Test.java:50:15:50:20 | ... < ... | Test.java:66:3:66:17 | ; | -| Test.java:50:19:50:20 | 10 | Test.java:50:15:50:20 | ... < ... | -| Test.java:50:23:50:23 | j | Test.java:50:23:50:25 | ...++ | -| Test.java:50:28:64:3 | { ... } | Test.java:51:4:51:10 | ; | -| Test.java:51:4:51:9 | ...=... | Test.java:52:4:52:13 | if (...) | -| Test.java:51:4:51:10 | ; | Test.java:51:8:51:9 | 30 | -| Test.java:51:8:51:9 | 30 | Test.java:51:4:51:9 | ...=... | -| Test.java:52:4:52:13 | if (...) | Test.java:52:8:52:8 | z | -| Test.java:52:8:52:8 | z | Test.java:52:12:52:12 | 0 | -| Test.java:52:8:52:12 | ... > ... | Test.java:50:23:50:23 | j | -| Test.java:52:8:52:12 | ... > ... | Test.java:53:5:53:14 | if (...) | -| Test.java:52:8:52:12 | ... > ... | Test.java:59:9:62:4 | { ... } | -| Test.java:52:12:52:12 | 0 | Test.java:52:8:52:12 | ... > ... | -| Test.java:53:5:53:14 | if (...) | Test.java:53:9:53:9 | y | -| Test.java:53:9:53:9 | y | Test.java:53:13:53:13 | 0 | -| Test.java:53:9:53:13 | ... > ... | Test.java:53:16:56:5 | { ... } | -| Test.java:53:9:53:13 | ... > ... | Test.java:56:12:58:5 | { ... } | -| Test.java:53:13:53:13 | 0 | Test.java:53:9:53:13 | ... > ... | -| Test.java:53:16:56:5 | { ... } | Test.java:54:6:54:11 | ; | -| Test.java:54:6:54:10 | ...=... | Test.java:55:6:55:11 | break | -| Test.java:54:6:54:11 | ; | Test.java:54:10:54:10 | 0 | -| Test.java:54:10:54:10 | 0 | Test.java:54:6:54:10 | ...=... | -| Test.java:56:12:58:5 | { ... } | Test.java:57:6:57:12 | ; | -| Test.java:57:6:57:11 | ...=... | Test.java:63:4:63:9 | ; | -| Test.java:57:6:57:12 | ; | Test.java:57:10:57:11 | 20 | -| Test.java:57:10:57:11 | 20 | Test.java:57:6:57:11 | ...=... | -| Test.java:59:9:62:4 | { ... } | Test.java:60:5:60:11 | ; | -| Test.java:60:5:60:10 | ...=... | Test.java:61:5:61:13 | continue | -| Test.java:60:5:60:11 | ; | Test.java:60:9:60:10 | 10 | -| Test.java:60:9:60:10 | 10 | Test.java:60:5:60:10 | ...=... | -| Test.java:63:4:63:9 | ; | Test.java:63:8:63:8 | 0 | -| Test.java:63:8:63:8 | 0 | Test.java:63:4:63:8 | ...=... | -| Test.java:66:3:66:3 | z | Test.java:66:8:66:8 | x | -| Test.java:66:3:66:16 | ...+=... | Test.java:70:3:70:9 | ; | -| Test.java:66:3:66:17 | ; | Test.java:66:3:66:3 | z | -| Test.java:66:8:66:8 | x | Test.java:66:12:66:12 | y | -| Test.java:66:8:66:12 | ... + ... | Test.java:66:16:66:16 | w | -| Test.java:66:8:66:16 | ... + ... | Test.java:66:3:66:16 | ...+=... | -| Test.java:66:12:66:12 | y | Test.java:66:8:66:12 | ... + ... | -| Test.java:66:16:66:16 | w | Test.java:66:8:66:16 | ... + ... | -| Test.java:70:3:70:8 | ...=... | Test.java:71:10:71:10 | w | -| Test.java:70:3:70:9 | ; | Test.java:70:7:70:8 | 40 | -| Test.java:70:7:70:8 | 40 | Test.java:70:3:70:8 | ...=... | -| Test.java:71:10:71:10 | w | Test.java:71:3:71:11 | return ... | -| Test.java:74:19:91:2 | { ... } | Test.java:76:3:76:8 | var ...; | -| Test.java:76:3:76:8 | var ...; | Test.java:76:7:76:7 | b | -| Test.java:76:7:76:7 | b | Test.java:77:3:77:8 | var ...; | -| Test.java:77:3:77:8 | var ...; | Test.java:77:7:77:7 | c | -| Test.java:77:7:77:7 | c | Test.java:78:3:78:8 | ; | -| Test.java:78:3:78:7 | ...=... | Test.java:79:3:79:13 | while (...) | -| Test.java:78:3:78:8 | ; | Test.java:78:7:78:7 | 0 | -| Test.java:78:7:78:7 | 0 | Test.java:78:3:78:7 | ...=... | -| Test.java:79:3:79:13 | while (...) | Test.java:79:9:79:12 | true | -| Test.java:79:9:79:12 | true | Test.java:79:15:89:3 | { ... } | -| Test.java:79:15:89:3 | { ... } | Test.java:80:4:80:10 | ; | -| Test.java:80:4:80:9 | ...=... | Test.java:81:4:81:15 | if (...) | -| Test.java:80:4:80:10 | ; | Test.java:80:8:80:9 | 10 | -| Test.java:80:8:80:9 | 10 | Test.java:80:4:80:9 | ...=... | -| Test.java:81:4:81:15 | if (...) | Test.java:81:8:81:8 | a | -| Test.java:81:8:81:8 | a | Test.java:81:12:81:14 | 100 | -| Test.java:81:8:81:14 | ... > ... | Test.java:81:17:84:4 | { ... } | -| Test.java:81:8:81:14 | ... > ... | Test.java:85:4:85:15 | if (...) | -| Test.java:81:12:81:14 | 100 | Test.java:81:8:81:14 | ... > ... | -| Test.java:81:17:84:4 | { ... } | Test.java:82:5:82:11 | ; | -| Test.java:82:5:82:10 | ...=... | Test.java:83:5:83:10 | ; | -| Test.java:82:5:82:11 | ; | Test.java:82:9:82:10 | 10 | -| Test.java:82:9:82:10 | 10 | Test.java:82:5:82:10 | ...=... | -| Test.java:83:5:83:10 | ; | Test.java:83:9:83:9 | c | -| Test.java:83:9:83:9 | c | Test.java:83:5:83:9 | ...=... | -| Test.java:85:4:85:15 | if (...) | Test.java:85:8:85:8 | a | -| Test.java:85:8:85:8 | a | Test.java:85:13:85:14 | 10 | -| Test.java:85:8:85:14 | ... == ... | Test.java:74:6:74:10 | Normal Exit | -| Test.java:85:8:85:14 | ... == ... | Test.java:86:5:86:10 | break | -| Test.java:85:8:85:14 | ... == ... | Test.java:87:4:87:15 | if (...) | -| Test.java:85:13:85:14 | 10 | Test.java:85:8:85:14 | ... == ... | -| Test.java:86:5:86:10 | break | Test.java:90:10:90:10 | b | -| Test.java:87:4:87:15 | if (...) | Test.java:87:8:87:8 | a | -| Test.java:87:8:87:8 | a | Test.java:87:13:87:14 | 20 | -| Test.java:87:8:87:14 | ... == ... | Test.java:88:12:88:12 | c | -| Test.java:87:13:87:14 | 20 | Test.java:87:8:87:14 | ... == ... | -| Test.java:88:12:88:12 | c | Test.java:88:5:88:13 | return ... | -| Test.java:90:10:90:10 | b | Test.java:90:3:90:11 | return ... | +| Test.java:2:6:2:9 | Normal Exit | Test.java:2:6:2:9 | Exit | +| Test.java:2:32:72:2 | { ... } | Test.java:7:14:10:3 | { ... } | +| Test.java:2:32:72:2 | { ... } | Test.java:10:10:12:3 | { ... } | +| Test.java:2:32:72:2 | { ... } | Test.java:14:3:14:20 | ; | +| Test.java:14:3:14:20 | ; | Test.java:2:6:2:9 | Normal Exit | +| Test.java:14:3:14:20 | ; | Test.java:18:4:18:10 | ; | +| Test.java:14:3:14:20 | ; | Test.java:20:11:20:11 | z | +| Test.java:18:4:18:10 | ; | Test.java:26:15:29:3 | { ... } | +| Test.java:18:4:18:10 | ; | Test.java:31:3:31:9 | ; | +| Test.java:31:3:31:9 | ; | Test.java:34:10:34:10 | x | +| Test.java:34:10:34:10 | x | Test.java:34:17:37:3 | { ... } | +| Test.java:34:10:34:10 | x | Test.java:39:3:39:9 | ; | +| Test.java:39:3:39:9 | ; | Test.java:42:15:42:15 | j | +| Test.java:42:15:42:15 | j | Test.java:42:28:45:3 | { ... } | +| Test.java:42:15:42:15 | j | Test.java:47:3:47:9 | ; | +| Test.java:47:3:47:9 | ; | Test.java:50:15:50:15 | j | +| Test.java:50:15:50:15 | j | Test.java:50:28:64:3 | { ... } | +| Test.java:50:15:50:15 | j | Test.java:66:3:66:17 | ; | +| Test.java:50:28:64:3 | { ... } | Test.java:50:23:50:23 | j | +| Test.java:50:28:64:3 | { ... } | Test.java:53:5:53:14 | if (...) | +| Test.java:50:28:64:3 | { ... } | Test.java:59:9:62:4 | { ... } | +| Test.java:53:5:53:14 | if (...) | Test.java:53:16:56:5 | { ... } | +| Test.java:53:5:53:14 | if (...) | Test.java:56:12:58:5 | { ... } | +| Test.java:74:6:74:10 | Normal Exit | Test.java:74:6:74:10 | Exit | +| Test.java:74:19:91:2 | { ... } | Test.java:79:9:79:12 | true | +| Test.java:79:9:79:12 | true | Test.java:81:17:84:4 | { ... } | +| Test.java:79:9:79:12 | true | Test.java:85:4:85:15 | if (...) | +| Test.java:85:4:85:15 | if (...) | Test.java:74:6:74:10 | Normal Exit | +| Test.java:85:4:85:15 | if (...) | Test.java:86:5:86:10 | break | +| Test.java:85:4:85:15 | if (...) | Test.java:87:4:87:15 | if (...) | +| Test.java:87:4:87:15 | if (...) | Test.java:88:12:88:12 | c | diff --git a/java/ql/test/library-tests/controlflow/dominance/dominator.ql b/java/ql/test/library-tests/controlflow/dominance/dominator.ql index 701640bf7209..b157cb5fca3d 100644 --- a/java/ql/test/library-tests/controlflow/dominance/dominator.ql +++ b/java/ql/test/library-tests/controlflow/dominance/dominator.ql @@ -1,9 +1,8 @@ -import default -import semmle.code.java.controlflow.Dominance +import java -from Method func, ControlFlowNode dominator, ControlFlowNode node +from Method func, BasicBlock dominator, BasicBlock bb where - iDominates(dominator, node) and - dominator.getEnclosingStmt().getEnclosingCallable() = func and + dominator.immediatelyDominates(bb) and + dominator.getEnclosingCallable() = func and func.getDeclaringType().hasName("Test") -select dominator, node +select dominator, bb From 48e37242991fd38400c3595edb72e9bcbb32d83e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 20 Jan 2026 12:43:55 +0100 Subject: [PATCH 167/243] Java/Cfg: Introduce new shared CFG library and replace the Java CFG. --- java/ql/lib/printCfg.ql | 4 +- java/ql/lib/semmle/code/java/Completion.qll | 96 - .../lib/semmle/code/java/ControlFlowGraph.qll | 1849 ++++------------- .../code/java/controlflow/BasicBlocks.qll | 143 -- .../semmle/code/java/controlflow/Paths.qll | 6 +- .../code/java/dataflow/internal/BaseSSA.qll | 16 +- .../code/java/dataflow/internal/SsaImpl.qll | 25 +- .../Termination/ConstantLoopCondition.ql | 18 +- .../Declarations/Common.qll | 44 +- .../controlflow/dominance/dominatorUnique.ql | 2 +- .../controlflow/dominance/dominatorUnique.ql | 2 +- .../controlflow/dominance/dominatorUnique.ql | 2 +- .../java7/MultiCatch/MultiCatchControlFlow.ql | 2 +- .../codeql/controlflow/ControlFlowGraph.qll | 1772 ++++++++++++++++ 14 files changed, 2175 insertions(+), 1806 deletions(-) delete mode 100644 java/ql/lib/semmle/code/java/Completion.qll create mode 100644 shared/controlflow/codeql/controlflow/ControlFlowGraph.qll diff --git a/java/ql/lib/printCfg.ql b/java/ql/lib/printCfg.ql index 5e3cc22644ef..d90c4633de85 100644 --- a/java/ql/lib/printCfg.ql +++ b/java/ql/lib/printCfg.ql @@ -21,7 +21,7 @@ external int selectedSourceColumn(); private predicate selectedSourceColumnAlias = selectedSourceColumn/0; -module ViewCfgQueryInput implements ViewCfgQueryInputSig { +module ViewCfgQueryInput implements ControlFlow::ViewCfgQueryInputSig { predicate selectedSourceFile = selectedSourceFileAlias/0; predicate selectedSourceLine = selectedSourceLineAlias/0; @@ -42,4 +42,4 @@ module ViewCfgQueryInput implements ViewCfgQueryInputSig { } } -import ViewCfgQuery +import ControlFlow::ViewCfgQuery diff --git a/java/ql/lib/semmle/code/java/Completion.qll b/java/ql/lib/semmle/code/java/Completion.qll deleted file mode 100644 index 35d3c83e2ee9..000000000000 --- a/java/ql/lib/semmle/code/java/Completion.qll +++ /dev/null @@ -1,96 +0,0 @@ -/** - * Provides classes and predicates for representing completions. - */ -overlay[local?] -module; - -/* - * A completion represents how a statement or expression terminates. - * - * There are five kinds of completions: normal completion, - * `return` completion, `break` completion, - * `continue` completion, and `throw` completion. - * - * Normal completions are further subdivided into boolean completions and all - * other normal completions. A boolean completion adds the information that the - * cfg node terminated with the given boolean value due to a subexpression - * terminating with the other given boolean value. This is only - * relevant for conditional contexts in which the value controls the - * control-flow successor. - */ - -import java - -/** - * A label of a `LabeledStmt`. - */ -newtype Label = MkLabel(string l) { exists(LabeledStmt lbl | l = lbl.getLabel()) } - -/** - * Either a `Label` or nothing. - */ -newtype MaybeLabel = - JustLabel(Label l) or - NoLabel() - -/** - * A completion of a statement or an expression. - */ -newtype Completion = - /** - * The statement or expression completes normally and continues to the next statement. - */ - NormalCompletion() or - /** - * The statement or expression completes by returning from the function. - */ - ReturnCompletion() or - /** - * The expression completes with value `outerValue` overall and with the last control - * flow node having value `innerValue`. - */ - BooleanCompletion(boolean outerValue, boolean innerValue) { - (outerValue = true or outerValue = false) and - (innerValue = true or innerValue = false) - } or - /** - * The expression or statement completes via a `break` statement. - */ - BreakCompletion(MaybeLabel l) or - /** - * The expression or statement completes via a `yield` statement. - */ - YieldCompletion(NormalOrBooleanCompletion c) or - /** - * The expression or statement completes via a `continue` statement. - */ - ContinueCompletion(MaybeLabel l) or - /** - * The expression or statement completes by throwing a `ThrowableType`. - */ - ThrowCompletion(ThrowableType tt) - -/** A completion that is either a `NormalCompletion` or a `BooleanCompletion`. */ -class NormalOrBooleanCompletion extends Completion { - NormalOrBooleanCompletion() { - this instanceof NormalCompletion or this instanceof BooleanCompletion - } - - /** Gets a textual representation of this completion. */ - string toString() { result = "completion" } -} - -/** Gets the completion `ContinueCompletion(NoLabel())`. */ -ContinueCompletion anonymousContinueCompletion() { result = ContinueCompletion(NoLabel()) } - -/** Gets the completion `ContinueCompletion(JustLabel(l))`. */ -ContinueCompletion labelledContinueCompletion(Label l) { result = ContinueCompletion(JustLabel(l)) } - -/** Gets the completion `BreakCompletion(NoLabel())`. */ -BreakCompletion anonymousBreakCompletion() { result = BreakCompletion(NoLabel()) } - -/** Gets the completion `BreakCompletion(JustLabel(l))`. */ -BreakCompletion labelledBreakCompletion(Label l) { result = BreakCompletion(JustLabel(l)) } - -/** Gets the completion `BooleanCompletion(value, value)`. */ -Completion basicBooleanCompletion(boolean value) { result = BooleanCompletion(value, value) } diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index de1a239faeac..30b86f559f01 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -1,537 +1,304 @@ /** - * Provides classes and predicates for computing expression-level intra-procedural control flow graphs. - * - * The only API exported by this library are the toplevel classes `ControlFlow::Node` - * and its subclass `ConditionNode`, which wrap the successor relation and the - * concept of true- and false-successors of conditions. A cfg node may either be a - * statement, an expression, or an exit node for a callable, indicating that - * execution of the callable terminates. + * Provides classes representing the control flow graph within callables. */ overlay[local?] module; -/* - * The implementation is centered around the concept of a _completion_, which - * models how the execution of a statement or expression terminates. - * Completions are represented as an algebraic data type `Completion` defined in - * `Completion.qll`. - * - * The CFG is built by structural recursion over the AST. To achieve this the - * CFG edges related to a given AST node, `n`, is divided into three categories: - * 1. The in-going edge that points to the first CFG node to execute when the - * `n` is going to be executed. - * 2. The out-going edges for control-flow leaving `n` that are going to some - * other node in the surrounding context of `n`. - * 3. The edges that have both of their end-points entirely within the AST - * node and its children. - * The edges in (1) and (2) are inherently non-local and are therefore - * initially calculated as half-edges, that is, the single node, `k`, of the - * edge contained within `n`, by the predicates `k = first(n)` and - * `last(n, k, _)`, respectively. The edges in (3) can then be enumerated - * directly by the predicate `succ` by calling `first` and `last` recursively - * on the children of `n` and connecting the end-points. This yields the entire - * CFG, since all edges are in (3) for _some_ AST node. - * - * The third parameter of `last` is the completion, which is necessary to - * distinguish the out-going edges from `n`. Note that the completion changes - * as the calculation of `last` proceeds outward through the AST; for example, - * a `breakCompletion` is caught up by its surrounding loop and turned into a - * `normalCompletion`, or a `normalCompletion` proceeds outward through the end - * of a `finally` block and is turned into whatever completion was caught by - * the `finally`, or a `booleanCompletion(false, _)` occurs in a loop condition - * and is turned into a `normalCompletion` of the entire loop. When the edge is - * eventually connected we use the completion at that level of the AST as the - * label of the edge, thus creating an edge-labelled CFG. - * - * An important goal of the CFG is to get the order of side-effects correct. - * Most expressions can have side-effects and must therefore be modeled in the - * CFG in AST post-order. For example, a `MethodCall` evaluates its arguments - * before the call. Most statements don't have side-effects, but merely affect - * the control-flow and some could therefore be excluded from the CFG. However, - * as a design choice, all statements are included in the CFG and generally - * serve as their own entry-points, thus executing in some version of AST - * pre-order. A few notable exceptions are `ReturnStmt`, `ThrowStmt`, - * `SynchronizedStmt`, `ThisConstructorInvocationStmt`, and - * `SuperConstructorInvocationStmt`, which all have side-effects and therefore - * are modeled in side-effect order. Loop statement nodes are only passed on - * entry, after which control goes back and forth between body and loop - * condition. - * - * Some out-going edges from boolean expressions have a known value and in some - * contexts this affects the possible successors. For example, in `if(A || B)` - * a short-circuit edge that skips `B` must be true and can therefore only lead - * to the then-branch. If the `||` is modeled in post-order then this - * information is lost, and consequently it is better to model `||` and `&&` in - * pre-order. The conditional expression `? :` is also modeled in pre-order to - * achieve consistent CFGs for the equivalent `A && B` and `A ? B : false`. - * Finally, the logical negation is also modeled in pre-order to achieve - * consistent CFGs for the equivalent `!(A || B)` and `!A && !B`. The boolean - * value `b` is tracked with the completion `booleanCompletion(b, _)`. - * - * Note that the second parameter in a `booleanCompletion` isn't needed to - * calculate the CFG. It is, however, needed to track the value of the - * sub-expression. For example, this ensures that the false-successor of the - * `ConditionNode` `A` in `if(!(A && B))` can be correctly identified as the - * then-branch (even though this completion turns into a - * `booleanCompletion(true, _)` from the perspective of the `if`-node). - * - * As a final note, expressions that aren't actually executed in the usual - * sense are excluded from the CFG. This covers, for example, parentheses, - * l-values that aren't r-values as well, and expressions in `ConstCase`s. - * For example, the `x` in `x=3` is not in the CFG, but the `x` in `x+=3` is. - */ - import java +private import codeql.controlflow.ControlFlowGraph private import codeql.controlflow.SuccessorType -private import codeql.util.Boolean -private import Completion private import controlflow.internal.Preconditions -private import controlflow.internal.SwitchCases - -/** Provides the definition of control flow nodes. */ -module ControlFlow { - private predicate hasControlFlow(Expr e) { - not exists(ConstCase cc | e = cc.getValue(_)) and - not e.getParent*() instanceof Annotation and - not e instanceof TypeAccess and - not e instanceof ArrayTypeAccess and - not e instanceof UnionTypeAccess and - not e instanceof IntersectionTypeAccess and - not e instanceof WildcardTypeAccess and - not exists(AssignExpr ae | ae.getDest() = e) - } - - private newtype TNode = - TExprNode(Expr e) { hasControlFlow(e) } or - TStmtNode(Stmt s) or - TAnnotatedExitNode(Callable c, Boolean normal) { exists(c.getBody()) } or - TExitNode(Callable c) { exists(c.getBody()) } or - TAssertThrowNode(AssertStmt s) - /** A node in the expression-level control-flow graph. */ - class Node extends TNode { - /** Gets an immediate successor of this node. */ - Node getASuccessor() { result = succ(this) } - - /** Gets an immediate predecessor of this node. */ - Node getAPredecessor() { this = succ(result) } - - /** Gets an exception successor of this node. */ - Node getAnExceptionSuccessor() { result = succ(this, ThrowCompletion(_)) } - - /** Gets a successor of this node that is neither an exception successor nor a jump (break, continue, return). */ - Node getANormalSuccessor() { - result = succ(this, BooleanCompletion(_, _)) or - result = succ(this, NormalCompletion()) - } +private module Cfg0 = Make0; - /** Gets an immediate successor of this node of a given type, if any. */ - Node getASuccessor(SuccessorType t) { - result = branchSuccessor(this, t.(BooleanSuccessor).getValue()) - or - exists(Completion completion | - result = succ(this, completion) and - not result = branchSuccessor(this, _) - | - completion = NormalCompletion() and t instanceof DirectSuccessor - or - completion = ReturnCompletion() and t instanceof ReturnSuccessor - or - completion = BreakCompletion(_) and t instanceof BreakSuccessor - or - completion = YieldCompletion(_) and t instanceof BreakSuccessor - or - completion = ContinueCompletion(_) and t instanceof ContinueSuccessor - or - completion = ThrowCompletion(_) and t instanceof ExceptionSuccessor - ) - } +private module Cfg1 = Make1; - /** Gets the basic block that contains this node. */ - BasicBlock getBasicBlock() { result.getANode() = this } +private module Cfg2 = Make2; - /** Gets the statement containing this node, if any. */ - Stmt getEnclosingStmt() { none() } +private import Cfg0 +private import Cfg1 +private import Cfg2 +import Public - /** Gets the immediately enclosing callable whose body contains this node. */ - Callable getEnclosingCallable() { none() } - - /** Gets the statement this `Node` corresponds to, if any. */ - Stmt asStmt() { this = TStmtNode(result) } +/** Provides an implementation of the AST signature for Java. */ +module Ast implements AstSig { + private import java as J - /** Gets the expression this `Node` corresponds to, if any. */ - Expr asExpr() { this = TExprNode(result) } + class AstNode = ExprParent; - /** Gets a textual representation of this element. */ - string toString() { none() } + private predicate skipControlFlow(Expr e) { + exists(ConstCase cc | e = cc.getValue(_)) or + e.getParent*() instanceof Annotation or + e instanceof TypeAccess or + e instanceof ArrayTypeAccess or + e instanceof UnionTypeAccess or + e instanceof IntersectionTypeAccess or + e instanceof WildcardTypeAccess + } - /** Gets the source location for this element. */ - Location getLocation() { none() } + AstNode getChild(AstNode n, int index) { + not skipControlFlow(result) and + result.(Expr).isNthChildOf(n, index) + or + result.(Stmt).isNthChildOf(n, index) + or + result = n.(SwitchCase).getRuleExpression() and index = -1 + } - /** - * Gets the most appropriate AST node for this control flow node, if any. - */ - ExprParent getAstNode() { none() } + Callable getEnclosingCallable(AstNode node) { + result = node.(Expr).getEnclosingCallable() or + result = node.(Stmt).getEnclosingCallable() } - /** A control-flow node that represents the evaluation of an expression. */ - class ExprNode extends Node, TExprNode { - Expr e; + class Callable = J::Callable; - ExprNode() { this = TExprNode(e) } + AstNode callableGetBody(Callable c) { result = c.getBody() } - override Stmt getEnclosingStmt() { result = e.getEnclosingStmt() } + class Stmt = J::Stmt; - override Callable getEnclosingCallable() { result = e.getEnclosingCallable() } + class Expr = J::Expr; - override ExprParent getAstNode() { result = e } + class BlockStmt = J::BlockStmt; - /** Gets a textual representation of this element. */ - override string toString() { result = e.toString() } + class ExprStmt = J::ExprStmt; - /** Gets the source location for this element. */ - override Location getLocation() { result = e.getLocation() } - } + class IfStmt = J::IfStmt; - /** A control-flow node that represents a statement. */ - class StmtNode extends Node, TStmtNode { - Stmt s; + class LoopStmt = J::LoopStmt; - StmtNode() { this = TStmtNode(s) } + class WhileStmt = J::WhileStmt; - override Stmt getEnclosingStmt() { result = s } + class DoStmt = J::DoStmt; - override Callable getEnclosingCallable() { result = s.getEnclosingCallable() } + class ForStmt = J::ForStmt; - override ExprParent getAstNode() { result = s } + final private class FinalEnhancedForStmt = J::EnhancedForStmt; - override string toString() { result = s.toString() } + class ForeachStmt extends FinalEnhancedForStmt { + Expr getVariable() { result = super.getVariable() } - override Location getLocation() { result = s.getLocation() } + Expr getCollection() { result = super.getExpr() } } - /** A control flow node indicating the normal or exceptional termination of a callable. */ - class AnnotatedExitNode extends Node, TAnnotatedExitNode { - Callable c; - boolean normal; + class BreakStmt extends Stmt { + BreakStmt() { this instanceof J::BreakStmt or this instanceof YieldStmt } + } - AnnotatedExitNode() { this = TAnnotatedExitNode(c, normal) } + class ContinueStmt = J::ContinueStmt; - override Callable getEnclosingCallable() { result = c } + class ReturnStmt = J::ReturnStmt; - override ExprParent getAstNode() { result = c } + class ThrowStmt = J::ThrowStmt; - /** Gets a textual representation of this element. */ - override string toString() { - normal = true and result = "Normal Exit" - or - normal = false and result = "Exceptional Exit" - } + final private class FinalTryStmt = J::TryStmt; - /** Gets the source location for this element. */ - override Location getLocation() { result = c.getLocation() } - } + class TryStmt extends FinalTryStmt { + Stmt getBody() { result = super.getBlock() } - /** A control flow node indicating normal termination of a callable. */ - class NormalExitNode extends AnnotatedExitNode { - NormalExitNode() { this = TAnnotatedExitNode(_, true) } - } + CatchClause getCatch(int index) { result = super.getCatchClause(index) } - /** A control flow node indicating exceptional termination of a callable. */ - class ExceptionalExitNode extends AnnotatedExitNode { - ExceptionalExitNode() { this = TAnnotatedExitNode(_, false) } + Stmt getFinally() { result = super.getFinally() } } - /** A control flow node indicating the termination of a callable. */ - class ExitNode extends Node, TExitNode { - Callable c; + AstNode getTryInit(TryStmt try, int index) { result = try.getResource(index) } - ExitNode() { this = TExitNode(c) } + final private class FinalCatchClause = J::CatchClause; - override Callable getEnclosingCallable() { result = c } + class CatchClause extends FinalCatchClause { + AstNode getVariable() { result = super.getVariable() } - override ExprParent getAstNode() { result = c } + Expr getCondition() { none() } - /** Gets a textual representation of this element. */ - override string toString() { result = "Exit" } + Stmt getBody() { result = super.getBlock() } + } + + class Switch extends AstNode { + Switch() { + this instanceof SwitchStmt or + this instanceof SwitchExpr + } + + Expr getExpr() { + result = this.(SwitchStmt).getExpr() or + result = this.(SwitchExpr).getExpr() + } - /** Gets the source location for this element. */ - override Location getLocation() { result = c.getLocation() } + Case getCase(int index) { + result = this.(SwitchStmt).getCase(index) or + result = this.(SwitchExpr).getCase(index) + } } - /** A control flow node indicating a failing assertion. */ - class AssertThrowNode extends Node, TAssertThrowNode { - AssertStmt s; + int getCaseControlFlowOrder(Switch s, Case c) { + exists(int pos | s.getCase(pos) = c | + // if a default case is not last in the AST, move it last in the CFG order + if c instanceof DefaultCase and exists(s.getCase(pos + 1)) + then result = strictcount(s.getCase(_)) + else result = pos + ) + } - AssertThrowNode() { this = TAssertThrowNode(s) } + private Stmt getSwitchStmt(Switch s, int i) { + result = s.(SwitchStmt).getStmt(i) or + result = s.(SwitchExpr).getStmt(i) + } - override Stmt getEnclosingStmt() { result = s } + private int numberOfStmts(Switch s) { result = strictcount(getSwitchStmt(s, _)) } - override Callable getEnclosingCallable() { result = s.getEnclosingCallable() } + private predicate caseIndex(Switch s, Case c, int caseIdx, int caseStmtPos) { + c = s.getCase(caseIdx) and + c = getSwitchStmt(s, caseStmtPos) + } - override ExprParent getAstNode() { result = s } + class Case extends AstNode instanceof J::SwitchCase { + /** Gets a pattern being matched by this case. */ + AstNode getAPattern() { + result = this.(PatternCase).getAPattern() or + result = this.(ConstCase).getValue(_) + } - /** Gets a textual representation of this element. */ - override string toString() { result = "Assert Throw" } + /** Gets the guard expression of this case, if any. */ + Expr getGuard() { result = this.(PatternCase).getGuard() } - /** Gets the source location for this element. */ - override Location getLocation() { result = s.getLocation() } + /** + * Gets the body element of this case at the specified (zero-based) `index`. + * + * This is either unique when the case has a single right-hand side, or it + * is the sequence of statements between this case and the next case. + */ + AstNode getBodyElement(int index) { + result = this.(J::SwitchCase).getRuleExpression() and index = 0 + or + result = this.(J::SwitchCase).getRuleStatement() and index = 0 + or + not this.(J::SwitchCase).isRule() and + exists(Switch s, int caseIdx, int caseStmtPos, int nextCaseStmtPos | + caseIndex(pragma[only_bind_into](s), this, caseIdx, caseStmtPos) and + ( + caseIndex(pragma[only_bind_into](s), _, caseIdx + 1, nextCaseStmtPos) + or + not exists(s.getCase(caseIdx + 1)) and + nextCaseStmtPos = numberOfStmts(s) + ) and + index = [0 .. nextCaseStmtPos - caseStmtPos - 2] and + result = getSwitchStmt(pragma[only_bind_into](s), caseStmtPos + 1 + index) + ) + } } -} -class ControlFlowNode = ControlFlow::Node; + predicate fallsThrough(Case c) { not c.(J::SwitchCase).isRule() } -/** Gets the intra-procedural successor of `n`. */ -private ControlFlowNode succ(ControlFlowNode n) { result = succ(n, _) } + class ConditionalExpr = J::ConditionalExpr; -cached -private module ControlFlowGraphImpl { - private import ControlFlow + class BinaryExpr = J::BinaryExpr; - private class AstNode extends ExprParent { - AstNode() { this instanceof Expr or this instanceof Stmt } + class LogicalAndExpr = AndLogicalExpr; - Stmt getEnclosingStmt() { - result = this or - result = this.(Expr).getEnclosingStmt() - } + class LogicalOrExpr = OrLogicalExpr; - Node getCfgNode() { result.asExpr() = this or result.asStmt() = this } + class NullCoalescingExpr extends BinaryExpr { + NullCoalescingExpr() { none() } } - /** - * Gets a label that applies to this statement. - */ - private Label getLabel(Stmt s) { - exists(LabeledStmt l | s = l.getStmt() | - result = MkLabel(l.getLabel()) or - result = getLabel(l) - ) - } + class UnaryExpr = J::UnaryExpr; - /** - * A throwable that's a (reflexive, transitive) supertype of an unchecked - * exception. Besides the unchecked exceptions themselves, this includes - * `java.lang.Throwable` and `java.lang.Exception`. - */ - private class UncheckedThrowableSuperType extends RefType { - UncheckedThrowableSuperType() { - this instanceof TypeThrowable or - this instanceof TypeException or - this instanceof UncheckedThrowableType - } + class LogicalNotExpr = LogNotExpr; - /** - * An unchecked throwable that is a subtype of this `UncheckedThrowableSuperType` and - * sits as high as possible in the type hierarchy. This is mostly unique except for - * `TypeThrowable` which results in both `TypeError` and `TypeRuntimeException`. - */ - UncheckedThrowableType getAnUncheckedSubtype() { - result = this - or - result instanceof TypeError and this instanceof TypeThrowable - or - result instanceof TypeRuntimeException and - (this instanceof TypeThrowable or this instanceof TypeException) - } - } + final private class FinalBooleanLiteral = J::BooleanLiteral; - /** - * Bind `t` to an exception type that may be thrown during execution of `n`, - * either because `n` is a `throw` statement, or because it is a call - * that may throw an exception, or because it is a cast and a - * `ClassCastException` is expected, or because it is a Kotlin not-null check - * and a `NullPointerException` is expected. - */ - private predicate mayThrow(AstNode n, ThrowableType t) { - t = n.(ThrowStmt).getThrownExceptionType() - or - exists(Call c | c = n | - t = c.getCallee().getAThrownExceptionType() or - uncheckedExceptionFromCatch(n, t) or - uncheckedExceptionFromFinally(n, t) or - uncheckedExceptionFromMethod(c, t) - ) - or - exists(CastExpr c | c = n | - t instanceof TypeClassCastException and - uncheckedExceptionFromCatch(n, t) - ) - or - exists(NotNullExpr nn | nn = n | - t instanceof TypeNullPointerException and - uncheckedExceptionFromCatch(n, t) - ) + class BooleanLiteral extends FinalBooleanLiteral { + boolean getValue() { result = this.getBooleanValue() } } +} - private predicate methodMayThrow(Method m, ThrowableType t) { - exists(AstNode n | - t = n.(ThrowStmt).getThrownExceptionType() and - not n.(ThrowStmt).getParent() = any(Method m0).getBody() +private module Exceptions { + private predicate methodMayThrow(Method m) { + exists(Stmt stmt | + stmt instanceof ThrowStmt and + not stmt.(ThrowStmt).getParent() = any(Method m0).getBody() or - uncheckedExceptionFromMethod(n, t) + uncheckedExceptionFromMethod(any(MethodCall call | call.getEnclosingStmt() = stmt)) | - n.getEnclosingStmt().getEnclosingCallable() = m and + stmt.getEnclosingCallable() = m and not exists(TryStmt try | - exists(try.getACatchClause()) and try.getBlock() = n.getEnclosingStmt().getEnclosingStmt*() + exists(try.getACatchClause()) and try.getBlock() = stmt.getEnclosingStmt*() ) ) } /** - * Bind `t` to an unchecked exception that may occur in a precondition check or guard wrapper. + * Holds if an unchecked exception may occur in a precondition check or guard wrapper. */ - private predicate uncheckedExceptionFromMethod(MethodCall ma, ThrowableType t) { - (methodCallChecksArgument(ma) or methodCallUnconditionallyThrows(ma)) and - (t instanceof TypeError or t instanceof TypeRuntimeException) + private predicate uncheckedExceptionFromMethod(MethodCall call) { + (methodCallChecksArgument(call) or methodCallUnconditionallyThrows(call)) or - methodMayThrow(ma.getMethod().getSourceDeclaration(), t) + methodMayThrow(call.getMethod().getSourceDeclaration()) } /** - * Bind `t` to an unchecked exception that may transfer control to a finally - * block inside which `n` is nested. + * Holds if an unchecked exception from `c` may transfer control to a finally + * block inside which `c` is nested. */ - private predicate uncheckedExceptionFromFinally(AstNode n, ThrowableType t) { + private predicate uncheckedExceptionFromFinally(Call c) { exists(TryStmt try | - n.getEnclosingStmt().getEnclosingStmt+() = try.getBlock() or - n.(Expr).getParent*() = try.getAResource() + c.getEnclosingStmt().getEnclosingStmt+() = try.getBlock() or + c.(Expr).getParent*() = try.getAResource() | - exists(try.getFinally()) and - (t instanceof TypeError or t instanceof TypeRuntimeException) + exists(try.getFinally()) ) } /** - * Bind `t` to all unchecked exceptions that may be caught by some - * `try-catch` inside which `n` is nested. + * A throwable that's a (reflexive, transitive) supertype of an unchecked + * exception. Besides the unchecked exceptions themselves, this includes + * `java.lang.Throwable` and `java.lang.Exception`. */ - private predicate uncheckedExceptionFromCatch(AstNode n, ThrowableType t) { - exists(TryStmt try, UncheckedThrowableSuperType caught | - n.getEnclosingStmt().getEnclosingStmt+() = try.getBlock() or - n.(Expr).getParent*() = try.getAResource() - | - t = caught.getAnUncheckedSubtype() and - try.getACatchClause().getACaughtType() = caught - ) - } - - private ThrowableType actualAssertionError() { - result.hasQualifiedName("java.lang", "AssertionError") - } - - private ThrowableType assertionError() { - result = actualAssertionError() - or - // In case `AssertionError` is not extracted, we use `Error` as a fallback. - not exists(actualAssertionError()) and - result.hasQualifiedName("java.lang", "Error") + private class UncheckedThrowableSuperType extends RefType { + UncheckedThrowableSuperType() { + this instanceof TypeThrowable or + this instanceof TypeException or + this instanceof UncheckedThrowableType + } } /** - * Gets an exception type that may be thrown during execution of the - * body or the resources (if any) of `try`. + * Holds if an unchecked exception from `n` may be caught by an enclosing + * catch clause. */ - private ThrowableType thrownInBody(TryStmt try) { - exists(AstNode n | - mayThrow(n, result) - or - n instanceof AssertStmt and result = assertionError() - | - n.getEnclosingStmt().getEnclosingStmt+() = try.getBlock() or + private predicate uncheckedExceptionFromCatch(Ast::AstNode n) { + exists(TryStmt try, UncheckedThrowableSuperType caught | + n.(Stmt).getEnclosingStmt+() = try.getBlock() or + n.(Expr).getEnclosingStmt().getEnclosingStmt+() = try.getBlock() or n.(Expr).getParent*() = try.getAResource() + | + try.getACatchClause().getACaughtType() = caught and + ( + caught instanceof TypeClassCastException and n instanceof CastExpr + or + caught instanceof TypeNullPointerException and n instanceof NotNullExpr + or + n instanceof Call + ) ) } /** - * Bind `thrown` to an exception type that may be thrown during execution - * of the body or the resource declarations of the `try` block to which - * `c` belongs, such that `c` definitely catches that exception (if no - * prior catch clause handles it). - */ - private predicate mustCatch(CatchClause c, ThrowableType thrown) { - thrown = thrownInBody(c.getTry()) and - hasDescendant(c.getACaughtType(), thrown) - } - - /** - * Bind `thrown` to an exception type that may be thrown during execution - * of the body or the resource declarations of the `try` block to which - * `c` belongs, such that `c` may _not_ catch that exception. - * - * This predicate computes the complement of `mustCatch` over those - * exception types that are thrown in the body/resource declarations of - * the corresponding `try`. - */ - private predicate mayNotCatch(CatchClause c, ThrowableType thrown) { - thrown = thrownInBody(c.getTry()) and - not hasDescendant(c.getACaughtType(), thrown) - } - - /** - * Bind `thrown` to an exception type that may be thrown during execution - * of the body or the resource declarations of the `try` block to which - * `c` belongs, such that `c` possibly catches that exception. - */ - private predicate mayCatch(CatchClause c, ThrowableType thrown) { - mustCatch(c, thrown) - or - mayNotCatch(c, thrown) and exists(c.getACaughtType().commonSubtype(thrown)) - } - - /** - * Given an exception type `thrown`, determine which catch clauses of - * `try` may possibly catch that exception. - */ - private CatchClause handlingCatchClause(TryStmt try, ThrowableType thrown) { - exists(int i | result = try.getCatchClause(i) | - mayCatch(result, thrown) and - not exists(int j | j < i | mustCatch(try.getCatchClause(j), thrown)) - ) - } - - /** - * Boolean expressions that occur in a context in which their value affect control flow. - * That is, contexts where the control-flow edges depend on `value` given that `b` ends - * with a `booleanCompletion(value, _)`. + * Holds if `n` is expected to possibly throw an exception. This can either + * be due to a declared (likely checked) exception on a call target + * or due to an enclosing try/catch/finally. */ - private predicate inBooleanContext(AstNode b) { - exists(LogicExpr logexpr | - logexpr.(BinaryExpr).getLeftOperand() = b - or - logexpr.getAnOperand() = b and inBooleanContext(logexpr) - ) + predicate mayThrow(Ast::AstNode n) { + exists(n.(Call).getCallee().getAThrownExceptionType()) or - exists(ConditionalExpr condexpr | - condexpr.getCondition() = b - or - condexpr.getABranchExpr() = b and - inBooleanContext(condexpr) - ) - or - exists(AssertStmt assertstmt | assertstmt.getExpr() = b) - or - exists(SwitchExpr switch | - inBooleanContext(switch) and - switch.getAResult() = b - ) - or - exists(ConditionalStmt condstmt | condstmt.getCondition() = b) + uncheckedExceptionFromMethod(n) or - exists(WhenBranch whenbranch | whenbranch.getCondition() = b) + uncheckedExceptionFromFinally(n) or - exists(WhenExpr whenexpr | - inBooleanContext(whenexpr) and - whenexpr.getBranch(_).getAResult() = b - ) - or - b = any(PatternCase pc).getGuard() - or - inBooleanContext(b.(ExprStmt).getExpr()) - or - inBooleanContext(b.(StmtExpr).getStmt()) + uncheckedExceptionFromCatch(n) } +} +private module NonReturningCalls { /** * A virtual method with a unique implementation. That is, the method does not * participate in overriding and there are no call targets that could dispatch @@ -602,7 +369,7 @@ private module ControlFlowGraphImpl { /** * Gets a `MethodCall` that always throws an exception or calls `exit`. */ - private MethodCall nonReturningMethodCall() { + MethodCall nonReturningMethodCall() { methodCallUnconditionallyThrows(result) or result.getMethod().getSourceDeclaration() = nonReturningMethod() or result = likelyNonReturningMethod().getAnAccess() @@ -644,1142 +411,248 @@ private module ControlFlowGraphImpl { ) ) } +} - // Join order engineering -- first determine the switch block and the case indices required, then retrieve them. - bindingset[switch, i] - pragma[inline_late] - private predicate isNthCaseOf(SwitchBlock switch, SwitchCase c, int i) { - c.isNthCaseOf(switch, i) - } +private module Input implements InputSig1, InputSig2 { + private import java as J - /** - * Gets a `SwitchCase` that may be `pred`'s direct successor, where `pred` is declared in block `switch`. - * - * This means any switch case that comes after `pred` up to the next pattern case, if any, except for `case null`. - * - * Because we know the switch block contains at least one pattern, we know by https://docs.oracle.com/javase/specs/jls/se21/html/jls-14.html#jls-14.11 - * that any default case comes after the last pattern case. - */ - private SwitchCase getASuccessorSwitchCase(PatternCase pred, SwitchBlock switch) { - // Note we do include `case null, default` (as well as plain old `default`) here. - not result.(ConstCase).getValue(_) instanceof NullLiteral and - exists(int maxCaseIndex | - switch = pred.getParent() and - if exists(getNextPatternCase(pred)) - then maxCaseIndex = getNextPatternCase(pred).getCaseIndex() - else maxCaseIndex = lastCaseIndex(switch) - | - isNthCaseOf(switch, result, [pred.getCaseIndex() + 1 .. maxCaseIndex]) - ) - } + predicate cfgCachedStageRef() { CfgCachedStage::ref() } - /** - * Gets a `SwitchCase` that may occur first in `switch`. - * - * If the block contains at least one PatternCase, this is any case up to and including that case, or - * the case handling the null literal if any. - * - * Otherwise it is any case in the switch block. - */ - private SwitchCase getAFirstSwitchCase(SwitchBlock switch) { - result.getParent() = switch and - ( - result.(ConstCase).getValue(_) instanceof NullLiteral - or - result instanceof NullDefaultCase - or - not exists(getFirstPatternCase(switch)) - or - result.getIndex() <= getFirstPatternCase(switch).getIndex() + /** Holds if this catch clause catches all exceptions. */ + predicate catchAll(Ast::CatchClause catch) { + catch.getACaughtType() instanceof TypeThrowable + or + exists(TryStmt try, int last | + // not Exceptions::expectUncaught(try) and + catch.getACaughtType() instanceof TypeException and + try.getCatchClause(last) = catch and + not exists(try.getCatchClause(last + 1)) ) } - private Stmt getSwitchStatement(SwitchBlock switch, int i) { result.isNthChildOf(switch, i) } - - /** - * Holds if `last` is the last node in any of pattern case `pc`'s succeeding bind-and-test operations, - * immediately before either falling through to execute successor statements or execute a rule body - * if present. `completion` is the completion kind of the last operation. - */ - private predicate lastPatternCaseMatchingOp(PatternCase pc, Node last, Completion completion) { - last(pc.getAPattern(), last, completion) and - completion = NormalCompletion() and - not exists(pc.getGuard()) + /** Holds if this case matches all possible values. */ + predicate matchAll(Ast::Case c) { + c instanceof DefaultCase or - last(pc.getGuard(), last, completion) and - completion = BooleanCompletion(true, _) + // Switch expressions and enhanced switch blocks (those that use pattern + // cases or match null) must be exhaustive, so the last case matches all + // remaining values. + // See https://docs.oracle.com/javase/specs/jls/se21/html/jls-14.html#jls-14.11.2 + exists(Ast::Switch switch, int last | + switch instanceof SwitchExpr or + exists(switch.(SwitchStmt).getAPatternCase()) or + switch.(SwitchStmt).hasNullCase() + | + switch.getCase(last) = c and + not exists(switch.getCase(last + 1)) + ) + or + c.(J::PatternCase).getAPattern().getType() instanceof TypeObject } - /** - * Expressions and statements with CFG edges in post-order AST traversal. - * - * This includes most expressions, except those that initiate or propagate branching control - * flow (`LogicExpr`, `ConditionalExpr`). - * Only a few statements are included; those with specific side-effects - * occurring after the evaluation of their children, that is, `Call`, `ReturnStmt`, - * and `ThrowStmt`. CFG nodes without child nodes in the CFG that may complete - * normally are also included. - */ - private class PostOrderNode extends AstNode { - PostOrderNode() { - // For VarAccess and ArrayAccess only read accesses (r-values) are included, - // as write accesses aren't included in the CFG. - this instanceof ArrayAccess and not exists(AssignExpr a | this = a.getDest()) - or - this instanceof ArrayCreationExpr - or - this instanceof ArrayInit - or - this instanceof Assignment - or - this instanceof BinaryExpr and not this instanceof LogicExpr - or - this instanceof UnaryExpr and not this instanceof LogNotExpr - or - this instanceof CastingExpr - or - this instanceof InstanceOfExpr and not this.(InstanceOfExpr).isPattern() - or - this instanceof NotInstanceOfExpr - or - this instanceof LocalVariableDeclExpr - or - this instanceof StringTemplateExpr - or - this instanceof ClassExpr - or - this instanceof VarRead - or - this instanceof Call // includes both expressions and statements - or - this instanceof ErrorExpr - or - this instanceof ReturnStmt - or - this instanceof ThrowStmt - or - this instanceof Literal - or - this instanceof TypeLiteral - or - this instanceof ThisAccess - or - this instanceof SuperAccess - or - this.(BlockStmt).getNumStmt() = 0 - or - this instanceof SwitchCase and - not this.(SwitchCase).isRule() and - not this instanceof PatternCase - or - this instanceof RecordPatternExpr - or - this instanceof EmptyStmt - or - this instanceof LocalTypeDeclStmt - } - - /** Gets child nodes in their order of execution. Indexing starts at either -1 or 0. */ - AstNode getChildNode(int index) { - exists(ArrayAccess e | e = this | - index = 0 and result = e.getArray() - or - index = 1 and result = e.getIndexExpr() - ) - or - exists(ArrayCreationExpr e | e = this | - result = e.getDimension(index) - or - index = count(e.getADimension()) and result = e.getInit() - ) - or - result = this.(ArrayInit).getInit(index) and index >= 0 - or - exists(AssignExpr e, ArrayAccess lhs | e = this and lhs = e.getDest() | - index = 0 and result = lhs.getArray() - or - index = 1 and result = lhs.getIndexExpr() - or - index = 2 and result = e.getSource() - ) - or - exists(AssignExpr e, VarAccess lhs | e = this and lhs = e.getDest() | - index = -1 and result = lhs.getQualifier() and not result instanceof TypeAccess - or - index = 0 and result = e.getSource() - ) - or - exists(AssignOp e | e = this | - index = 0 and result = e.getDest() - or - index = 1 and result = e.getRhs() - ) - or - exists(BinaryExpr e | e = this | - index = 0 and result = e.getLeftOperand() - or - index = 1 and result = e.getRightOperand() - ) - or - index = 0 and result = this.(UnaryExpr).getOperand() - or - index = 0 and result = this.(CastingExpr).getExpr() - or - index = 0 and result = this.(InstanceOfExpr).getExpr() - or - index = 0 and result = this.(NotInstanceOfExpr).getExpr() - or - index = 0 and result = this.(LocalVariableDeclExpr).getInit() - or - index = 0 and result = this.(VarRead).getQualifier() and not result instanceof TypeAccess - or - exists(Call e | e = this | - index = -1 and result = e.getQualifier() and not result instanceof TypeAccess - or - result = e.getArgument(index) - ) - or - exists(StringTemplateExpr e | e = this | result = e.getComponent(index)) - or - index = 0 and result = this.(ClassExpr).getExpr() - or - index = 0 and result = this.(ReturnStmt).getExpr() - or - index = 0 and result = this.(ThrowStmt).getExpr() - or - result = this.(RecordPatternExpr).getSubPattern(index) - } + private newtype TLabel = + TJavaLabel(string l) { exists(LabeledStmt lbl | l = lbl.getLabel()) } or + TYield() - /** Gets the first child node, if any. */ - AstNode firstChild() { - result = this.getChildNode(-1) + class Label extends TLabel { + string toString() { + exists(string l | this = TJavaLabel(l) and result = l) or - result = this.getChildNode(0) and not exists(this.getChildNode(-1)) - } - - /** Holds if this CFG node has any child nodes. */ - predicate isLeafNode() { not exists(this.getChildNode(_)) } - - /** Holds if this node can finish with a `normalCompletion`. */ - predicate mayCompleteNormally() { - not this instanceof BooleanLiteral and - not this instanceof ReturnStmt and - not this instanceof ThrowStmt and - not this = nonReturningMethodCall() + this = TYield() and result = "yield" } } - /** - * If the body of `loop` finishes with `completion`, the loop will - * continue executing (provided the loop condition still holds). - */ - private predicate continues(Completion completion, LoopStmt loop) { - completion = NormalCompletion() - or - // only consider continue completions if there actually is a `continue` - // somewhere inside this loop; we don't particularly care whether that - // `continue` could actually target this loop, we just want to restrict - // the size of the predicate - exists(ContinueStmt cnt | cnt.getEnclosingStmt+() = loop | - completion = anonymousContinueCompletion() or - completion = labelledContinueCompletion(getLabel(loop)) + private Label getLabelOfLoop(Stmt s) { + exists(LabeledStmt l | s = l.getStmt() | + result = TJavaLabel(l.getLabel()) or + result = getLabelOfLoop(l) ) } - /** - * Determine the part of the AST node `n` that will be executed first. - */ - private Node first(AstNode n) { - result.asExpr() = n and n instanceof LogicExpr - or - result.asExpr() = n and n instanceof ConditionalExpr - or - result.asExpr() = n and n instanceof WhenExpr - or - result.asStmt() = n and n instanceof WhenBranch - or - result.asExpr() = n and n instanceof StmtExpr - or - result = n.getCfgNode() and n.(PostOrderNode).isLeafNode() - or - result = first(n.(PostOrderNode).firstChild()) - or - result = first(n.(InstanceOfExpr).getExpr()) - or - result = first(n.(SynchronizedStmt).getExpr()) + predicate hasLabel(Ast::AstNode n, Label l) { + l = getLabelOfLoop(n) or - result = first(n.(AssertStmt).getExpr()) + l = TJavaLabel(n.(BreakStmt).getLabel()) or - result.asStmt() = n and - not n instanceof PostOrderNode and - not n instanceof SynchronizedStmt and - not n instanceof AssertStmt + l = TJavaLabel(n.(ContinueStmt).getLabel()) or - result.asExpr() = n and n instanceof SwitchExpr - } - - /** - * Bind `last` to a node inside the body of `try` that may finish with `completion` - * such that control will be transferred to a `catch` block or the `finally` block of `try`. - * - * In other words, `last` is either a resource declaration that throws, or a - * node in the `try` block that may not complete normally, or a node in - * the `try` block that has no control flow successors inside the block. - */ - private predicate catchOrFinallyCompletion(TryStmt try, Node last, Completion completion) { - last(try.getBlock(), last, completion) + l = TYield() and n instanceof YieldStmt or - last(try.getAResource(), last, completion) and completion = ThrowCompletion(_) + l = TYield() and n instanceof SwitchExpr } - /** - * Bind `last` to a node inside the body of `try` that may finish with `completion` - * such that control may be transferred to the `finally` block (if it exists). - * - * In other words, if `last` throws an exception it is possibly not caught by any - * of the catch clauses. - */ - private predicate uncaught(TryStmt try, Node last, Completion completion) { - catchOrFinallyCompletion(try, last, completion) and + predicate inConditionalContext(Ast::AstNode n, ConditionKind kind) { + kind.isBoolean() and ( - exists(ThrowableType thrown | - thrown = thrownInBody(try) and - completion = ThrowCompletion(thrown) and - not mustCatch(try.getACatchClause(), thrown) - ) - or - completion = NormalCompletion() - or - completion = ReturnCompletion() - or - completion = anonymousBreakCompletion() - or - completion = labelledBreakCompletion(_) - or - completion = anonymousContinueCompletion() - or - completion = labelledContinueCompletion(_) + any(AssertStmt assertstmt).getExpr() = n or + any(WhenBranch whenbranch).getCondition() = n ) } - /** - * Bind `last` to a node inside `try` that may finish with `completion` such - * that control may be transferred to the `finally` block (if it exists). - * - * This is similar to `uncaught`, but also includes final statements of `catch` - * clauses. - */ - private predicate finallyPred(TryStmt try, Node last, Completion completion) { - uncaught(try, last, completion) or - last(try.getACatchClause(), last, completion) - } + predicate preOrderExpr(Expr e) { e instanceof WhenExpr } - private predicate lastInFinally(TryStmt try, Node last) { - last(try.getFinally(), last, NormalCompletion()) + predicate postOrInOrder(Ast::AstNode n) { + // expressions are already post-order, but we need the calls that are statements to be post-order as well + n instanceof Call + or + n instanceof SynchronizedStmt } - private predicate isNextNormalSwitchStmt(SwitchBlock switch, Stmt pred, Stmt succ) { - exists(int i, Stmt immediateSucc | - getSwitchStatement(switch, i) = pred and - getSwitchStatement(switch, i + 1) = immediateSucc and - ( - if immediateSucc instanceof PatternCase - then isNextNormalSwitchStmt(switch, immediateSucc, succ) - else succ = immediateSucc - ) - ) + private string assertThrowNodeTag() { result = "[assert-throw]" } + + private string instanceofTrueNodeTag() { result = "[instanceof-true]" } + + predicate additionalNode(Ast::AstNode n, string tag, NormalSuccessor t) { + n instanceof AssertStmt and tag = assertThrowNodeTag() and t instanceof DirectSuccessor + or + n.(InstanceOfExpr).isPattern() and + tag = instanceofTrueNodeTag() and + t.(BooleanSuccessor).getValue() = true } /** - * Bind `last` to a cfg node nested inside `n` (or, indeed, `n` itself) such - * that `last` may be the last node during an execution of `n` and finish - * with the given completion. - * - * A `booleanCompletion` implies that `n` is an `Expr`. Any abnormal - * completion besides `throwCompletion` implies that `n` is a `Stmt`. + * Holds if `ast` may result in an abrupt completion `c` originating at + * `n`. The boolean `always` indicates whether the abrupt completion + * always occurs or whether `n` may also terminate normally. */ - private predicate last(AstNode n, Node last, Completion completion) { - // Exceptions are propagated from any sub-expression. - // As are any break, yield, continue, or return completions. - exists(Expr e | e.getParent() = n | - last(e, last, completion) and not completion instanceof NormalOrBooleanCompletion - ) + predicate beginAbruptCompletion( + Ast::AstNode ast, PreControlFlowNode n, AbruptCompletion c, boolean always + ) { + ast instanceof AssertStmt and + n.isAdditional(ast, assertThrowNodeTag()) and + c.asSimpleAbruptCompletion() instanceof ExceptionSuccessor and + always = true or - // If an expression doesn't finish with a throw completion, then it executes normally with - // either a `normalCompletion` or a `booleanCompletion`. - // A boolean completion in a non-boolean context just indicates a normal completion - // and a normal completion in a boolean context indicates an arbitrary boolean completion. - last(n, last, NormalCompletion()) and - inBooleanContext(n) and - completion = basicBooleanCompletion(_) - or - last(n, last, BooleanCompletion(_, _)) and - not inBooleanContext(n) and - completion = NormalCompletion() and - // PatternCase has both a boolean-true completion (guard success) and a normal one - // (variable declaration completion, when no guard is present). - not n instanceof PatternCase - or - // Logic expressions and conditional expressions are executed in AST pre-order to facilitate - // proper short-circuit representation. All other expressions are executed in post-order. - // The last node of a logic expression is either in the right operand with an arbitrary - // completion, or in the left operand with the corresponding boolean completion. - exists(AndLogicalExpr andexpr | andexpr = n | - last(andexpr.getLeftOperand(), last, completion) and completion = BooleanCompletion(false, _) - or - last(andexpr.getRightOperand(), last, completion) - ) - or - exists(OrLogicalExpr orexpr | orexpr = n | - last(orexpr.getLeftOperand(), last, completion) and completion = BooleanCompletion(true, _) - or - last(orexpr.getRightOperand(), last, completion) - ) + Exceptions::mayThrow(ast) and + n.isIn(ast) and + c.asSimpleAbruptCompletion() instanceof ExceptionSuccessor and + always = false or - // The last node of a `LogNotExpr` is in its sub-expression with an inverted boolean completion - // (or a `normalCompletion`). - exists(Completion subcompletion | last(n.(LogNotExpr).getOperand(), last, subcompletion) | - subcompletion = NormalCompletion() and - completion = NormalCompletion() and - not inBooleanContext(n) - or - exists(boolean outervalue, boolean innervalue | - subcompletion = BooleanCompletion(outervalue, innervalue) and - completion = BooleanCompletion(outervalue.booleanNot(), innervalue) - ) - ) - or - // The last node of a `ConditionalExpr` is in either of its branches. - exists(ConditionalExpr condexpr | condexpr = n | - last(condexpr.getABranchExpr(), last, completion) - ) - or - exists(InstanceOfExpr ioe | ioe.isPattern() and ioe = n | - last.asExpr() = n and completion = basicBooleanCompletion(false) - or - last(ioe.getPattern(), last, NormalCompletion()) and completion = basicBooleanCompletion(true) - ) - or - // The last node of a node executed in post-order is the node itself. - exists(PostOrderNode p | p = n | - p.mayCompleteNormally() and last = p.getCfgNode() and completion = NormalCompletion() - ) - or - last.asExpr() = n and completion = basicBooleanCompletion(n.(BooleanLiteral).getBooleanValue()) - or - // The last statement in a block is any statement that does not complete normally, - // or the last statement. - exists(BlockStmt blk | blk = n | - last(blk.getAStmt(), last, completion) and completion != NormalCompletion() - or - last(blk.getStmt(blk.getNumStmt() - 1), last, completion) - ) - or - // The last node in an `if` statement is the last node in either of its branches or - // the last node of the condition with a false-completion in the absence of an else-branch. - exists(IfStmt ifstmt | ifstmt = n | - last(ifstmt.getCondition(), last, BooleanCompletion(false, _)) and - completion = NormalCompletion() and - not exists(ifstmt.getElse()) - or - last(ifstmt.getThen(), last, completion) - or - last(ifstmt.getElse(), last, completion) - ) - or - // A loop may terminate normally if its condition is false... - exists(LoopStmt loop | loop = n | - last(loop.getCondition(), last, BooleanCompletion(false, _)) and - completion = NormalCompletion() - or - // ...or if it's an enhanced for loop running out of items to iterate over... - // ...which may happen either immediately after the loop expression... - last(loop.(EnhancedForStmt).getExpr(), last, completion) and completion = NormalCompletion() - or - exists(Completion bodyCompletion | last(loop.getBody(), last, bodyCompletion) | - // ...or after the last node in the loop's body in an iteration that would otherwise continue. - loop instanceof EnhancedForStmt and - continues(bodyCompletion, loop) and - completion = NormalCompletion() - or - // Otherwise the last node is the last node in the loop's body... - // ...if it is an unlabelled `break` (causing the entire loop to complete normally) - ( - if bodyCompletion = anonymousBreakCompletion() - then completion = NormalCompletion() - else ( - // ...or if it is some other completion that does not continue the loop. - not continues(bodyCompletion, loop) and completion = bodyCompletion - ) - ) - ) - ) - or - // `try` statements are a bit more complicated: - exists(TryStmt try | try = n | - // the last node in a `try` is the last node in its `finally` block - // if the `finally` block completes normally, it resumes any completion that - // was current before the `finally` block was entered - lastInFinally(try, last) and - finallyPred(try, _, completion) - or - // otherwise, just take the completion of the `finally` block itself - last(try.getFinally(), last, completion) and - completion != NormalCompletion() - or - // if there is no `finally` block, take the last node of the body or - // any of the `catch` clauses - not exists(try.getFinally()) and finallyPred(try, last, completion) - ) - or - // handle `switch` statements - exists(SwitchStmt switch | switch = n | - // unlabelled `break` causes the whole `switch` to complete normally - last(switch.getAStmt(), last, anonymousBreakCompletion()) and - completion = NormalCompletion() - or - // any other abnormal completion is propagated - last(switch.getAStmt(), last, completion) and - completion != anonymousBreakCompletion() and - not completion instanceof NormalOrBooleanCompletion - or - // if a statement without a non-pattern-case successor completes normally (or for a pattern case - // the guard succeeds) then the switch completes normally. - exists(Stmt lastNormalStmt, Completion stmtCompletion | - lastNormalStmt = getSwitchStatement(switch, _) and - not isNextNormalSwitchStmt(switch, lastNormalStmt, _) and - last(lastNormalStmt, last, stmtCompletion) and - (stmtCompletion = NormalCompletion() or stmtCompletion = BooleanCompletion(true, _)) and - completion = NormalCompletion() - ) - or - // if no default case exists, then normal completion of the expression may terminate the switch - // Note this can't happen if there are pattern cases or a null literal, as - // https://docs.oracle.com/javase/specs/jls/se21/html/jls-14.html#jls-14.11.2 requires that such - // an enhanced switch block is exhaustive. - not exists(switch.getDefaultCase()) and - not exists(switch.getAPatternCase()) and - not switch.hasNullCase() and - last(switch.getExpr(), last, completion) and - completion = NormalCompletion() - ) - or - // handle `switch` expression - exists(SwitchExpr switch | switch = n | - // `yield` terminates the `switch` - last(switch.getAStmt(), last, YieldCompletion(completion)) - or - // any other abnormal completion is propagated - last(switch.getAStmt(), last, completion) and - not completion instanceof YieldCompletion and - not completion instanceof NormalOrBooleanCompletion - ) - or - // If a case rule right-hand-side completes then the switch breaks or yields, depending - // on whether this is a switch expression or statement. If it completes abruptly then the - // switch completes the same way. - exists(Completion caseCompletion, SwitchCase case | - case = n and - ( - last(case.getRuleStatement(), last, caseCompletion) - or - last(case.getRuleExpression(), last, caseCompletion) - ) - | - if caseCompletion instanceof NormalOrBooleanCompletion - then - case.getParent() instanceof SwitchStmt and completion = anonymousBreakCompletion() - or - case.getParent() instanceof SwitchExpr and completion = YieldCompletion(caseCompletion) - else completion = caseCompletion - ) - or - // A pattern case statement can complete: - // * On failure of its final type test (boolean false) - // * On failure of its guard test if any (boolean false) - // * On completion of one of its pattern variable declarations, if it is not a rule and has no guard (normal completion) - // * On success of its guard test, if it is not a rule (boolean true) - // (the latter two cases are accounted for by lastPatternCaseMatchingOp) - exists(PatternCase pc | n = pc | - last.asStmt() = pc and completion = basicBooleanCompletion(false) - or - last(pc.getGuard(), last, completion) and - completion = BooleanCompletion(false, _) - or - not pc.isRule() and - lastPatternCaseMatchingOp(pc, last, completion) - ) - or - // the last statement of a synchronized statement is the last statement of its body - last(n.(SynchronizedStmt).getBlock(), last, completion) - or - // `return` statements give rise to a `Return` completion - last.asStmt() = n.(ReturnStmt) and completion = ReturnCompletion() - or - exists(AssertStmt assertstmt | assertstmt = n | - // `assert` statements may complete normally - we use the `AssertStmt` itself - // to represent this outcome - last.asStmt() = assertstmt and completion = NormalCompletion() - or - // `assert` statements may throw - completion = ThrowCompletion(assertionError()) and - last.(AssertThrowNode).getAstNode() = assertstmt - ) - or - // `throw` statements or throwing calls give rise to `Throw` completion - exists(ThrowableType tt | mayThrow(n, tt) | - last = n.getCfgNode() and completion = ThrowCompletion(tt) - ) - or - // `break` statements give rise to a `Break` completion - exists(BreakStmt break | break = n and last.asStmt() = n | - completion = labelledBreakCompletion(MkLabel(break.getLabel())) - or - not exists(break.getLabel()) and completion = anonymousBreakCompletion() - ) - or - // yield statements get their completion wrapped as a yield - exists(Completion caseCompletion | - last(n.(YieldStmt).getValue(), last, caseCompletion) and - if caseCompletion instanceof NormalOrBooleanCompletion - then completion = YieldCompletion(caseCompletion) - else completion = caseCompletion - ) - or - // `continue` statements give rise to a `Continue` completion - exists(ContinueStmt cont | cont = n and last.asStmt() = n | - completion = labelledContinueCompletion(MkLabel(cont.getLabel())) - or - not exists(cont.getLabel()) and completion = anonymousContinueCompletion() - ) - or - // the last node in an `ExprStmt` is the last node in the expression - last(n.(ExprStmt).getExpr(), last, completion) and - completion instanceof NormalOrBooleanCompletion - or - // the last node in a `StmtExpr` is the last node in the statement - last(n.(StmtExpr).getStmt(), last, completion) - or - // the last statement of a labeled statement is the last statement of its body... - exists(LabeledStmt lbl, Completion bodyCompletion | - lbl = n and last(lbl.getStmt(), last, bodyCompletion) - | - // ...except if it's a `break` that refers to this labelled statement - if bodyCompletion = labelledBreakCompletion(MkLabel(lbl.getLabel())) - then completion = NormalCompletion() - else completion = bodyCompletion - ) - or - // the last statement of a `catch` clause is the last statement of its block - last(n.(CatchClause).getBlock(), last, completion) - or - // the last node in a variable declaration statement is in the last of its individual declarations - exists(LocalVariableDeclStmt s | s = n | - last(s.getVariable(count(s.getAVariable())), last, completion) and - completion = NormalCompletion() - ) - or - // The last node in a `when` expression is the last node in any of its branches or - // the last node of the condition of the last branch in the absence of an else-branch. - exists(WhenExpr whenexpr | whenexpr = n | - // If we have no branches then we are the last node - last.asExpr() = n and - completion = NormalCompletion() and - not exists(whenexpr.getBranch(_)) - or - // If our last branch condition is false then we are done - exists(int i | - last(whenexpr.getBranch(i), last, BooleanCompletion(false, _)) and - completion = NormalCompletion() and - not exists(whenexpr.getBranch(i + 1)) - ) - or - // Any branch getting an abnormal completion is propagated - last(whenexpr.getBranch(_), last, completion) and - not completion instanceof YieldCompletion and - not completion instanceof NormalOrBooleanCompletion - or - // The last node in any branch. This will be wrapped up as a - // YieldCompletion, so we need to unwrap it here. - last(whenexpr.getBranch(_), last, YieldCompletion(completion)) - ) - or - exists(WhenBranch whenbranch | whenbranch = n | - // If the condition completes with anything other than true - // (or "normal", which we will also see if we don't know how - // to make specific true/false edges for the condition) - // (e.g. false or an exception), then the branch is done. - last(whenbranch.getCondition(), last, completion) and - not completion = BooleanCompletion(true, _) and - not completion = NormalCompletion() - or - // Similarly any non-normal completion of the RHS - // should propagate outwards: - last(whenbranch.getRhs(), last, completion) and - not completion instanceof NormalOrBooleanCompletion - or - // Otherwise we wrap the completion up in a YieldCompletion - // so that the `when` expression can tell that we have finished, - // and it shouldn't go on to the next branch. - exists(Completion branchCompletion | - last(whenbranch.getRhs(), last, branchCompletion) and - completion = YieldCompletion(branchCompletion) - ) - ) + ast = NonReturningCalls::nonReturningMethodCall() and + n.isIn(ast) and + c.asSimpleAbruptCompletion() instanceof ExceptionSuccessor and + always = true } /** - * Compute the intra-procedural successors of cfg node `n`, assuming its - * execution finishes with the given completion. + * Holds if an abrupt completion `c` from within `ast` is caught with + * flow continuing at `n`. */ - cached - Node succ(Node n, Completion completion) { - // After executing the callable body, the final nodes are first the - // annotated exit node and then the final exit node. - exists(Callable c | last(c.getBody(), n, completion) | - if completion instanceof ThrowCompletion - then result.(ExceptionalExitNode).getEnclosingCallable() = c - else result.(NormalExitNode).getEnclosingCallable() = c - ) - or - completion = NormalCompletion() and - n.(AnnotatedExitNode).getEnclosingCallable() = result.(ExitNode).getEnclosingCallable() - or - // Logic expressions and conditional expressions execute in AST pre-order. - completion = NormalCompletion() and - ( - result = first(n.asExpr().(AndLogicalExpr).getLeftOperand()) or - result = first(n.asExpr().(OrLogicalExpr).getLeftOperand()) or - result = first(n.asExpr().(LogNotExpr).getOperand()) or - result = first(n.asExpr().(ConditionalExpr).getCondition()) - ) - or - // If a logic expression doesn't short-circuit then control flows from its left operand to its right. - exists(AndLogicalExpr e | - last(e.getLeftOperand(), n, completion) and - completion = BooleanCompletion(true, _) and - result = first(e.getRightOperand()) + predicate endAbruptCompletion(Ast::AstNode ast, PreControlFlowNode n, AbruptCompletion c) { + exists(LabeledStmt lbl | + ast = lbl.getStmt() and + n.isAfter(lbl) and + c.getSuccessorType() instanceof BreakSuccessor and + c.hasLabel(TJavaLabel(lbl.getLabel())) ) - or - exists(OrLogicalExpr e | - last(e.getLeftOperand(), n, completion) and - completion = BooleanCompletion(false, _) and - result = first(e.getRightOperand()) - ) - or - // Control flows to the corresponding branch depending on the boolean completion of the condition. - exists(ConditionalExpr e, boolean branch | - last(e.getCondition(), n, completion) and - completion = BooleanCompletion(branch, _) and - result = first(e.getBranchExpr(branch)) - ) - or - exists(InstanceOfExpr ioe | ioe.isPattern() | - last(ioe.getExpr(), n, completion) and - completion = NormalCompletion() and - result.asExpr() = ioe - or - n.asExpr() = ioe and - result = first(ioe.getPattern()) and - completion = basicBooleanCompletion(true) - ) - or - // In other expressions control flows from left to right and ends in the node itself. - exists(PostOrderNode p, int i | - last(p.getChildNode(i), n, completion) and completion = NormalCompletion() - | - result = first(p.getChildNode(i + 1)) - or - not exists(p.getChildNode(i + 1)) and result = p.getCfgNode() - ) - or - // Statements within a block execute sequentially. - result = first(n.asStmt().(BlockStmt).getStmt(0)) and completion = NormalCompletion() - or - exists(BlockStmt blk, int i | - last(blk.getStmt(i), n, completion) and - completion = NormalCompletion() and - result = first(blk.getStmt(i + 1)) - ) - or - // Control flows to the corresponding branch depending on the boolean completion of the condition. - exists(IfStmt s | - n.asStmt() = s and result = first(s.getCondition()) and completion = NormalCompletion() - or - last(s.getCondition(), n, completion) and - completion = BooleanCompletion(true, _) and - result = first(s.getThen()) + } + + /** Holds if there is a local non-abrupt step from `n1` to `n2`. */ + predicate step(PreControlFlowNode n1, PreControlFlowNode n2) { + exists(InstanceOfExpr ioe | + // common + n1.isBefore(ioe) and + n2.isBefore(ioe.getExpr()) or - last(s.getCondition(), n, completion) and - completion = BooleanCompletion(false, _) and - result = first(s.getElse()) - ) - or - // For statements: - exists(ForStmt for, Node condentry | - // Any part of the control flow that aims for the condition needs to hit either the condition... - condentry = first(for.getCondition()) + n1.isAfter(ioe.getExpr()) and + n2.isIn(ioe) or - // ...or the body if the for doesn't include a condition. - not exists(for.getCondition()) and condentry = first(for.getBody()) - | - // From the entry point, which is the for statement itself, control goes to either the first init expression... - n.asStmt() = for and result = first(for.getInit(0)) and completion = NormalCompletion() + // std postorder: + not ioe.isPattern() and + n1.isIn(ioe) and + n2.isAfter(ioe) or - // ...or the condition if the for doesn't include init expressions. - n.asStmt() = for and - not exists(for.getAnInit()) and - result = condentry and - completion = NormalCompletion() + // pattern case: + ioe.isPattern() and + n1.isIn(ioe) and + n2.isAfterValue(ioe, any(BooleanSuccessor s | s.getValue() = false)) or - // Init expressions execute sequentially, after which control is transferred to the condition. - exists(int i | last(for.getInit(i), n, completion) and completion = NormalCompletion() | - result = first(for.getInit(i + 1)) - or - not exists(for.getInit(i + 1)) and result = condentry - ) + n1.isIn(ioe) and + n2.isAdditional(ioe, instanceofTrueNodeTag()) or - // The true-successor of the condition is the body of the for loop. - last(for.getCondition(), n, completion) and - completion = BooleanCompletion(true, _) and - result = first(for.getBody()) + n1.isAdditional(ioe, instanceofTrueNodeTag()) and + n2.isBefore(ioe.getPattern()) or - // The updates execute sequentially, after which control is transferred to the condition. - exists(int i | last(for.getUpdate(i), n, completion) and completion = NormalCompletion() | - result = first(for.getUpdate(i + 1)) - or - not exists(for.getUpdate(i + 1)) and result = condentry - ) - or - // The back edge of the loop: control goes to either the first update or the condition if no updates exist. - last(for.getBody(), n, completion) and - continues(completion, for) and - ( - result = first(for.getUpdate(0)) - or - result = condentry and not exists(for.getAnUpdate()) - ) + n1.isAfter(ioe.getPattern()) and + n2.isAfterValue(ioe, any(BooleanSuccessor s | s.getValue() = true)) ) or - // Enhanced for statements: - exists(EnhancedForStmt for | - // First the expression gets evaluated... - n.asStmt() = for and result = first(for.getExpr()) and completion = NormalCompletion() - or - // ...then the variable gets assigned... - last(for.getExpr(), n, completion) and - completion = NormalCompletion() and - result.asExpr() = for.getVariable() - or - // ...and then control goes to the body of the loop. - n.asExpr() = for.getVariable() and - result = first(for.getBody()) and - completion = NormalCompletion() - or - // Finally, the back edge of the loop goes to reassign the variable. - last(for.getBody(), n, completion) and - continues(completion, for) and - result.asExpr() = for.getVariable() - ) - or - // While loops start at the condition... - result = first(n.asStmt().(WhileStmt).getCondition()) and completion = NormalCompletion() - or - // ...and do-while loops start at the body. - result = first(n.asStmt().(DoStmt).getBody()) and completion = NormalCompletion() - or - exists(LoopStmt loop | loop instanceof WhileStmt or loop instanceof DoStmt | - // Control goes from the condition via a true-completion to the body... - last(loop.getCondition(), n, completion) and - completion = BooleanCompletion(true, _) and - result = first(loop.getBody()) - or - // ...and through the back edge from the body back to the condition. - last(loop.getBody(), n, completion) and - continues(completion, loop) and - result = first(loop.getCondition()) - ) - or - // Resource declarations in a try-with-resources execute sequentially. - exists(TryStmt try, int i | - last(try.getResource(i), n, completion) and completion = NormalCompletion() - | - result = first(try.getResource(i + 1)) + exists(AssertStmt assertstmt | + n1.isBefore(assertstmt) and + n2.isBefore(assertstmt.getExpr()) or - not exists(try.getResource(i + 1)) and result = first(try.getBlock()) - ) - or - // After the last resource declaration, control transfers to the body. - exists(TryStmt try | n.asStmt() = try and completion = NormalCompletion() | - result = first(try.getResource(0)) + n1.isAfterValue(assertstmt.getExpr(), any(BooleanSuccessor s | s.getValue() = true)) and + n2.isAfter(assertstmt) or - not exists(try.getAResource()) and result = first(try.getBlock()) - ) - or - // exceptional control flow - exists(TryStmt try | catchOrFinallyCompletion(try, n, completion) | - // if the body of the `try` throws... - exists(ThrowableType tt | completion = ThrowCompletion(tt) | - // ...control transfers to a catch clause... - result = first(handlingCatchClause(try, tt)) + n1.isAfterValue(assertstmt.getExpr(), any(BooleanSuccessor s | s.getValue() = false)) and + ( + n2.isBefore(assertstmt.getMessage()) or - // ...or to the finally block - not mustCatch(try.getACatchClause(), tt) and result = first(try.getFinally()) + not exists(assertstmt.getMessage()) and + n2.isAdditional(assertstmt, assertThrowNodeTag()) ) or - // if the body completes normally, control transfers to the finally block - not completion = ThrowCompletion(_) and result = first(try.getFinally()) - ) - or - // after each catch clause, control transfers to the finally block - exists(TryStmt try | last(try.getACatchClause(), n, completion) | - result = first(try.getFinally()) + n1.isAfter(assertstmt.getMessage()) and + n2.isAdditional(assertstmt, assertThrowNodeTag()) ) or - // Catch clauses first assign their variable and then execute their block - exists(CatchClause cc | completion = NormalCompletion() | - n.asStmt() = cc and result = first(cc.getVariable()) + // Synchronized statements execute their expression _before_ synchronization, so the CFG reflects that. + exists(SynchronizedStmt synch | + n1.isBefore(synch) and + n2.isBefore(synch.getExpr()) or - last(cc.getVariable(), n, completion) and result = first(cc.getBlock()) - ) - or - // Switch statements and expressions - exists(SwitchBlock switch | - exists(Expr switchExpr | - switchExpr = switch.(SwitchStmt).getExpr() or switchExpr = switch.(SwitchExpr).getExpr() - | - // From the entry point control is transferred first to the expression... - n.getAstNode() = switch and - result = first(switchExpr) and - completion = NormalCompletion() - or - // ...and then to any case up to and including the first pattern case, if any. - last(switchExpr, n, completion) and - result = first(getAFirstSwitchCase(switch)) and - completion = NormalCompletion() - ) + n1.isAfter(synch.getExpr()) and + n2.isIn(synch) or - // Statements within a switch body execute sequentially. - // Note this includes non-rule case statements and the successful pattern match successor - // of a non-rule pattern case statement. Rule case statements do not complete normally - // (they always break or yield). - // Exception: falling through into a pattern case statement (which necessarily does not - // declare any named variables) must skip one or more such statements, otherwise we would - // incorrectly apply their type test and/or guard. - exists(Stmt pred, Stmt succ | - isNextNormalSwitchStmt(switch, pred, succ) and - last(pred, n, completion) and - result = first(succ) and - (completion = NormalCompletion() or completion = BooleanCompletion(true, _)) - ) + n1.isIn(synch) and + n2.isBefore(synch.getBlock()) or - // A pattern case that completes boolean false (type test or guard failure) continues to consider other cases: - exists(PatternCase case | completion = BooleanCompletion(false, _) | - last(case, n, completion) and result.asStmt() = getASuccessorSwitchCase(case, switch) - ) + n1.isAfter(synch.getBlock()) and + n2.isAfter(synch) ) or - // Pattern cases have internal edges: - // * Type test success -true-> one of the possible sets of variable declarations - // n.b. for unnamed patterns (e.g. case A _, B _) this means that *one* of the - // type tests has succeeded. There aren't enough nodes in the AST to describe - // a sequential test in detail, so CFG consumers have to watch out for this case. - // * Variable declarations -normal-> guard evaluation - // * Variable declarations -normal-> rule execution (when there is no guard) - // * Guard success -true-> rule execution - exists(PatternCase pc | - n.asStmt() = pc and - completion = basicBooleanCompletion(true) and - result = first(pc.getAPattern()) - or - last(pc.getAPattern(), n, completion) and - completion = NormalCompletion() and - result = first(pc.getGuard()) + exists(WhenExpr whenexpr | + n1.isBefore(whenexpr) and + n2.isBefore(whenexpr.getBranch(0)) or - lastPatternCaseMatchingOp(pc, n, completion) and - ( - result = first(pc.getRuleExpression()) + exists(int i, WhenBranch branch | branch = whenexpr.getBranch(i) | + // The `.isAfter(branch)` nodes are not needed, so they're simply skipped. + n1.isBefore(branch) and + n2.isBefore(branch.getCondition()) or - result = first(pc.getRuleStatement()) - ) - ) - or - // Non-pattern cases have an internal edge leading to their rule body if any when the case matches. - exists(SwitchCase case | n.asStmt() = case | - not case instanceof PatternCase and - completion = NormalCompletion() and - ( - result = first(case.getRuleExpression()) + n1.isAfterTrue(branch.getCondition()) and + n2.isBefore(branch.getRhs()) or - result = first(case.getRuleStatement()) - ) - ) - or - // Yield - exists(YieldStmt yield | completion = NormalCompletion() | - n.asStmt() = yield and result = first(yield.getValue()) - ) - or - // Synchronized statements execute their expression _before_ synchronization, so the CFG reflects that. - exists(SynchronizedStmt synch | completion = NormalCompletion() | - last(synch.getExpr(), n, completion) and result.asStmt() = synch - or - n.asStmt() = synch and result = first(synch.getBlock()) - ) - or - result = first(n.asStmt().(ExprStmt).getExpr()) and completion = NormalCompletion() - or - result = first(n.asExpr().(StmtExpr).getStmt()) and completion = NormalCompletion() - or - result = first(n.asStmt().(LabeledStmt).getStmt()) and completion = NormalCompletion() - or - // Variable declarations in a variable declaration statement are executed sequentially. - exists(LocalVariableDeclStmt s | completion = NormalCompletion() | - n.asStmt() = s and result = first(s.getVariable(1)) - or - exists(int i | last(s.getVariable(i), n, completion) and result = first(s.getVariable(i + 1))) - ) - or - // Assert statements: - exists(AssertStmt assertstmt | - last(assertstmt.getExpr(), n, completion) and - completion = BooleanCompletion(true, _) and - result.asStmt() = assertstmt - or - last(assertstmt.getExpr(), n, completion) and - completion = BooleanCompletion(false, _) and - ( - result = first(assertstmt.getMessage()) + n1.isAfterFalse(branch.getCondition()) and + ( + n2.isBefore(whenexpr.getBranch(i + 1)) + or + not exists(whenexpr.getBranch(i + 1)) and + n2.isAfter(whenexpr) + ) or - not exists(assertstmt.getMessage()) and - result.(AssertThrowNode).getAstNode() = assertstmt + n1.isAfter(branch.getRhs()) and + n2.isAfter(whenexpr) ) - or - last(assertstmt.getMessage(), n, completion) and - completion = NormalCompletion() and - result.(AssertThrowNode).getAstNode() = assertstmt - ) - or - // When expressions: - exists(WhenExpr whenexpr | - n.asExpr() = whenexpr and - result = first(whenexpr.getBranch(0)) and - completion = NormalCompletion() - or - exists(int i | - last(whenexpr.getBranch(i), n, completion) and - completion = BooleanCompletion(false, _) and - result = first(whenexpr.getBranch(i + 1)) - ) - ) - or - // When branches: - exists(WhenBranch whenbranch | - n.asStmt() = whenbranch and - completion = NormalCompletion() and - result = first(whenbranch.getCondition()) - or - last(whenbranch.getCondition(), n, completion) and - completion = BooleanCompletion(true, _) and - result = first(whenbranch.getRhs()) - ) - } - - /* - * Conditions give rise to nodes with two normal successors, a true successor - * and a false successor. At least one of them is completely contained in the - * AST node of the branching construct and is therefore tagged with the - * corresponding `booleanCompletion` in the `succ` relation (for example, the - * then-branch of an if-statement, or the right operand of a binary logic - * expression). The other successor may be tagged with either the corresponding - * `booleanCompletion` (for example in an if-statement with an else-branch or - * in a `ConditionalExpr`) or a `normalCompletion` (for example in an - * if-statement without an else-part). - * - * If the other successor ends a finally block it may also be tagged with an - * abnormal completion instead of a `normalCompletion`. This completion is - * calculated by the `resumption` predicate. In this case the successor might - * no longer be unique, as there can be multiple completions to be resumed - * after the finally block. - */ - - /** - * Gets the _resumption_ for cfg node `n`, that is, the completion according - * to which control flow is determined if `n` completes normally. - * - * In most cases, the resumption is simply the normal completion, except if - * `n` is the last node of a `finally` block, in which case it is the - * completion of any predecessors of the `finally` block as determined by - * predicate `finallyPred`, since their completion is resumed after normal - * completion of the `finally`. - */ - private Completion resumption(Node n) { - exists(TryStmt try | lastInFinally(try, n) and finallyPred(try, _, result)) - or - not lastInFinally(_, n) and result = NormalCompletion() - } - - /** - * A true- or false-successor that is tagged with the corresponding `booleanCompletion`. - * - * That is, the `booleanCompletion` is the label of the edge in the CFG. - */ - private Node mainBranchSucc(Node n, boolean b) { result = succ(n, BooleanCompletion(_, b)) } - - /** - * A true- or false-successor that is not tagged with a `booleanCompletion`. - * - * That is, the label of the edge in the CFG is a `normalCompletion` or - * some other completion if `n` occurs as the last node in a finally block. - * - * In the latter case, when `n` occurs as the last node in a finally block, there might be - * multiple different such successors. - */ - private Node otherBranchSucc(Node n, boolean b) { - exists(Node main | main = mainBranchSucc(n, b.booleanNot()) | - result = succ(n, resumption(n)) and - not result = main and - (b = true or b = false) ) } - - /** Gets a true- or false-successor of `n`. */ - cached - Node branchSuccessor(Node n, boolean branch) { - result = mainBranchSucc(n, branch) or - result = otherBranchSucc(n, branch) - } } -private import ControlFlowGraphImpl - -/** A control-flow node that branches based on a condition. */ -class ConditionNode extends ControlFlow::Node { - ConditionNode() { exists(branchSuccessor(this, _)) } +/** A control-flow node that branches based on a boolean condition. */ +class ConditionNode extends ControlFlowNode { + ConditionNode() { exists(this.getASuccessor(any(BooleanSuccessor t))) } /** Gets a true- or false-successor of the `ConditionNode`. */ - ControlFlow::Node getABranchSuccessor(boolean branch) { result = branchSuccessor(this, branch) } + ControlFlowNode getABranchSuccessor(boolean branch) { + result = this.getASuccessor(any(BooleanSuccessor t | t.getValue() = branch)) + } /** Gets a true-successor of the `ConditionNode`. */ - ControlFlow::Node getATrueSuccessor() { result = this.getABranchSuccessor(true) } + ControlFlowNode getATrueSuccessor() { result = this.getABranchSuccessor(true) } /** Gets a false-successor of the `ConditionNode`. */ - ControlFlow::Node getAFalseSuccessor() { result = this.getABranchSuccessor(false) } + ControlFlowNode getAFalseSuccessor() { result = this.getABranchSuccessor(false) } /** Gets the condition of this `ConditionNode`. */ ExprParent getCondition() { result = this.asExpr() or result = this.asStmt() } } - -private import codeql.controlflow.PrintGraph as PrintGraph - -private module PrintGraphInput implements PrintGraph::InputSig { - private import java as J - - class Callable = J::Callable; - - class ControlFlowNode = J::ControlFlowNode; - - ControlFlowNode getASuccessor(ControlFlowNode n, SuccessorType t) { result = n.getASuccessor(t) } -} - -import PrintGraph::PrintGraph diff --git a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll index f214cbbd0b1a..a5229bea590b 100644 --- a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll +++ b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll @@ -6,151 +6,8 @@ module; import java import Dominance -private import codeql.controlflow.BasicBlock as BB -private import codeql.controlflow.SuccessorType - -private module Input implements BB::InputSig { - /** Hold if `t` represents a conditional successor type. */ - predicate successorTypeIsCondition(SuccessorType t) { none() } - - /** A delineated part of the AST with its own CFG. */ - class CfgScope = Callable; - - /** The class of control flow nodes. */ - class Node = ControlFlowNode; - - /** Gets the CFG scope in which this node occurs. */ - CfgScope nodeGetCfgScope(Node node) { node.getEnclosingCallable() = result } - - /** Gets an immediate successor of this node. */ - Node nodeGetASuccessor(Node node, SuccessorType t) { result = node.getASuccessor(t) } - - /** - * Holds if `node` represents an entry node to be used when calculating - * dominance. - */ - predicate nodeIsDominanceEntry(Node node) { - exists(Stmt entrystmt | entrystmt = node.asStmt() | - exists(Callable c | entrystmt = c.getBody()) - or - // This disjunct is technically superfluous, but safeguards against extractor problems. - entrystmt instanceof BlockStmt and - not exists(entrystmt.getEnclosingCallable()) and - not entrystmt.getParent() instanceof Stmt - ) - } - - /** - * Holds if `node` represents an exit node to be used when calculating - * post dominance. - */ - predicate nodeIsPostDominanceExit(Node node) { node instanceof ControlFlow::NormalExitNode } -} - -private module BbImpl = BB::Make; - -import BbImpl - -/** Holds if the dominance relation is calculated for `bb`. */ -predicate hasDominanceInformation(BasicBlock bb) { - exists(BasicBlock entry | - Input::nodeIsDominanceEntry(entry.getFirstNode()) and entry.getASuccessor*() = bb - ) -} - -/** - * A basic block, that is, a maximal straight-line sequence of control flow nodes - * without branches or joins. - */ -class BasicBlock extends BbImpl::BasicBlock { - /** Gets the immediately enclosing callable whose body contains this node. */ - Callable getEnclosingCallable() { result = this.getScope() } - - /** - * Holds if this basic block dominates basic block `bb`. - * - * That is, all paths reaching `bb` from the entry point basic block must - * go through this basic block. - */ - predicate dominates(BasicBlock bb) { super.dominates(bb) } - - /** - * Holds if this basic block strictly dominates basic block `bb`. - * - * That is, all paths reaching `bb` from the entry point basic block must - * go through this basic block and this basic block is different from `bb`. - */ - predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } - - /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } - - BasicBlock getASuccessor() { result = super.getASuccessor() } - - BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } - - predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } - - predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } - - predicate postDominates(BasicBlock bb) { super.postDominates(bb) } - - /** - * DEPRECATED: Use `getASuccessor` instead. - * - * Gets an immediate successor of this basic block. - */ - deprecated BasicBlock getABBSuccessor() { result = this.getASuccessor() } - - /** - * DEPRECATED: Use `getAPredecessor` instead. - * - * Gets an immediate predecessor of this basic block. - */ - deprecated BasicBlock getABBPredecessor() { result.getASuccessor() = this } - - /** - * DEPRECATED: Use `strictlyDominates` instead. - * - * Holds if this basic block strictly dominates `node`. - */ - deprecated predicate bbStrictlyDominates(BasicBlock node) { this.strictlyDominates(node) } - - /** - * DEPRECATED: Use `dominates` instead. - * - * Holds if this basic block dominates `node`. (This is reflexive.) - */ - deprecated predicate bbDominates(BasicBlock node) { this.dominates(node) } - - /** - * DEPRECATED: Use `strictlyPostDominates` instead. - * - * Holds if this basic block strictly post-dominates `node`. - */ - deprecated predicate bbStrictlyPostDominates(BasicBlock node) { this.strictlyPostDominates(node) } - - /** - * DEPRECATED: Use `postDominates` instead. - * - * Holds if this basic block post-dominates `node`. (This is reflexive.) - */ - deprecated predicate bbPostDominates(BasicBlock node) { this.postDominates(node) } -} /** A basic block that ends in an exit node. */ class ExitBlock extends BasicBlock { ExitBlock() { this.getLastNode() instanceof ControlFlow::ExitNode } } - -private class BasicBlockAlias = BasicBlock; - -module Cfg implements BB::CfgSig { - class ControlFlowNode = BbImpl::ControlFlowNode; - - class BasicBlock = BasicBlockAlias; - - class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { } - - predicate dominatingEdge(BasicBlock bb1, BasicBlock bb2) { BbImpl::dominatingEdge(bb1, bb2) } -} diff --git a/java/ql/lib/semmle/code/java/controlflow/Paths.qll b/java/ql/lib/semmle/code/java/controlflow/Paths.qll index 23f0786966db..7cd4380a4c51 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Paths.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Paths.qll @@ -66,10 +66,6 @@ private class JoinBlock extends BasicBlock { JoinBlock() { 2 <= strictcount(this.getAPredecessor()) } } -private class ReachableBlock extends BasicBlock { - ReachableBlock() { hasDominanceInformation(this) } -} - /** * Holds if `bb` is a block that is collectively dominated by a set of one or * more actions that individually does not dominate the exit. @@ -78,7 +74,7 @@ private predicate postActionBlock(BasicBlock bb, ActionConfiguration conf) { bb = nonDominatingActionBlock(conf) or if bb instanceof JoinBlock - then forall(ReachableBlock pred | pred = bb.getAPredecessor() | postActionBlock(pred, conf)) + then forall(BasicBlock pred | pred = bb.getAPredecessor() | postActionBlock(pred, conf)) else postActionBlock(bb.getAPredecessor(), conf) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 962ff0bc169d..07d871ab9bc8 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -93,8 +93,7 @@ private module BaseSsaImpl { /** Holds if `n` updates the local variable `v`. */ predicate variableUpdate(BaseSsaSourceVariable v, ControlFlowNode n, BasicBlock b, int i) { exists(VariableUpdate a | a.getControlFlowNode() = n | getDestVar(a) = v) and - b.getNode(i) = n and - hasDominanceInformation(b) + b.getNode(i) = n } /** Gets the definition point of a nested class in the parent scope. */ @@ -178,15 +177,12 @@ private module SsaImplInput implements SsaImplCommon::InputSig { + /** An AST node. */ + class AstNode { + /** Gets a textual representation of this AST node. */ + string toString(); + + /** Gets the location of this AST node. */ + Location getLocation(); + } + + /** Gets the child of this AST node at the specified index. */ + AstNode getChild(AstNode n, int index); + + /** Gets the immediately enclosing callable that contains this node. */ + Callable getEnclosingCallable(AstNode node); + + /** A callable, for example a function, method, constructor, or top-level script. */ + class Callable extends AstNode; + + /** Gets the body of this callable, if any. */ + AstNode callableGetBody(Callable c); + + /** A statement. */ + class Stmt extends AstNode; + + /** An expression. */ + class Expr extends AstNode; + + /** + * A block statement, which is a sequence of statements that are executed in + * order. + */ + class BlockStmt extends Stmt { + /** Gets the `n`th (zero-based) statement in this block. */ + Stmt getStmt(int n); + + /** Gets the last statement in this block. */ + Stmt getLastStmt(); + } + + /** An expression statement. */ + class ExprStmt extends Stmt { + /** Gets the expression in this expression statement. */ + Expr getExpr(); + } + + /** An if statement. */ + class IfStmt extends Stmt { + /** Gets the condition of this if statement. */ + Expr getCondition(); + + /** Gets the `then` (true) branch of this `if` statement. */ + Stmt getThen(); + + /** Gets the `else` (false) branch of this `if` statement, if any. */ + Stmt getElse(); + } + + /** + * A loop statement. Loop statements are further subclassed into specific + * types of loops. + */ + class LoopStmt extends Stmt { + /** Gets the body of this loop statement. */ + Stmt getBody(); + } + + /** A `while` loop statement. */ + class WhileStmt extends LoopStmt { + /** Gets the boolean condition of this `while` loop. */ + Expr getCondition(); + } + + /** A `do-while` loop statement. */ + class DoStmt extends LoopStmt { + /** Gets the boolean condition of this `do-while` loop. */ + Expr getCondition(); + } + + /** A traditional C-style `for` loop. */ + class ForStmt extends LoopStmt { + /** Gets the initializer expression of the loop at the specified (zero-based) position, if any. */ + Expr getInit(int index); + + /** Gets the boolean condition of this `for` loop. */ + Expr getCondition(); + + /** Gets the update expression of this loop at the specified (zero-based) position, if any. */ + Expr getUpdate(int index); + } + + /** A for-loop that iterates over the elements of a collection. */ + class ForeachStmt extends LoopStmt { + /** Gets the variable declaration of this `foreach` loop. */ + Expr getVariable(); + + /** Gets the collection expression of this `foreach` loop. */ + Expr getCollection(); + } + + /** + * A `break` statement. + * + * Break statements complete abruptly and break out of a loop or switch. + */ + class BreakStmt extends Stmt; + + /** + * A `continue` statement. + * + * Continue statements complete abruptly and continue to the next iteration + * of a loop. + */ + class ContinueStmt extends Stmt; + + /** + * A `return` statement. + * + * Return statements complete abruptly and return control to the caller of + * the enclosing callable. + */ + class ReturnStmt extends Stmt { + /** Gets the expression being returned, if any. */ + Expr getExpr(); + } + + /** + * A `throw` statement. + * + * Throw statements complete abruptly and throw an exception. + */ + class ThrowStmt extends Stmt { + /** Gets the expression being thrown. */ + Expr getExpr(); + } + + /** A `try` statement with `catch` and/or `finally` clauses. */ + class TryStmt extends Stmt { + /** Gets the body of this `try` statement. */ + Stmt getBody(); + + /** + * Gets the `catch` clause at the specified (zero-based) position `index` + * in this `try` statement. + */ + CatchClause getCatch(int index); + + /** Gets the `finally` block of this `try` statement, if any. */ + Stmt getFinally(); + } + + /** + * Gets the initializer of this `try` statement at the specified (zero-based) + * position `index`, if any. + * + * An example of this are resource declarations in Java's try-with-resources + * statement. + */ + default AstNode getTryInit(TryStmt try, int index) { none() } + + /** + * Gets the `else` block of this `try` statement, if any. + * + * Only some languages (e.g. Python) support `try-else` constructs. + */ + default AstNode getTryElse(TryStmt try) { none() } + + /** A catch clause in a try statement. */ + class CatchClause extends AstNode { + /** Gets the variable declared by this catch clause. */ + AstNode getVariable(); + + /** Gets the guard condition of this catch clause, if any. */ + Expr getCondition(); + + /** Gets the body of this catch clause. */ + Stmt getBody(); + } + + /** + * A switch. + * + * A switch tests an expression against a number of cases, and executes the + * body of the first matching case. + */ + class Switch extends AstNode { + /** + * Gets the expression being switched on. + * + * In some languages this is optional, in which case this predicate then + * might not hold. + */ + Expr getExpr(); + + /** Gets the case at the specified (zero-based) `index`. */ + Case getCase(int index); + } + + /** + * Gets an integer indicating the control flow order of a case within a switch. + * This is most often the same as the AST order, but can be different in some + * languages if the language allows a default case to appear before other + * cases. + */ + default int getCaseControlFlowOrder(Switch s, Case c) { s.getCase(result) = c } + + /** A case in a switch. */ + class Case extends AstNode { + /** Gets a pattern being matched by this case. */ + AstNode getAPattern(); + + /** Gets the guard expression of this case, if any. */ + Expr getGuard(); + + /** + * Gets the body element of this case at the specified (zero-based) `index`. + * + * This is either unique when the case has a single right-hand side, or it + * is the sequence of statements between this case and the next case. + */ + AstNode getBodyElement(int index); + } + + /** + * Holds if this case can fall through to the next case if it is not + * otherwise prevented with a `break` or similar. + */ + default predicate fallsThrough(Case c) { none() } + + /** A ternary conditional expression. */ + class ConditionalExpr extends Expr { + /** Gets the condition of this expression. */ + Expr getCondition(); + + /** Gets the true branch of this expression. */ + Expr getThen(); + + /** Gets the false branch of this expression. */ + Expr getElse(); + } + + /** A binary expression. */ + class BinaryExpr extends Expr { + /** Gets the left operand of this binary expression. */ + Expr getLeftOperand(); + + /** Gets the right operand of this binary expression. */ + Expr getRightOperand(); + } + + /** A short-circuiting logical AND expression. */ + class LogicalAndExpr extends BinaryExpr; + + /** A short-circuiting logical OR expression. */ + class LogicalOrExpr extends BinaryExpr; + + /** A short-circuiting null-coalescing expression. */ + class NullCoalescingExpr extends BinaryExpr; + + /** A unary expression. */ + class UnaryExpr extends Expr { + /** Gets the operand of this unary expression. */ + Expr getOperand(); + } + + /** A logical NOT expression. */ + class LogicalNotExpr extends UnaryExpr; + + /** A boolean literal expression. */ + class BooleanLiteral extends Expr { + /** Gets the boolean value of this literal. */ + boolean getValue(); + } +} + +/** + * Constructs the initial setup for a control flow graph. The construction is + * completed by subsequent instatiation of `Make1` and `Make2`. + * + * A complete instantiation can look as follows: + * ``` + * private module Input implements InputSig1, InputSig2 { .. } + * private module Cfg0 = Make0; + * private module Cfg1 = Make1; + * private module Cfg2 = Make2; + * private import Cfg0 + * private import Cfg1 + * private import Cfg2 + * import Public + * ``` + */ +module Make0 Ast> { + private import Ast + + signature module InputSig1 { + /** + * Reference to the cached stage of the control flow graph. Should be + * instantiated with `CfgCachedStage::ref()`. + */ + predicate cfgCachedStageRef(); + + /** + * A label used for matching jump sources and targets, for example in goto + * statements. + */ + class Label { + /** Gets a textual representation of this label. */ + string toString(); + } + + /** + * Holds if the node `n` has the label `l`. For example, a label in a goto + * statement or a goto target. + */ + default predicate hasLabel(AstNode n, Label l) { none() } + + /** + * Holds if the value of `child` is propagated to `parent`. For example, + * the right-hand side of short-circuiting expressions. + */ + default predicate propagatesValue(AstNode child, AstNode parent) { none() } + + /** + * Holds if `n` is in a conditional context of kind `kind`. For example, + * the left-hand side of a short-circuiting `&&` expression is in a + * boolean conditional context. + */ + default predicate inConditionalContext(AstNode n, ConditionKind kind) { none() } + + /** + * Holds if `e` is executed in pre-order. This is typical for expressions + * that are pure control-flow constructions without calculation or side + * effects, such as `ConditionalExpr` and `Switch` expressions. + */ + default predicate preOrderExpr(Expr e) { none() } + + /** + * Holds if `n` is executed in post-order or in-order. This means that an + * additional node is created to represent `n` in the control flow graph. + * Otherwise, `n` is represented by the "before" node. + */ + default predicate postOrInOrder(AstNode n) { none() } + + /** + * Holds if an additional node tagged with `tag` should be created for + * `n`. Edges targeting such nodes are labeled with `t` and therefore `t` + * should be unique for a given `(n,tag)` pair. + */ + default predicate additionalNode(AstNode n, string tag, NormalSuccessor t) { none() } + + /** + * Holds if `t1` implies `t2`. + * + * For example, in JavaScript, true (truthy) implies not-null, and null implies false (falsy). + */ + default predicate successorValueImplies(ConditionalSuccessor t1, ConditionalSuccessor t2) { + none() + } + } + + /** + * Partially constructs the control flow graph. The construction is completed + * by subsequent instatiation of `Make2`. + */ + module Make1 { + /** + * Holds if `n` is executed in post-order or in-order. This means that an + * additional node is created to represent `n` in the control flow graph. + * Otherwise, `n` is represented by the "before" node. + */ + cached + private predicate postOrInOrder(AstNode n) { + Input1::cfgCachedStageRef() and + Input1::postOrInOrder(n) + or + n instanceof ReturnStmt + or + n instanceof ThrowStmt + or + n instanceof BreakStmt + or + n instanceof ContinueStmt + or + n instanceof Expr and + exists(getChild(n, _)) and + not Input1::preOrderExpr(n) and + not n instanceof LogicalAndExpr and + not n instanceof LogicalOrExpr and + not n instanceof NullCoalescingExpr and + not n instanceof LogicalNotExpr and + not n instanceof ConditionalExpr and + not n instanceof Switch and + not n instanceof Case + } + + /** + * Holds if `expr` is a short-circuiting expression and `shortcircuitValue` + * is the value that causes the short-circuit. + */ + private predicate shortCircuiting(BinaryExpr expr, ConditionalSuccessor shortcircuitValue) { + expr instanceof LogicalAndExpr and shortcircuitValue.(BooleanSuccessor).getValue() = false + or + expr instanceof LogicalOrExpr and shortcircuitValue.(BooleanSuccessor).getValue() = true + or + expr instanceof NullCoalescingExpr and shortcircuitValue.(NullnessSuccessor).getValue() = true + } + + /** + * Holds if the value of `child` is propagated to `parent`. For example, + * the right-hand side of short-circuiting expressions. + */ + private predicate propagatesValue(AstNode child, AstNode parent) { + Input1::propagatesValue(child, parent) + or + shortCircuiting(parent, _) and + not postOrInOrder(parent) and + parent.(BinaryExpr).getRightOperand() = child + or + parent.(ConditionalExpr).getThen() = child + or + parent.(ConditionalExpr).getElse() = child + or + parent.(BlockStmt).getLastStmt() = child + or + parent.(ExprStmt).getExpr() = child + } + + /** + * Holds if `n` is in a conditional context of kind `kind`. For example, + * the left-hand side of a short-circuiting `&&` expression is in a + * boolean conditional context. + */ + private predicate inConditionalContext(AstNode n, ConditionKind kind) { + Input1::inConditionalContext(n, kind) + or + exists(AstNode parent | + propagatesValue(n, parent) and + inConditionalContext(parent, kind) + ) + or + exists(LogicalNotExpr notexpr | + n = notexpr.getOperand() and + inConditionalContext(notexpr, kind) and + kind.isBoolean() + ) + or + exists(BinaryExpr binexpr, ConditionalSuccessor shortcircuitValue | + shortCircuiting(binexpr, shortcircuitValue) and + n = binexpr.getLeftOperand() and + kind = shortcircuitValue.getKind() + ) + or + kind.isBoolean() and + ( + any(IfStmt ifstmt).getCondition() = n or + any(WhileStmt whilestmt).getCondition() = n or + any(DoStmt dostmt).getCondition() = n or + any(ForStmt forstmt).getCondition() = n or + any(ConditionalExpr condexpr).getCondition() = n or + any(CatchClause catch).getCondition() = n or + any(Case case).getGuard() = n + ) + or + any(ForeachStmt foreachstmt).getCollection() = n and kind.isEmptiness() + or + n instanceof CatchClause and kind.isMatching() + or + n instanceof Case and kind.isMatching() + } + + /** + * Holds if `n` is a simple leaf node in the AST that does not appear in a + * conditional context. For such nodes, there is no need to create separate + * "before" and "after" control flow nodes, so we merge them. + */ + cached + private predicate simpleLeafNode(AstNode n) { + Input1::cfgCachedStageRef() and + not exists(getChild(n, _)) and + not postOrInOrder(n) and + not inConditionalContext(n, _) + } + + private string loopHeaderTag() { result = "[LoopHeader]" } + + /** + * Holds if an additional node tagged with `tag` should be created for + * `n`. Edges targeting such nodes are labeled with `t` and therefore `t` + * should be unique for a given `(n,tag)` pair. + */ + private predicate additionalNode(AstNode n, string tag, NormalSuccessor t) { + Input1::additionalNode(n, tag, t) + or + n instanceof LoopStmt and + tag = loopHeaderTag() and + t instanceof DirectSuccessor + } + + /** + * Holds if `n` cannot terminate normally. For these cases there is no + * need to create an "after" node as that would be unreachable. + * Furthermore, skipping these nodes improves precision slightly for + * finally blocks, as the corresponding try blocks are otherwise generally + * assumed to be able to terminate normally, and hence allows for + * a normal successor from the finally block. + */ + private predicate cannotTerminateNormally(AstNode n) { + n instanceof BreakStmt + or + n instanceof ContinueStmt + or + n instanceof ReturnStmt + or + n instanceof ThrowStmt + or + cannotTerminateNormally(n.(BlockStmt).getLastStmt()) + or + cannotTerminateNormally(n.(ExprStmt).getExpr()) + or + exists(IfStmt ifstmt | + ifstmt = n and + cannotTerminateNormally(ifstmt.getThen()) and + cannotTerminateNormally(ifstmt.getElse()) + ) + or + exists(TryStmt trystmt | + trystmt = n and + cannotTerminateNormally(trystmt.getBody()) and + forall(CatchClause catch | trystmt.getCatch(_) = catch | + cannotTerminateNormally(catch.getBody()) + ) + ) + } + + /* + * - Every AST node has "before" and "after" control flow nodes (except simple leaf nodes). + * - CFG snippets always start at the "before" node. + * - In case of normal termination, the final node is an "after" node. + * - Boolean and other conditional completions are encoded in the "after" nodes. + * - The number of "after" nodes for a given AST node depends on whether the AST + * node is in a conditional context. + * - Successors are specified as simple steps between control flow nodes for + * NormalSuccessors, and as pairs of half-edges for AbruptSuccessors. This + * allows all specifications to be local. + * - Every AST node has a unique control flow node representing it. For + * preorder this is the "before" node, and for inorder/postorder this is an + * additional node that typically sits just before "after" (but may or may + * not step to it, since "after" represents normal termination). + */ + + cached + private newtype TNode = + TBeforeNode(AstNode n) { Input1::cfgCachedStageRef() and exists(getEnclosingCallable(n)) } or + TAstNode(AstNode n) { postOrInOrder(n) } or + TAfterValueNode(AstNode n, ConditionalSuccessor t) { inConditionalContext(n, t.getKind()) } or + TAfterNode(AstNode n) { + exists(getEnclosingCallable(n)) and + not inConditionalContext(n, _) and + not cannotTerminateNormally(n) and + not simpleLeafNode(n) + } or + TAdditionalNode(AstNode n, string tag) { additionalNode(n, tag, _) } or + TEntryNode(Callable c) { exists(callableGetBody(c)) } or + TAnnotatedExitNode(Callable c, Boolean normal) { exists(callableGetBody(c)) } or + TExitNode(Callable c) { exists(callableGetBody(c)) } + + private class NodeImpl extends TNode { + /** + * Holds if this is the node representing the point in the control flow + * before the execution of `n`. + */ + predicate isBefore(AstNode n) { this = TBeforeNode(n) } + + /** + * Holds if this is a node representing the point in the control flow + * after the normal termination of `n`. For simple leaf nodes, this is + * merged with the "before" node and is hence equal to it. For nodes in + * conditional contexts, this may be one of two possible "after" nodes + * representing the different possible values of `n`. + */ + predicate isAfter(AstNode n) { + this = TAfterNode(n) + or + this = TAfterValueNode(n, _) + or + this = TBeforeNode(n) and simpleLeafNode(n) + } + + /** + * Holds if this is the node representing the normal termination of `n` + * with the value `t`. + * + * Note that `n`, and most importantly `t`, must be bound, and if this + * predicate is used to identify the starting point of a step, then + * `inConditionalContext(n, t.getKind())` must hold. On the other hand, if + * this is used to identify the end point of a step, then there is no + * such requirement - in that case `t` will be translated to the + * appropriate `SuccessorType` for `n`. + */ + bindingset[n, t] + predicate isAfterValue(AstNode n, ConditionalSuccessor t) { + this = TAfterNode(n) and exists(t) + or + this = TBeforeNode(n) and simpleLeafNode(n) and exists(t) + or + this = TAfterValueNode(n, t) + or + exists(ConditionalSuccessor t0 | this = TAfterValueNode(n, t0) | + Input1::successorValueImplies(t, t0) + or + not Input1::successorValueImplies(t, _) and + t.getKind() != t0.getKind() + ) + } + + /** + * Holds if this is the node representing the evaluation of `n` to the + * value `true`. + * + * Note that if this predicate is used to identify the starting point of + * a step, then `inConditionalContext(n, BooleanCondition())` must hold. + * On the other hand, if this is used to identify the end point of a + * step, then there is no such requirement. + */ + predicate isAfterTrue(AstNode n) { + this.isAfterValue(n, any(BooleanSuccessor b | b.getValue() = true)) + } + + /** + * Holds if this is the node representing the evaluation of `n` to the + * value `false`. + * + * Note that if this predicate is used to identify the starting point of + * a step, then `inConditionalContext(n, BooleanCondition())` must hold. + * On the other hand, if this is used to identify the end point of a + * step, then there is no such requirement. + */ + predicate isAfterFalse(AstNode n) { + this.isAfterValue(n, any(BooleanSuccessor b | b.getValue() = false)) + } + + /** + * Holds if this is the node representing the given AST node when `n` + * has an in-order or post-order execution. + */ + predicate isIn(AstNode n) { this = TAstNode(n) } + + /** + * Holds if this is an additional control flow node with the given tag + * for the given AST node. + */ + predicate isAdditional(AstNode n, string tag) { this = TAdditionalNode(n, tag) } + + /** + * Holds if this is the unique control flow node that represents the + * given AST node. + */ + predicate injects(AstNode n) { + if postOrInOrder(n) then this = TAstNode(n) else this = TBeforeNode(n) + } + + /** Gets the statement this control flow node uniquely represents, if any. */ + Stmt asStmt() { this.injects(result) } + + /** Gets the expression this control flow node uniquely represents, if any. */ + Expr asExpr() { this.injects(result) } + + /** Gets the enclosing callable of this control flow node. */ + Callable getEnclosingCallable() { result = getEnclosingCallable(this.getAstNode()) } + + /** + * Gets the AST node with which this control flow node is associated. + * Note that several control flow nodes are usually associated with the + * same AST node, but each control flow node is associated with a unique + * AST node. + */ + abstract AstNode getAstNode(); + + /** Gets a textual representation of this node. */ + abstract string toString(); + + /** Gets the source location for this node. */ + Location getLocation() { result = this.getAstNode().getLocation() } + } + + /** + * A control flow node without the successor relation. This is used to + * reference control flow nodes during the construction of the control flow + * graph. + */ + final class PreControlFlowNode = NodeImpl; + + private class BeforeNode extends NodeImpl, TBeforeNode { + private AstNode n; + + BeforeNode() { this = TBeforeNode(n) } + + override AstNode getAstNode() { result = n } + + override string toString() { + if postOrInOrder(n) then result = "Before " + n.toString() else result = n.toString() + } + } + + private class MidNode extends NodeImpl, TAstNode { + private AstNode n; + + MidNode() { this = TAstNode(n) } + + override AstNode getAstNode() { result = n } + + override string toString() { result = n.toString() } + } + + private class AfterValueNode extends NodeImpl, TAfterValueNode { + private AstNode n; + private ConditionalSuccessor t; + + AfterValueNode() { this = TAfterValueNode(n, t) } + + override AstNode getAstNode() { result = n } + + override string toString() { result = "After " + n.toString() + " [" + t.toString() + "]" } + } + + private class AfterNode extends NodeImpl, TAfterNode { + private AstNode n; + + AfterNode() { this = TAfterNode(n) } + + override AstNode getAstNode() { result = n } + + override string toString() { result = "After " + n.toString() } + } + + private class AdditionalNode extends NodeImpl, TAdditionalNode { + private AstNode n; + private string tag; + + AdditionalNode() { this = TAdditionalNode(n, tag) } + + override AstNode getAstNode() { result = n } + + NormalSuccessor getSuccessorType() { additionalNode(n, tag, result) } + + override string toString() { result = tag + " " + n.toString() } + } + + final private class EntryNodeImpl extends NodeImpl, TEntryNode { + private Callable c; + + EntryNodeImpl() { this = TEntryNode(c) } + + override Callable getEnclosingCallable() { result = c } + + override AstNode getAstNode() { result = c } + + override string toString() { result = "Entry" } + } + + /** A control flow node indicating the normal or exceptional termination of a callable. */ + final private class AnnotatedExitNodeImpl extends NodeImpl, TAnnotatedExitNode { + Callable c; + boolean normal; + + AnnotatedExitNodeImpl() { this = TAnnotatedExitNode(c, normal) } + + override Callable getEnclosingCallable() { result = c } + + override AstNode getAstNode() { result = c } + + override string toString() { + normal = true and result = "Normal Exit" + or + normal = false and result = "Exceptional Exit" + } + } + + /** A control flow node indicating normal termination of a callable. */ + final private class NormalExitNodeImpl extends AnnotatedExitNodeImpl { + NormalExitNodeImpl() { this = TAnnotatedExitNode(_, true) } + } + + /** A control flow node indicating exceptional termination of a callable. */ + final private class ExceptionalExitNodeImpl extends AnnotatedExitNodeImpl { + ExceptionalExitNodeImpl() { this = TAnnotatedExitNode(_, false) } + } + + /** A control flow node indicating the termination of a callable. */ + final private class ExitNodeImpl extends NodeImpl, TExitNode { + Callable c; + + ExitNodeImpl() { this = TExitNode(c) } + + override Callable getEnclosingCallable() { result = c } + + override AstNode getAstNode() { result = c } + + override string toString() { result = "Exit" } + } + + private newtype TAbruptCompletion = + TSimpleAbruptCompletion(AbruptSuccessor t) or + TLabeledAbruptCompletion(JumpSuccessor t, Input1::Label l) + + /** + * A value indicating an abrupt completion of an AST node in the control + * flow graph. This is mostly equivalent to an AbruptSuccessor, but may + * also carry a label to, for example, link a goto statement with its target. + */ + class AbruptCompletion extends TAbruptCompletion { + /** Gets a textual representation of this abrupt completion. */ + string toString() { + exists(AbruptSuccessor t | this = TSimpleAbruptCompletion(t) and result = t.toString()) + or + exists(AbruptSuccessor t, Input1::Label l | + this = TLabeledAbruptCompletion(t, l) and + result = t.toString() + " " + l.toString() + ) + } + + /** Gets the successor type of this abrupt completion. */ + AbruptSuccessor getSuccessorType() { + this = TSimpleAbruptCompletion(result) or this = TLabeledAbruptCompletion(result, _) + } + + /** + * Gets the successor type of this abrupt completion, if this is an + * abrupt completion without a label. + */ + AbruptSuccessor asSimpleAbruptCompletion() { this = TSimpleAbruptCompletion(result) } + + /** Holds if this abrupt completion has label `l`. */ + predicate hasLabel(Input1::Label l) { this = TLabeledAbruptCompletion(_, l) } + } + + signature module InputSig2 { + /** Holds if this catch clause catches all exceptions. */ + default predicate catchAll(CatchClause catch) { none() } + + /** + * Holds if this case matches all possible values, for example, if it is a + * `default` case or a match-all pattern like `Object o` or if it is the + * final case in a switch that is known to be exhaustive. + * + * A match-all case can still ultimately fail to match if it has a guard. + */ + default predicate matchAll(Case c) { none() } + + /** + * Holds if `ast` may result in an abrupt completion `c` originating at + * `n`. The boolean `always` indicates whether the abrupt completion + * always occurs or whether `n` may also terminate normally. + */ + predicate beginAbruptCompletion( + AstNode ast, PreControlFlowNode n, AbruptCompletion c, boolean always + ); + + /** + * Holds if an abrupt completion `c` from within `ast` is caught with + * flow continuing at `n`. + */ + predicate endAbruptCompletion(AstNode ast, PreControlFlowNode n, AbruptCompletion c); + + /** Holds if there is a local non-abrupt step from `n1` to `n2`. */ + predicate step(PreControlFlowNode n1, PreControlFlowNode n2); + } + + /** Completes the construction of the control flow graph. */ + module Make2 { + /** + * Holds if `ast` may result in an abrupt completion `c` originating at + * `n`. The boolean `always` indicates whether the abrupt completion + * always occurs or whether `n` may also terminate normally. + */ + private predicate beginAbruptCompletion( + AstNode ast, PreControlFlowNode n, AbruptCompletion c, boolean always + ) { + Input2::beginAbruptCompletion(ast, n, c, always) + or + n.isIn(ast) and + always = true and + ( + ast instanceof ReturnStmt and + c.getSuccessorType() instanceof ReturnSuccessor + or + ast instanceof ThrowStmt and + c.getSuccessorType() instanceof ExceptionSuccessor + or + ast instanceof BreakStmt and + c.getSuccessorType() instanceof BreakSuccessor + or + ast instanceof ContinueStmt and + c.getSuccessorType() instanceof ContinueSuccessor + ) and + ( + not Input1::hasLabel(ast, _) and not c.hasLabel(_) + or + exists(Input1::Label l | + Input1::hasLabel(ast, l) and + c.hasLabel(l) + ) + ) + or + exists(TryStmt trystmt, int i, CatchClause catchclause | + trystmt.getCatch(i) = catchclause and + not exists(trystmt.getCatch(i + 1)) and + ast = catchclause and + n.isAfterValue(catchclause, any(MatchingSuccessor t | t.getValue() = false)) and + c.getSuccessorType() instanceof ExceptionSuccessor and + always = true + ) + } + + /** + * Holds if an abrupt completion `c` from within `ast` is caught with + * flow continuing at `n`. + */ + private predicate endAbruptCompletion(AstNode ast, PreControlFlowNode n, AbruptCompletion c) { + Input2::endAbruptCompletion(ast, n, c) + or + exists(Callable callable | ast = callableGetBody(callable) | + c.getSuccessorType() instanceof ReturnSuccessor and + n.(NormalExitNodeImpl).getEnclosingCallable() = callable + or + c.getSuccessorType() instanceof ExceptionSuccessor and + n.(ExceptionalExitNodeImpl).getEnclosingCallable() = callable + or + c.getSuccessorType() instanceof ExitSuccessor and + n.(ExceptionalExitNodeImpl).getEnclosingCallable() = callable + ) + or + exists(LoopStmt loop | ast = pragma[only_bind_into](loop).getBody() | + ( + c.getSuccessorType() instanceof BreakSuccessor and + n.isAfter(loop) + or + c.getSuccessorType() instanceof ContinueSuccessor and + n.isAdditional(loop, loopHeaderTag()) + ) and + ( + not c.hasLabel(_) + or + exists(Input1::Label l | + c.hasLabel(l) and + Input1::hasLabel(loop, l) + ) + ) + ) + or + exists(TryStmt trystmt | + ast = getTryInit(trystmt, _) + or + ast = trystmt.getBody() + | + c.getSuccessorType() instanceof ExceptionSuccessor and + ( + n.isBefore(trystmt.getCatch(0)) + or + not exists(trystmt.getCatch(_)) and + n.isBefore(trystmt.getFinally()) + ) + or + ( + // Exit completions skip the finally block + c.getSuccessorType() instanceof ReturnSuccessor or + c.getSuccessorType() instanceof JumpSuccessor + ) and + n.isBefore(trystmt.getFinally()) + ) + or + exists(TryStmt trystmt | + ast = trystmt.getCatch(_) + or + ast = getTryElse(trystmt) + | + n.isBefore(trystmt.getFinally()) and + not c.getSuccessorType() instanceof ExitSuccessor + ) + or + exists(Switch switch | + ast = switch.getCase(_).getBodyElement(_) and + n.isAfter(switch) and + c.getSuccessorType() instanceof BreakSuccessor + | + not c.hasLabel(_) + or + exists(Input1::Label l | + c.hasLabel(l) and + Input1::hasLabel(switch, l) + ) + ) + } + + private Case getRankedCaseCfgOrder(Switch s, int rnk) { + result = rank[rnk](Case c, int i | getCaseControlFlowOrder(s, c) = i | c order by i) + } + + private AstNode getFirstCaseBodyElement(Case case) { + result = case.getBodyElement(0) + or + not exists(case.getBodyElement(0)) and + exists(Switch s, int i | + fallsThrough(case) and + // fall-through follows AST order, not case control flow order: + s.getCase(i) = case and + result = getFirstCaseBodyElement(s.getCase(i + 1)) + ) + } + + private AstNode getNextCaseBodyElement(AstNode bodyElement) { + exists(Case case, int i | case.getBodyElement(i) = bodyElement | + result = case.getBodyElement(i + 1) + or + not exists(case.getBodyElement(i + 1)) and + exists(Switch s, int j | + fallsThrough(case) and + // fall-through follows AST order, not case control flow order: + s.getCase(j) = case and + result = getFirstCaseBodyElement(s.getCase(j + 1)) + ) + ) + } + + /** Holds if there is a local non-abrupt step from `n1` to `n2`. */ + private predicate explicitStep(PreControlFlowNode n1, PreControlFlowNode n2) { + Input2::step(n1, n2) + or + exists(Callable c | + n1.(EntryNodeImpl).getEnclosingCallable() = c and + n2.isBefore(callableGetBody(c)) + or + n1.isAfter(callableGetBody(c)) and + n2.(NormalExitNodeImpl).getEnclosingCallable() = c + or + n1.(AnnotatedExitNodeImpl).getEnclosingCallable() = c and + n2.(ExitNodeImpl).getEnclosingCallable() = c + ) + or + exists(AstNode child, AstNode parent | propagatesValue(child, parent) | + exists(ConditionalSuccessor t | + inConditionalContext(parent, t.getKind()) and + n1.isAfterValue(child, t) and + n2.isAfterValue(parent, t) + ) + or + not inConditionalContext(parent, _) and + n1.isAfter(child) and + n2.isAfter(parent) + ) + or + exists(BinaryExpr binexpr, ConditionalSuccessor shortcircuitValue | + shortCircuiting(binexpr, shortcircuitValue) + | + n1.isBefore(binexpr) and + n2.isBefore(binexpr.getLeftOperand()) + or + n1.isAfterValue(binexpr.getLeftOperand(), shortcircuitValue.getDual()) and + n2.isBefore(binexpr.getRightOperand()) + or + n1.isAfterValue(binexpr.getLeftOperand(), shortcircuitValue) and + n2.isAfterValue(binexpr, shortcircuitValue) + or + // short-circuiting operations with side-effects (e.g. `x &&= y`, `x?.Prop = y`) are in post-order: + n1.isAfter(binexpr.getRightOperand()) and + n2.isIn(binexpr) + or + n1.isIn(binexpr) and + n2.isAfter(binexpr) + ) + or + exists(LogicalNotExpr notexpr | + n1.isBefore(notexpr) and + n2.isBefore(notexpr.getOperand()) + or + exists(BooleanSuccessor t | + n1.isAfterValue(notexpr.getOperand(), t) and + n2.isAfterValue(notexpr, t.getDual()) + ) + ) + or + exists(ConditionalExpr condexpr | + n1.isBefore(condexpr) and + n2.isBefore(condexpr.getCondition()) + or + n1.isAfterTrue(condexpr.getCondition()) and + n2.isBefore(condexpr.getThen()) + or + n1.isAfterFalse(condexpr.getCondition()) and + n2.isBefore(condexpr.getElse()) + ) + or + exists(BooleanLiteral boollit | + inConditionalContext(boollit, _) and + n1.isBefore(boollit) and + n2.isAfterValue(boollit, any(BooleanSuccessor t | t.getValue() = boollit.getValue())) + ) + or + exists(ExprStmt exprstmt | + n1.isBefore(exprstmt) and + n2.isBefore(exprstmt.getExpr()) + // the `isAfter(exprstmt.getExpr())` to `isAfter(exprstmt)` case is handled by `propagatesValue` above. + ) + or + exists(BlockStmt blockstmt | + n1.isBefore(blockstmt) and + n2.isBefore(blockstmt.getStmt(0)) + or + not exists(blockstmt.getStmt(_)) and + n1.isBefore(blockstmt) and + n2.isAfter(blockstmt) and + not simpleLeafNode(blockstmt) + or + exists(int i | + n1.isAfter(blockstmt.getStmt(i)) and + n2.isBefore(blockstmt.getStmt(i + 1)) + ) + // the `isAfter(blockstmt.getLastStmt())` to `isAfter(blockstmt)` case is handled by `propagatesValue` above. + ) + or + exists(IfStmt ifstmt | + n1.isBefore(ifstmt) and + n2.isBefore(ifstmt.getCondition()) + or + n1.isAfterTrue(ifstmt.getCondition()) and + n2.isBefore(ifstmt.getThen()) + or + n1.isAfterFalse(ifstmt.getCondition()) and + ( + n2.isBefore(ifstmt.getElse()) + or + not exists(ifstmt.getElse()) and + n2.isAfter(ifstmt) + ) + or + n1.isAfter(ifstmt.getThen()) and + n2.isAfter(ifstmt) + or + n1.isAfter(ifstmt.getElse()) and + n2.isAfter(ifstmt) + ) + or + exists(WhileStmt whilestmt | + n1.isBefore(whilestmt) and + n2.isAdditional(whilestmt, loopHeaderTag()) + ) + or + exists(DoStmt dostmt | + n1.isBefore(dostmt) and + n2.isBefore(dostmt.getBody()) + ) + or + exists(LoopStmt loopstmt, AstNode cond | + loopstmt.(WhileStmt).getCondition() = cond or loopstmt.(DoStmt).getCondition() = cond + | + n1.isAdditional(loopstmt, loopHeaderTag()) and + n2.isBefore(cond) + or + n1.isAfterTrue(cond) and + n2.isBefore(loopstmt.getBody()) + or + n1.isAfterFalse(cond) and + n2.isAfter(loopstmt) + or + n1.isAfter(loopstmt.getBody()) and + n2.isAdditional(loopstmt, loopHeaderTag()) + ) + or + exists(ForeachStmt foreachstmt | + n1.isBefore(foreachstmt) and + n2.isBefore(foreachstmt.getCollection()) + or + n1.isAfterValue(foreachstmt.getCollection(), + any(EmptinessSuccessor t | t.getValue() = true)) and + n2.isAfter(foreachstmt) + or + n1.isAfterValue(foreachstmt.getCollection(), + any(EmptinessSuccessor t | t.getValue() = false)) and + n2.isBefore(foreachstmt.getVariable()) + or + n1.isAfter(foreachstmt.getVariable()) and + n2.isBefore(foreachstmt.getBody()) + or + n1.isAfter(foreachstmt.getBody()) and + n2.isAdditional(foreachstmt, loopHeaderTag()) + or + n1.isAdditional(foreachstmt, loopHeaderTag()) and + n2.isAfter(foreachstmt) + or + n1.isAdditional(foreachstmt, loopHeaderTag()) and + n2.isBefore(foreachstmt.getVariable()) + ) + or + exists(ForStmt forstmt, PreControlFlowNode condentry | + // Any part of the control flow that aims for the condition needs to hit either the condition... + condentry.isBefore(forstmt.getCondition()) + or + // ...or the body if the for doesn't include a condition. + not exists(forstmt.getCondition()) and condentry.isBefore(forstmt.getBody()) + | + n1.isBefore(forstmt) and + ( + n2.isBefore(forstmt.getInit(0)) + or + not exists(forstmt.getInit(_)) and n2 = condentry + ) + or + exists(int i | n1.isAfter(forstmt.getInit(i)) | + n2.isBefore(forstmt.getInit(i + 1)) + or + not exists(forstmt.getInit(i + 1)) and n2 = condentry + ) + or + n1.isAfterTrue(forstmt.getCondition()) and + n2.isBefore(forstmt.getBody()) + or + n1.isAfterFalse(forstmt.getCondition()) and + n2.isAfter(forstmt) + or + n1.isAfter(forstmt.getBody()) and + n2.isAdditional(forstmt, loopHeaderTag()) + or + n1.isAdditional(forstmt, loopHeaderTag()) and + ( + n2.isBefore(forstmt.getUpdate(0)) + or + not exists(forstmt.getUpdate(_)) and n2 = condentry + ) + or + exists(int i | n1.isAfter(forstmt.getUpdate(i)) | + n2.isBefore(forstmt.getUpdate(i + 1)) + or + not exists(forstmt.getUpdate(i + 1)) and n2 = condentry + ) + ) + or + exists(TryStmt trystmt | + n1.isBefore(trystmt) and + ( + n2.isBefore(getTryInit(trystmt, 0)) + or + not exists(getTryInit(trystmt, _)) and n2.isBefore(trystmt.getBody()) + ) + or + exists(int i | n1.isAfter(getTryInit(trystmt, i)) | + n2.isBefore(getTryInit(trystmt, i + 1)) + or + not exists(getTryInit(trystmt, i + 1)) and n2.isBefore(trystmt.getBody()) + ) + or + exists(PreControlFlowNode beforeElse, PreControlFlowNode beforeFinally | + ( + beforeElse.isBefore(getTryElse(trystmt)) + or + not exists(getTryElse(trystmt)) and beforeElse = beforeFinally + ) and + ( + beforeFinally.isBefore(trystmt.getFinally()) + or + not exists(trystmt.getFinally()) and beforeFinally.isAfter(trystmt) + ) + | + n1.isAfter(trystmt.getBody()) and + n2 = beforeElse + or + n1.isAfter(getTryElse(trystmt)) and + n2 = beforeFinally + or + n1.isAfter(trystmt.getCatch(_).getBody()) and + n2 = beforeFinally + ) + or + n1.isAfter(trystmt.getFinally()) and + n2.isAfter(trystmt) + or + exists(int i | + n1.isAfterValue(trystmt.getCatch(i), any(MatchingSuccessor t | t.getValue() = false)) and + n2.isBefore(trystmt.getCatch(i + 1)) + ) + ) + or + exists(CatchClause catchclause | + exists(MatchingSuccessor t | + n1.isBefore(catchclause) and + n2.isAfterValue(catchclause, t) and + if Input2::catchAll(catchclause) then t.getValue() = true else any() + ) + or + exists(PreControlFlowNode beforeVar, PreControlFlowNode beforeCond | + ( + beforeVar.isBefore(catchclause.getVariable()) + or + not exists(catchclause.getVariable()) and beforeVar = beforeCond + ) and + ( + beforeCond.isBefore(catchclause.getCondition()) + or + not exists(catchclause.getCondition()) and beforeCond.isBefore(catchclause.getBody()) + ) + | + n1.isAfterValue(catchclause, any(MatchingSuccessor t | t.getValue() = true)) and + n2 = beforeVar + or + n1.isAfter(catchclause.getVariable()) and + n2 = beforeCond + ) + or + n1.isAfterTrue(catchclause.getCondition()) and + n2.isBefore(catchclause.getBody()) + or + n1.isAfterFalse(catchclause.getCondition()) and + n2.isAfterValue(catchclause, any(MatchingSuccessor t | t.getValue() = false)) + ) + or + exists(Switch switch, PreControlFlowNode firstCase | + firstCase.isBefore(getRankedCaseCfgOrder(switch, 1)) + or + not exists(getRankedCaseCfgOrder(switch, _)) and firstCase.isAfter(switch) + | + n1.isBefore(switch) and + n2.isBefore(switch.getExpr()) + or + n1.isBefore(switch) and + not exists(switch.getExpr()) and + n2 = firstCase + or + n1.isAfter(switch.getExpr()) and + n2 = firstCase + or + exists(int i | + n1.isAfterValue(getRankedCaseCfgOrder(switch, i), + any(MatchingSuccessor t | t.getValue() = false)) + | + n2.isBefore(getRankedCaseCfgOrder(switch, i + 1)) + or + not exists(getRankedCaseCfgOrder(switch, i + 1)) and + n2.isAfter(switch) + ) + ) + or + exists(Case case | + exists(MatchingSuccessor t | + n1.isBefore(case) and + n2.isAfterValue(case, t) and + if Input2::matchAll(case) then t.getValue() = true else any() + ) + or + exists( + PreControlFlowNode beforePattern, PreControlFlowNode beforeGuard, + PreControlFlowNode beforeBody + | + ( + beforePattern.isBefore(case.getAPattern()) + or + not exists(case.getAPattern()) and beforePattern = beforeGuard + ) and + ( + beforeGuard.isBefore(case.getGuard()) + or + not exists(case.getGuard()) and beforeGuard = beforeBody + ) and + ( + beforeBody.isBefore(getFirstCaseBodyElement(case)) + or + not exists(getFirstCaseBodyElement(case)) and + beforeBody.isAfter(any(Switch s | s.getCase(_) = case)) + ) + | + n1.isAfterValue(case, any(MatchingSuccessor t | t.getValue() = true)) and + n2 = beforePattern + or + n1.isAfter(case.getAPattern()) and + n2 = beforeGuard + or + n1.isAfterTrue(case.getGuard()) and + n2 = beforeBody + or + n1.isAfterFalse(case.getGuard()) and + n2.isAfterValue(case, any(MatchingSuccessor t | t.getValue() = false)) + ) + ) + or + exists(AstNode caseBodyElement | + n1.isAfter(caseBodyElement) and + n2.isBefore(getNextCaseBodyElement(caseBodyElement)) + or + n1.isAfter(caseBodyElement) and + not exists(getNextCaseBodyElement(caseBodyElement)) and + n2.isAfter(any(Switch s | s.getCase(_).getBodyElement(_) = caseBodyElement)) + ) + } + + /** + * Holds if `ast` does not have explicitly defined control flow steps + * and therefore should use default left-to-right evaluation. + */ + private predicate defaultCfg(AstNode ast) { + not explicitStep(any(PreControlFlowNode n | n.isBefore(ast)), _) + } + + private AstNode getRankedChild(AstNode parent, int rnk) { + defaultCfg(parent) and + result = rank[rnk](AstNode c, int ix | c = getChild(parent, ix) | c order by ix) + } + + /** + * Holds if `n1` to `n2` is a default left-to-right evaluation step for + * an `AstNode` that does not otherwise have explicitly defined control + * flow. + */ + private predicate defaultStep(PreControlFlowNode n1, PreControlFlowNode n2) { + exists(AstNode ast | defaultCfg(ast) | + n1.isBefore(ast) and + n2.isBefore(getRankedChild(ast, 1)) + or + exists(int i | + n1.isAfter(getRankedChild(ast, i)) and + n2.isBefore(getRankedChild(ast, i + 1)) + ) + or + ( + n1.isBefore(ast) and not exists(getRankedChild(ast, _)) and not simpleLeafNode(ast) + or + exists(int i | + n1.isAfter(getRankedChild(ast, i)) and not exists(getRankedChild(ast, i + 1)) + ) + ) and + (if postOrInOrder(ast) then n2.isIn(ast) else n2.isAfter(ast)) + or + n1.isIn(ast) and + n2.isAfter(ast) and + not beginAbruptCompletion(ast, n1, _, true) + ) + } + + /** Holds if there is a local non-abrupt step from `n1` to `n2`. */ + private predicate step(PreControlFlowNode n1, PreControlFlowNode n2) { + explicitStep(n1, n2) or defaultStep(n1, n2) + } + + /** + * Holds if the execution of `ast` may result in an abrupt completion + * `c` originating at `last`. + */ + private predicate last(AstNode ast, PreControlFlowNode last, AbruptCompletion c) { + // Require a predecessor as a coarse approximation of reachability. + // In particular, this prevents a catch-all catch clause preceding a + // finally block from adding exception edges out of the finally. + step(_, last) and + beginAbruptCompletion(ast, last, c, _) + or + exists(AstNode child | + getChild(ast, _) = child and + last(child, last, c) and + not endAbruptCompletion(child, _, c) + ) + or + exists( + AstNode inner, TryStmt try, Stmt finally, PreControlFlowNode finallyEntry, + PreControlFlowNode finallyExit + | + try.getFinally() = finally and + ast = finally and + finallyEntry.isBefore(finally) and + finallyExit.isAfter(finally) and + endAbruptCompletion(inner, finallyEntry, c) and + last(inner, _, c) and + last = finallyExit + ) + } + + private predicate preSucc(PreControlFlowNode n1, PreControlFlowNode n2, SuccessorType t) { + step(n1, n2) and n2 = TAfterValueNode(_, t) + or + step(n1, n2) and n2.(AdditionalNode).getSuccessorType() = t + or + step(n1, n2) and + not n2 instanceof AfterValueNode and + not n2 instanceof AdditionalNode and + t instanceof DirectSuccessor + or + exists(AstNode ast, AbruptCompletion c | + last(ast, n1, c) and endAbruptCompletion(ast, n2, c) and t = c.getSuccessorType() + ) + } + + /** Holds if `n` is reachable from an entry node. */ + cached + private predicate reachable(PreControlFlowNode n) { + Input1::cfgCachedStageRef() and + n instanceof EntryNodeImpl + or + exists(PreControlFlowNode mid | reachable(mid) and preSucc(mid, n, _)) + } + + cached + private predicate succ(ControlFlowNode n1, ControlFlowNode n2, SuccessorType t) { + Input1::cfgCachedStageRef() and + preSucc(n1, n2, t) + } + + /** The cached stage of the control flow graph. */ + cached + module CfgCachedStage { + /** Reference to the cached stage of the control flow graph. */ + cached + predicate ref() { any() } + + /** Reverse references to the predicates that reference `ref()`. */ + cached + predicate revRef() { + (postOrInOrder(_) implies any()) and + (simpleLeafNode(_) implies any()) and + (exists(TBeforeNode(_)) implies any()) and + (reachable(_) implies any()) and + (succ(_, _, _) implies any()) + } + } + + import Public + + /** The public API of the control flow graph library. */ + module Public { + /** + * A node in the control flow graph. This is restricted to nodes that + * are reachable from an entry node. + */ + final class ControlFlowNode extends PreControlFlowNode { + ControlFlowNode() { reachable(this) } + + /** Gets the basic block containing this control flow node. */ + BasicBlock getBasicBlock() { result.getANode() = this } + + /** Gets an immediate successor of a given type, if any. */ + ControlFlowNode getASuccessor(SuccessorType t) { succ(this, result, t) } + + /** Gets an immediate successor of this node. */ + ControlFlowNode getASuccessor() { result = this.getASuccessor(_) } + + /** Gets an immediate predecessor of this node. */ + ControlFlowNode getAPredecessor() { result.getASuccessor() = this } + + /** + * Gets a normal successor of this node, if any. This includes direct + * successors and conditional successors. + */ + ControlFlowNode getANormalSuccessor() { + result = this.getASuccessor(any(NormalSuccessor t)) + } + + /** Gets an exception successor of this node, if any. */ + ControlFlowNode getAnExceptionSuccessor() { + result = this.getASuccessor(any(ExceptionSuccessor t)) + } + } + + /** Provides additional classes for interacting with the control flow graph. */ + module ControlFlow { + /** The control flow node at the entry point of a callable. */ + final class EntryNode extends ControlFlowNode, EntryNodeImpl { } + + /** A control flow node indicating the normal or exceptional termination of a callable. */ + final class AnnotatedExitNode extends ControlFlowNode, AnnotatedExitNodeImpl { } + + /** A control flow node indicating normal termination of a callable. */ + final class NormalExitNode extends AnnotatedExitNode, NormalExitNodeImpl { } + + /** A control flow node indicating exceptional termination of a callable. */ + final class ExceptionalExitNode extends AnnotatedExitNode, ExceptionalExitNodeImpl { } + + /** A control flow node indicating the termination of a callable. */ + final class ExitNode extends ControlFlowNode, ExitNodeImpl { } + + import Additional + } + + private import codeql.controlflow.BasicBlock as BB + + private module BbInput implements BB::InputSig { + predicate successorTypeIsCondition(SuccessorType t) { none() } + + class CfgScope = Ast::Callable; + + class Node = ControlFlowNode; + + CfgScope nodeGetCfgScope(Node node) { node.getEnclosingCallable() = result } + + Node nodeGetASuccessor(Node node, SuccessorType t) { result = node.getASuccessor(t) } + + predicate nodeIsDominanceEntry(Node node) { node instanceof ControlFlow::EntryNode } + + predicate nodeIsPostDominanceExit(Node node) { + node instanceof ControlFlow::NormalExitNode + } + } + + import CfgAlias + + private module CfgAlias = Cfg; + + module Cfg = BB::Make; + } + + private module Additional { + /* + * CFG printing + */ + + private import PrintGraph as Pp + + private class ControlFlowNodeAlias = ControlFlowNode; + + private module PrintGraphInput implements Pp::InputSig { + class Callable = Ast::Callable; + + class ControlFlowNode = ControlFlowNodeAlias; + + ControlFlowNode getASuccessor(ControlFlowNode n, SuccessorType t) { + result = n.getASuccessor(t) + } + } + + import Pp::PrintGraph + + /* + * Consistency checks + * + * - there should be no dead ends except at ExitNodes + * - inConditionalContext(n, kind) kind must be unique for n + * - flow must preserve getEnclosingCallable + * - additionalNode(AstNode n, string tag, NormalSuccessor t) should have a unique t for (n, tag) + * - if "before" is reachable and node is post-or-in-order, then "in" must generally be reachable + */ + + /** Provides a set of consistency queries. */ + module Consistency { + /** Holds if `node` is lacking a successor. */ + query predicate deadEnd(ControlFlowNode node) { + not node instanceof ControlFlow::ExitNode and + not exists(node.getASuccessor(_)) + } + + /** Holds if `n` is in a conditional context with multiple condition kinds. */ + query predicate nonUniqueInConditionalContext(AstNode n) { + 1 < strictcount(ConditionKind kind | inConditionalContext(n, kind)) + } + + /** + * Holds if `n1` steps to `n2` with successor type `t` but they belong + * to different callables. + */ + query predicate nonLocalStep(ControlFlowNode n1, SuccessorType t, ControlFlowNode n2) { + n1.getASuccessor(t) = n2 and + n1.getEnclosingCallable() != n2.getEnclosingCallable() + } + + /** + * Holds if the additional node for a given AST node and tag has + * multiple successor types. + */ + query predicate ambiguousAdditionalNode(AstNode n, string tag) { + 1 < strictcount(NormalSuccessor t | additionalNode(n, tag, t)) + } + + /** Holds if the "in" node is unreachable for a post-or-in-order AST node. */ + query predicate missingInNodeForPostOrInOrder(AstNode ast) { + postOrInOrder(ast) and + exists(ControlFlowNode before | before.isBefore(ast)) and + not exists(ControlFlowNode mid | mid.isIn(ast)) and + // A non-terminating child could prevent reaching the "in" node, and that's fine: + not exists(AstNode child | + getChild(ast, _) = child and + exists(ControlFlowNode beforeChild | beforeChild.isBefore(child)) and + not exists(ControlFlowNode afterChild | afterChild.isAfter(child)) + ) + } + + private predicate labelledAbruptSuccessor( + ControlFlowNode n1, ControlFlowNode n2, SuccessorType t, Input1::Label l + ) { + exists(AstNode ast, AbruptCompletion c | + last(ast, n1, c) and + endAbruptCompletion(ast, n2, c) and + t = c.getSuccessorType() and + c.hasLabel(l) + ) + } + + /** Holds if `node` has multiple successors of the same type `t`. */ + query predicate multipleSuccessors( + ControlFlowNode node, SuccessorType t, ControlFlowNode successor + ) { + exists(int n | + n = strictcount(node.getASuccessor(t)) and + n > 1 and + // allow multiple abrupt successors with different labels (e.g. a finally block with multiple GotoSuccessors) + n - count(Input1::Label l | labelledAbruptSuccessor(node, _, t, l)) > 1 + ) and + successor = node.getASuccessor(t) and + // allow for loop headers in foreach loops (they're checking emptiness on the iterator, not the collection) + not ( + t instanceof DirectSuccessor and + node.isAdditional(any(ForeachStmt foreach), loopHeaderTag()) + ) and + // allow for disjunctive patterns (e.g. `case "foo", "bar":`) + not ( + t instanceof DirectSuccessor and + node.isAfterValue(any(Case c | 2 <= strictcount(c.getAPattern())), + any(MatchingSuccessor m | m.getValue() = true)) + ) and + // allow for functions with multiple bodies + not (t instanceof DirectSuccessor and node instanceof ControlFlow::EntryNode) + } + + /** Holds if `node` has conditional successors of different kinds. */ + query predicate multipleConditionalSuccessorKinds( + ControlFlowNode node, ConditionalSuccessor t1, ConditionalSuccessor t2, + ControlFlowNode succ1, ControlFlowNode succ2 + ) { + t1.getKind() != t2.getKind() and + succ1 = node.getASuccessor(t1) and + succ2 = node.getASuccessor(t2) + } + + /** Holds if `node` has both a direct and a conditional successor type. */ + query predicate directAndConditionalSuccessors( + ControlFlowNode node, ConditionalSuccessor t1, DirectSuccessor t2, + ControlFlowNode succ1, ControlFlowNode succ2 + ) { + succ1 = node.getASuccessor(t1) and + succ2 = node.getASuccessor(t2) + } + + /** Holds if `node` has a self-loop with successor type `t`. */ + query predicate selfLoop(ControlFlowNode node, SuccessorType t) { + node.getASuccessor(t) = node + } + } + } + } + } +} From 6fbdb2c52b77c539a121dbabeeb4e03832873a1c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 9 Feb 2026 11:28:47 +0100 Subject: [PATCH 168/243] Java: Fix Cyclomatic complexity calculation. --- .../code/java/metrics/MetricCallable.qll | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll b/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll index e6fa5d9e5c26..55753cc7bc82 100644 --- a/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll +++ b/java/ql/lib/semmle/code/java/metrics/MetricCallable.qll @@ -71,18 +71,28 @@ class MetricCallable extends Callable { } } +private predicate fallthroughSwitchCase(SwitchCase sc1, SwitchCase sc2) { + exists(SwitchStmt switch, int n | switch.getStmt(n) = sc1 and switch.getStmt(n + 1) = sc2) + or + exists(SwitchExpr switch, int n | switch.getStmt(n) = sc1 and switch.getStmt(n + 1) = sc2) +} + // Branching points in the sense of cyclomatic complexity are binary, // so there should be a branching point for each non-default switch // case (ignoring those that just fall through to the next case). private predicate branchingSwitchCase(ConstCase sc) { - not sc.getControlFlowNode().getASuccessor().asStmt() instanceof SwitchCase and - not defaultFallThrough(sc) + if sc.isRule() + then any() + else ( + not fallthroughSwitchCase(sc, _) and + not defaultFallThrough(sc) + ) } private predicate defaultFallThrough(ConstCase sc) { - exists(DefaultCase default | default.getControlFlowNode().getASuccessor().asStmt() = sc) + exists(DefaultCase default | fallthroughSwitchCase(default, sc)) or - defaultFallThrough(sc.getControlFlowNode().getAPredecessor().asStmt()) + exists(ConstCase mid | defaultFallThrough(mid) and fallthroughSwitchCase(mid, sc)) } /** Holds if `stmt` is a branching statement used for the computation of cyclomatic complexity. */ From 1e9dcea88bc102d2b06e39f2cc08833e3e433e6c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 9 Feb 2026 14:05:07 +0100 Subject: [PATCH 169/243] Java: Fix RangeAnalysis/ModulusAnalysis. --- .../code/java/dataflow/RangeAnalysis.qll | 2 ++ .../rangeanalysis/SsaReadPositionSpecific.qll | 6 ++-- .../codeql/controlflow/ControlFlowGraph.qll | 32 +++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll index 0bca03f81186..917935fad7f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll @@ -220,6 +220,8 @@ module Sem implements Semantic { int getBlockId1(BasicBlock bb) { idOf(bb, result) } + string getBlockId2(BasicBlock bb) { bb.getFirstNode().getIdTag() = result } + class Guard extends G::Guards_v2::Guard { Expr asExpr() { result = this } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll index f826f192dcaf..9375c859f149 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/rangeanalysis/SsaReadPositionSpecific.qll @@ -23,7 +23,9 @@ private predicate idOfAst(BB::ExprParent x, int y) = equivalenceRelation(id/2)(x private predicate idOf(BasicBlock x, int y) { idOfAst(x.getFirstNode().getAstNode(), y) } -private int getId(BasicBlock bb) { idOf(bb, result) } +private int getId1(BasicBlock bb) { idOf(bb, result) } + +private string getId2(BasicBlock bb) { bb.getFirstNode().getIdTag() = result } /** * Declarations to be exposed to users of SsaReadPositionCommon @@ -39,7 +41,7 @@ module Public { rank[r](SsaReadPositionPhiInputEdge e | e.phiInput(phi, _) | - e order by getId(e.getOrigBlock()) + e order by getId1(e.getOrigBlock()), getId2(e.getOrigBlock()) ) } } diff --git a/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll b/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll index 08c21e376cc0..7e51e0e4fe3c 100644 --- a/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll +++ b/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll @@ -706,6 +706,14 @@ module Make0 Ast> { */ abstract AstNode getAstNode(); + /** + * INTERNAL: Do not use. + * + * Gets a tag such that the pair `(getAstNode(), getIdTag())` uniquely + * identifies this node. + */ + abstract string getIdTag(); + /** Gets a textual representation of this node. */ abstract string toString(); @@ -727,6 +735,8 @@ module Make0 Ast> { override AstNode getAstNode() { result = n } + override string getIdTag() { result = "before" } + override string toString() { if postOrInOrder(n) then result = "Before " + n.toString() else result = n.toString() } @@ -739,6 +749,8 @@ module Make0 Ast> { override AstNode getAstNode() { result = n } + override string getIdTag() { result = "ast" } + override string toString() { result = n.toString() } } @@ -750,6 +762,12 @@ module Make0 Ast> { override AstNode getAstNode() { result = n } + override string getIdTag() { + t.getValue() = true and result = "after-true" + or + t.getValue() = false and result = "after-false" + } + override string toString() { result = "After " + n.toString() + " [" + t.toString() + "]" } } @@ -760,6 +778,8 @@ module Make0 Ast> { override AstNode getAstNode() { result = n } + override string getIdTag() { result = "after" } + override string toString() { result = "After " + n.toString() } } @@ -773,6 +793,8 @@ module Make0 Ast> { NormalSuccessor getSuccessorType() { additionalNode(n, tag, result) } + override string getIdTag() { result = "add. " + tag } + override string toString() { result = tag + " " + n.toString() } } @@ -785,6 +807,8 @@ module Make0 Ast> { override AstNode getAstNode() { result = c } + override string getIdTag() { result = "entry" } + override string toString() { result = "Entry" } } @@ -799,6 +823,12 @@ module Make0 Ast> { override AstNode getAstNode() { result = c } + override string getIdTag() { + normal = true and result = "exit-normal" + or + normal = false and result = "exit-exc" + } + override string toString() { normal = true and result = "Normal Exit" or @@ -826,6 +856,8 @@ module Make0 Ast> { override AstNode getAstNode() { result = c } + override string getIdTag() { result = "exit" } + override string toString() { result = "Exit" } } From 7871cd74f6057de9b72677699269ae1b2c485f37 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 9 Feb 2026 14:27:07 +0100 Subject: [PATCH 170/243] Java: Fix switchcase guards. --- .../semmle/code/java/controlflow/Guards.qll | 88 ++----------------- 1 file changed, 5 insertions(+), 83 deletions(-) diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index 49cd0d189414..5c0d0666f155 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -10,6 +10,7 @@ private import semmle.code.java.controlflow.Dominance private import semmle.code.java.controlflow.internal.Preconditions private import semmle.code.java.controlflow.internal.SwitchCases private import codeql.controlflow.Guards as SharedGuards +private import codeql.controlflow.SuccessorType /** * A basic block that terminates in a condition, splitting the subsequent control flow. @@ -75,70 +76,6 @@ class ConditionBlock extends BasicBlock { } } -// Join order engineering -- first determine the switch block and the case indices required, then retrieve them. -bindingset[switch, i] -pragma[inline_late] -private predicate isNthCaseOf(SwitchBlock switch, SwitchCase c, int i) { c.isNthCaseOf(switch, i) } - -/** - * Gets a switch case >= pred, up to but not including `pred`'s successor pattern case, - * where `pred` is declared on `switch`. - */ -private SwitchCase getACaseUpToNextPattern(PatternCase pred, SwitchBlock switch) { - // Note we do include `case null, default` (as well as plain old `default`) here. - not result.(ConstCase).getValue(_) instanceof NullLiteral and - exists(int maxCaseIndex | - switch = pred.getParent() and - if exists(getNextPatternCase(pred)) - then maxCaseIndex = getNextPatternCase(pred).getCaseIndex() - 1 - else maxCaseIndex = lastCaseIndex(switch) - | - isNthCaseOf(switch, result, [pred.getCaseIndex() .. maxCaseIndex]) - ) -} - -/** - * Gets the closest pattern case preceding `case`, including `case` itself, if any. - */ -private PatternCase getClosestPrecedingPatternCase(SwitchCase case) { - case = getACaseUpToNextPattern(result, _) -} - -/** - * Holds if `pred` is a control-flow predecessor of switch case `sc` that is not a - * fall-through from a previous case. - * - * For classic switches that means flow from the selector expression; for switches - * involving pattern cases it can also mean flow from a previous pattern case's type - * test or guard failing and proceeding to then consider subsequent cases. - */ -private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pred) { - pred = sc.getControlFlowNode().getAPredecessor() and - ( - pred.asExpr().getParent*() = sc.getSelectorExpr() - or - // Ambiguous: in the case of `case String _ when x: case "SomeConstant":`, the guard `x` - // passing edge will fall through into the constant case, and the guard failing edge - // will test if the selector equals `"SomeConstant"` and if so branch to the same - // case statement. Therefore don't label this a non-fall-through predecessor. - exists(PatternCase previousPatternCase | - previousPatternCase = getClosestPrecedingPatternCase(sc) - | - pred.asExpr().getParent*() = previousPatternCase.getGuard() and - // Check there is any statement in between the previous pattern case and this one, - // or the case is a rule, so there is no chance of a fall-through. - ( - previousPatternCase.isRule() or - not previousPatternCase.getIndex() = sc.getIndex() - 1 - ) - ) - or - // Unambigious: on the test-passing edge there must be at least one intervening - // declaration node, including anonymous `_` declarations. - pred.asStmt() = getClosestPrecedingPatternCase(sc) - ) -} - private module GuardsInput implements SharedGuards::InputSig { private import java as J private import semmle.code.java.dataflow.internal.BaseSSA as Base @@ -231,29 +168,14 @@ private module GuardsInput implements SharedGuards::InputSig Date: Tue, 10 Feb 2026 14:33:50 +0100 Subject: [PATCH 171/243] Java: Adjust BasicBlock-based qltests. --- java/ql/lib/utils/test/BasicBlock.qll | 40 +++++++++++++++++++ .../controlflow/basic/bbStrictDominance.ql | 3 +- .../controlflow/basic/bbSuccessor.ql | 3 +- .../controlflow/basic/bbStrictDominance.ql | 3 +- .../controlflow/basic/bbSuccessor.ql | 3 +- .../controlflow/basic/bbStrictDominance.ql | 3 +- .../controlflow/basic/bbSuccessor.ql | 3 +- java/ql/test/library-tests/guards/guards.ql | 3 +- .../test/library-tests/guards/guardslogic.ql | 3 +- .../guards/guardspreconditions.ql | 3 +- 10 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 java/ql/lib/utils/test/BasicBlock.qll diff --git a/java/ql/lib/utils/test/BasicBlock.qll b/java/ql/lib/utils/test/BasicBlock.qll new file mode 100644 index 000000000000..c1f31f791825 --- /dev/null +++ b/java/ql/lib/utils/test/BasicBlock.qll @@ -0,0 +1,40 @@ +/** + * Provides utilities for working with basic blocks in tests. + */ +overlay[local?] +module; + +import java +import codeql.util.Boolean + +private predicate entryOrExit(ControlFlowNode n) { + n instanceof ControlFlow::EntryNode or + n instanceof ControlFlow::AnnotatedExitNode or + n instanceof ControlFlow::ExitNode +} + +/** Gets the first AST node in the basic block `bb`, if any. */ +ControlFlowNode getFirstAstNode(BasicBlock bb) { result = getFirstAstNode(bb, false) } + +/** + * Gets the first AST node in the basic block `bb`, if any. Otherwise, gets + * the first synthetic node. + */ +ControlFlowNode getFirstAstNodeOrSynth(BasicBlock bb) { result = getFirstAstNode(bb, true) } + +private ControlFlowNode getFirstAstNode(BasicBlock bb, Boolean allowSynthetic) { + result = + min(ControlFlowNode n, int i, int astOrder | + bb.getNode(i) = n and + if n.injects(_) + then astOrder = 0 + else + if entryOrExit(n) + then astOrder = 1 + else ( + allowSynthetic = true and astOrder = 2 + ) + | + n order by astOrder, i + ) +} diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.ql b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.ql index de1e23b649cc..72de0cc435d3 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.ql +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.ql @@ -1,6 +1,7 @@ import java import semmle.code.java.controlflow.Dominance +import utils.test.BasicBlock from BasicBlock b, BasicBlock b2 where b.strictlyDominates(b2) -select b, b2 +select getFirstAstNode(b), getFirstAstNode(b2) diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.ql b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.ql index ae2d8a393b47..ae8dc5d188d6 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.ql +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.ql @@ -1,5 +1,6 @@ import java +import utils.test.BasicBlock from BasicBlock b, BasicBlock b2 where b.getASuccessor() = b2 -select b, b2 +select getFirstAstNodeOrSynth(b), getFirstAstNodeOrSynth(b2) diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.ql b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.ql index de1e23b649cc..72de0cc435d3 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.ql +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.ql @@ -1,6 +1,7 @@ import java import semmle.code.java.controlflow.Dominance +import utils.test.BasicBlock from BasicBlock b, BasicBlock b2 where b.strictlyDominates(b2) -select b, b2 +select getFirstAstNode(b), getFirstAstNode(b2) diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.ql b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.ql index ae2d8a393b47..ae8dc5d188d6 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.ql +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.ql @@ -1,5 +1,6 @@ import java +import utils.test.BasicBlock from BasicBlock b, BasicBlock b2 where b.getASuccessor() = b2 -select b, b2 +select getFirstAstNodeOrSynth(b), getFirstAstNodeOrSynth(b2) diff --git a/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.ql b/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.ql index de1e23b649cc..72de0cc435d3 100644 --- a/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.ql +++ b/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.ql @@ -1,6 +1,7 @@ import java import semmle.code.java.controlflow.Dominance +import utils.test.BasicBlock from BasicBlock b, BasicBlock b2 where b.strictlyDominates(b2) -select b, b2 +select getFirstAstNode(b), getFirstAstNode(b2) diff --git a/java/ql/test/library-tests/controlflow/basic/bbSuccessor.ql b/java/ql/test/library-tests/controlflow/basic/bbSuccessor.ql index ae2d8a393b47..ae8dc5d188d6 100644 --- a/java/ql/test/library-tests/controlflow/basic/bbSuccessor.ql +++ b/java/ql/test/library-tests/controlflow/basic/bbSuccessor.ql @@ -1,5 +1,6 @@ import java +import utils.test.BasicBlock from BasicBlock b, BasicBlock b2 where b.getASuccessor() = b2 -select b, b2 +select getFirstAstNodeOrSynth(b), getFirstAstNodeOrSynth(b2) diff --git a/java/ql/test/library-tests/guards/guards.ql b/java/ql/test/library-tests/guards/guards.ql index e2d80a4e7387..21a23534ed66 100644 --- a/java/ql/test/library-tests/guards/guards.ql +++ b/java/ql/test/library-tests/guards/guards.ql @@ -1,8 +1,9 @@ import java import semmle.code.java.controlflow.Guards +import utils.test.BasicBlock from ConditionBlock cb, boolean testIsTrue, BasicBlock controlled where cb.controls(controlled, testIsTrue) and cb.getEnclosingCallable().getDeclaringType().hasName("Test") -select cb.getCondition(), testIsTrue, controlled +select cb.getCondition(), testIsTrue, getFirstAstNode(controlled) diff --git a/java/ql/test/library-tests/guards/guardslogic.ql b/java/ql/test/library-tests/guards/guardslogic.ql index f2ce9fdaa365..e68be505ff71 100644 --- a/java/ql/test/library-tests/guards/guardslogic.ql +++ b/java/ql/test/library-tests/guards/guardslogic.ql @@ -1,9 +1,10 @@ import java import semmle.code.java.controlflow.Guards +import utils.test.BasicBlock from Guard g, BasicBlock bb, GuardValue gv where g.valueControls(bb, gv) and g.getEnclosingCallable().getDeclaringType().hasName("Logic") and (exists(gv.asBooleanValue()) or gv.isThrowsException() or gv.getDualValue().isThrowsException()) -select g, gv, bb +select g, gv, getFirstAstNode(bb) diff --git a/java/ql/test/library-tests/guards/guardspreconditions.ql b/java/ql/test/library-tests/guards/guardspreconditions.ql index 77e4a4e48c08..849ee6087bf8 100644 --- a/java/ql/test/library-tests/guards/guardspreconditions.ql +++ b/java/ql/test/library-tests/guards/guardspreconditions.ql @@ -1,9 +1,10 @@ import java import semmle.code.java.controlflow.Guards +import utils.test.BasicBlock from Guard g, BasicBlock bb, GuardValue gv where g.valueControls(bb, gv) and g.getEnclosingCallable().getDeclaringType().hasName("Preconditions") and (gv.isThrowsException() or gv.getDualValue().isThrowsException()) -select g, gv, bb +select g, gv, getFirstAstNode(bb) From fb2799bd475cd14b33562a5fb5f0d41295029cc1 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 16 Feb 2026 14:42:32 +0100 Subject: [PATCH 172/243] Java: Adjust idominance tests. --- .../library-tests/controlflow/dominance/dominator.expected | 5 +++-- .../library-tests/controlflow/dominance/dominator.ql | 3 ++- .../library-tests/controlflow/dominance/dominator.expected | 5 +++-- .../library-tests/controlflow/dominance/dominator.ql | 3 ++- .../library-tests/controlflow/dominance/dominator.expected | 6 ++++-- .../test/library-tests/controlflow/dominance/dominator.ql | 3 ++- 6 files changed, 16 insertions(+), 9 deletions(-) diff --git a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected index cdbc573a0e53..3288b521887f 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.expected @@ -1,20 +1,21 @@ -| Test.kt:2:2:79:2 | Normal Exit | Test.kt:2:2:79:2 | Exit | | Test.kt:2:43:79:2 | { ... } | Test.kt:11:3:16:3 | ... -> ... | | Test.kt:2:43:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | | Test.kt:2:43:79:2 | { ... } | Test.kt:18:3:18:3 | ; | | Test.kt:18:3:18:3 | ; | Test.kt:2:2:79:2 | Normal Exit | | Test.kt:18:3:18:3 | ; | Test.kt:21:3:24:11 | ... -> ... | | Test.kt:18:3:18:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] | | Test.kt:22:4:22:4 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:22:4:22:4 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:38:10:38:10 | x | | Test.kt:38:10:38:10 | x | Test.kt:38:17:41:3 | { ... } | | Test.kt:38:10:38:10 | x | Test.kt:43:3:43:3 | ; | -| Test.kt:81:2:98:2 | Normal Exit | Test.kt:81:2:98:2 | Exit | | Test.kt:81:25:98:2 | { ... } | Test.kt:86:9:86:12 | true | +| Test.kt:86:9:86:12 | true | Test.kt:88:8:88:14 | After ... > ... [false] | | Test.kt:86:9:86:12 | true | Test.kt:88:17:91:4 | { ... } | | Test.kt:86:9:86:12 | true | Test.kt:92:4:93:9 | ; | | Test.kt:92:4:93:9 | ; | Test.kt:81:2:98:2 | Normal Exit | | Test.kt:92:4:93:9 | ; | Test.kt:93:5:93:9 | break | | Test.kt:92:4:93:9 | ; | Test.kt:94:4:95:12 | ; | +| Test.kt:94:4:95:12 | ; | Test.kt:94:8:94:14 | After ... (value equals) ... [false] | | Test.kt:94:4:95:12 | ; | Test.kt:95:12:95:12 | c | diff --git a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql index b157cb5fca3d..7fc18484febf 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql +++ b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominator.ql @@ -1,8 +1,9 @@ import java +import utils.test.BasicBlock from Method func, BasicBlock dominator, BasicBlock bb where dominator.immediatelyDominates(bb) and dominator.getEnclosingCallable() = func and func.getDeclaringType().hasName("Test") -select dominator, bb +select getFirstAstNodeOrSynth(dominator), getFirstAstNodeOrSynth(bb) diff --git a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected index 7b3908b4b5d2..6084c631b9df 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.expected @@ -1,20 +1,21 @@ -| Test.kt:2:2:79:2 | Normal Exit | Test.kt:2:2:79:2 | Exit | | Test.kt:2:43:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | | Test.kt:2:43:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... | | Test.kt:2:43:79:2 | { ... } | Test.kt:18:3:18:20 | ; | | Test.kt:18:3:18:20 | ; | Test.kt:2:2:79:2 | Normal Exit | | Test.kt:18:3:18:20 | ; | Test.kt:22:4:22:9 | ; | | Test.kt:18:3:18:20 | ; | Test.kt:24:4:24:11 | ... -> ... | +| Test.kt:22:4:22:9 | ; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] | | Test.kt:22:4:22:9 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:22:4:22:9 | ; | Test.kt:35:3:35:8 | ; | | Test.kt:35:3:35:8 | ; | Test.kt:38:10:38:10 | x | | Test.kt:38:10:38:10 | x | Test.kt:38:17:41:3 | { ... } | | Test.kt:38:10:38:10 | x | Test.kt:43:3:43:15 | ; | -| Test.kt:81:2:98:2 | Normal Exit | Test.kt:81:2:98:2 | Exit | | Test.kt:81:25:98:2 | { ... } | Test.kt:86:9:86:12 | true | +| Test.kt:86:9:86:12 | true | Test.kt:88:8:88:14 | After ... > ... [false] | | Test.kt:86:9:86:12 | true | Test.kt:88:17:91:4 | { ... } | | Test.kt:86:9:86:12 | true | Test.kt:92:4:93:9 | ; | | Test.kt:92:4:93:9 | ; | Test.kt:81:2:98:2 | Normal Exit | | Test.kt:92:4:93:9 | ; | Test.kt:93:5:93:9 | break | | Test.kt:92:4:93:9 | ; | Test.kt:94:4:95:12 | ; | +| Test.kt:94:4:95:12 | ; | Test.kt:94:8:94:14 | After ... (value equals) ... [false] | | Test.kt:94:4:95:12 | ; | Test.kt:95:12:95:12 | c | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql index b157cb5fca3d..7fc18484febf 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql +++ b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominator.ql @@ -1,8 +1,9 @@ import java +import utils.test.BasicBlock from Method func, BasicBlock dominator, BasicBlock bb where dominator.immediatelyDominates(bb) and dominator.getEnclosingCallable() = func and func.getDeclaringType().hasName("Test") -select dominator, bb +select getFirstAstNodeOrSynth(dominator), getFirstAstNodeOrSynth(bb) diff --git a/java/ql/test/library-tests/controlflow/dominance/dominator.expected b/java/ql/test/library-tests/controlflow/dominance/dominator.expected index e7eafe4ecaee..9836d4eed50c 100644 --- a/java/ql/test/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test/library-tests/controlflow/dominance/dominator.expected @@ -1,10 +1,10 @@ -| Test.java:2:6:2:9 | Normal Exit | Test.java:2:6:2:9 | Exit | | Test.java:2:32:72:2 | { ... } | Test.java:7:14:10:3 | { ... } | | Test.java:2:32:72:2 | { ... } | Test.java:10:10:12:3 | { ... } | | Test.java:2:32:72:2 | { ... } | Test.java:14:3:14:20 | ; | | Test.java:14:3:14:20 | ; | Test.java:2:6:2:9 | Normal Exit | | Test.java:14:3:14:20 | ; | Test.java:18:4:18:10 | ; | | Test.java:14:3:14:20 | ; | Test.java:20:11:20:11 | z | +| Test.java:18:4:18:10 | ; | Test.java:26:7:26:12 | After ... == ... [false] | | Test.java:18:4:18:10 | ; | Test.java:26:15:29:3 | { ... } | | Test.java:18:4:18:10 | ; | Test.java:31:3:31:9 | ; | | Test.java:31:3:31:9 | ; | Test.java:34:10:34:10 | x | @@ -14,6 +14,7 @@ | Test.java:42:15:42:15 | j | Test.java:42:28:45:3 | { ... } | | Test.java:42:15:42:15 | j | Test.java:47:3:47:9 | ; | | Test.java:47:3:47:9 | ; | Test.java:50:15:50:15 | j | +| Test.java:50:15:50:15 | j | Test.java:50:15:50:20 | After ... < ... [false] | | Test.java:50:15:50:15 | j | Test.java:50:28:64:3 | { ... } | | Test.java:50:15:50:15 | j | Test.java:66:3:66:17 | ; | | Test.java:50:28:64:3 | { ... } | Test.java:50:23:50:23 | j | @@ -21,11 +22,12 @@ | Test.java:50:28:64:3 | { ... } | Test.java:59:9:62:4 | { ... } | | Test.java:53:5:53:14 | if (...) | Test.java:53:16:56:5 | { ... } | | Test.java:53:5:53:14 | if (...) | Test.java:56:12:58:5 | { ... } | -| Test.java:74:6:74:10 | Normal Exit | Test.java:74:6:74:10 | Exit | | Test.java:74:19:91:2 | { ... } | Test.java:79:9:79:12 | true | +| Test.java:79:9:79:12 | true | Test.java:81:8:81:14 | After ... > ... [false] | | Test.java:79:9:79:12 | true | Test.java:81:17:84:4 | { ... } | | Test.java:79:9:79:12 | true | Test.java:85:4:85:15 | if (...) | | Test.java:85:4:85:15 | if (...) | Test.java:74:6:74:10 | Normal Exit | | Test.java:85:4:85:15 | if (...) | Test.java:86:5:86:10 | break | | Test.java:85:4:85:15 | if (...) | Test.java:87:4:87:15 | if (...) | +| Test.java:87:4:87:15 | if (...) | Test.java:87:8:87:14 | After ... == ... [false] | | Test.java:87:4:87:15 | if (...) | Test.java:88:12:88:12 | c | diff --git a/java/ql/test/library-tests/controlflow/dominance/dominator.ql b/java/ql/test/library-tests/controlflow/dominance/dominator.ql index b157cb5fca3d..7fc18484febf 100644 --- a/java/ql/test/library-tests/controlflow/dominance/dominator.ql +++ b/java/ql/test/library-tests/controlflow/dominance/dominator.ql @@ -1,8 +1,9 @@ import java +import utils.test.BasicBlock from Method func, BasicBlock dominator, BasicBlock bb where dominator.immediatelyDominates(bb) and dominator.getEnclosingCallable() = func and func.getDeclaringType().hasName("Test") -select dominator, bb +select getFirstAstNodeOrSynth(dominator), getFirstAstNodeOrSynth(bb) From e0eb653dcc339930437c0c0c75bdb08cddb301f3 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 10 Feb 2026 14:52:36 +0100 Subject: [PATCH 173/243] Java: Accept guards test changes for revised switch CFG. --- java/ql/test/library-tests/guards/Guards.java | 10 +++++----- .../test/library-tests/guards/GuardsInline.expected | 11 ++++++++++- .../ql/test/library-tests/guards/guardslogic.expected | 8 +++++--- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/java/ql/test/library-tests/guards/Guards.java b/java/ql/test/library-tests/guards/Guards.java index 689795038c6e..35e3b7c09a9a 100644 --- a/java/ql/test/library-tests/guards/Guards.java +++ b/java/ql/test/library-tests/guards/Guards.java @@ -39,10 +39,10 @@ void t1(int[] a, String s) { chk(); // $ guarded='s:match "bar"' guarded='s:bar' break; case "foo": - chk(); // $ guarded='s:match "foo"' guarded='s:foo' guarded=g(3):false + chk(); // $ guarded='s:non-match "bar"' guarded='s:not bar' guarded='s:match "foo"' guarded='s:foo' guarded=g(3):false break; default: - chk(); // $ guarded='s:non-match "bar"' guarded='s:non-match "foo"' guarded='s:not bar' guarded='s:not foo' guarded='s:match default' guarded=g(3):false + chk(); // $ guarded='s:non-match "bar"' guarded='s:non-match "foo"' guarded='s:not bar' guarded='s:not foo' guarded=g(3):false break; } @@ -92,10 +92,10 @@ void t4() { chk(); // $ guarded='x:match E1' guarded='x:E1' guarded=g(1):true guarded=g(2):false guarded=g(Alt2):false guarded=g(3):false break; case E2: - chk(); // $ guarded='x:match E2' guarded='x:E2' guarded=g(3):false + chk(); // $ guarded='x:non-match E1' guarded='x:not E1' guarded='x:match E2' guarded='x:E2' guarded=g(3):false break; case E3: - chk(); // $ guarded='x:match E3' guarded='x:E3' guarded=g(3):true + chk(); // $ guarded='x:non-match E1' guarded='x:non-match E2' guarded='x:not E1' guarded='x:not E2' guarded='x:match E3' guarded='x:E3' guarded=g(3):true break; } Object o = g(4) ? new Object() : null; @@ -198,7 +198,7 @@ void testWrappers(String s, Integer i) { chk(); // $ guarded='testEnumWrapper(...):SUCCESS' guarded='testEnumWrapper(...):match SUCCESS' guarded=g(1):true break; case FAILURE: - chk(); // $ guarded='testEnumWrapper(...):FAILURE' guarded='testEnumWrapper(...):match FAILURE' guarded=g(1):false + chk(); // $ guarded='testEnumWrapper(...):not SUCCESS' guarded='testEnumWrapper(...):non-match SUCCESS' guarded='testEnumWrapper(...):FAILURE' guarded='testEnumWrapper(...):match FAILURE' guarded=g(1):false break; } } diff --git a/java/ql/test/library-tests/guards/GuardsInline.expected b/java/ql/test/library-tests/guards/GuardsInline.expected index b0bd3b04c62d..9d5ea1992c69 100644 --- a/java/ql/test/library-tests/guards/GuardsInline.expected +++ b/java/ql/test/library-tests/guards/GuardsInline.expected @@ -18,8 +18,9 @@ | Guards.java:39:9:39:13 | chk(...) | 's:match "bar"' | | Guards.java:42:9:42:13 | chk(...) | 's:foo' | | Guards.java:42:9:42:13 | chk(...) | 's:match "foo"' | +| Guards.java:42:9:42:13 | chk(...) | 's:non-match "bar"' | +| Guards.java:42:9:42:13 | chk(...) | 's:not bar' | | Guards.java:42:9:42:13 | chk(...) | g(3):false | -| Guards.java:45:9:45:13 | chk(...) | 's:match default' | | Guards.java:45:9:45:13 | chk(...) | 's:non-match "bar"' | | Guards.java:45:9:45:13 | chk(...) | 's:non-match "foo"' | | Guards.java:45:9:45:13 | chk(...) | 's:not bar' | @@ -61,9 +62,15 @@ | Guards.java:92:9:92:13 | chk(...) | g(Alt2):false | | Guards.java:95:9:95:13 | chk(...) | 'x:E2' | | Guards.java:95:9:95:13 | chk(...) | 'x:match E2' | +| Guards.java:95:9:95:13 | chk(...) | 'x:non-match E1' | +| Guards.java:95:9:95:13 | chk(...) | 'x:not E1' | | Guards.java:95:9:95:13 | chk(...) | g(3):false | | Guards.java:98:9:98:13 | chk(...) | 'x:E3' | | Guards.java:98:9:98:13 | chk(...) | 'x:match E3' | +| Guards.java:98:9:98:13 | chk(...) | 'x:non-match E1' | +| Guards.java:98:9:98:13 | chk(...) | 'x:non-match E2' | +| Guards.java:98:9:98:13 | chk(...) | 'x:not E1' | +| Guards.java:98:9:98:13 | chk(...) | 'x:not E2' | | Guards.java:98:9:98:13 | chk(...) | g(3):true | | Guards.java:103:7:103:11 | chk(...) | '...?...:...:null' | | Guards.java:103:7:103:11 | chk(...) | 'o == null:true' | @@ -113,6 +120,8 @@ | Guards.java:198:9:198:13 | chk(...) | g(1):true | | Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):FAILURE' | | Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):match FAILURE' | +| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):non-match SUCCESS' | +| Guards.java:201:9:201:13 | chk(...) | 'testEnumWrapper(...):not SUCCESS' | | Guards.java:201:9:201:13 | chk(...) | g(1):false | | Guards.java:213:5:213:9 | chk(...) | 'ensureNotNull(...):no exception' | | Guards.java:213:5:213:9 | chk(...) | 's:not null' | diff --git a/java/ql/test/library-tests/guards/guardslogic.expected b/java/ql/test/library-tests/guards/guardslogic.expected index 6bf536d3ce1c..f186c385b8ce 100644 --- a/java/ql/test/library-tests/guards/guardslogic.expected +++ b/java/ql/test/library-tests/guards/guardslogic.expected @@ -19,13 +19,15 @@ | Logic.java:17:11:17:15 | ... > ... | false | Logic.java:15:29:15:29 | i | | Logic.java:17:11:17:15 | ... > ... | true | Logic.java:17:18:17:23 | break | | Logic.java:19:9:19:12 | g(...) | false | Logic.java:24:7:24:17 | case ... | +| Logic.java:19:9:19:12 | g(...) | false | Logic.java:24:12:24:16 | "foo" | | Logic.java:19:9:19:12 | g(...) | false | Logic.java:26:7:26:14 | default | | Logic.java:19:9:19:12 | g(...) | true | Logic.java:20:7:20:16 | ; | +| Logic.java:22:7:22:17 | case ... | false | Logic.java:24:7:24:17 | case ... | +| Logic.java:22:7:22:17 | case ... | false | Logic.java:24:12:24:16 | "foo" | | Logic.java:22:7:22:17 | case ... | false | Logic.java:26:7:26:14 | default | -| Logic.java:22:7:22:17 | case ... | true | Logic.java:22:7:22:17 | case ... | +| Logic.java:22:7:22:17 | case ... | true | Logic.java:22:12:22:16 | "bar" | | Logic.java:24:7:24:17 | case ... | false | Logic.java:26:7:26:14 | default | -| Logic.java:24:7:24:17 | case ... | true | Logic.java:24:7:24:17 | case ... | -| Logic.java:26:7:26:14 | default | true | Logic.java:26:7:26:14 | default | +| Logic.java:24:7:24:17 | case ... | true | Logic.java:24:12:24:16 | "foo" | | Logic.java:29:16:29:19 | g(...) | false | Logic.java:29:30:29:30 | s | | Logic.java:29:16:29:19 | g(...) | false | Logic.java:30:30:31:5 | { ... } | | Logic.java:29:16:29:19 | g(...) | true | Logic.java:29:23:29:26 | null | From 6ac8c4f544aee11ccfe62d8af451cffcbfa05793 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 10 Feb 2026 14:59:52 +0100 Subject: [PATCH 174/243] Java: Accept test changes due to pruned CFG, after-nodes, and reduced exception precision. --- .../basic/bbStrictDominance.expected | 19 ++++----- .../controlflow/basic/bbSuccessor.expected | 41 +++++++++++-------- .../basic/bbStrictDominance.expected | 19 ++++----- .../controlflow/basic/bbSuccessor.expected | 41 +++++++++++-------- .../basic/bbStrictDominance.expected | 4 -- .../controlflow/basic/bbSuccessor.expected | 10 ++--- 6 files changed, 66 insertions(+), 68 deletions(-) diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.expected index 6d0cb2bab712..bac6b7224475 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.expected @@ -1,6 +1,3 @@ -| Test.kt:3:8:80:1 | { ... } | Test.kt:3:8:80:1 | Exit | -| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit | -| Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Exit | | Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Normal Exit | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:3:16:3 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | @@ -12,7 +9,6 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:38:9:38:9 | x | | Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:3 | ; | -| Test.kt:18:3:18:3 | ; | Test.kt:4:2:79:2 | Exit | | Test.kt:18:3:18:3 | ; | Test.kt:4:2:79:2 | Normal Exit | | Test.kt:18:3:18:3 | ; | Test.kt:21:3:24:9 | ... -> ... | | Test.kt:18:3:18:3 | ; | Test.kt:22:4:22:4 | ; | @@ -31,16 +27,22 @@ | Test.kt:35:3:35:3 | ; | Test.kt:43:3:43:3 | ; | | Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } | | Test.kt:38:9:38:9 | x | Test.kt:43:3:43:3 | ; | -| Test.kt:82:1:89:1 | Normal Exit | Test.kt:82:1:89:1 | Exit | +| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exceptional Exit | | Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exit | | Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Normal Exit | | Test.kt:82:21:89:1 | { ... } | Test.kt:84:7:84:7 | x | | Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) | -| Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit | +| Test.kt:82:21:89:1 | { ... } | Test.kt:86:11:86:31 | e | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e | +| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exceptional Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Normal Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:93:7:93:7 | x | | Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) | +| Test.kt:91:22:98:1 | { ... } | Test.kt:95:11:95:33 | e | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e | | Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Exit | | Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Normal Exit | | Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y | @@ -55,16 +57,11 @@ | Test.kt:105:5:109:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:105:5:109:5 | ; | Test.kt:107:27:109:5 | { ... } | | Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | -| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Exit | | Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:17:115:5 | { ... } | | Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } | -| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit | -| Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Exit | | Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Normal Exit | | Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | ; | | Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... | | Test.kt:118:37:124:1 | { ... } | Test.kt:123:8:123:10 | { ... } | -| Test.kt:121:9:121:9 | ; | Test.kt:123:8:123:10 | { ... } | diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.expected index cf5da7c83b77..0596f159e223 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.expected @@ -1,7 +1,3 @@ -| Test.kt:3:8:80:1 | Exceptional Exit | Test.kt:3:8:80:1 | Exit | -| Test.kt:3:8:80:1 | { ... } | Test.kt:3:8:80:1 | Exit | -| Test.kt:4:2:79:2 | Exceptional Exit | Test.kt:4:2:79:2 | Exit | -| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:3:16:3 | ... -> ... | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | | Test.kt:11:3:16:3 | ... -> ... | Test.kt:18:3:18:3 | ; | @@ -9,8 +5,9 @@ | Test.kt:18:3:18:3 | ; | Test.kt:21:3:24:9 | ... -> ... | | Test.kt:18:3:18:3 | ; | Test.kt:22:4:22:4 | ; | | Test.kt:21:3:24:9 | ... -> ... | Test.kt:4:2:79:2 | Normal Exit | +| Test.kt:22:4:22:4 | ; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] | | Test.kt:22:4:22:4 | ; | Test.kt:30:15:33:3 | { ... } | -| Test.kt:22:4:22:4 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | Test.kt:35:3:35:3 | ; | | Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:3 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:38:9:38:9 | x | | Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } | @@ -22,37 +19,45 @@ | Test.kt:82:21:89:1 | { ... } | Test.kt:84:7:84:7 | x | | Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) | | Test.kt:84:7:84:7 | x | Test.kt:82:1:89:1 | Normal Exit | -| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Normal Exit | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e | +| Test.kt:86:11:86:31 | e | Test.kt:82:1:89:1 | Normal Exit | | Test.kt:91:1:98:1 | Exceptional Exit | Test.kt:91:1:98:1 | Exit | | Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:93:7:93:7 | x | | Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) | | Test.kt:93:7:93:7 | x | Test.kt:91:1:98:1 | Normal Exit | -| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Normal Exit | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e | +| Test.kt:95:11:95:33 | e | Test.kt:91:1:98:1 | Normal Exit | | Test.kt:100:1:110:1 | Normal Exit | Test.kt:100:1:110:1 | Exit | +| Test.kt:100:25:110:1 | { ... } | Test.kt:101:9:101:17 | After ... (value equals) ... [false] | | Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y | -| Test.kt:100:25:110:1 | { ... } | Test.kt:105:5:109:5 | ; | +| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | ; | +| Test.kt:101:22:101:22 | y | Test.kt:101:22:101:30 | After ... (value equals) ... [false] | | Test.kt:101:22:101:22 | y | Test.kt:101:33:103:5 | { ... } | -| Test.kt:101:22:101:22 | y | Test.kt:105:5:109:5 | ; | +| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | ; | | Test.kt:101:33:103:5 | { ... } | Test.kt:100:1:110:1 | Exit | | Test.kt:105:5:109:5 | ; | Test.kt:105:20:107:5 | { ... } | | Test.kt:105:5:109:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:105:20:107:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit | -| Test.kt:107:16:109:5 | ... -> ... | Test.kt:100:1:110:1 | Normal Exit | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | Test.kt:100:1:110:1 | Normal Exit | +| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | | Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | | Test.kt:107:27:109:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit | -| Test.kt:112:1:116:1 | Exceptional Exit | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:112:32:116:1 | { ... } | Test.kt:113:9:113:9 | After x [false] | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y | -| Test.kt:113:14:113:14 | y | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:113:9:113:9 | After x [false] | Test.kt:113:9:113:14 | After ... && ... [false] | +| Test.kt:113:9:113:14 | After ... && ... [false] | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:113:14:113:14 | After y [false] | Test.kt:113:9:113:14 | After ... && ... [false] | +| Test.kt:113:14:113:14 | y | Test.kt:113:14:113:14 | After y [false] | | Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } | | Test.kt:113:17:115:5 | { ... } | Test.kt:112:1:116:1 | Normal Exit | -| Test.kt:118:1:124:1 | Exceptional Exit | Test.kt:118:1:124:1 | Exit | -| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit | | Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | ; | | Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... | -| Test.kt:121:9:121:9 | ; | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:120:3:123:3 | After when ... [false] | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:121:9:121:9 | ; | Test.kt:120:3:123:3 | After when ... [false] | | Test.kt:121:9:121:9 | ; | Test.kt:123:8:123:10 | { ... } | -| Test.kt:122:12:122:16 | ... -> ... | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:122:12:122:16 | ... -> ... | Test.kt:120:3:123:3 | After when ... [false] | +| Test.kt:122:12:122:16 | ... -> ... | Test.kt:123:8:123:10 | { ... } | | Test.kt:123:8:123:10 | { ... } | Test.kt:118:1:124:1 | Normal Exit | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected index c7e225ecc6f4..a4a9b68d4041 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStrictDominance.expected @@ -1,6 +1,3 @@ -| Test.kt:3:1:80:1 | { ... } | Test.kt:3:1:80:1 | Exit | -| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit | -| Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Exit | | Test.kt:4:13:79:2 | { ... } | Test.kt:4:2:79:2 | Normal Exit | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... | @@ -12,7 +9,6 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:38:9:38:9 | x | | Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:8 | ; | -| Test.kt:18:3:18:7 | ; | Test.kt:4:2:79:2 | Exit | | Test.kt:18:3:18:7 | ; | Test.kt:4:2:79:2 | Normal Exit | | Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:24:4:24:9 | ... -> ... | @@ -31,16 +27,22 @@ | Test.kt:35:3:35:8 | ; | Test.kt:43:3:43:8 | ; | | Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } | | Test.kt:38:9:38:9 | x | Test.kt:43:3:43:8 | ; | -| Test.kt:82:1:89:1 | Normal Exit | Test.kt:82:1:89:1 | Exit | +| Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exceptional Exit | | Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Exit | | Test.kt:82:21:89:1 | { ... } | Test.kt:82:1:89:1 | Normal Exit | | Test.kt:82:21:89:1 | { ... } | Test.kt:84:3:84:18 | x | | Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) | -| Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit | +| Test.kt:82:21:89:1 | { ... } | Test.kt:86:11:86:31 | e | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e | +| Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exceptional Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:91:1:98:1 | Normal Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:93:3:93:13 | x | | Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) | +| Test.kt:91:22:98:1 | { ... } | Test.kt:95:11:95:33 | e | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e | | Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Exit | | Test.kt:100:25:110:1 | { ... } | Test.kt:100:1:110:1 | Normal Exit | | Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y | @@ -55,16 +57,11 @@ | Test.kt:105:5:109:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:105:5:109:5 | ; | Test.kt:107:27:109:5 | { ... } | | Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | -| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Exit | | Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:17:115:5 | { ... } | | Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } | -| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit | -| Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Exit | | Test.kt:118:37:124:1 | { ... } | Test.kt:118:1:124:1 | Normal Exit | | Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | ; | | Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... | | Test.kt:118:37:124:1 | { ... } | Test.kt:123:8:123:10 | { ... } | -| Test.kt:121:9:121:9 | ; | Test.kt:123:8:123:10 | { ... } | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected index 219779e73dc7..060e3fcae70d 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbSuccessor.expected @@ -1,16 +1,13 @@ -| Test.kt:3:1:80:1 | Exceptional Exit | Test.kt:3:1:80:1 | Exit | -| Test.kt:3:1:80:1 | { ... } | Test.kt:3:1:80:1 | Exit | -| Test.kt:4:2:79:2 | Exceptional Exit | Test.kt:4:2:79:2 | Exit | -| Test.kt:4:2:79:2 | Normal Exit | Test.kt:4:2:79:2 | Exit | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:14:10:16:3 | ... -> ... | | Test.kt:11:14:14:3 | { ... } | Test.kt:18:3:18:7 | ; | | Test.kt:14:10:16:3 | ... -> ... | Test.kt:18:3:18:7 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:22:4:22:9 | ; | | Test.kt:18:3:18:7 | ; | Test.kt:24:4:24:9 | ... -> ... | +| Test.kt:22:4:22:9 | ; | Test.kt:30:7:30:12 | After ... (value equals) ... [false] | | Test.kt:22:4:22:9 | ; | Test.kt:30:15:33:3 | { ... } | -| Test.kt:22:4:22:9 | ; | Test.kt:35:3:35:8 | ; | | Test.kt:24:4:24:9 | ... -> ... | Test.kt:4:2:79:2 | Normal Exit | +| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | Test.kt:35:3:35:8 | ; | | Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:8 | ; | | Test.kt:35:3:35:8 | ; | Test.kt:38:9:38:9 | x | | Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } | @@ -22,37 +19,45 @@ | Test.kt:82:21:89:1 | { ... } | Test.kt:84:3:84:18 | x | | Test.kt:82:21:89:1 | { ... } | Test.kt:86:4:88:2 | catch (...) | | Test.kt:84:3:84:18 | x | Test.kt:82:1:89:1 | Normal Exit | -| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Normal Exit | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:82:1:89:1 | Exceptional Exit | +| Test.kt:86:4:88:2 | catch (...) | Test.kt:86:11:86:31 | e | +| Test.kt:86:11:86:31 | e | Test.kt:82:1:89:1 | Normal Exit | | Test.kt:91:1:98:1 | Exceptional Exit | Test.kt:91:1:98:1 | Exit | | Test.kt:91:1:98:1 | Normal Exit | Test.kt:91:1:98:1 | Exit | | Test.kt:91:22:98:1 | { ... } | Test.kt:93:3:93:13 | x | | Test.kt:91:22:98:1 | { ... } | Test.kt:95:4:97:2 | catch (...) | | Test.kt:93:3:93:13 | x | Test.kt:91:1:98:1 | Normal Exit | -| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Normal Exit | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:91:1:98:1 | Exceptional Exit | +| Test.kt:95:4:97:2 | catch (...) | Test.kt:95:11:95:33 | e | +| Test.kt:95:11:95:33 | e | Test.kt:91:1:98:1 | Normal Exit | | Test.kt:100:1:110:1 | Normal Exit | Test.kt:100:1:110:1 | Exit | +| Test.kt:100:25:110:1 | { ... } | Test.kt:101:9:101:17 | After ... (value equals) ... [false] | | Test.kt:100:25:110:1 | { ... } | Test.kt:101:22:101:22 | y | -| Test.kt:100:25:110:1 | { ... } | Test.kt:105:5:109:5 | ; | +| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | ; | +| Test.kt:101:22:101:22 | y | Test.kt:101:22:101:30 | After ... (value equals) ... [false] | | Test.kt:101:22:101:22 | y | Test.kt:101:33:103:5 | { ... } | -| Test.kt:101:22:101:22 | y | Test.kt:105:5:109:5 | ; | +| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | ; | | Test.kt:101:33:103:5 | { ... } | Test.kt:100:1:110:1 | Exit | | Test.kt:105:5:109:5 | ; | Test.kt:105:20:107:5 | { ... } | | Test.kt:105:5:109:5 | ; | Test.kt:107:16:109:5 | ... -> ... | | Test.kt:105:20:107:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit | -| Test.kt:107:16:109:5 | ... -> ... | Test.kt:100:1:110:1 | Normal Exit | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | Test.kt:100:1:110:1 | Normal Exit | +| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | | Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } | | Test.kt:107:27:109:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit | -| Test.kt:112:1:116:1 | Exceptional Exit | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:1:116:1 | Normal Exit | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:112:32:116:1 | { ... } | Test.kt:113:9:113:9 | After x [false] | | Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y | -| Test.kt:113:14:113:14 | y | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:113:9:113:9 | After x [false] | Test.kt:113:9:113:14 | After ... && ... [false] | +| Test.kt:113:9:113:14 | After ... && ... [false] | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:113:14:113:14 | After y [false] | Test.kt:113:9:113:14 | After ... && ... [false] | +| Test.kt:113:14:113:14 | y | Test.kt:113:14:113:14 | After y [false] | | Test.kt:113:14:113:14 | y | Test.kt:113:17:115:5 | { ... } | | Test.kt:113:17:115:5 | { ... } | Test.kt:112:1:116:1 | Normal Exit | -| Test.kt:118:1:124:1 | Exceptional Exit | Test.kt:118:1:124:1 | Exit | -| Test.kt:118:1:124:1 | Normal Exit | Test.kt:118:1:124:1 | Exit | | Test.kt:118:37:124:1 | { ... } | Test.kt:121:9:121:9 | ; | | Test.kt:118:37:124:1 | { ... } | Test.kt:122:12:122:16 | ... -> ... | -| Test.kt:121:9:121:9 | ; | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:120:3:123:3 | After when ... [false] | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:121:9:121:9 | ; | Test.kt:120:3:123:3 | After when ... [false] | | Test.kt:121:9:121:9 | ; | Test.kt:123:8:123:10 | { ... } | -| Test.kt:122:12:122:16 | ... -> ... | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:122:12:122:16 | ... -> ... | Test.kt:120:3:123:3 | After when ... [false] | +| Test.kt:122:12:122:16 | ... -> ... | Test.kt:123:8:123:10 | { ... } | | Test.kt:123:8:123:10 | { ... } | Test.kt:118:1:124:1 | Normal Exit | diff --git a/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.expected b/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.expected index be658fb29158..afa917bf12ca 100644 --- a/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.expected +++ b/java/ql/test/library-tests/controlflow/basic/bbStrictDominance.expected @@ -1,6 +1,3 @@ -| Test.java:3:14:3:17 | { ... } | Test.java:3:14:3:17 | Exit | -| Test.java:4:14:4:17 | Normal Exit | Test.java:4:14:4:17 | Exit | -| Test.java:4:21:76:2 | { ... } | Test.java:4:14:4:17 | Exit | | Test.java:4:21:76:2 | { ... } | Test.java:4:14:4:17 | Normal Exit | | Test.java:4:21:76:2 | { ... } | Test.java:11:14:14:3 | { ... } | | Test.java:4:21:76:2 | { ... } | Test.java:14:10:16:3 | { ... } | @@ -23,7 +20,6 @@ | Test.java:4:21:76:2 | { ... } | Test.java:60:12:62:5 | { ... } | | Test.java:4:21:76:2 | { ... } | Test.java:63:9:66:4 | { ... } | | Test.java:4:21:76:2 | { ... } | Test.java:70:3:70:9 | ; | -| Test.java:18:3:18:8 | ; | Test.java:4:14:4:17 | Exit | | Test.java:18:3:18:8 | ; | Test.java:4:14:4:17 | Normal Exit | | Test.java:18:3:18:8 | ; | Test.java:22:4:22:10 | ; | | Test.java:18:3:18:8 | ; | Test.java:24:4:24:10 | return ... | diff --git a/java/ql/test/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test/library-tests/controlflow/basic/bbSuccessor.expected index a6e5d8430c12..95799e5862b0 100644 --- a/java/ql/test/library-tests/controlflow/basic/bbSuccessor.expected +++ b/java/ql/test/library-tests/controlflow/basic/bbSuccessor.expected @@ -1,16 +1,13 @@ -| Test.java:3:14:3:17 | Exceptional Exit | Test.java:3:14:3:17 | Exit | -| Test.java:3:14:3:17 | { ... } | Test.java:3:14:3:17 | Exit | -| Test.java:4:14:4:17 | Exceptional Exit | Test.java:4:14:4:17 | Exit | -| Test.java:4:14:4:17 | Normal Exit | Test.java:4:14:4:17 | Exit | | Test.java:4:21:76:2 | { ... } | Test.java:11:14:14:3 | { ... } | | Test.java:4:21:76:2 | { ... } | Test.java:14:10:16:3 | { ... } | | Test.java:11:14:14:3 | { ... } | Test.java:18:3:18:8 | ; | | Test.java:14:10:16:3 | { ... } | Test.java:18:3:18:8 | ; | | Test.java:18:3:18:8 | ; | Test.java:22:4:22:10 | ; | | Test.java:18:3:18:8 | ; | Test.java:24:4:24:10 | return ... | +| Test.java:22:4:22:10 | ; | Test.java:30:7:30:12 | After ... == ... [false] | | Test.java:22:4:22:10 | ; | Test.java:30:15:33:3 | { ... } | -| Test.java:22:4:22:10 | ; | Test.java:35:3:35:9 | ; | | Test.java:24:4:24:10 | return ... | Test.java:4:14:4:17 | Normal Exit | +| Test.java:30:7:30:12 | After ... == ... [false] | Test.java:35:3:35:9 | ; | | Test.java:30:15:33:3 | { ... } | Test.java:35:3:35:9 | ; | | Test.java:35:3:35:9 | ; | Test.java:38:9:38:9 | x | | Test.java:38:9:38:9 | x | Test.java:38:16:41:3 | { ... } | @@ -21,8 +18,9 @@ | Test.java:46:18:46:18 | j | Test.java:51:3:51:9 | ; | | Test.java:46:31:49:3 | { ... } | Test.java:46:18:46:18 | j | | Test.java:51:3:51:9 | ; | Test.java:54:18:54:18 | j | +| Test.java:54:18:54:18 | j | Test.java:54:18:54:23 | After ... < ... [false] | | Test.java:54:18:54:18 | j | Test.java:54:31:68:3 | { ... } | -| Test.java:54:18:54:18 | j | Test.java:70:3:70:9 | ; | +| Test.java:54:18:54:23 | After ... < ... [false] | Test.java:70:3:70:9 | ; | | Test.java:54:26:54:26 | j | Test.java:54:18:54:18 | j | | Test.java:54:31:68:3 | { ... } | Test.java:57:5:57:13 | if (...) | | Test.java:54:31:68:3 | { ... } | Test.java:63:9:66:4 | { ... } | From a844d60174f90bd72109c3956509209e8f75a6c3 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 10 Feb 2026 15:26:17 +0100 Subject: [PATCH 175/243] Java: Accept new CFG nodes. --- .../controlflow/basic/bbStmts.expected | 575 ++++++++++++------ .../controlflow/basic/bbStmts.expected | 575 ++++++++++++------ .../controlflow/basic/bbStmts.expected | 434 ++++++++----- 3 files changed, 1051 insertions(+), 533 deletions(-) diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected index 116bde45f980..484fb5ea042e 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected @@ -1,205 +1,386 @@ -| Test.kt:3:8:80:1 | Exceptional Exit | 0 | Test.kt:3:8:80:1 | Exceptional Exit | -| Test.kt:3:8:80:1 | Exit | 0 | Test.kt:3:8:80:1 | Exit | -| Test.kt:3:8:80:1 | { ... } | 0 | Test.kt:3:8:80:1 | { ... } | -| Test.kt:3:8:80:1 | { ... } | 1 | Test.kt:3:1:80:1 | super(...) | -| Test.kt:3:8:80:1 | { ... } | 2 | Test.kt:3:8:80:1 | { ... } | -| Test.kt:3:8:80:1 | { ... } | 3 | Test.kt:3:8:80:1 | Normal Exit | -| Test.kt:4:2:79:2 | Exceptional Exit | 0 | Test.kt:4:2:79:2 | Exceptional Exit | -| Test.kt:4:2:79:2 | Exit | 0 | Test.kt:4:2:79:2 | Exit | +| Test.kt:3:8:80:1 | Entry | 0 | Test.kt:3:8:80:1 | Entry | +| Test.kt:3:8:80:1 | Entry | 1 | Test.kt:3:8:80:1 | { ... } | +| Test.kt:3:8:80:1 | Entry | 2 | Test.kt:3:1:80:1 | Before super(...) | +| Test.kt:3:8:80:1 | Entry | 3 | Test.kt:3:1:80:1 | super(...) | +| Test.kt:3:8:80:1 | Entry | 4 | Test.kt:3:1:80:1 | After super(...) | +| Test.kt:3:8:80:1 | Entry | 5 | Test.kt:3:8:80:1 | { ... } | +| Test.kt:3:8:80:1 | Entry | 6 | Test.kt:3:8:80:1 | After { ... } | +| Test.kt:3:8:80:1 | Entry | 7 | Test.kt:3:8:80:1 | Normal Exit | +| Test.kt:3:8:80:1 | Entry | 8 | Test.kt:3:8:80:1 | Exit | +| Test.kt:4:2:79:2 | Entry | 0 | Test.kt:4:2:79:2 | Entry | +| Test.kt:4:2:79:2 | Entry | 1 | Test.kt:4:13:79:2 | { ... } | +| Test.kt:4:2:79:2 | Entry | 2 | Test.kt:5:7:5:7 | var ...; | +| Test.kt:4:2:79:2 | Entry | 3 | Test.kt:5:7:5:7 | Before x | +| Test.kt:4:2:79:2 | Entry | 4 | Test.kt:5:16:5:16 | 0 | +| Test.kt:4:2:79:2 | Entry | 5 | Test.kt:5:7:5:7 | x | +| Test.kt:4:2:79:2 | Entry | 6 | Test.kt:5:7:5:7 | After x | +| Test.kt:4:2:79:2 | Entry | 7 | Test.kt:5:7:5:7 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 8 | Test.kt:6:7:6:7 | var ...; | +| Test.kt:4:2:79:2 | Entry | 9 | Test.kt:6:7:6:7 | Before y | +| Test.kt:4:2:79:2 | Entry | 10 | Test.kt:6:17:6:18 | 50 | +| Test.kt:4:2:79:2 | Entry | 11 | Test.kt:6:7:6:7 | y | +| Test.kt:4:2:79:2 | Entry | 12 | Test.kt:6:7:6:7 | After y | +| Test.kt:4:2:79:2 | Entry | 13 | Test.kt:6:7:6:7 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 14 | Test.kt:7:7:7:7 | var ...; | +| Test.kt:4:2:79:2 | Entry | 15 | Test.kt:7:7:7:7 | Before z | +| Test.kt:4:2:79:2 | Entry | 16 | Test.kt:7:16:7:16 | 0 | +| Test.kt:4:2:79:2 | Entry | 17 | Test.kt:7:7:7:7 | z | +| Test.kt:4:2:79:2 | Entry | 18 | Test.kt:7:7:7:7 | After z | +| Test.kt:4:2:79:2 | Entry | 19 | Test.kt:7:7:7:7 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 20 | Test.kt:8:7:8:7 | var ...; | +| Test.kt:4:2:79:2 | Entry | 21 | Test.kt:8:7:8:7 | Before w | +| Test.kt:4:2:79:2 | Entry | 22 | Test.kt:8:16:8:16 | 0 | +| Test.kt:4:2:79:2 | Entry | 23 | Test.kt:8:7:8:7 | w | +| Test.kt:4:2:79:2 | Entry | 24 | Test.kt:8:7:8:7 | After w | +| Test.kt:4:2:79:2 | Entry | 25 | Test.kt:8:7:8:7 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 26 | Test.kt:11:3:16:3 | ; | +| Test.kt:4:2:79:2 | Entry | 27 | Test.kt:11:3:16:3 | when ... | +| Test.kt:4:2:79:2 | Entry | 28 | Test.kt:11:3:16:3 | ... -> ... | +| Test.kt:4:2:79:2 | Entry | 29 | Test.kt:11:7:11:11 | Before ... > ... | +| Test.kt:4:2:79:2 | Entry | 30 | Test.kt:11:7:11:7 | x | +| Test.kt:4:2:79:2 | Entry | 31 | Test.kt:11:11:11:11 | 0 | +| Test.kt:4:2:79:2 | Entry | 32 | Test.kt:11:7:11:11 | ... > ... | | Test.kt:4:2:79:2 | Normal Exit | 0 | Test.kt:4:2:79:2 | Normal Exit | -| Test.kt:4:13:79:2 | { ... } | 0 | Test.kt:4:13:79:2 | { ... } | -| Test.kt:4:13:79:2 | { ... } | 1 | Test.kt:5:7:5:7 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 2 | Test.kt:5:16:5:16 | 0 | -| Test.kt:4:13:79:2 | { ... } | 3 | Test.kt:5:7:5:7 | x | -| Test.kt:4:13:79:2 | { ... } | 4 | Test.kt:6:7:6:7 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 5 | Test.kt:6:17:6:18 | 50 | -| Test.kt:4:13:79:2 | { ... } | 6 | Test.kt:6:7:6:7 | y | -| Test.kt:4:13:79:2 | { ... } | 7 | Test.kt:7:7:7:7 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 8 | Test.kt:7:16:7:16 | 0 | -| Test.kt:4:13:79:2 | { ... } | 9 | Test.kt:7:7:7:7 | z | -| Test.kt:4:13:79:2 | { ... } | 10 | Test.kt:8:7:8:7 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 11 | Test.kt:8:16:8:16 | 0 | -| Test.kt:4:13:79:2 | { ... } | 12 | Test.kt:8:7:8:7 | w | -| Test.kt:4:13:79:2 | { ... } | 13 | Test.kt:11:3:16:3 | ; | -| Test.kt:4:13:79:2 | { ... } | 14 | Test.kt:11:3:16:3 | when ... | -| Test.kt:4:13:79:2 | { ... } | 15 | Test.kt:11:3:16:3 | ... -> ... | -| Test.kt:4:13:79:2 | { ... } | 16 | Test.kt:11:7:11:7 | x | -| Test.kt:4:13:79:2 | { ... } | 17 | Test.kt:11:11:11:11 | 0 | -| Test.kt:4:13:79:2 | { ... } | 18 | Test.kt:11:7:11:11 | ... > ... | -| Test.kt:11:3:16:3 | ... -> ... | 0 | Test.kt:11:3:16:3 | ... -> ... | -| Test.kt:11:3:16:3 | ... -> ... | 1 | Test.kt:11:3:16:3 | true | -| Test.kt:11:3:16:3 | ... -> ... | 2 | Test.kt:14:10:16:3 | { ... } | -| Test.kt:11:3:16:3 | ... -> ... | 3 | Test.kt:15:4:15:4 | ; | -| Test.kt:11:3:16:3 | ... -> ... | 4 | Test.kt:15:8:15:9 | 30 | -| Test.kt:11:3:16:3 | ... -> ... | 5 | Test.kt:15:4:15:9 | ...=... | -| Test.kt:11:14:14:3 | { ... } | 0 | Test.kt:11:14:14:3 | { ... } | -| Test.kt:11:14:14:3 | { ... } | 1 | Test.kt:12:4:12:4 | ; | -| Test.kt:11:14:14:3 | { ... } | 2 | Test.kt:12:8:12:9 | 20 | -| Test.kt:11:14:14:3 | { ... } | 3 | Test.kt:12:4:12:9 | ...=... | -| Test.kt:11:14:14:3 | { ... } | 4 | Test.kt:13:4:13:4 | ; | -| Test.kt:11:14:14:3 | { ... } | 5 | Test.kt:13:8:13:9 | 10 | -| Test.kt:11:14:14:3 | { ... } | 6 | Test.kt:13:4:13:9 | ...=... | -| Test.kt:18:3:18:3 | ; | 0 | Test.kt:18:3:18:3 | ; | -| Test.kt:18:3:18:3 | ; | 1 | Test.kt:18:7:18:7 | 0 | -| Test.kt:18:3:18:3 | ; | 2 | Test.kt:18:3:18:7 | ...=... | -| Test.kt:18:3:18:3 | ; | 3 | Test.kt:21:3:24:9 | ; | -| Test.kt:18:3:18:3 | ; | 4 | Test.kt:21:3:24:9 | when ... | -| Test.kt:18:3:18:3 | ; | 5 | Test.kt:21:3:24:9 | ... -> ... | -| Test.kt:18:3:18:3 | ; | 6 | Test.kt:21:6:21:6 | x | -| Test.kt:18:3:18:3 | ; | 7 | Test.kt:21:10:21:10 | 0 | -| Test.kt:18:3:18:3 | ; | 8 | Test.kt:21:6:21:10 | ... < ... | -| Test.kt:21:3:24:9 | ... -> ... | 0 | Test.kt:21:3:24:9 | ... -> ... | -| Test.kt:21:3:24:9 | ... -> ... | 1 | Test.kt:21:3:24:9 | true | -| Test.kt:21:3:24:9 | ... -> ... | 2 | Test.kt:24:4:24:9 | INSTANCE | -| Test.kt:21:3:24:9 | ... -> ... | 3 | Test.kt:24:4:24:9 | return ... | -| Test.kt:22:4:22:4 | ; | 0 | Test.kt:22:4:22:4 | ; | -| Test.kt:22:4:22:4 | ; | 1 | Test.kt:22:8:22:9 | 40 | -| Test.kt:22:4:22:4 | ; | 2 | Test.kt:22:4:22:9 | ...=... | -| Test.kt:22:4:22:4 | ; | 3 | Test.kt:27:3:27:3 | ; | -| Test.kt:22:4:22:4 | ; | 4 | Test.kt:27:7:27:8 | 10 | -| Test.kt:22:4:22:4 | ; | 5 | Test.kt:27:3:27:8 | ...=... | -| Test.kt:22:4:22:4 | ; | 6 | Test.kt:30:3:33:3 | ; | -| Test.kt:22:4:22:4 | ; | 7 | Test.kt:30:3:33:3 | when ... | -| Test.kt:22:4:22:4 | ; | 8 | Test.kt:30:3:33:3 | ... -> ... | -| Test.kt:22:4:22:4 | ; | 9 | Test.kt:30:7:30:7 | x | -| Test.kt:22:4:22:4 | ; | 10 | Test.kt:30:12:30:12 | 0 | -| Test.kt:22:4:22:4 | ; | 11 | Test.kt:30:7:30:12 | ... (value equals) ... | -| Test.kt:30:15:33:3 | { ... } | 0 | Test.kt:30:15:33:3 | { ... } | -| Test.kt:30:15:33:3 | { ... } | 1 | Test.kt:31:4:31:4 | ; | -| Test.kt:30:15:33:3 | { ... } | 2 | Test.kt:31:8:31:9 | 60 | -| Test.kt:30:15:33:3 | { ... } | 3 | Test.kt:31:4:31:9 | ...=... | -| Test.kt:30:15:33:3 | { ... } | 4 | Test.kt:32:4:32:4 | ; | -| Test.kt:30:15:33:3 | { ... } | 5 | Test.kt:32:8:32:9 | 10 | -| Test.kt:30:15:33:3 | { ... } | 6 | Test.kt:32:4:32:9 | ...=... | -| Test.kt:35:3:35:3 | ; | 0 | Test.kt:35:3:35:3 | ; | -| Test.kt:35:3:35:3 | ; | 1 | Test.kt:35:7:35:8 | 20 | -| Test.kt:35:3:35:3 | ; | 2 | Test.kt:35:3:35:8 | ...=... | -| Test.kt:35:3:35:3 | ; | 3 | Test.kt:38:3:41:3 | while (...) | -| Test.kt:38:9:38:9 | x | 0 | Test.kt:38:9:38:9 | x | -| Test.kt:38:9:38:9 | x | 1 | Test.kt:38:13:38:13 | 0 | -| Test.kt:38:9:38:9 | x | 2 | Test.kt:38:9:38:13 | ... > ... | -| Test.kt:38:16:41:3 | { ... } | 0 | Test.kt:38:16:41:3 | { ... } | -| Test.kt:38:16:41:3 | { ... } | 1 | Test.kt:39:4:39:4 | ; | -| Test.kt:38:16:41:3 | { ... } | 2 | Test.kt:39:8:39:9 | 10 | -| Test.kt:38:16:41:3 | { ... } | 3 | Test.kt:39:4:39:9 | ...=... | -| Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | ; | -| Test.kt:38:16:41:3 | { ... } | 5 | Test.kt:40:4:40:6 | | -| Test.kt:38:16:41:3 | { ... } | 6 | Test.kt:40:4:40:6 | { ... } | -| Test.kt:38:16:41:3 | { ... } | 7 | Test.kt:40:4:40:6 | var ...; | -| Test.kt:38:16:41:3 | { ... } | 8 | Test.kt:40:4:40:4 | x | -| Test.kt:38:16:41:3 | { ... } | 9 | Test.kt:40:4:40:6 | tmp0 | -| Test.kt:38:16:41:3 | { ... } | 10 | Test.kt:40:4:40:4 | ; | -| Test.kt:38:16:41:3 | { ... } | 11 | Test.kt:40:4:40:6 | tmp0 | -| Test.kt:38:16:41:3 | { ... } | 12 | Test.kt:40:4:40:6 | dec(...) | -| Test.kt:38:16:41:3 | { ... } | 13 | Test.kt:40:4:40:6 | ...=... | -| Test.kt:38:16:41:3 | { ... } | 14 | Test.kt:40:4:40:6 | ; | -| Test.kt:38:16:41:3 | { ... } | 15 | Test.kt:40:4:40:6 | tmp0 | -| Test.kt:38:16:41:3 | { ... } | 16 | Test.kt:40:4:40:6 | | -| Test.kt:43:3:43:3 | ; | 0 | Test.kt:43:3:43:3 | ; | -| Test.kt:43:3:43:3 | ; | 1 | Test.kt:43:7:43:8 | 30 | -| Test.kt:43:3:43:3 | ; | 2 | Test.kt:43:3:43:8 | ...=... | -| Test.kt:43:3:43:3 | ; | 3 | Test.kt:73:3:73:3 | ; | -| Test.kt:43:3:43:3 | ; | 4 | Test.kt:73:7:73:8 | 50 | -| Test.kt:43:3:43:3 | ; | 5 | Test.kt:73:3:73:8 | ...=... | -| Test.kt:43:3:43:3 | ; | 6 | Test.kt:77:3:77:3 | ; | -| Test.kt:43:3:43:3 | ; | 7 | Test.kt:77:7:77:8 | 40 | -| Test.kt:43:3:43:3 | ; | 8 | Test.kt:77:3:77:8 | ...=... | -| Test.kt:43:3:43:3 | ; | 9 | Test.kt:78:3:78:8 | INSTANCE | -| Test.kt:43:3:43:3 | ; | 10 | Test.kt:78:3:78:8 | return ... | -| Test.kt:82:1:89:1 | Exceptional Exit | 0 | Test.kt:82:1:89:1 | Exceptional Exit | +| Test.kt:4:2:79:2 | Normal Exit | 1 | Test.kt:4:2:79:2 | Exit | +| Test.kt:11:3:16:3 | After when ... | 0 | Test.kt:11:3:16:3 | After when ... | +| Test.kt:11:3:16:3 | After when ... | 1 | Test.kt:11:3:16:3 | After ; | +| Test.kt:11:3:16:3 | After when ... | 2 | Test.kt:18:3:18:3 | ; | +| Test.kt:11:3:16:3 | After when ... | 3 | Test.kt:18:3:18:7 | Before ...=... | +| Test.kt:11:3:16:3 | After when ... | 4 | Test.kt:18:3:18:3 | z | +| Test.kt:11:3:16:3 | After when ... | 5 | Test.kt:18:7:18:7 | 0 | +| Test.kt:11:3:16:3 | After when ... | 6 | Test.kt:18:3:18:7 | ...=... | +| Test.kt:11:3:16:3 | After when ... | 7 | Test.kt:18:3:18:7 | After ...=... | +| Test.kt:11:3:16:3 | After when ... | 8 | Test.kt:18:3:18:3 | After ; | +| Test.kt:11:3:16:3 | After when ... | 9 | Test.kt:21:3:24:9 | ; | +| Test.kt:11:3:16:3 | After when ... | 10 | Test.kt:21:3:24:9 | when ... | +| Test.kt:11:3:16:3 | After when ... | 11 | Test.kt:21:3:24:9 | ... -> ... | +| Test.kt:11:3:16:3 | After when ... | 12 | Test.kt:21:6:21:10 | Before ... < ... | +| Test.kt:11:3:16:3 | After when ... | 13 | Test.kt:21:6:21:6 | x | +| Test.kt:11:3:16:3 | After when ... | 14 | Test.kt:21:10:21:10 | 0 | +| Test.kt:11:3:16:3 | After when ... | 15 | Test.kt:21:6:21:10 | ... < ... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 0 | Test.kt:11:7:11:11 | After ... > ... [false] | +| Test.kt:11:7:11:11 | After ... > ... [false] | 1 | Test.kt:11:3:16:3 | ... -> ... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 2 | Test.kt:11:3:16:3 | true | +| Test.kt:11:7:11:11 | After ... > ... [false] | 3 | Test.kt:11:3:16:3 | After true [true] | +| Test.kt:11:7:11:11 | After ... > ... [false] | 4 | Test.kt:14:10:16:3 | { ... } | +| Test.kt:11:7:11:11 | After ... > ... [false] | 5 | Test.kt:15:4:15:4 | ; | +| Test.kt:11:7:11:11 | After ... > ... [false] | 6 | Test.kt:15:4:15:9 | Before ...=... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 7 | Test.kt:15:4:15:4 | y | +| Test.kt:11:7:11:11 | After ... > ... [false] | 8 | Test.kt:15:8:15:9 | 30 | +| Test.kt:11:7:11:11 | After ... > ... [false] | 9 | Test.kt:15:4:15:9 | ...=... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 10 | Test.kt:15:4:15:9 | After ...=... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 11 | Test.kt:15:4:15:4 | After ; | +| Test.kt:11:7:11:11 | After ... > ... [false] | 12 | Test.kt:14:10:16:3 | After { ... } | +| Test.kt:11:7:11:11 | After ... > ... [true] | 0 | Test.kt:11:7:11:11 | After ... > ... [true] | +| Test.kt:11:7:11:11 | After ... > ... [true] | 1 | Test.kt:11:14:14:3 | { ... } | +| Test.kt:11:7:11:11 | After ... > ... [true] | 2 | Test.kt:12:4:12:4 | ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 3 | Test.kt:12:4:12:9 | Before ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 4 | Test.kt:12:4:12:4 | y | +| Test.kt:11:7:11:11 | After ... > ... [true] | 5 | Test.kt:12:8:12:9 | 20 | +| Test.kt:11:7:11:11 | After ... > ... [true] | 6 | Test.kt:12:4:12:9 | ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 7 | Test.kt:12:4:12:9 | After ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 8 | Test.kt:12:4:12:4 | After ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 9 | Test.kt:13:4:13:4 | ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 10 | Test.kt:13:4:13:9 | Before ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 11 | Test.kt:13:4:13:4 | z | +| Test.kt:11:7:11:11 | After ... > ... [true] | 12 | Test.kt:13:8:13:9 | 10 | +| Test.kt:11:7:11:11 | After ... > ... [true] | 13 | Test.kt:13:4:13:9 | ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 14 | Test.kt:13:4:13:9 | After ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 15 | Test.kt:13:4:13:4 | After ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 16 | Test.kt:11:14:14:3 | After { ... } | +| Test.kt:21:6:21:10 | After ... < ... [false] | 0 | Test.kt:21:6:21:10 | After ... < ... [false] | +| Test.kt:21:6:21:10 | After ... < ... [false] | 1 | Test.kt:21:3:24:9 | ... -> ... | +| Test.kt:21:6:21:10 | After ... < ... [false] | 2 | Test.kt:21:3:24:9 | true | +| Test.kt:21:6:21:10 | After ... < ... [false] | 3 | Test.kt:21:3:24:9 | After true [true] | +| Test.kt:21:6:21:10 | After ... < ... [false] | 4 | Test.kt:24:4:24:9 | Before return ... | +| Test.kt:21:6:21:10 | After ... < ... [false] | 5 | Test.kt:24:4:24:9 | INSTANCE | +| Test.kt:21:6:21:10 | After ... < ... [false] | 6 | Test.kt:24:4:24:9 | return ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 0 | Test.kt:21:6:21:10 | After ... < ... [true] | +| Test.kt:21:6:21:10 | After ... < ... [true] | 1 | Test.kt:22:4:22:4 | ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 2 | Test.kt:22:4:22:9 | Before ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 3 | Test.kt:22:4:22:4 | y | +| Test.kt:21:6:21:10 | After ... < ... [true] | 4 | Test.kt:22:8:22:9 | 40 | +| Test.kt:21:6:21:10 | After ... < ... [true] | 5 | Test.kt:22:4:22:9 | ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 6 | Test.kt:22:4:22:9 | After ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 7 | Test.kt:22:4:22:4 | After ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 8 | Test.kt:21:3:24:9 | After when ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 9 | Test.kt:21:3:24:9 | After ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 10 | Test.kt:27:3:27:3 | ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 11 | Test.kt:27:3:27:8 | Before ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 12 | Test.kt:27:3:27:3 | z | +| Test.kt:21:6:21:10 | After ... < ... [true] | 13 | Test.kt:27:7:27:8 | 10 | +| Test.kt:21:6:21:10 | After ... < ... [true] | 14 | Test.kt:27:3:27:8 | ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 15 | Test.kt:27:3:27:8 | After ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 16 | Test.kt:27:3:27:3 | After ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 17 | Test.kt:30:3:33:3 | ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 18 | Test.kt:30:3:33:3 | when ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 19 | Test.kt:30:3:33:3 | ... -> ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 20 | Test.kt:30:7:30:12 | Before ... (value equals) ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 21 | Test.kt:30:7:30:7 | x | +| Test.kt:21:6:21:10 | After ... < ... [true] | 22 | Test.kt:30:12:30:12 | 0 | +| Test.kt:21:6:21:10 | After ... < ... [true] | 23 | Test.kt:30:7:30:12 | ... (value equals) ... | +| Test.kt:30:3:33:3 | After when ... | 0 | Test.kt:30:3:33:3 | After when ... | +| Test.kt:30:3:33:3 | After when ... | 1 | Test.kt:30:3:33:3 | After ; | +| Test.kt:30:3:33:3 | After when ... | 2 | Test.kt:35:3:35:3 | ; | +| Test.kt:30:3:33:3 | After when ... | 3 | Test.kt:35:3:35:8 | Before ...=... | +| Test.kt:30:3:33:3 | After when ... | 4 | Test.kt:35:3:35:3 | z | +| Test.kt:30:3:33:3 | After when ... | 5 | Test.kt:35:7:35:8 | 20 | +| Test.kt:30:3:33:3 | After when ... | 6 | Test.kt:35:3:35:8 | ...=... | +| Test.kt:30:3:33:3 | After when ... | 7 | Test.kt:35:3:35:8 | After ...=... | +| Test.kt:30:3:33:3 | After when ... | 8 | Test.kt:35:3:35:3 | After ; | +| Test.kt:30:3:33:3 | After when ... | 9 | Test.kt:38:3:41:3 | while (...) | +| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [false] | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [true] | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 1 | Test.kt:30:15:33:3 | { ... } | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 2 | Test.kt:31:4:31:4 | ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 3 | Test.kt:31:4:31:9 | Before ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 4 | Test.kt:31:4:31:4 | y | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 5 | Test.kt:31:8:31:9 | 60 | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 6 | Test.kt:31:4:31:9 | ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 7 | Test.kt:31:4:31:9 | After ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 8 | Test.kt:31:4:31:4 | After ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 9 | Test.kt:32:4:32:4 | ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 10 | Test.kt:32:4:32:9 | Before ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 11 | Test.kt:32:4:32:4 | z | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 12 | Test.kt:32:8:32:9 | 10 | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 13 | Test.kt:32:4:32:9 | ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 14 | Test.kt:32:4:32:9 | After ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 15 | Test.kt:32:4:32:4 | After ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 16 | Test.kt:30:15:33:3 | After { ... } | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 0 | Test.kt:38:3:41:3 | [LoopHeader] while (...) | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 1 | Test.kt:38:9:38:13 | Before ... > ... | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 2 | Test.kt:38:9:38:9 | x | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 3 | Test.kt:38:13:38:13 | 0 | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 4 | Test.kt:38:9:38:13 | ... > ... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 0 | Test.kt:38:9:38:13 | After ... > ... [false] | +| Test.kt:38:9:38:13 | After ... > ... [false] | 1 | Test.kt:38:3:41:3 | After while (...) | +| Test.kt:38:9:38:13 | After ... > ... [false] | 2 | Test.kt:43:3:43:3 | ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 3 | Test.kt:43:3:43:8 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 4 | Test.kt:43:3:43:3 | z | +| Test.kt:38:9:38:13 | After ... > ... [false] | 5 | Test.kt:43:7:43:8 | 30 | +| Test.kt:38:9:38:13 | After ... > ... [false] | 6 | Test.kt:43:3:43:8 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 7 | Test.kt:43:3:43:8 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 8 | Test.kt:43:3:43:3 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 9 | Test.kt:73:3:73:3 | ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 10 | Test.kt:73:3:73:8 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 11 | Test.kt:73:3:73:3 | z | +| Test.kt:38:9:38:13 | After ... > ... [false] | 12 | Test.kt:73:7:73:8 | 50 | +| Test.kt:38:9:38:13 | After ... > ... [false] | 13 | Test.kt:73:3:73:8 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 14 | Test.kt:73:3:73:8 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 15 | Test.kt:73:3:73:3 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 16 | Test.kt:77:3:77:3 | ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 17 | Test.kt:77:3:77:8 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 18 | Test.kt:77:3:77:3 | w | +| Test.kt:38:9:38:13 | After ... > ... [false] | 19 | Test.kt:77:7:77:8 | 40 | +| Test.kt:38:9:38:13 | After ... > ... [false] | 20 | Test.kt:77:3:77:8 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 21 | Test.kt:77:3:77:8 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 22 | Test.kt:77:3:77:3 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 23 | Test.kt:78:3:78:8 | Before return ... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 24 | Test.kt:78:3:78:8 | INSTANCE | +| Test.kt:38:9:38:13 | After ... > ... [false] | 25 | Test.kt:78:3:78:8 | return ... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 0 | Test.kt:38:9:38:13 | After ... > ... [true] | +| Test.kt:38:9:38:13 | After ... > ... [true] | 1 | Test.kt:38:16:41:3 | { ... } | +| Test.kt:38:9:38:13 | After ... > ... [true] | 2 | Test.kt:39:4:39:4 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 3 | Test.kt:39:4:39:9 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 4 | Test.kt:39:4:39:4 | y | +| Test.kt:38:9:38:13 | After ... > ... [true] | 5 | Test.kt:39:8:39:9 | 10 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 6 | Test.kt:39:4:39:9 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 7 | Test.kt:39:4:39:9 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 8 | Test.kt:39:4:39:4 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 9 | Test.kt:40:4:40:6 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 10 | Test.kt:40:4:40:6 | Before | +| Test.kt:38:9:38:13 | After ... > ... [true] | 11 | Test.kt:40:4:40:6 | Before | +| Test.kt:38:9:38:13 | After ... > ... [true] | 12 | Test.kt:40:4:40:6 | { ... } | +| Test.kt:38:9:38:13 | After ... > ... [true] | 13 | Test.kt:40:4:40:6 | var ...; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 14 | Test.kt:40:4:40:6 | Before tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 15 | Test.kt:40:4:40:4 | x | +| Test.kt:38:9:38:13 | After ... > ... [true] | 16 | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 17 | Test.kt:40:4:40:6 | After tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 18 | Test.kt:40:4:40:6 | After var ...; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 19 | Test.kt:40:4:40:4 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 20 | Test.kt:40:4:40:6 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 21 | Test.kt:40:4:40:4 | x | +| Test.kt:38:9:38:13 | After ... > ... [true] | 22 | Test.kt:40:4:40:6 | Before dec(...) | +| Test.kt:38:9:38:13 | After ... > ... [true] | 23 | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 24 | Test.kt:40:4:40:6 | dec(...) | +| Test.kt:38:9:38:13 | After ... > ... [true] | 25 | Test.kt:40:4:40:6 | After dec(...) | +| Test.kt:38:9:38:13 | After ... > ... [true] | 26 | Test.kt:40:4:40:6 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 27 | Test.kt:40:4:40:6 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 28 | Test.kt:40:4:40:4 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 29 | Test.kt:40:4:40:6 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 30 | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 31 | Test.kt:40:4:40:6 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 32 | Test.kt:40:4:40:6 | After { ... } | +| Test.kt:38:9:38:13 | After ... > ... [true] | 33 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 34 | Test.kt:40:4:40:6 | After | +| Test.kt:38:9:38:13 | After ... > ... [true] | 35 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 36 | Test.kt:40:4:40:6 | After | +| Test.kt:38:9:38:13 | After ... > ... [true] | 37 | Test.kt:40:4:40:6 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 38 | Test.kt:38:16:41:3 | After { ... } | +| Test.kt:82:1:89:1 | Entry | 0 | Test.kt:82:1:89:1 | Entry | +| Test.kt:82:1:89:1 | Entry | 1 | Test.kt:82:21:89:1 | { ... } | +| Test.kt:82:1:89:1 | Entry | 2 | Test.kt:83:2:88:2 | try ... | +| Test.kt:82:1:89:1 | Entry | 3 | Test.kt:83:6:86:2 | { ... } | +| Test.kt:82:1:89:1 | Entry | 4 | Test.kt:84:7:84:7 | var ...; | +| Test.kt:82:1:89:1 | Entry | 5 | Test.kt:84:7:84:7 | Before x | +| Test.kt:82:1:89:1 | Entry | 6 | Test.kt:84:11:84:18 | Before (...)... | +| Test.kt:82:1:89:1 | Entry | 7 | Test.kt:84:11:84:11 | o | +| Test.kt:82:1:89:1 | Entry | 8 | Test.kt:84:11:84:18 | (...)... | | Test.kt:82:1:89:1 | Exit | 0 | Test.kt:82:1:89:1 | Exit | | Test.kt:82:1:89:1 | Normal Exit | 0 | Test.kt:82:1:89:1 | Normal Exit | -| Test.kt:82:21:89:1 | { ... } | 0 | Test.kt:82:21:89:1 | { ... } | -| Test.kt:82:21:89:1 | { ... } | 1 | Test.kt:83:2:88:2 | try ... | -| Test.kt:82:21:89:1 | { ... } | 2 | Test.kt:83:6:86:2 | { ... } | -| Test.kt:82:21:89:1 | { ... } | 3 | Test.kt:84:7:84:7 | var ...; | -| Test.kt:82:21:89:1 | { ... } | 4 | Test.kt:84:11:84:11 | o | -| Test.kt:82:21:89:1 | { ... } | 5 | Test.kt:84:11:84:18 | (...)... | -| Test.kt:84:7:84:7 | x | 0 | Test.kt:84:7:84:7 | x | -| Test.kt:84:7:84:7 | x | 1 | Test.kt:85:10:85:10 | 1 | -| Test.kt:84:7:84:7 | x | 2 | Test.kt:85:3:85:10 | return ... | +| Test.kt:84:11:84:18 | After (...)... | 0 | Test.kt:84:11:84:18 | After (...)... | +| Test.kt:84:11:84:18 | After (...)... | 1 | Test.kt:84:7:84:7 | x | +| Test.kt:84:11:84:18 | After (...)... | 2 | Test.kt:84:7:84:7 | After x | +| Test.kt:84:11:84:18 | After (...)... | 3 | Test.kt:84:7:84:7 | After var ...; | +| Test.kt:84:11:84:18 | After (...)... | 4 | Test.kt:85:3:85:10 | Before return ... | +| Test.kt:84:11:84:18 | After (...)... | 5 | Test.kt:85:10:85:10 | 1 | +| Test.kt:84:11:84:18 | After (...)... | 6 | Test.kt:85:3:85:10 | return ... | +| Test.kt:86:4:88:2 | After catch (...) [match] | 0 | Test.kt:86:4:88:2 | After catch (...) [match] | +| Test.kt:86:4:88:2 | After catch (...) [match] | 1 | Test.kt:86:11:86:31 | e | +| Test.kt:86:4:88:2 | After catch (...) [match] | 2 | Test.kt:86:34:88:2 | { ... } | +| Test.kt:86:4:88:2 | After catch (...) [match] | 3 | Test.kt:87:3:87:10 | Before return ... | +| Test.kt:86:4:88:2 | After catch (...) [match] | 4 | Test.kt:87:10:87:10 | 2 | +| Test.kt:86:4:88:2 | After catch (...) [match] | 5 | Test.kt:87:3:87:10 | return ... | +| Test.kt:86:4:88:2 | After catch (...) [no-match] | 0 | Test.kt:86:4:88:2 | After catch (...) [no-match] | +| Test.kt:86:4:88:2 | After catch (...) [no-match] | 1 | Test.kt:82:1:89:1 | Exceptional Exit | | Test.kt:86:4:88:2 | catch (...) | 0 | Test.kt:86:4:88:2 | catch (...) | -| Test.kt:86:4:88:2 | catch (...) | 1 | Test.kt:86:11:86:31 | e | -| Test.kt:86:4:88:2 | catch (...) | 2 | Test.kt:86:34:88:2 | { ... } | -| Test.kt:86:4:88:2 | catch (...) | 3 | Test.kt:87:10:87:10 | 2 | -| Test.kt:86:4:88:2 | catch (...) | 4 | Test.kt:87:3:87:10 | return ... | -| Test.kt:91:1:98:1 | Exceptional Exit | 0 | Test.kt:91:1:98:1 | Exceptional Exit | +| Test.kt:91:1:98:1 | Entry | 0 | Test.kt:91:1:98:1 | Entry | +| Test.kt:91:1:98:1 | Entry | 1 | Test.kt:91:22:98:1 | { ... } | +| Test.kt:91:1:98:1 | Entry | 2 | Test.kt:92:2:97:2 | try ... | +| Test.kt:91:1:98:1 | Entry | 3 | Test.kt:92:6:95:2 | { ... } | +| Test.kt:91:1:98:1 | Entry | 4 | Test.kt:93:7:93:7 | var ...; | +| Test.kt:91:1:98:1 | Entry | 5 | Test.kt:93:7:93:7 | Before x | +| Test.kt:91:1:98:1 | Entry | 6 | Test.kt:93:12:93:13 | Before ...!! | +| Test.kt:91:1:98:1 | Entry | 7 | Test.kt:93:11:93:11 | o | +| Test.kt:91:1:98:1 | Entry | 8 | Test.kt:93:12:93:13 | ...!! | | Test.kt:91:1:98:1 | Exit | 0 | Test.kt:91:1:98:1 | Exit | | Test.kt:91:1:98:1 | Normal Exit | 0 | Test.kt:91:1:98:1 | Normal Exit | -| Test.kt:91:22:98:1 | { ... } | 0 | Test.kt:91:22:98:1 | { ... } | -| Test.kt:91:22:98:1 | { ... } | 1 | Test.kt:92:2:97:2 | try ... | -| Test.kt:91:22:98:1 | { ... } | 2 | Test.kt:92:6:95:2 | { ... } | -| Test.kt:91:22:98:1 | { ... } | 3 | Test.kt:93:7:93:7 | var ...; | -| Test.kt:91:22:98:1 | { ... } | 4 | Test.kt:93:11:93:11 | o | -| Test.kt:91:22:98:1 | { ... } | 5 | Test.kt:93:12:93:13 | ...!! | -| Test.kt:93:7:93:7 | x | 0 | Test.kt:93:7:93:7 | x | -| Test.kt:93:7:93:7 | x | 1 | Test.kt:94:10:94:10 | 1 | -| Test.kt:93:7:93:7 | x | 2 | Test.kt:94:3:94:10 | return ... | +| Test.kt:93:12:93:13 | After ...!! | 0 | Test.kt:93:12:93:13 | After ...!! | +| Test.kt:93:12:93:13 | After ...!! | 1 | Test.kt:93:7:93:7 | x | +| Test.kt:93:12:93:13 | After ...!! | 2 | Test.kt:93:7:93:7 | After x | +| Test.kt:93:12:93:13 | After ...!! | 3 | Test.kt:93:7:93:7 | After var ...; | +| Test.kt:93:12:93:13 | After ...!! | 4 | Test.kt:94:3:94:10 | Before return ... | +| Test.kt:93:12:93:13 | After ...!! | 5 | Test.kt:94:10:94:10 | 1 | +| Test.kt:93:12:93:13 | After ...!! | 6 | Test.kt:94:3:94:10 | return ... | +| Test.kt:95:4:97:2 | After catch (...) [match] | 0 | Test.kt:95:4:97:2 | After catch (...) [match] | +| Test.kt:95:4:97:2 | After catch (...) [match] | 1 | Test.kt:95:11:95:33 | e | +| Test.kt:95:4:97:2 | After catch (...) [match] | 2 | Test.kt:95:36:97:2 | { ... } | +| Test.kt:95:4:97:2 | After catch (...) [match] | 3 | Test.kt:96:3:96:10 | Before return ... | +| Test.kt:95:4:97:2 | After catch (...) [match] | 4 | Test.kt:96:10:96:10 | 2 | +| Test.kt:95:4:97:2 | After catch (...) [match] | 5 | Test.kt:96:3:96:10 | return ... | +| Test.kt:95:4:97:2 | After catch (...) [no-match] | 0 | Test.kt:95:4:97:2 | After catch (...) [no-match] | +| Test.kt:95:4:97:2 | After catch (...) [no-match] | 1 | Test.kt:91:1:98:1 | Exceptional Exit | | Test.kt:95:4:97:2 | catch (...) | 0 | Test.kt:95:4:97:2 | catch (...) | -| Test.kt:95:4:97:2 | catch (...) | 1 | Test.kt:95:11:95:33 | e | -| Test.kt:95:4:97:2 | catch (...) | 2 | Test.kt:95:36:97:2 | { ... } | -| Test.kt:95:4:97:2 | catch (...) | 3 | Test.kt:96:10:96:10 | 2 | -| Test.kt:95:4:97:2 | catch (...) | 4 | Test.kt:96:3:96:10 | return ... | +| Test.kt:100:1:110:1 | Entry | 0 | Test.kt:100:1:110:1 | Entry | +| Test.kt:100:1:110:1 | Entry | 1 | Test.kt:100:25:110:1 | { ... } | +| Test.kt:100:1:110:1 | Entry | 2 | Test.kt:101:5:103:5 | ; | +| Test.kt:100:1:110:1 | Entry | 3 | Test.kt:101:5:103:5 | when ... | +| Test.kt:100:1:110:1 | Entry | 4 | Test.kt:101:5:103:5 | ... -> ... | +| Test.kt:100:1:110:1 | Entry | 5 | Test.kt:101:9:101:30 | ... && ... | +| Test.kt:100:1:110:1 | Entry | 6 | Test.kt:101:9:101:17 | Before ... (value equals) ... | +| Test.kt:100:1:110:1 | Entry | 7 | Test.kt:101:9:101:9 | x | +| Test.kt:100:1:110:1 | Entry | 8 | Test.kt:101:14:101:17 | null | +| Test.kt:100:1:110:1 | Entry | 9 | Test.kt:101:9:101:17 | ... (value equals) ... | | Test.kt:100:1:110:1 | Exit | 0 | Test.kt:100:1:110:1 | Exit | -| Test.kt:100:1:110:1 | Normal Exit | 0 | Test.kt:100:1:110:1 | Normal Exit | -| Test.kt:100:25:110:1 | { ... } | 0 | Test.kt:100:25:110:1 | { ... } | -| Test.kt:100:25:110:1 | { ... } | 1 | Test.kt:101:5:103:5 | ; | -| Test.kt:100:25:110:1 | { ... } | 2 | Test.kt:101:5:103:5 | when ... | -| Test.kt:100:25:110:1 | { ... } | 3 | Test.kt:101:5:103:5 | ... -> ... | -| Test.kt:100:25:110:1 | { ... } | 4 | Test.kt:101:9:101:30 | ... && ... | -| Test.kt:100:25:110:1 | { ... } | 5 | Test.kt:101:9:101:9 | x | -| Test.kt:100:25:110:1 | { ... } | 6 | Test.kt:101:14:101:17 | null | -| Test.kt:100:25:110:1 | { ... } | 7 | Test.kt:101:9:101:17 | ... (value equals) ... | -| Test.kt:101:22:101:22 | y | 0 | Test.kt:101:22:101:22 | y | -| Test.kt:101:22:101:22 | y | 1 | Test.kt:101:27:101:30 | null | -| Test.kt:101:22:101:22 | y | 2 | Test.kt:101:22:101:30 | ... (value equals) ... | -| Test.kt:101:33:103:5 | { ... } | 0 | Test.kt:101:33:103:5 | { ... } | -| Test.kt:101:33:103:5 | { ... } | 1 | Test.kt:102:15:102:25 | new Exception(...) | -| Test.kt:101:33:103:5 | { ... } | 2 | Test.kt:102:9:102:25 | throw ... | -| Test.kt:101:33:103:5 | { ... } | 3 | Test.kt:100:1:110:1 | Exceptional Exit | -| Test.kt:105:5:109:5 | ; | 0 | Test.kt:105:5:109:5 | ; | -| Test.kt:105:5:109:5 | ; | 1 | Test.kt:105:5:109:5 | when ... | -| Test.kt:105:5:109:5 | ; | 2 | Test.kt:105:9:107:5 | ... -> ... | -| Test.kt:105:5:109:5 | ; | 3 | Test.kt:105:9:105:9 | x | -| Test.kt:105:5:109:5 | ; | 4 | Test.kt:105:14:105:17 | null | -| Test.kt:105:5:109:5 | ; | 5 | Test.kt:105:9:105:17 | ... (value not-equals) ... | -| Test.kt:105:20:107:5 | { ... } | 0 | Test.kt:105:20:107:5 | { ... } | -| Test.kt:105:20:107:5 | { ... } | 1 | Test.kt:106:9:106:29 | ; | -| Test.kt:105:20:107:5 | { ... } | 2 | Test.kt:106:17:106:28 | "x not null" | -| Test.kt:105:20:107:5 | { ... } | 3 | Test.kt:106:9:106:29 | println(...) | -| Test.kt:107:16:109:5 | ... -> ... | 0 | Test.kt:107:16:109:5 | ... -> ... | -| Test.kt:107:16:109:5 | ... -> ... | 1 | Test.kt:107:16:107:16 | y | -| Test.kt:107:16:109:5 | ... -> ... | 2 | Test.kt:107:21:107:24 | null | -| Test.kt:107:16:109:5 | ... -> ... | 3 | Test.kt:107:16:107:24 | ... (value not-equals) ... | -| Test.kt:107:27:109:5 | { ... } | 0 | Test.kt:107:27:109:5 | { ... } | -| Test.kt:107:27:109:5 | { ... } | 1 | Test.kt:108:9:108:29 | ; | -| Test.kt:107:27:109:5 | { ... } | 2 | Test.kt:108:17:108:28 | "y not null" | -| Test.kt:107:27:109:5 | { ... } | 3 | Test.kt:108:9:108:29 | println(...) | -| Test.kt:112:1:116:1 | Exceptional Exit | 0 | Test.kt:112:1:116:1 | Exceptional Exit | -| Test.kt:112:1:116:1 | Exit | 0 | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:1:116:1 | Normal Exit | 0 | Test.kt:112:1:116:1 | Normal Exit | -| Test.kt:112:32:116:1 | { ... } | 0 | Test.kt:112:32:116:1 | { ... } | -| Test.kt:112:32:116:1 | { ... } | 1 | Test.kt:113:5:115:5 | ; | -| Test.kt:112:32:116:1 | { ... } | 2 | Test.kt:113:5:115:5 | when ... | -| Test.kt:112:32:116:1 | { ... } | 3 | Test.kt:113:5:115:5 | ... -> ... | -| Test.kt:112:32:116:1 | { ... } | 4 | Test.kt:113:9:113:14 | ... && ... | -| Test.kt:112:32:116:1 | { ... } | 5 | Test.kt:113:9:113:9 | x | -| Test.kt:113:14:113:14 | y | 0 | Test.kt:113:14:113:14 | y | -| Test.kt:113:17:115:5 | { ... } | 0 | Test.kt:113:17:115:5 | { ... } | -| Test.kt:118:1:124:1 | Exceptional Exit | 0 | Test.kt:118:1:124:1 | Exceptional Exit | -| Test.kt:118:1:124:1 | Exit | 0 | Test.kt:118:1:124:1 | Exit | -| Test.kt:118:1:124:1 | Normal Exit | 0 | Test.kt:118:1:124:1 | Normal Exit | -| Test.kt:118:37:124:1 | { ... } | 0 | Test.kt:118:37:124:1 | { ... } | -| Test.kt:118:37:124:1 | { ... } | 1 | Test.kt:119:2:123:12 | ; | -| Test.kt:118:37:124:1 | { ... } | 2 | Test.kt:119:2:123:12 | when ... | -| Test.kt:118:37:124:1 | { ... } | 3 | Test.kt:120:3:123:10 | ... -> ... | -| Test.kt:118:37:124:1 | { ... } | 4 | Test.kt:120:3:123:3 | when ... | -| Test.kt:118:37:124:1 | { ... } | 5 | Test.kt:121:4:121:9 | ... -> ... | -| Test.kt:118:37:124:1 | { ... } | 6 | Test.kt:121:4:121:4 | x | -| Test.kt:121:9:121:9 | ; | 0 | Test.kt:121:9:121:9 | ; | -| Test.kt:121:9:121:9 | ; | 1 | Test.kt:121:9:121:9 | y | -| Test.kt:122:12:122:16 | ... -> ... | 0 | Test.kt:122:12:122:16 | ... -> ... | -| Test.kt:122:12:122:16 | ... -> ... | 1 | Test.kt:122:12:122:16 | true | -| Test.kt:122:12:122:16 | ... -> ... | 2 | Test.kt:122:12:122:16 | ; | -| Test.kt:122:12:122:16 | ... -> ... | 3 | Test.kt:122:12:122:16 | false | -| Test.kt:123:8:123:10 | { ... } | 0 | Test.kt:123:8:123:10 | { ... } | +| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [false] | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [true] | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 1 | Test.kt:101:22:101:30 | Before ... (value equals) ... | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 2 | Test.kt:101:22:101:22 | y | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 3 | Test.kt:101:27:101:30 | null | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 4 | Test.kt:101:22:101:30 | ... (value equals) ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 0 | Test.kt:101:9:101:30 | After ... && ... [false] | +| Test.kt:101:9:101:30 | After ... && ... [false] | 1 | Test.kt:101:5:103:5 | After when ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 2 | Test.kt:101:5:103:5 | After ; | +| Test.kt:101:9:101:30 | After ... && ... [false] | 3 | Test.kt:105:5:109:5 | ; | +| Test.kt:101:9:101:30 | After ... && ... [false] | 4 | Test.kt:105:5:109:5 | when ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 5 | Test.kt:105:9:107:5 | ... -> ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 6 | Test.kt:105:9:105:17 | Before ... (value not-equals) ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 7 | Test.kt:105:9:105:9 | x | +| Test.kt:101:9:101:30 | After ... && ... [false] | 8 | Test.kt:105:14:105:17 | null | +| Test.kt:101:9:101:30 | After ... && ... [false] | 9 | Test.kt:105:9:105:17 | ... (value not-equals) ... | +| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [false] | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [true] | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 1 | Test.kt:101:9:101:30 | After ... && ... [true] | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 2 | Test.kt:101:33:103:5 | { ... } | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 3 | Test.kt:102:9:102:25 | Before throw ... | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 4 | Test.kt:102:15:102:25 | Before new Exception(...) | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 5 | Test.kt:102:15:102:25 | new Exception(...) | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 6 | Test.kt:102:15:102:25 | After new Exception(...) | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 7 | Test.kt:102:9:102:25 | throw ... | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 8 | Test.kt:100:1:110:1 | Exceptional Exit | +| Test.kt:105:5:109:5 | After when ... | 0 | Test.kt:105:5:109:5 | After when ... | +| Test.kt:105:5:109:5 | After when ... | 1 | Test.kt:105:5:109:5 | After ; | +| Test.kt:105:5:109:5 | After when ... | 2 | Test.kt:100:25:110:1 | After { ... } | +| Test.kt:105:5:109:5 | After when ... | 3 | Test.kt:100:1:110:1 | Normal Exit | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 1 | Test.kt:107:16:109:5 | ... -> ... | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 2 | Test.kt:107:16:107:24 | Before ... (value not-equals) ... | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 3 | Test.kt:107:16:107:16 | y | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 4 | Test.kt:107:21:107:24 | null | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 5 | Test.kt:107:16:107:24 | ... (value not-equals) ... | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 1 | Test.kt:105:20:107:5 | { ... } | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 2 | Test.kt:106:9:106:29 | ; | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 3 | Test.kt:106:9:106:29 | Before println(...) | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 4 | Test.kt:106:17:106:28 | "x not null" | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 5 | Test.kt:106:9:106:29 | println(...) | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 6 | Test.kt:106:9:106:29 | After println(...) | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 7 | Test.kt:106:9:106:29 | After ; | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 8 | Test.kt:105:20:107:5 | After { ... } | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 1 | Test.kt:107:27:109:5 | { ... } | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 2 | Test.kt:108:9:108:29 | ; | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 3 | Test.kt:108:9:108:29 | Before println(...) | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 4 | Test.kt:108:17:108:28 | "y not null" | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 5 | Test.kt:108:9:108:29 | println(...) | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 6 | Test.kt:108:9:108:29 | After println(...) | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 7 | Test.kt:108:9:108:29 | After ; | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 8 | Test.kt:107:27:109:5 | After { ... } | +| Test.kt:112:1:116:1 | Entry | 0 | Test.kt:112:1:116:1 | Entry | +| Test.kt:112:1:116:1 | Entry | 1 | Test.kt:112:32:116:1 | { ... } | +| Test.kt:112:1:116:1 | Entry | 2 | Test.kt:113:5:115:5 | ; | +| Test.kt:112:1:116:1 | Entry | 3 | Test.kt:113:5:115:5 | when ... | +| Test.kt:112:1:116:1 | Entry | 4 | Test.kt:113:5:115:5 | ... -> ... | +| Test.kt:112:1:116:1 | Entry | 5 | Test.kt:113:9:113:14 | ... && ... | +| Test.kt:112:1:116:1 | Entry | 6 | Test.kt:113:9:113:9 | x | +| Test.kt:113:5:115:5 | After when ... | 0 | Test.kt:113:5:115:5 | After when ... | +| Test.kt:113:5:115:5 | After when ... | 1 | Test.kt:113:5:115:5 | After ; | +| Test.kt:113:5:115:5 | After when ... | 2 | Test.kt:112:32:116:1 | After { ... } | +| Test.kt:113:5:115:5 | After when ... | 3 | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:113:5:115:5 | After when ... | 4 | Test.kt:112:1:116:1 | Exit | +| Test.kt:113:9:113:9 | After x [false] | 0 | Test.kt:113:9:113:9 | After x [false] | +| Test.kt:113:9:113:9 | After x [true] | 0 | Test.kt:113:9:113:9 | After x [true] | +| Test.kt:113:9:113:9 | After x [true] | 1 | Test.kt:113:14:113:14 | y | +| Test.kt:113:9:113:14 | After ... && ... [false] | 0 | Test.kt:113:9:113:14 | After ... && ... [false] | +| Test.kt:113:14:113:14 | After y [false] | 0 | Test.kt:113:14:113:14 | After y [false] | +| Test.kt:113:14:113:14 | After y [true] | 0 | Test.kt:113:14:113:14 | After y [true] | +| Test.kt:113:14:113:14 | After y [true] | 1 | Test.kt:113:9:113:14 | After ... && ... [true] | +| Test.kt:113:14:113:14 | After y [true] | 2 | Test.kt:113:17:115:5 | { ... } | +| Test.kt:118:1:124:1 | Entry | 0 | Test.kt:118:1:124:1 | Entry | +| Test.kt:118:1:124:1 | Entry | 1 | Test.kt:118:37:124:1 | { ... } | +| Test.kt:118:1:124:1 | Entry | 2 | Test.kt:119:2:123:12 | ; | +| Test.kt:118:1:124:1 | Entry | 3 | Test.kt:119:2:123:12 | when ... | +| Test.kt:118:1:124:1 | Entry | 4 | Test.kt:120:3:123:10 | ... -> ... | +| Test.kt:118:1:124:1 | Entry | 5 | Test.kt:120:3:123:3 | when ... | +| Test.kt:118:1:124:1 | Entry | 6 | Test.kt:121:4:121:9 | ... -> ... | +| Test.kt:118:1:124:1 | Entry | 7 | Test.kt:121:4:121:4 | x | +| Test.kt:119:2:123:12 | After when ... | 0 | Test.kt:119:2:123:12 | After when ... | +| Test.kt:119:2:123:12 | After when ... | 1 | Test.kt:119:2:123:12 | After ; | +| Test.kt:119:2:123:12 | After when ... | 2 | Test.kt:118:37:124:1 | After { ... } | +| Test.kt:119:2:123:12 | After when ... | 3 | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:119:2:123:12 | After when ... | 4 | Test.kt:118:1:124:1 | Exit | +| Test.kt:120:3:123:3 | After when ... [false] | 0 | Test.kt:120:3:123:3 | After when ... [false] | +| Test.kt:120:3:123:3 | After when ... [true] | 0 | Test.kt:120:3:123:3 | After when ... [true] | +| Test.kt:120:3:123:3 | After when ... [true] | 1 | Test.kt:123:8:123:10 | { ... } | +| Test.kt:121:4:121:4 | After x [false] | 0 | Test.kt:121:4:121:4 | After x [false] | +| Test.kt:121:4:121:4 | After x [false] | 1 | Test.kt:122:12:122:16 | ... -> ... | +| Test.kt:121:4:121:4 | After x [false] | 2 | Test.kt:122:12:122:16 | true | +| Test.kt:121:4:121:4 | After x [false] | 3 | Test.kt:122:12:122:16 | After true [true] | +| Test.kt:121:4:121:4 | After x [false] | 4 | Test.kt:122:12:122:16 | ; | +| Test.kt:121:4:121:4 | After x [false] | 5 | Test.kt:122:12:122:16 | false | +| Test.kt:121:4:121:4 | After x [false] | 6 | Test.kt:122:12:122:16 | After ; | +| Test.kt:121:4:121:4 | After x [true] | 0 | Test.kt:121:4:121:4 | After x [true] | +| Test.kt:121:4:121:4 | After x [true] | 1 | Test.kt:121:9:121:9 | ; | +| Test.kt:121:4:121:4 | After x [true] | 2 | Test.kt:121:9:121:9 | y | +| Test.kt:121:4:121:4 | After x [true] | 3 | Test.kt:121:9:121:9 | After ; | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected index c66d50a722d1..6a1994921f47 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/bbStmts.expected @@ -1,205 +1,386 @@ -| Test.kt:3:1:80:1 | Exceptional Exit | 0 | Test.kt:3:1:80:1 | Exceptional Exit | -| Test.kt:3:1:80:1 | Exit | 0 | Test.kt:3:1:80:1 | Exit | -| Test.kt:3:1:80:1 | { ... } | 0 | Test.kt:3:1:80:1 | { ... } | -| Test.kt:3:1:80:1 | { ... } | 1 | Test.kt:3:1:80:1 | super(...) | -| Test.kt:3:1:80:1 | { ... } | 2 | Test.kt:3:1:80:1 | { ... } | -| Test.kt:3:1:80:1 | { ... } | 3 | Test.kt:3:1:80:1 | Normal Exit | -| Test.kt:4:2:79:2 | Exceptional Exit | 0 | Test.kt:4:2:79:2 | Exceptional Exit | -| Test.kt:4:2:79:2 | Exit | 0 | Test.kt:4:2:79:2 | Exit | +| Test.kt:3:1:80:1 | Entry | 0 | Test.kt:3:1:80:1 | Entry | +| Test.kt:3:1:80:1 | Entry | 1 | Test.kt:3:1:80:1 | { ... } | +| Test.kt:3:1:80:1 | Entry | 2 | Test.kt:3:1:80:1 | Before super(...) | +| Test.kt:3:1:80:1 | Entry | 3 | Test.kt:3:1:80:1 | super(...) | +| Test.kt:3:1:80:1 | Entry | 4 | Test.kt:3:1:80:1 | After super(...) | +| Test.kt:3:1:80:1 | Entry | 5 | Test.kt:3:1:80:1 | { ... } | +| Test.kt:3:1:80:1 | Entry | 6 | Test.kt:3:1:80:1 | After { ... } | +| Test.kt:3:1:80:1 | Entry | 7 | Test.kt:3:1:80:1 | Normal Exit | +| Test.kt:3:1:80:1 | Entry | 8 | Test.kt:3:1:80:1 | Exit | +| Test.kt:4:2:79:2 | Entry | 0 | Test.kt:4:2:79:2 | Entry | +| Test.kt:4:2:79:2 | Entry | 1 | Test.kt:4:13:79:2 | { ... } | +| Test.kt:4:2:79:2 | Entry | 2 | Test.kt:5:3:5:16 | var ...; | +| Test.kt:4:2:79:2 | Entry | 3 | Test.kt:5:3:5:16 | Before x | +| Test.kt:4:2:79:2 | Entry | 4 | Test.kt:5:16:5:16 | 0 | +| Test.kt:4:2:79:2 | Entry | 5 | Test.kt:5:3:5:16 | x | +| Test.kt:4:2:79:2 | Entry | 6 | Test.kt:5:3:5:16 | After x | +| Test.kt:4:2:79:2 | Entry | 7 | Test.kt:5:3:5:16 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 8 | Test.kt:6:3:6:18 | var ...; | +| Test.kt:4:2:79:2 | Entry | 9 | Test.kt:6:3:6:18 | Before y | +| Test.kt:4:2:79:2 | Entry | 10 | Test.kt:6:17:6:18 | 50 | +| Test.kt:4:2:79:2 | Entry | 11 | Test.kt:6:3:6:18 | y | +| Test.kt:4:2:79:2 | Entry | 12 | Test.kt:6:3:6:18 | After y | +| Test.kt:4:2:79:2 | Entry | 13 | Test.kt:6:3:6:18 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 14 | Test.kt:7:3:7:16 | var ...; | +| Test.kt:4:2:79:2 | Entry | 15 | Test.kt:7:3:7:16 | Before z | +| Test.kt:4:2:79:2 | Entry | 16 | Test.kt:7:16:7:16 | 0 | +| Test.kt:4:2:79:2 | Entry | 17 | Test.kt:7:3:7:16 | z | +| Test.kt:4:2:79:2 | Entry | 18 | Test.kt:7:3:7:16 | After z | +| Test.kt:4:2:79:2 | Entry | 19 | Test.kt:7:3:7:16 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 20 | Test.kt:8:3:8:16 | var ...; | +| Test.kt:4:2:79:2 | Entry | 21 | Test.kt:8:3:8:16 | Before w | +| Test.kt:4:2:79:2 | Entry | 22 | Test.kt:8:16:8:16 | 0 | +| Test.kt:4:2:79:2 | Entry | 23 | Test.kt:8:3:8:16 | w | +| Test.kt:4:2:79:2 | Entry | 24 | Test.kt:8:3:8:16 | After w | +| Test.kt:4:2:79:2 | Entry | 25 | Test.kt:8:3:8:16 | After var ...; | +| Test.kt:4:2:79:2 | Entry | 26 | Test.kt:11:3:16:3 | ; | +| Test.kt:4:2:79:2 | Entry | 27 | Test.kt:11:3:16:3 | when ... | +| Test.kt:4:2:79:2 | Entry | 28 | Test.kt:11:7:14:3 | ... -> ... | +| Test.kt:4:2:79:2 | Entry | 29 | Test.kt:11:7:11:11 | Before ... > ... | +| Test.kt:4:2:79:2 | Entry | 30 | Test.kt:11:7:11:7 | x | +| Test.kt:4:2:79:2 | Entry | 31 | Test.kt:11:11:11:11 | 0 | +| Test.kt:4:2:79:2 | Entry | 32 | Test.kt:11:7:11:11 | ... > ... | | Test.kt:4:2:79:2 | Normal Exit | 0 | Test.kt:4:2:79:2 | Normal Exit | -| Test.kt:4:13:79:2 | { ... } | 0 | Test.kt:4:13:79:2 | { ... } | -| Test.kt:4:13:79:2 | { ... } | 1 | Test.kt:5:3:5:16 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 2 | Test.kt:5:16:5:16 | 0 | -| Test.kt:4:13:79:2 | { ... } | 3 | Test.kt:5:3:5:16 | x | -| Test.kt:4:13:79:2 | { ... } | 4 | Test.kt:6:3:6:18 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 5 | Test.kt:6:17:6:18 | 50 | -| Test.kt:4:13:79:2 | { ... } | 6 | Test.kt:6:3:6:18 | y | -| Test.kt:4:13:79:2 | { ... } | 7 | Test.kt:7:3:7:16 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 8 | Test.kt:7:16:7:16 | 0 | -| Test.kt:4:13:79:2 | { ... } | 9 | Test.kt:7:3:7:16 | z | -| Test.kt:4:13:79:2 | { ... } | 10 | Test.kt:8:3:8:16 | var ...; | -| Test.kt:4:13:79:2 | { ... } | 11 | Test.kt:8:16:8:16 | 0 | -| Test.kt:4:13:79:2 | { ... } | 12 | Test.kt:8:3:8:16 | w | -| Test.kt:4:13:79:2 | { ... } | 13 | Test.kt:11:3:16:3 | ; | -| Test.kt:4:13:79:2 | { ... } | 14 | Test.kt:11:3:16:3 | when ... | -| Test.kt:4:13:79:2 | { ... } | 15 | Test.kt:11:7:14:3 | ... -> ... | -| Test.kt:4:13:79:2 | { ... } | 16 | Test.kt:11:7:11:7 | x | -| Test.kt:4:13:79:2 | { ... } | 17 | Test.kt:11:11:11:11 | 0 | -| Test.kt:4:13:79:2 | { ... } | 18 | Test.kt:11:7:11:11 | ... > ... | -| Test.kt:11:14:14:3 | { ... } | 0 | Test.kt:11:14:14:3 | { ... } | -| Test.kt:11:14:14:3 | { ... } | 1 | Test.kt:12:4:12:9 | ; | -| Test.kt:11:14:14:3 | { ... } | 2 | Test.kt:12:8:12:9 | 20 | -| Test.kt:11:14:14:3 | { ... } | 3 | Test.kt:12:4:12:9 | ...=... | -| Test.kt:11:14:14:3 | { ... } | 4 | Test.kt:13:4:13:9 | ; | -| Test.kt:11:14:14:3 | { ... } | 5 | Test.kt:13:8:13:9 | 10 | -| Test.kt:11:14:14:3 | { ... } | 6 | Test.kt:13:4:13:9 | ...=... | -| Test.kt:14:10:16:3 | ... -> ... | 0 | Test.kt:14:10:16:3 | ... -> ... | -| Test.kt:14:10:16:3 | ... -> ... | 1 | Test.kt:14:10:16:3 | true | -| Test.kt:14:10:16:3 | ... -> ... | 2 | Test.kt:14:10:16:3 | { ... } | -| Test.kt:14:10:16:3 | ... -> ... | 3 | Test.kt:15:4:15:9 | ; | -| Test.kt:14:10:16:3 | ... -> ... | 4 | Test.kt:15:8:15:9 | 30 | -| Test.kt:14:10:16:3 | ... -> ... | 5 | Test.kt:15:4:15:9 | ...=... | -| Test.kt:18:3:18:7 | ; | 0 | Test.kt:18:3:18:7 | ; | -| Test.kt:18:3:18:7 | ; | 1 | Test.kt:18:7:18:7 | 0 | -| Test.kt:18:3:18:7 | ; | 2 | Test.kt:18:3:18:7 | ...=... | -| Test.kt:18:3:18:7 | ; | 3 | Test.kt:21:3:24:9 | ; | -| Test.kt:18:3:18:7 | ; | 4 | Test.kt:21:3:24:9 | when ... | -| Test.kt:18:3:18:7 | ; | 5 | Test.kt:21:6:22:9 | ... -> ... | -| Test.kt:18:3:18:7 | ; | 6 | Test.kt:21:6:21:6 | x | -| Test.kt:18:3:18:7 | ; | 7 | Test.kt:21:10:21:10 | 0 | -| Test.kt:18:3:18:7 | ; | 8 | Test.kt:21:6:21:10 | ... < ... | -| Test.kt:22:4:22:9 | ; | 0 | Test.kt:22:4:22:9 | ; | -| Test.kt:22:4:22:9 | ; | 1 | Test.kt:22:8:22:9 | 40 | -| Test.kt:22:4:22:9 | ; | 2 | Test.kt:22:4:22:9 | ...=... | -| Test.kt:22:4:22:9 | ; | 3 | Test.kt:27:3:27:8 | ; | -| Test.kt:22:4:22:9 | ; | 4 | Test.kt:27:7:27:8 | 10 | -| Test.kt:22:4:22:9 | ; | 5 | Test.kt:27:3:27:8 | ...=... | -| Test.kt:22:4:22:9 | ; | 6 | Test.kt:30:3:33:3 | ; | -| Test.kt:22:4:22:9 | ; | 7 | Test.kt:30:3:33:3 | when ... | -| Test.kt:22:4:22:9 | ; | 8 | Test.kt:30:7:33:3 | ... -> ... | -| Test.kt:22:4:22:9 | ; | 9 | Test.kt:30:7:30:7 | x | -| Test.kt:22:4:22:9 | ; | 10 | Test.kt:30:12:30:12 | 0 | -| Test.kt:22:4:22:9 | ; | 11 | Test.kt:30:7:30:12 | ... (value equals) ... | -| Test.kt:24:4:24:9 | ... -> ... | 0 | Test.kt:24:4:24:9 | ... -> ... | -| Test.kt:24:4:24:9 | ... -> ... | 1 | Test.kt:24:4:24:9 | true | -| Test.kt:24:4:24:9 | ... -> ... | 2 | Test.kt:24:10:24:10 | INSTANCE | -| Test.kt:24:4:24:9 | ... -> ... | 3 | Test.kt:24:4:24:9 | return ... | -| Test.kt:30:15:33:3 | { ... } | 0 | Test.kt:30:15:33:3 | { ... } | -| Test.kt:30:15:33:3 | { ... } | 1 | Test.kt:31:4:31:9 | ; | -| Test.kt:30:15:33:3 | { ... } | 2 | Test.kt:31:8:31:9 | 60 | -| Test.kt:30:15:33:3 | { ... } | 3 | Test.kt:31:4:31:9 | ...=... | -| Test.kt:30:15:33:3 | { ... } | 4 | Test.kt:32:4:32:9 | ; | -| Test.kt:30:15:33:3 | { ... } | 5 | Test.kt:32:8:32:9 | 10 | -| Test.kt:30:15:33:3 | { ... } | 6 | Test.kt:32:4:32:9 | ...=... | -| Test.kt:35:3:35:8 | ; | 0 | Test.kt:35:3:35:8 | ; | -| Test.kt:35:3:35:8 | ; | 1 | Test.kt:35:7:35:8 | 20 | -| Test.kt:35:3:35:8 | ; | 2 | Test.kt:35:3:35:8 | ...=... | -| Test.kt:35:3:35:8 | ; | 3 | Test.kt:38:3:41:3 | while (...) | -| Test.kt:38:9:38:9 | x | 0 | Test.kt:38:9:38:9 | x | -| Test.kt:38:9:38:9 | x | 1 | Test.kt:38:13:38:13 | 0 | -| Test.kt:38:9:38:9 | x | 2 | Test.kt:38:9:38:13 | ... > ... | -| Test.kt:38:16:41:3 | { ... } | 0 | Test.kt:38:16:41:3 | { ... } | -| Test.kt:38:16:41:3 | { ... } | 1 | Test.kt:39:4:39:9 | ; | -| Test.kt:38:16:41:3 | { ... } | 2 | Test.kt:39:8:39:9 | 10 | -| Test.kt:38:16:41:3 | { ... } | 3 | Test.kt:39:4:39:9 | ...=... | -| Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | ; | -| Test.kt:38:16:41:3 | { ... } | 5 | Test.kt:40:4:40:6 | | -| Test.kt:38:16:41:3 | { ... } | 6 | Test.kt:40:4:40:6 | { ... } | -| Test.kt:38:16:41:3 | { ... } | 7 | Test.kt:40:4:40:6 | var ...; | -| Test.kt:38:16:41:3 | { ... } | 8 | Test.kt:40:4:40:4 | x | -| Test.kt:38:16:41:3 | { ... } | 9 | Test.kt:40:4:40:6 | | -| Test.kt:38:16:41:3 | { ... } | 10 | Test.kt:40:4:40:6 | ; | -| Test.kt:38:16:41:3 | { ... } | 11 | Test.kt:40:4:40:6 | | -| Test.kt:38:16:41:3 | { ... } | 12 | Test.kt:40:4:40:6 | dec(...) | -| Test.kt:38:16:41:3 | { ... } | 13 | Test.kt:40:4:40:6 | ...=... | -| Test.kt:38:16:41:3 | { ... } | 14 | Test.kt:40:4:40:6 | ; | -| Test.kt:38:16:41:3 | { ... } | 15 | Test.kt:40:4:40:6 | | -| Test.kt:38:16:41:3 | { ... } | 16 | Test.kt:40:4:40:6 | | -| Test.kt:43:3:43:8 | ; | 0 | Test.kt:43:3:43:8 | ; | -| Test.kt:43:3:43:8 | ; | 1 | Test.kt:43:7:43:8 | 30 | -| Test.kt:43:3:43:8 | ; | 2 | Test.kt:43:3:43:8 | ...=... | -| Test.kt:43:3:43:8 | ; | 3 | Test.kt:73:3:73:8 | ; | -| Test.kt:43:3:43:8 | ; | 4 | Test.kt:73:7:73:8 | 50 | -| Test.kt:43:3:43:8 | ; | 5 | Test.kt:73:3:73:8 | ...=... | -| Test.kt:43:3:43:8 | ; | 6 | Test.kt:77:3:77:8 | ; | -| Test.kt:43:3:43:8 | ; | 7 | Test.kt:77:7:77:8 | 40 | -| Test.kt:43:3:43:8 | ; | 8 | Test.kt:77:3:77:8 | ...=... | -| Test.kt:43:3:43:8 | ; | 9 | Test.kt:78:9:78:9 | INSTANCE | -| Test.kt:43:3:43:8 | ; | 10 | Test.kt:78:3:78:8 | return ... | -| Test.kt:82:1:89:1 | Exceptional Exit | 0 | Test.kt:82:1:89:1 | Exceptional Exit | +| Test.kt:4:2:79:2 | Normal Exit | 1 | Test.kt:4:2:79:2 | Exit | +| Test.kt:11:3:16:3 | After when ... | 0 | Test.kt:11:3:16:3 | After when ... | +| Test.kt:11:3:16:3 | After when ... | 1 | Test.kt:11:3:16:3 | After ; | +| Test.kt:11:3:16:3 | After when ... | 2 | Test.kt:18:3:18:7 | ; | +| Test.kt:11:3:16:3 | After when ... | 3 | Test.kt:18:3:18:7 | Before ...=... | +| Test.kt:11:3:16:3 | After when ... | 4 | Test.kt:18:3:18:7 | z | +| Test.kt:11:3:16:3 | After when ... | 5 | Test.kt:18:7:18:7 | 0 | +| Test.kt:11:3:16:3 | After when ... | 6 | Test.kt:18:3:18:7 | ...=... | +| Test.kt:11:3:16:3 | After when ... | 7 | Test.kt:18:3:18:7 | After ...=... | +| Test.kt:11:3:16:3 | After when ... | 8 | Test.kt:18:3:18:7 | After ; | +| Test.kt:11:3:16:3 | After when ... | 9 | Test.kt:21:3:24:9 | ; | +| Test.kt:11:3:16:3 | After when ... | 10 | Test.kt:21:3:24:9 | when ... | +| Test.kt:11:3:16:3 | After when ... | 11 | Test.kt:21:6:22:9 | ... -> ... | +| Test.kt:11:3:16:3 | After when ... | 12 | Test.kt:21:6:21:10 | Before ... < ... | +| Test.kt:11:3:16:3 | After when ... | 13 | Test.kt:21:6:21:6 | x | +| Test.kt:11:3:16:3 | After when ... | 14 | Test.kt:21:10:21:10 | 0 | +| Test.kt:11:3:16:3 | After when ... | 15 | Test.kt:21:6:21:10 | ... < ... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 0 | Test.kt:11:7:11:11 | After ... > ... [false] | +| Test.kt:11:7:11:11 | After ... > ... [false] | 1 | Test.kt:14:10:16:3 | ... -> ... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 2 | Test.kt:14:10:16:3 | true | +| Test.kt:11:7:11:11 | After ... > ... [false] | 3 | Test.kt:14:10:16:3 | After true [true] | +| Test.kt:11:7:11:11 | After ... > ... [false] | 4 | Test.kt:14:10:16:3 | { ... } | +| Test.kt:11:7:11:11 | After ... > ... [false] | 5 | Test.kt:15:4:15:9 | ; | +| Test.kt:11:7:11:11 | After ... > ... [false] | 6 | Test.kt:15:4:15:9 | Before ...=... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 7 | Test.kt:15:4:15:9 | y | +| Test.kt:11:7:11:11 | After ... > ... [false] | 8 | Test.kt:15:8:15:9 | 30 | +| Test.kt:11:7:11:11 | After ... > ... [false] | 9 | Test.kt:15:4:15:9 | ...=... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 10 | Test.kt:15:4:15:9 | After ...=... | +| Test.kt:11:7:11:11 | After ... > ... [false] | 11 | Test.kt:15:4:15:9 | After ; | +| Test.kt:11:7:11:11 | After ... > ... [false] | 12 | Test.kt:14:10:16:3 | After { ... } | +| Test.kt:11:7:11:11 | After ... > ... [true] | 0 | Test.kt:11:7:11:11 | After ... > ... [true] | +| Test.kt:11:7:11:11 | After ... > ... [true] | 1 | Test.kt:11:14:14:3 | { ... } | +| Test.kt:11:7:11:11 | After ... > ... [true] | 2 | Test.kt:12:4:12:9 | ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 3 | Test.kt:12:4:12:9 | Before ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 4 | Test.kt:12:4:12:9 | y | +| Test.kt:11:7:11:11 | After ... > ... [true] | 5 | Test.kt:12:8:12:9 | 20 | +| Test.kt:11:7:11:11 | After ... > ... [true] | 6 | Test.kt:12:4:12:9 | ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 7 | Test.kt:12:4:12:9 | After ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 8 | Test.kt:12:4:12:9 | After ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 9 | Test.kt:13:4:13:9 | ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 10 | Test.kt:13:4:13:9 | Before ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 11 | Test.kt:13:4:13:9 | z | +| Test.kt:11:7:11:11 | After ... > ... [true] | 12 | Test.kt:13:8:13:9 | 10 | +| Test.kt:11:7:11:11 | After ... > ... [true] | 13 | Test.kt:13:4:13:9 | ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 14 | Test.kt:13:4:13:9 | After ...=... | +| Test.kt:11:7:11:11 | After ... > ... [true] | 15 | Test.kt:13:4:13:9 | After ; | +| Test.kt:11:7:11:11 | After ... > ... [true] | 16 | Test.kt:11:14:14:3 | After { ... } | +| Test.kt:21:6:21:10 | After ... < ... [false] | 0 | Test.kt:21:6:21:10 | After ... < ... [false] | +| Test.kt:21:6:21:10 | After ... < ... [false] | 1 | Test.kt:24:4:24:9 | ... -> ... | +| Test.kt:21:6:21:10 | After ... < ... [false] | 2 | Test.kt:24:4:24:9 | true | +| Test.kt:21:6:21:10 | After ... < ... [false] | 3 | Test.kt:24:4:24:9 | After true [true] | +| Test.kt:21:6:21:10 | After ... < ... [false] | 4 | Test.kt:24:4:24:9 | Before return ... | +| Test.kt:21:6:21:10 | After ... < ... [false] | 5 | Test.kt:24:10:24:10 | INSTANCE | +| Test.kt:21:6:21:10 | After ... < ... [false] | 6 | Test.kt:24:4:24:9 | return ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 0 | Test.kt:21:6:21:10 | After ... < ... [true] | +| Test.kt:21:6:21:10 | After ... < ... [true] | 1 | Test.kt:22:4:22:9 | ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 2 | Test.kt:22:4:22:9 | Before ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 3 | Test.kt:22:4:22:9 | y | +| Test.kt:21:6:21:10 | After ... < ... [true] | 4 | Test.kt:22:8:22:9 | 40 | +| Test.kt:21:6:21:10 | After ... < ... [true] | 5 | Test.kt:22:4:22:9 | ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 6 | Test.kt:22:4:22:9 | After ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 7 | Test.kt:22:4:22:9 | After ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 8 | Test.kt:21:3:24:9 | After when ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 9 | Test.kt:21:3:24:9 | After ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 10 | Test.kt:27:3:27:8 | ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 11 | Test.kt:27:3:27:8 | Before ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 12 | Test.kt:27:3:27:8 | z | +| Test.kt:21:6:21:10 | After ... < ... [true] | 13 | Test.kt:27:7:27:8 | 10 | +| Test.kt:21:6:21:10 | After ... < ... [true] | 14 | Test.kt:27:3:27:8 | ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 15 | Test.kt:27:3:27:8 | After ...=... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 16 | Test.kt:27:3:27:8 | After ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 17 | Test.kt:30:3:33:3 | ; | +| Test.kt:21:6:21:10 | After ... < ... [true] | 18 | Test.kt:30:3:33:3 | when ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 19 | Test.kt:30:7:33:3 | ... -> ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 20 | Test.kt:30:7:30:12 | Before ... (value equals) ... | +| Test.kt:21:6:21:10 | After ... < ... [true] | 21 | Test.kt:30:7:30:7 | x | +| Test.kt:21:6:21:10 | After ... < ... [true] | 22 | Test.kt:30:12:30:12 | 0 | +| Test.kt:21:6:21:10 | After ... < ... [true] | 23 | Test.kt:30:7:30:12 | ... (value equals) ... | +| Test.kt:30:3:33:3 | After when ... | 0 | Test.kt:30:3:33:3 | After when ... | +| Test.kt:30:3:33:3 | After when ... | 1 | Test.kt:30:3:33:3 | After ; | +| Test.kt:30:3:33:3 | After when ... | 2 | Test.kt:35:3:35:8 | ; | +| Test.kt:30:3:33:3 | After when ... | 3 | Test.kt:35:3:35:8 | Before ...=... | +| Test.kt:30:3:33:3 | After when ... | 4 | Test.kt:35:3:35:8 | z | +| Test.kt:30:3:33:3 | After when ... | 5 | Test.kt:35:7:35:8 | 20 | +| Test.kt:30:3:33:3 | After when ... | 6 | Test.kt:35:3:35:8 | ...=... | +| Test.kt:30:3:33:3 | After when ... | 7 | Test.kt:35:3:35:8 | After ...=... | +| Test.kt:30:3:33:3 | After when ... | 8 | Test.kt:35:3:35:8 | After ; | +| Test.kt:30:3:33:3 | After when ... | 9 | Test.kt:38:3:41:3 | while (...) | +| Test.kt:30:7:30:12 | After ... (value equals) ... [false] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [false] | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 0 | Test.kt:30:7:30:12 | After ... (value equals) ... [true] | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 1 | Test.kt:30:15:33:3 | { ... } | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 2 | Test.kt:31:4:31:9 | ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 3 | Test.kt:31:4:31:9 | Before ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 4 | Test.kt:31:4:31:9 | y | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 5 | Test.kt:31:8:31:9 | 60 | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 6 | Test.kt:31:4:31:9 | ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 7 | Test.kt:31:4:31:9 | After ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 8 | Test.kt:31:4:31:9 | After ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 9 | Test.kt:32:4:32:9 | ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 10 | Test.kt:32:4:32:9 | Before ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 11 | Test.kt:32:4:32:9 | z | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 12 | Test.kt:32:8:32:9 | 10 | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 13 | Test.kt:32:4:32:9 | ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 14 | Test.kt:32:4:32:9 | After ...=... | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 15 | Test.kt:32:4:32:9 | After ; | +| Test.kt:30:7:30:12 | After ... (value equals) ... [true] | 16 | Test.kt:30:15:33:3 | After { ... } | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 0 | Test.kt:38:3:41:3 | [LoopHeader] while (...) | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 1 | Test.kt:38:9:38:13 | Before ... > ... | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 2 | Test.kt:38:9:38:9 | x | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 3 | Test.kt:38:13:38:13 | 0 | +| Test.kt:38:3:41:3 | [LoopHeader] while (...) | 4 | Test.kt:38:9:38:13 | ... > ... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 0 | Test.kt:38:9:38:13 | After ... > ... [false] | +| Test.kt:38:9:38:13 | After ... > ... [false] | 1 | Test.kt:38:3:41:3 | After while (...) | +| Test.kt:38:9:38:13 | After ... > ... [false] | 2 | Test.kt:43:3:43:8 | ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 3 | Test.kt:43:3:43:8 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 4 | Test.kt:43:3:43:8 | z | +| Test.kt:38:9:38:13 | After ... > ... [false] | 5 | Test.kt:43:7:43:8 | 30 | +| Test.kt:38:9:38:13 | After ... > ... [false] | 6 | Test.kt:43:3:43:8 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 7 | Test.kt:43:3:43:8 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 8 | Test.kt:43:3:43:8 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 9 | Test.kt:73:3:73:8 | ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 10 | Test.kt:73:3:73:8 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 11 | Test.kt:73:3:73:8 | z | +| Test.kt:38:9:38:13 | After ... > ... [false] | 12 | Test.kt:73:7:73:8 | 50 | +| Test.kt:38:9:38:13 | After ... > ... [false] | 13 | Test.kt:73:3:73:8 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 14 | Test.kt:73:3:73:8 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 15 | Test.kt:73:3:73:8 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 16 | Test.kt:77:3:77:8 | ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 17 | Test.kt:77:3:77:8 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 18 | Test.kt:77:3:77:8 | w | +| Test.kt:38:9:38:13 | After ... > ... [false] | 19 | Test.kt:77:7:77:8 | 40 | +| Test.kt:38:9:38:13 | After ... > ... [false] | 20 | Test.kt:77:3:77:8 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 21 | Test.kt:77:3:77:8 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 22 | Test.kt:77:3:77:8 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [false] | 23 | Test.kt:78:3:78:8 | Before return ... | +| Test.kt:38:9:38:13 | After ... > ... [false] | 24 | Test.kt:78:9:78:9 | INSTANCE | +| Test.kt:38:9:38:13 | After ... > ... [false] | 25 | Test.kt:78:3:78:8 | return ... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 0 | Test.kt:38:9:38:13 | After ... > ... [true] | +| Test.kt:38:9:38:13 | After ... > ... [true] | 1 | Test.kt:38:16:41:3 | { ... } | +| Test.kt:38:9:38:13 | After ... > ... [true] | 2 | Test.kt:39:4:39:9 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 3 | Test.kt:39:4:39:9 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 4 | Test.kt:39:4:39:9 | y | +| Test.kt:38:9:38:13 | After ... > ... [true] | 5 | Test.kt:39:8:39:9 | 10 | +| Test.kt:38:9:38:13 | After ... > ... [true] | 6 | Test.kt:39:4:39:9 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 7 | Test.kt:39:4:39:9 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 8 | Test.kt:39:4:39:9 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 9 | Test.kt:40:4:40:6 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 10 | Test.kt:40:4:40:6 | Before | +| Test.kt:38:9:38:13 | After ... > ... [true] | 11 | Test.kt:40:4:40:6 | Before | +| Test.kt:38:9:38:13 | After ... > ... [true] | 12 | Test.kt:40:4:40:6 | { ... } | +| Test.kt:38:9:38:13 | After ... > ... [true] | 13 | Test.kt:40:4:40:6 | var ...; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 14 | Test.kt:40:4:40:6 | Before | +| Test.kt:38:9:38:13 | After ... > ... [true] | 15 | Test.kt:40:4:40:4 | x | +| Test.kt:38:9:38:13 | After ... > ... [true] | 16 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 17 | Test.kt:40:4:40:6 | After | +| Test.kt:38:9:38:13 | After ... > ... [true] | 18 | Test.kt:40:4:40:6 | After var ...; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 19 | Test.kt:40:4:40:6 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 20 | Test.kt:40:4:40:6 | Before ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 21 | Test.kt:40:4:40:6 | x | +| Test.kt:38:9:38:13 | After ... > ... [true] | 22 | Test.kt:40:4:40:6 | Before dec(...) | +| Test.kt:38:9:38:13 | After ... > ... [true] | 23 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 24 | Test.kt:40:4:40:6 | dec(...) | +| Test.kt:38:9:38:13 | After ... > ... [true] | 25 | Test.kt:40:4:40:6 | After dec(...) | +| Test.kt:38:9:38:13 | After ... > ... [true] | 26 | Test.kt:40:4:40:6 | ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 27 | Test.kt:40:4:40:6 | After ...=... | +| Test.kt:38:9:38:13 | After ... > ... [true] | 28 | Test.kt:40:4:40:6 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 29 | Test.kt:40:4:40:6 | ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 30 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 31 | Test.kt:40:4:40:6 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 32 | Test.kt:40:4:40:6 | After { ... } | +| Test.kt:38:9:38:13 | After ... > ... [true] | 33 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 34 | Test.kt:40:4:40:6 | After | +| Test.kt:38:9:38:13 | After ... > ... [true] | 35 | Test.kt:40:4:40:6 | | +| Test.kt:38:9:38:13 | After ... > ... [true] | 36 | Test.kt:40:4:40:6 | After | +| Test.kt:38:9:38:13 | After ... > ... [true] | 37 | Test.kt:40:4:40:6 | After ; | +| Test.kt:38:9:38:13 | After ... > ... [true] | 38 | Test.kt:38:16:41:3 | After { ... } | +| Test.kt:82:1:89:1 | Entry | 0 | Test.kt:82:1:89:1 | Entry | +| Test.kt:82:1:89:1 | Entry | 1 | Test.kt:82:21:89:1 | { ... } | +| Test.kt:82:1:89:1 | Entry | 2 | Test.kt:83:2:88:2 | try ... | +| Test.kt:82:1:89:1 | Entry | 3 | Test.kt:83:6:86:2 | { ... } | +| Test.kt:82:1:89:1 | Entry | 4 | Test.kt:84:3:84:18 | var ...; | +| Test.kt:82:1:89:1 | Entry | 5 | Test.kt:84:3:84:18 | Before x | +| Test.kt:82:1:89:1 | Entry | 6 | Test.kt:84:11:84:18 | Before (...)... | +| Test.kt:82:1:89:1 | Entry | 7 | Test.kt:84:11:84:11 | o | +| Test.kt:82:1:89:1 | Entry | 8 | Test.kt:84:11:84:18 | (...)... | | Test.kt:82:1:89:1 | Exit | 0 | Test.kt:82:1:89:1 | Exit | | Test.kt:82:1:89:1 | Normal Exit | 0 | Test.kt:82:1:89:1 | Normal Exit | -| Test.kt:82:21:89:1 | { ... } | 0 | Test.kt:82:21:89:1 | { ... } | -| Test.kt:82:21:89:1 | { ... } | 1 | Test.kt:83:2:88:2 | try ... | -| Test.kt:82:21:89:1 | { ... } | 2 | Test.kt:83:6:86:2 | { ... } | -| Test.kt:82:21:89:1 | { ... } | 3 | Test.kt:84:3:84:18 | var ...; | -| Test.kt:82:21:89:1 | { ... } | 4 | Test.kt:84:11:84:11 | o | -| Test.kt:82:21:89:1 | { ... } | 5 | Test.kt:84:11:84:18 | (...)... | -| Test.kt:84:3:84:18 | x | 0 | Test.kt:84:3:84:18 | x | -| Test.kt:84:3:84:18 | x | 1 | Test.kt:85:10:85:10 | 1 | -| Test.kt:84:3:84:18 | x | 2 | Test.kt:85:3:85:10 | return ... | +| Test.kt:84:11:84:18 | After (...)... | 0 | Test.kt:84:11:84:18 | After (...)... | +| Test.kt:84:11:84:18 | After (...)... | 1 | Test.kt:84:3:84:18 | x | +| Test.kt:84:11:84:18 | After (...)... | 2 | Test.kt:84:3:84:18 | After x | +| Test.kt:84:11:84:18 | After (...)... | 3 | Test.kt:84:3:84:18 | After var ...; | +| Test.kt:84:11:84:18 | After (...)... | 4 | Test.kt:85:3:85:10 | Before return ... | +| Test.kt:84:11:84:18 | After (...)... | 5 | Test.kt:85:10:85:10 | 1 | +| Test.kt:84:11:84:18 | After (...)... | 6 | Test.kt:85:3:85:10 | return ... | +| Test.kt:86:4:88:2 | After catch (...) [match] | 0 | Test.kt:86:4:88:2 | After catch (...) [match] | +| Test.kt:86:4:88:2 | After catch (...) [match] | 1 | Test.kt:86:11:86:31 | e | +| Test.kt:86:4:88:2 | After catch (...) [match] | 2 | Test.kt:86:34:88:2 | { ... } | +| Test.kt:86:4:88:2 | After catch (...) [match] | 3 | Test.kt:87:3:87:10 | Before return ... | +| Test.kt:86:4:88:2 | After catch (...) [match] | 4 | Test.kt:87:10:87:10 | 2 | +| Test.kt:86:4:88:2 | After catch (...) [match] | 5 | Test.kt:87:3:87:10 | return ... | +| Test.kt:86:4:88:2 | After catch (...) [no-match] | 0 | Test.kt:86:4:88:2 | After catch (...) [no-match] | +| Test.kt:86:4:88:2 | After catch (...) [no-match] | 1 | Test.kt:82:1:89:1 | Exceptional Exit | | Test.kt:86:4:88:2 | catch (...) | 0 | Test.kt:86:4:88:2 | catch (...) | -| Test.kt:86:4:88:2 | catch (...) | 1 | Test.kt:86:11:86:31 | e | -| Test.kt:86:4:88:2 | catch (...) | 2 | Test.kt:86:34:88:2 | { ... } | -| Test.kt:86:4:88:2 | catch (...) | 3 | Test.kt:87:10:87:10 | 2 | -| Test.kt:86:4:88:2 | catch (...) | 4 | Test.kt:87:3:87:10 | return ... | -| Test.kt:91:1:98:1 | Exceptional Exit | 0 | Test.kt:91:1:98:1 | Exceptional Exit | +| Test.kt:91:1:98:1 | Entry | 0 | Test.kt:91:1:98:1 | Entry | +| Test.kt:91:1:98:1 | Entry | 1 | Test.kt:91:22:98:1 | { ... } | +| Test.kt:91:1:98:1 | Entry | 2 | Test.kt:92:2:97:2 | try ... | +| Test.kt:91:1:98:1 | Entry | 3 | Test.kt:92:6:95:2 | { ... } | +| Test.kt:91:1:98:1 | Entry | 4 | Test.kt:93:3:93:13 | var ...; | +| Test.kt:91:1:98:1 | Entry | 5 | Test.kt:93:3:93:13 | Before x | +| Test.kt:91:1:98:1 | Entry | 6 | Test.kt:93:11:93:13 | Before ...!! | +| Test.kt:91:1:98:1 | Entry | 7 | Test.kt:93:11:93:11 | o | +| Test.kt:91:1:98:1 | Entry | 8 | Test.kt:93:11:93:13 | ...!! | | Test.kt:91:1:98:1 | Exit | 0 | Test.kt:91:1:98:1 | Exit | | Test.kt:91:1:98:1 | Normal Exit | 0 | Test.kt:91:1:98:1 | Normal Exit | -| Test.kt:91:22:98:1 | { ... } | 0 | Test.kt:91:22:98:1 | { ... } | -| Test.kt:91:22:98:1 | { ... } | 1 | Test.kt:92:2:97:2 | try ... | -| Test.kt:91:22:98:1 | { ... } | 2 | Test.kt:92:6:95:2 | { ... } | -| Test.kt:91:22:98:1 | { ... } | 3 | Test.kt:93:3:93:13 | var ...; | -| Test.kt:91:22:98:1 | { ... } | 4 | Test.kt:93:11:93:11 | o | -| Test.kt:91:22:98:1 | { ... } | 5 | Test.kt:93:11:93:13 | ...!! | -| Test.kt:93:3:93:13 | x | 0 | Test.kt:93:3:93:13 | x | -| Test.kt:93:3:93:13 | x | 1 | Test.kt:94:10:94:10 | 1 | -| Test.kt:93:3:93:13 | x | 2 | Test.kt:94:3:94:10 | return ... | +| Test.kt:93:11:93:13 | After ...!! | 0 | Test.kt:93:11:93:13 | After ...!! | +| Test.kt:93:11:93:13 | After ...!! | 1 | Test.kt:93:3:93:13 | x | +| Test.kt:93:11:93:13 | After ...!! | 2 | Test.kt:93:3:93:13 | After x | +| Test.kt:93:11:93:13 | After ...!! | 3 | Test.kt:93:3:93:13 | After var ...; | +| Test.kt:93:11:93:13 | After ...!! | 4 | Test.kt:94:3:94:10 | Before return ... | +| Test.kt:93:11:93:13 | After ...!! | 5 | Test.kt:94:10:94:10 | 1 | +| Test.kt:93:11:93:13 | After ...!! | 6 | Test.kt:94:3:94:10 | return ... | +| Test.kt:95:4:97:2 | After catch (...) [match] | 0 | Test.kt:95:4:97:2 | After catch (...) [match] | +| Test.kt:95:4:97:2 | After catch (...) [match] | 1 | Test.kt:95:11:95:33 | e | +| Test.kt:95:4:97:2 | After catch (...) [match] | 2 | Test.kt:95:36:97:2 | { ... } | +| Test.kt:95:4:97:2 | After catch (...) [match] | 3 | Test.kt:96:3:96:10 | Before return ... | +| Test.kt:95:4:97:2 | After catch (...) [match] | 4 | Test.kt:96:10:96:10 | 2 | +| Test.kt:95:4:97:2 | After catch (...) [match] | 5 | Test.kt:96:3:96:10 | return ... | +| Test.kt:95:4:97:2 | After catch (...) [no-match] | 0 | Test.kt:95:4:97:2 | After catch (...) [no-match] | +| Test.kt:95:4:97:2 | After catch (...) [no-match] | 1 | Test.kt:91:1:98:1 | Exceptional Exit | | Test.kt:95:4:97:2 | catch (...) | 0 | Test.kt:95:4:97:2 | catch (...) | -| Test.kt:95:4:97:2 | catch (...) | 1 | Test.kt:95:11:95:33 | e | -| Test.kt:95:4:97:2 | catch (...) | 2 | Test.kt:95:36:97:2 | { ... } | -| Test.kt:95:4:97:2 | catch (...) | 3 | Test.kt:96:10:96:10 | 2 | -| Test.kt:95:4:97:2 | catch (...) | 4 | Test.kt:96:3:96:10 | return ... | +| Test.kt:100:1:110:1 | Entry | 0 | Test.kt:100:1:110:1 | Entry | +| Test.kt:100:1:110:1 | Entry | 1 | Test.kt:100:25:110:1 | { ... } | +| Test.kt:100:1:110:1 | Entry | 2 | Test.kt:101:5:103:5 | ; | +| Test.kt:100:1:110:1 | Entry | 3 | Test.kt:101:5:103:5 | when ... | +| Test.kt:100:1:110:1 | Entry | 4 | Test.kt:101:9:103:5 | ... -> ... | +| Test.kt:100:1:110:1 | Entry | 5 | Test.kt:101:9:101:30 | ... && ... | +| Test.kt:100:1:110:1 | Entry | 6 | Test.kt:101:9:101:17 | Before ... (value equals) ... | +| Test.kt:100:1:110:1 | Entry | 7 | Test.kt:101:9:101:9 | x | +| Test.kt:100:1:110:1 | Entry | 8 | Test.kt:101:14:101:17 | null | +| Test.kt:100:1:110:1 | Entry | 9 | Test.kt:101:9:101:17 | ... (value equals) ... | | Test.kt:100:1:110:1 | Exit | 0 | Test.kt:100:1:110:1 | Exit | -| Test.kt:100:1:110:1 | Normal Exit | 0 | Test.kt:100:1:110:1 | Normal Exit | -| Test.kt:100:25:110:1 | { ... } | 0 | Test.kt:100:25:110:1 | { ... } | -| Test.kt:100:25:110:1 | { ... } | 1 | Test.kt:101:5:103:5 | ; | -| Test.kt:100:25:110:1 | { ... } | 2 | Test.kt:101:5:103:5 | when ... | -| Test.kt:100:25:110:1 | { ... } | 3 | Test.kt:101:9:103:5 | ... -> ... | -| Test.kt:100:25:110:1 | { ... } | 4 | Test.kt:101:9:101:30 | ... && ... | -| Test.kt:100:25:110:1 | { ... } | 5 | Test.kt:101:9:101:9 | x | -| Test.kt:100:25:110:1 | { ... } | 6 | Test.kt:101:14:101:17 | null | -| Test.kt:100:25:110:1 | { ... } | 7 | Test.kt:101:9:101:17 | ... (value equals) ... | -| Test.kt:101:22:101:22 | y | 0 | Test.kt:101:22:101:22 | y | -| Test.kt:101:22:101:22 | y | 1 | Test.kt:101:27:101:30 | null | -| Test.kt:101:22:101:22 | y | 2 | Test.kt:101:22:101:30 | ... (value equals) ... | -| Test.kt:101:33:103:5 | { ... } | 0 | Test.kt:101:33:103:5 | { ... } | -| Test.kt:101:33:103:5 | { ... } | 1 | Test.kt:102:15:102:25 | new Exception(...) | -| Test.kt:101:33:103:5 | { ... } | 2 | Test.kt:102:9:102:25 | throw ... | -| Test.kt:101:33:103:5 | { ... } | 3 | Test.kt:100:1:110:1 | Exceptional Exit | -| Test.kt:105:5:109:5 | ; | 0 | Test.kt:105:5:109:5 | ; | -| Test.kt:105:5:109:5 | ; | 1 | Test.kt:105:5:109:5 | when ... | -| Test.kt:105:5:109:5 | ; | 2 | Test.kt:105:9:107:5 | ... -> ... | -| Test.kt:105:5:109:5 | ; | 3 | Test.kt:105:9:105:9 | x | -| Test.kt:105:5:109:5 | ; | 4 | Test.kt:105:14:105:17 | null | -| Test.kt:105:5:109:5 | ; | 5 | Test.kt:105:9:105:17 | ... (value not-equals) ... | -| Test.kt:105:20:107:5 | { ... } | 0 | Test.kt:105:20:107:5 | { ... } | -| Test.kt:105:20:107:5 | { ... } | 1 | Test.kt:106:9:106:29 | ; | -| Test.kt:105:20:107:5 | { ... } | 2 | Test.kt:106:17:106:28 | "x not null" | -| Test.kt:105:20:107:5 | { ... } | 3 | Test.kt:106:9:106:29 | println(...) | -| Test.kt:107:16:109:5 | ... -> ... | 0 | Test.kt:107:16:109:5 | ... -> ... | -| Test.kt:107:16:109:5 | ... -> ... | 1 | Test.kt:107:16:107:16 | y | -| Test.kt:107:16:109:5 | ... -> ... | 2 | Test.kt:107:21:107:24 | null | -| Test.kt:107:16:109:5 | ... -> ... | 3 | Test.kt:107:16:107:24 | ... (value not-equals) ... | -| Test.kt:107:27:109:5 | { ... } | 0 | Test.kt:107:27:109:5 | { ... } | -| Test.kt:107:27:109:5 | { ... } | 1 | Test.kt:108:9:108:29 | ; | -| Test.kt:107:27:109:5 | { ... } | 2 | Test.kt:108:17:108:28 | "y not null" | -| Test.kt:107:27:109:5 | { ... } | 3 | Test.kt:108:9:108:29 | println(...) | -| Test.kt:112:1:116:1 | Exceptional Exit | 0 | Test.kt:112:1:116:1 | Exceptional Exit | -| Test.kt:112:1:116:1 | Exit | 0 | Test.kt:112:1:116:1 | Exit | -| Test.kt:112:1:116:1 | Normal Exit | 0 | Test.kt:112:1:116:1 | Normal Exit | -| Test.kt:112:32:116:1 | { ... } | 0 | Test.kt:112:32:116:1 | { ... } | -| Test.kt:112:32:116:1 | { ... } | 1 | Test.kt:113:5:115:5 | ; | -| Test.kt:112:32:116:1 | { ... } | 2 | Test.kt:113:5:115:5 | when ... | -| Test.kt:112:32:116:1 | { ... } | 3 | Test.kt:113:9:115:5 | ... -> ... | -| Test.kt:112:32:116:1 | { ... } | 4 | Test.kt:113:9:113:14 | ... && ... | -| Test.kt:112:32:116:1 | { ... } | 5 | Test.kt:113:9:113:9 | x | -| Test.kt:113:14:113:14 | y | 0 | Test.kt:113:14:113:14 | y | -| Test.kt:113:17:115:5 | { ... } | 0 | Test.kt:113:17:115:5 | { ... } | -| Test.kt:118:1:124:1 | Exceptional Exit | 0 | Test.kt:118:1:124:1 | Exceptional Exit | -| Test.kt:118:1:124:1 | Exit | 0 | Test.kt:118:1:124:1 | Exit | -| Test.kt:118:1:124:1 | Normal Exit | 0 | Test.kt:118:1:124:1 | Normal Exit | -| Test.kt:118:37:124:1 | { ... } | 0 | Test.kt:118:37:124:1 | { ... } | -| Test.kt:118:37:124:1 | { ... } | 1 | Test.kt:119:2:123:12 | ; | -| Test.kt:118:37:124:1 | { ... } | 2 | Test.kt:119:2:123:12 | when ... | -| Test.kt:118:37:124:1 | { ... } | 3 | Test.kt:120:3:123:10 | ... -> ... | -| Test.kt:118:37:124:1 | { ... } | 4 | Test.kt:120:3:123:3 | when ... | -| Test.kt:118:37:124:1 | { ... } | 5 | Test.kt:121:4:121:9 | ... -> ... | -| Test.kt:118:37:124:1 | { ... } | 6 | Test.kt:121:4:121:4 | x | -| Test.kt:121:9:121:9 | ; | 0 | Test.kt:121:9:121:9 | ; | -| Test.kt:121:9:121:9 | ; | 1 | Test.kt:121:9:121:9 | y | -| Test.kt:122:12:122:16 | ... -> ... | 0 | Test.kt:122:12:122:16 | ... -> ... | -| Test.kt:122:12:122:16 | ... -> ... | 1 | Test.kt:122:12:122:16 | true | -| Test.kt:122:12:122:16 | ... -> ... | 2 | Test.kt:122:12:122:16 | ; | -| Test.kt:122:12:122:16 | ... -> ... | 3 | Test.kt:122:12:122:16 | false | -| Test.kt:123:8:123:10 | { ... } | 0 | Test.kt:123:8:123:10 | { ... } | +| Test.kt:101:9:101:17 | After ... (value equals) ... [false] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [false] | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 0 | Test.kt:101:9:101:17 | After ... (value equals) ... [true] | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 1 | Test.kt:101:22:101:30 | Before ... (value equals) ... | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 2 | Test.kt:101:22:101:22 | y | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 3 | Test.kt:101:27:101:30 | null | +| Test.kt:101:9:101:17 | After ... (value equals) ... [true] | 4 | Test.kt:101:22:101:30 | ... (value equals) ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 0 | Test.kt:101:9:101:30 | After ... && ... [false] | +| Test.kt:101:9:101:30 | After ... && ... [false] | 1 | Test.kt:101:5:103:5 | After when ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 2 | Test.kt:101:5:103:5 | After ; | +| Test.kt:101:9:101:30 | After ... && ... [false] | 3 | Test.kt:105:5:109:5 | ; | +| Test.kt:101:9:101:30 | After ... && ... [false] | 4 | Test.kt:105:5:109:5 | when ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 5 | Test.kt:105:9:107:5 | ... -> ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 6 | Test.kt:105:9:105:17 | Before ... (value not-equals) ... | +| Test.kt:101:9:101:30 | After ... && ... [false] | 7 | Test.kt:105:9:105:9 | x | +| Test.kt:101:9:101:30 | After ... && ... [false] | 8 | Test.kt:105:14:105:17 | null | +| Test.kt:101:9:101:30 | After ... && ... [false] | 9 | Test.kt:105:9:105:17 | ... (value not-equals) ... | +| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [false] | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 0 | Test.kt:101:22:101:30 | After ... (value equals) ... [true] | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 1 | Test.kt:101:9:101:30 | After ... && ... [true] | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 2 | Test.kt:101:33:103:5 | { ... } | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 3 | Test.kt:102:9:102:25 | Before throw ... | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 4 | Test.kt:102:15:102:25 | Before new Exception(...) | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 5 | Test.kt:102:15:102:25 | new Exception(...) | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 6 | Test.kt:102:15:102:25 | After new Exception(...) | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 7 | Test.kt:102:9:102:25 | throw ... | +| Test.kt:101:22:101:30 | After ... (value equals) ... [true] | 8 | Test.kt:100:1:110:1 | Exceptional Exit | +| Test.kt:105:5:109:5 | After when ... | 0 | Test.kt:105:5:109:5 | After when ... | +| Test.kt:105:5:109:5 | After when ... | 1 | Test.kt:105:5:109:5 | After ; | +| Test.kt:105:5:109:5 | After when ... | 2 | Test.kt:100:25:110:1 | After { ... } | +| Test.kt:105:5:109:5 | After when ... | 3 | Test.kt:100:1:110:1 | Normal Exit | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 1 | Test.kt:107:16:109:5 | ... -> ... | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 2 | Test.kt:107:16:107:24 | Before ... (value not-equals) ... | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 3 | Test.kt:107:16:107:16 | y | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 4 | Test.kt:107:21:107:24 | null | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 5 | Test.kt:107:16:107:24 | ... (value not-equals) ... | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 1 | Test.kt:105:20:107:5 | { ... } | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 2 | Test.kt:106:9:106:29 | ; | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 3 | Test.kt:106:9:106:29 | Before println(...) | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 4 | Test.kt:106:17:106:28 | "x not null" | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 5 | Test.kt:106:9:106:29 | println(...) | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 6 | Test.kt:106:9:106:29 | After println(...) | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 7 | Test.kt:106:9:106:29 | After ; | +| Test.kt:105:9:105:17 | After ... (value not-equals) ... [true] | 8 | Test.kt:105:20:107:5 | After { ... } | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 0 | Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 1 | Test.kt:107:27:109:5 | { ... } | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 2 | Test.kt:108:9:108:29 | ; | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 3 | Test.kt:108:9:108:29 | Before println(...) | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 4 | Test.kt:108:17:108:28 | "y not null" | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 5 | Test.kt:108:9:108:29 | println(...) | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 6 | Test.kt:108:9:108:29 | After println(...) | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 7 | Test.kt:108:9:108:29 | After ; | +| Test.kt:107:16:107:24 | After ... (value not-equals) ... [true] | 8 | Test.kt:107:27:109:5 | After { ... } | +| Test.kt:112:1:116:1 | Entry | 0 | Test.kt:112:1:116:1 | Entry | +| Test.kt:112:1:116:1 | Entry | 1 | Test.kt:112:32:116:1 | { ... } | +| Test.kt:112:1:116:1 | Entry | 2 | Test.kt:113:5:115:5 | ; | +| Test.kt:112:1:116:1 | Entry | 3 | Test.kt:113:5:115:5 | when ... | +| Test.kt:112:1:116:1 | Entry | 4 | Test.kt:113:9:115:5 | ... -> ... | +| Test.kt:112:1:116:1 | Entry | 5 | Test.kt:113:9:113:14 | ... && ... | +| Test.kt:112:1:116:1 | Entry | 6 | Test.kt:113:9:113:9 | x | +| Test.kt:113:5:115:5 | After when ... | 0 | Test.kt:113:5:115:5 | After when ... | +| Test.kt:113:5:115:5 | After when ... | 1 | Test.kt:113:5:115:5 | After ; | +| Test.kt:113:5:115:5 | After when ... | 2 | Test.kt:112:32:116:1 | After { ... } | +| Test.kt:113:5:115:5 | After when ... | 3 | Test.kt:112:1:116:1 | Normal Exit | +| Test.kt:113:5:115:5 | After when ... | 4 | Test.kt:112:1:116:1 | Exit | +| Test.kt:113:9:113:9 | After x [false] | 0 | Test.kt:113:9:113:9 | After x [false] | +| Test.kt:113:9:113:9 | After x [true] | 0 | Test.kt:113:9:113:9 | After x [true] | +| Test.kt:113:9:113:9 | After x [true] | 1 | Test.kt:113:14:113:14 | y | +| Test.kt:113:9:113:14 | After ... && ... [false] | 0 | Test.kt:113:9:113:14 | After ... && ... [false] | +| Test.kt:113:14:113:14 | After y [false] | 0 | Test.kt:113:14:113:14 | After y [false] | +| Test.kt:113:14:113:14 | After y [true] | 0 | Test.kt:113:14:113:14 | After y [true] | +| Test.kt:113:14:113:14 | After y [true] | 1 | Test.kt:113:9:113:14 | After ... && ... [true] | +| Test.kt:113:14:113:14 | After y [true] | 2 | Test.kt:113:17:115:5 | { ... } | +| Test.kt:118:1:124:1 | Entry | 0 | Test.kt:118:1:124:1 | Entry | +| Test.kt:118:1:124:1 | Entry | 1 | Test.kt:118:37:124:1 | { ... } | +| Test.kt:118:1:124:1 | Entry | 2 | Test.kt:119:2:123:12 | ; | +| Test.kt:118:1:124:1 | Entry | 3 | Test.kt:119:2:123:12 | when ... | +| Test.kt:118:1:124:1 | Entry | 4 | Test.kt:120:3:123:10 | ... -> ... | +| Test.kt:118:1:124:1 | Entry | 5 | Test.kt:120:3:123:3 | when ... | +| Test.kt:118:1:124:1 | Entry | 6 | Test.kt:121:4:121:9 | ... -> ... | +| Test.kt:118:1:124:1 | Entry | 7 | Test.kt:121:4:121:4 | x | +| Test.kt:119:2:123:12 | After when ... | 0 | Test.kt:119:2:123:12 | After when ... | +| Test.kt:119:2:123:12 | After when ... | 1 | Test.kt:119:2:123:12 | After ; | +| Test.kt:119:2:123:12 | After when ... | 2 | Test.kt:118:37:124:1 | After { ... } | +| Test.kt:119:2:123:12 | After when ... | 3 | Test.kt:118:1:124:1 | Normal Exit | +| Test.kt:119:2:123:12 | After when ... | 4 | Test.kt:118:1:124:1 | Exit | +| Test.kt:120:3:123:3 | After when ... [false] | 0 | Test.kt:120:3:123:3 | After when ... [false] | +| Test.kt:120:3:123:3 | After when ... [true] | 0 | Test.kt:120:3:123:3 | After when ... [true] | +| Test.kt:120:3:123:3 | After when ... [true] | 1 | Test.kt:123:8:123:10 | { ... } | +| Test.kt:121:4:121:4 | After x [false] | 0 | Test.kt:121:4:121:4 | After x [false] | +| Test.kt:121:4:121:4 | After x [false] | 1 | Test.kt:122:12:122:16 | ... -> ... | +| Test.kt:121:4:121:4 | After x [false] | 2 | Test.kt:122:12:122:16 | true | +| Test.kt:121:4:121:4 | After x [false] | 3 | Test.kt:122:12:122:16 | After true [true] | +| Test.kt:121:4:121:4 | After x [false] | 4 | Test.kt:122:12:122:16 | ; | +| Test.kt:121:4:121:4 | After x [false] | 5 | Test.kt:122:12:122:16 | false | +| Test.kt:121:4:121:4 | After x [false] | 6 | Test.kt:122:12:122:16 | After ; | +| Test.kt:121:4:121:4 | After x [true] | 0 | Test.kt:121:4:121:4 | After x [true] | +| Test.kt:121:4:121:4 | After x [true] | 1 | Test.kt:121:9:121:9 | ; | +| Test.kt:121:4:121:4 | After x [true] | 2 | Test.kt:121:9:121:9 | y | +| Test.kt:121:4:121:4 | After x [true] | 3 | Test.kt:121:9:121:9 | After ; | diff --git a/java/ql/test/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test/library-tests/controlflow/basic/bbStmts.expected index df336ce90a22..58b3e698771a 100644 --- a/java/ql/test/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test/library-tests/controlflow/basic/bbStmts.expected @@ -1,140 +1,296 @@ -| Test.java:3:14:3:17 | Exceptional Exit | 0 | Test.java:3:14:3:17 | Exceptional Exit | -| Test.java:3:14:3:17 | Exit | 0 | Test.java:3:14:3:17 | Exit | -| Test.java:3:14:3:17 | { ... } | 0 | Test.java:3:14:3:17 | { ... } | -| Test.java:3:14:3:17 | { ... } | 1 | Test.java:3:14:3:17 | super(...) | -| Test.java:3:14:3:17 | { ... } | 2 | Test.java:3:14:3:17 | Normal Exit | -| Test.java:4:14:4:17 | Exceptional Exit | 0 | Test.java:4:14:4:17 | Exceptional Exit | -| Test.java:4:14:4:17 | Exit | 0 | Test.java:4:14:4:17 | Exit | +| Test.java:3:14:3:17 | Entry | 0 | Test.java:3:14:3:17 | Entry | +| Test.java:3:14:3:17 | Entry | 1 | Test.java:3:14:3:17 | { ... } | +| Test.java:3:14:3:17 | Entry | 2 | Test.java:3:14:3:17 | Before super(...) | +| Test.java:3:14:3:17 | Entry | 3 | Test.java:3:14:3:17 | super(...) | +| Test.java:3:14:3:17 | Entry | 4 | Test.java:3:14:3:17 | After super(...) | +| Test.java:3:14:3:17 | Entry | 5 | Test.java:3:14:3:17 | After { ... } | +| Test.java:3:14:3:17 | Entry | 6 | Test.java:3:14:3:17 | Normal Exit | +| Test.java:3:14:3:17 | Entry | 7 | Test.java:3:14:3:17 | Exit | +| Test.java:4:14:4:17 | Entry | 0 | Test.java:4:14:4:17 | Entry | +| Test.java:4:14:4:17 | Entry | 1 | Test.java:4:21:76:2 | { ... } | +| Test.java:4:14:4:17 | Entry | 2 | Test.java:5:3:5:12 | var ...; | +| Test.java:4:14:4:17 | Entry | 3 | Test.java:5:7:5:11 | Before x | +| Test.java:4:14:4:17 | Entry | 4 | Test.java:5:11:5:11 | 0 | +| Test.java:4:14:4:17 | Entry | 5 | Test.java:5:7:5:11 | x | +| Test.java:4:14:4:17 | Entry | 6 | Test.java:5:7:5:11 | After x | +| Test.java:4:14:4:17 | Entry | 7 | Test.java:5:3:5:12 | After var ...; | +| Test.java:4:14:4:17 | Entry | 8 | Test.java:6:3:6:14 | var ...; | +| Test.java:4:14:4:17 | Entry | 9 | Test.java:6:8:6:13 | Before y | +| Test.java:4:14:4:17 | Entry | 10 | Test.java:6:12:6:13 | 50 | +| Test.java:4:14:4:17 | Entry | 11 | Test.java:6:8:6:13 | y | +| Test.java:4:14:4:17 | Entry | 12 | Test.java:6:8:6:13 | After y | +| Test.java:4:14:4:17 | Entry | 13 | Test.java:6:3:6:14 | After var ...; | +| Test.java:4:14:4:17 | Entry | 14 | Test.java:7:3:7:12 | var ...; | +| Test.java:4:14:4:17 | Entry | 15 | Test.java:7:7:7:11 | Before z | +| Test.java:4:14:4:17 | Entry | 16 | Test.java:7:11:7:11 | 0 | +| Test.java:4:14:4:17 | Entry | 17 | Test.java:7:7:7:11 | z | +| Test.java:4:14:4:17 | Entry | 18 | Test.java:7:7:7:11 | After z | +| Test.java:4:14:4:17 | Entry | 19 | Test.java:7:3:7:12 | After var ...; | +| Test.java:4:14:4:17 | Entry | 20 | Test.java:8:3:8:12 | var ...; | +| Test.java:4:14:4:17 | Entry | 21 | Test.java:8:7:8:11 | Before w | +| Test.java:4:14:4:17 | Entry | 22 | Test.java:8:11:8:11 | 0 | +| Test.java:4:14:4:17 | Entry | 23 | Test.java:8:7:8:11 | w | +| Test.java:4:14:4:17 | Entry | 24 | Test.java:8:7:8:11 | After w | +| Test.java:4:14:4:17 | Entry | 25 | Test.java:8:3:8:12 | After var ...; | +| Test.java:4:14:4:17 | Entry | 26 | Test.java:11:3:11:12 | if (...) | +| Test.java:4:14:4:17 | Entry | 27 | Test.java:11:7:11:11 | Before ... > ... | +| Test.java:4:14:4:17 | Entry | 28 | Test.java:11:7:11:7 | x | +| Test.java:4:14:4:17 | Entry | 29 | Test.java:11:11:11:11 | 0 | +| Test.java:4:14:4:17 | Entry | 30 | Test.java:11:7:11:11 | ... > ... | | Test.java:4:14:4:17 | Normal Exit | 0 | Test.java:4:14:4:17 | Normal Exit | -| Test.java:4:21:76:2 | { ... } | 0 | Test.java:4:21:76:2 | { ... } | -| Test.java:4:21:76:2 | { ... } | 1 | Test.java:5:3:5:12 | var ...; | -| Test.java:4:21:76:2 | { ... } | 2 | Test.java:5:11:5:11 | 0 | -| Test.java:4:21:76:2 | { ... } | 3 | Test.java:5:7:5:11 | x | -| Test.java:4:21:76:2 | { ... } | 4 | Test.java:6:3:6:14 | var ...; | -| Test.java:4:21:76:2 | { ... } | 5 | Test.java:6:12:6:13 | 50 | -| Test.java:4:21:76:2 | { ... } | 6 | Test.java:6:8:6:13 | y | -| Test.java:4:21:76:2 | { ... } | 7 | Test.java:7:3:7:12 | var ...; | -| Test.java:4:21:76:2 | { ... } | 8 | Test.java:7:11:7:11 | 0 | -| Test.java:4:21:76:2 | { ... } | 9 | Test.java:7:7:7:11 | z | -| Test.java:4:21:76:2 | { ... } | 10 | Test.java:8:3:8:12 | var ...; | -| Test.java:4:21:76:2 | { ... } | 11 | Test.java:8:11:8:11 | 0 | -| Test.java:4:21:76:2 | { ... } | 12 | Test.java:8:7:8:11 | w | -| Test.java:4:21:76:2 | { ... } | 13 | Test.java:11:3:11:12 | if (...) | -| Test.java:4:21:76:2 | { ... } | 14 | Test.java:11:7:11:7 | x | -| Test.java:4:21:76:2 | { ... } | 15 | Test.java:11:11:11:11 | 0 | -| Test.java:4:21:76:2 | { ... } | 16 | Test.java:11:7:11:11 | ... > ... | -| Test.java:11:14:14:3 | { ... } | 0 | Test.java:11:14:14:3 | { ... } | -| Test.java:11:14:14:3 | { ... } | 1 | Test.java:12:4:12:10 | ; | -| Test.java:11:14:14:3 | { ... } | 2 | Test.java:12:8:12:9 | 20 | -| Test.java:11:14:14:3 | { ... } | 3 | Test.java:12:4:12:9 | ...=... | -| Test.java:11:14:14:3 | { ... } | 4 | Test.java:13:4:13:10 | ; | -| Test.java:11:14:14:3 | { ... } | 5 | Test.java:13:8:13:9 | 10 | -| Test.java:11:14:14:3 | { ... } | 6 | Test.java:13:4:13:9 | ...=... | -| Test.java:14:10:16:3 | { ... } | 0 | Test.java:14:10:16:3 | { ... } | -| Test.java:14:10:16:3 | { ... } | 1 | Test.java:15:4:15:10 | ; | -| Test.java:14:10:16:3 | { ... } | 2 | Test.java:15:8:15:9 | 30 | -| Test.java:14:10:16:3 | { ... } | 3 | Test.java:15:4:15:9 | ...=... | -| Test.java:18:3:18:8 | ; | 0 | Test.java:18:3:18:8 | ; | -| Test.java:18:3:18:8 | ; | 1 | Test.java:18:7:18:7 | 0 | -| Test.java:18:3:18:8 | ; | 2 | Test.java:18:3:18:7 | ...=... | -| Test.java:18:3:18:8 | ; | 3 | Test.java:21:3:21:11 | if (...) | -| Test.java:18:3:18:8 | ; | 4 | Test.java:21:6:21:6 | x | -| Test.java:18:3:18:8 | ; | 5 | Test.java:21:10:21:10 | 0 | -| Test.java:18:3:18:8 | ; | 6 | Test.java:21:6:21:10 | ... < ... | -| Test.java:22:4:22:10 | ; | 0 | Test.java:22:4:22:10 | ; | -| Test.java:22:4:22:10 | ; | 1 | Test.java:22:8:22:9 | 40 | -| Test.java:22:4:22:10 | ; | 2 | Test.java:22:4:22:9 | ...=... | -| Test.java:22:4:22:10 | ; | 3 | Test.java:27:3:27:9 | ; | -| Test.java:22:4:22:10 | ; | 4 | Test.java:27:7:27:8 | 10 | -| Test.java:22:4:22:10 | ; | 5 | Test.java:27:3:27:8 | ...=... | -| Test.java:22:4:22:10 | ; | 6 | Test.java:30:3:30:13 | if (...) | -| Test.java:22:4:22:10 | ; | 7 | Test.java:30:7:30:7 | x | -| Test.java:22:4:22:10 | ; | 8 | Test.java:30:12:30:12 | 0 | -| Test.java:22:4:22:10 | ; | 9 | Test.java:30:7:30:12 | ... == ... | -| Test.java:24:4:24:10 | return ... | 0 | Test.java:24:4:24:10 | return ... | -| Test.java:30:15:33:3 | { ... } | 0 | Test.java:30:15:33:3 | { ... } | -| Test.java:30:15:33:3 | { ... } | 1 | Test.java:31:4:31:10 | ; | -| Test.java:30:15:33:3 | { ... } | 2 | Test.java:31:8:31:9 | 60 | -| Test.java:30:15:33:3 | { ... } | 3 | Test.java:31:4:31:9 | ...=... | -| Test.java:30:15:33:3 | { ... } | 4 | Test.java:32:4:32:10 | ; | -| Test.java:30:15:33:3 | { ... } | 5 | Test.java:32:8:32:9 | 10 | -| Test.java:30:15:33:3 | { ... } | 6 | Test.java:32:4:32:9 | ...=... | -| Test.java:35:3:35:9 | ; | 0 | Test.java:35:3:35:9 | ; | -| Test.java:35:3:35:9 | ; | 1 | Test.java:35:7:35:8 | 20 | -| Test.java:35:3:35:9 | ; | 2 | Test.java:35:3:35:8 | ...=... | -| Test.java:35:3:35:9 | ; | 3 | Test.java:38:3:38:14 | while (...) | -| Test.java:38:9:38:9 | x | 0 | Test.java:38:9:38:9 | x | -| Test.java:38:9:38:9 | x | 1 | Test.java:38:13:38:13 | 0 | -| Test.java:38:9:38:9 | x | 2 | Test.java:38:9:38:13 | ... > ... | -| Test.java:38:16:41:3 | { ... } | 0 | Test.java:38:16:41:3 | { ... } | -| Test.java:38:16:41:3 | { ... } | 1 | Test.java:39:4:39:10 | ; | -| Test.java:38:16:41:3 | { ... } | 2 | Test.java:39:8:39:9 | 10 | -| Test.java:38:16:41:3 | { ... } | 3 | Test.java:39:4:39:9 | ...=... | -| Test.java:38:16:41:3 | { ... } | 4 | Test.java:40:4:40:7 | ; | -| Test.java:38:16:41:3 | { ... } | 5 | Test.java:40:4:40:4 | x | -| Test.java:38:16:41:3 | { ... } | 6 | Test.java:40:4:40:6 | ...-- | -| Test.java:43:3:43:9 | ; | 0 | Test.java:43:3:43:9 | ; | -| Test.java:43:3:43:9 | ; | 1 | Test.java:43:7:43:8 | 30 | -| Test.java:43:3:43:9 | ; | 2 | Test.java:43:3:43:8 | ...=... | -| Test.java:43:3:43:9 | ; | 3 | Test.java:46:3:46:29 | for (...;...;...) | -| Test.java:43:3:43:9 | ; | 4 | Test.java:46:15:46:15 | 0 | -| Test.java:43:3:43:9 | ; | 5 | Test.java:46:11:46:15 | j | -| Test.java:46:18:46:18 | j | 0 | Test.java:46:18:46:18 | j | -| Test.java:46:18:46:18 | j | 1 | Test.java:46:22:46:23 | 10 | -| Test.java:46:18:46:18 | j | 2 | Test.java:46:18:46:23 | ... < ... | -| Test.java:46:31:49:3 | { ... } | 0 | Test.java:46:31:49:3 | { ... } | -| Test.java:46:31:49:3 | { ... } | 1 | Test.java:47:4:47:9 | ; | -| Test.java:46:31:49:3 | { ... } | 2 | Test.java:47:8:47:8 | 0 | -| Test.java:46:31:49:3 | { ... } | 3 | Test.java:47:4:47:8 | ...=... | -| Test.java:46:31:49:3 | { ... } | 4 | Test.java:48:4:48:10 | ; | -| Test.java:46:31:49:3 | { ... } | 5 | Test.java:48:8:48:9 | 10 | -| Test.java:46:31:49:3 | { ... } | 6 | Test.java:48:4:48:9 | ...=... | -| Test.java:46:31:49:3 | { ... } | 7 | Test.java:46:26:46:26 | j | -| Test.java:46:31:49:3 | { ... } | 8 | Test.java:46:26:46:28 | ...++ | -| Test.java:51:3:51:9 | ; | 0 | Test.java:51:3:51:9 | ; | -| Test.java:51:3:51:9 | ; | 1 | Test.java:51:7:51:8 | 40 | -| Test.java:51:3:51:9 | ; | 2 | Test.java:51:3:51:8 | ...=... | -| Test.java:51:3:51:9 | ; | 3 | Test.java:54:3:54:29 | for (...;...;...) | -| Test.java:51:3:51:9 | ; | 4 | Test.java:54:15:54:15 | 0 | -| Test.java:51:3:51:9 | ; | 5 | Test.java:54:11:54:15 | j | -| Test.java:54:18:54:18 | j | 0 | Test.java:54:18:54:18 | j | -| Test.java:54:18:54:18 | j | 1 | Test.java:54:22:54:23 | 10 | -| Test.java:54:18:54:18 | j | 2 | Test.java:54:18:54:23 | ... < ... | -| Test.java:54:26:54:26 | j | 0 | Test.java:54:26:54:26 | j | -| Test.java:54:26:54:26 | j | 1 | Test.java:54:26:54:28 | ...++ | -| Test.java:54:31:68:3 | { ... } | 0 | Test.java:54:31:68:3 | { ... } | -| Test.java:54:31:68:3 | { ... } | 1 | Test.java:55:4:55:10 | ; | -| Test.java:54:31:68:3 | { ... } | 2 | Test.java:55:8:55:9 | 30 | -| Test.java:54:31:68:3 | { ... } | 3 | Test.java:55:4:55:9 | ...=... | -| Test.java:54:31:68:3 | { ... } | 4 | Test.java:56:4:56:12 | if (...) | -| Test.java:54:31:68:3 | { ... } | 5 | Test.java:56:7:56:7 | z | -| Test.java:54:31:68:3 | { ... } | 6 | Test.java:56:11:56:11 | 0 | -| Test.java:54:31:68:3 | { ... } | 7 | Test.java:56:7:56:11 | ... > ... | -| Test.java:57:5:57:13 | if (...) | 0 | Test.java:57:5:57:13 | if (...) | -| Test.java:57:5:57:13 | if (...) | 1 | Test.java:57:8:57:8 | y | -| Test.java:57:5:57:13 | if (...) | 2 | Test.java:57:12:57:12 | 0 | -| Test.java:57:5:57:13 | if (...) | 3 | Test.java:57:8:57:12 | ... > ... | -| Test.java:57:15:60:5 | { ... } | 0 | Test.java:57:15:60:5 | { ... } | -| Test.java:57:15:60:5 | { ... } | 1 | Test.java:58:6:58:11 | ; | -| Test.java:57:15:60:5 | { ... } | 2 | Test.java:58:10:58:10 | 0 | -| Test.java:57:15:60:5 | { ... } | 3 | Test.java:58:6:58:10 | ...=... | -| Test.java:57:15:60:5 | { ... } | 4 | Test.java:59:6:59:11 | break | -| Test.java:60:12:62:5 | { ... } | 0 | Test.java:60:12:62:5 | { ... } | -| Test.java:60:12:62:5 | { ... } | 1 | Test.java:61:6:61:12 | ; | -| Test.java:60:12:62:5 | { ... } | 2 | Test.java:61:10:61:11 | 20 | -| Test.java:60:12:62:5 | { ... } | 3 | Test.java:61:6:61:11 | ...=... | -| Test.java:60:12:62:5 | { ... } | 4 | Test.java:67:4:67:9 | ; | -| Test.java:60:12:62:5 | { ... } | 5 | Test.java:67:8:67:8 | 0 | -| Test.java:60:12:62:5 | { ... } | 6 | Test.java:67:4:67:8 | ...=... | -| Test.java:63:9:66:4 | { ... } | 0 | Test.java:63:9:66:4 | { ... } | -| Test.java:63:9:66:4 | { ... } | 1 | Test.java:64:5:64:11 | ; | -| Test.java:63:9:66:4 | { ... } | 2 | Test.java:64:9:64:10 | 10 | -| Test.java:63:9:66:4 | { ... } | 3 | Test.java:64:5:64:10 | ...=... | -| Test.java:63:9:66:4 | { ... } | 4 | Test.java:65:5:65:13 | continue | -| Test.java:70:3:70:9 | ; | 0 | Test.java:70:3:70:9 | ; | -| Test.java:70:3:70:9 | ; | 1 | Test.java:70:7:70:8 | 50 | -| Test.java:70:3:70:9 | ; | 2 | Test.java:70:3:70:8 | ...=... | -| Test.java:70:3:70:9 | ; | 3 | Test.java:74:3:74:9 | ; | -| Test.java:70:3:70:9 | ; | 4 | Test.java:74:7:74:8 | 40 | -| Test.java:70:3:70:9 | ; | 5 | Test.java:74:3:74:8 | ...=... | -| Test.java:70:3:70:9 | ; | 6 | Test.java:75:3:75:9 | return ... | +| Test.java:4:14:4:17 | Normal Exit | 1 | Test.java:4:14:4:17 | Exit | +| Test.java:11:3:11:12 | After if (...) | 0 | Test.java:11:3:11:12 | After if (...) | +| Test.java:11:3:11:12 | After if (...) | 1 | Test.java:18:3:18:8 | ; | +| Test.java:11:3:11:12 | After if (...) | 2 | Test.java:18:3:18:7 | Before ...=... | +| Test.java:11:3:11:12 | After if (...) | 3 | Test.java:18:3:18:3 | z | +| Test.java:11:3:11:12 | After if (...) | 4 | Test.java:18:7:18:7 | 0 | +| Test.java:11:3:11:12 | After if (...) | 5 | Test.java:18:3:18:7 | ...=... | +| Test.java:11:3:11:12 | After if (...) | 6 | Test.java:18:3:18:7 | After ...=... | +| Test.java:11:3:11:12 | After if (...) | 7 | Test.java:18:3:18:8 | After ; | +| Test.java:11:3:11:12 | After if (...) | 8 | Test.java:21:3:21:11 | if (...) | +| Test.java:11:3:11:12 | After if (...) | 9 | Test.java:21:6:21:10 | Before ... < ... | +| Test.java:11:3:11:12 | After if (...) | 10 | Test.java:21:6:21:6 | x | +| Test.java:11:3:11:12 | After if (...) | 11 | Test.java:21:10:21:10 | 0 | +| Test.java:11:3:11:12 | After if (...) | 12 | Test.java:21:6:21:10 | ... < ... | +| Test.java:11:7:11:11 | After ... > ... [false] | 0 | Test.java:11:7:11:11 | After ... > ... [false] | +| Test.java:11:7:11:11 | After ... > ... [false] | 1 | Test.java:14:10:16:3 | { ... } | +| Test.java:11:7:11:11 | After ... > ... [false] | 2 | Test.java:15:4:15:10 | ; | +| Test.java:11:7:11:11 | After ... > ... [false] | 3 | Test.java:15:4:15:9 | Before ...=... | +| Test.java:11:7:11:11 | After ... > ... [false] | 4 | Test.java:15:4:15:4 | y | +| Test.java:11:7:11:11 | After ... > ... [false] | 5 | Test.java:15:8:15:9 | 30 | +| Test.java:11:7:11:11 | After ... > ... [false] | 6 | Test.java:15:4:15:9 | ...=... | +| Test.java:11:7:11:11 | After ... > ... [false] | 7 | Test.java:15:4:15:9 | After ...=... | +| Test.java:11:7:11:11 | After ... > ... [false] | 8 | Test.java:15:4:15:10 | After ; | +| Test.java:11:7:11:11 | After ... > ... [false] | 9 | Test.java:14:10:16:3 | After { ... } | +| Test.java:11:7:11:11 | After ... > ... [true] | 0 | Test.java:11:7:11:11 | After ... > ... [true] | +| Test.java:11:7:11:11 | After ... > ... [true] | 1 | Test.java:11:14:14:3 | { ... } | +| Test.java:11:7:11:11 | After ... > ... [true] | 2 | Test.java:12:4:12:10 | ; | +| Test.java:11:7:11:11 | After ... > ... [true] | 3 | Test.java:12:4:12:9 | Before ...=... | +| Test.java:11:7:11:11 | After ... > ... [true] | 4 | Test.java:12:4:12:4 | y | +| Test.java:11:7:11:11 | After ... > ... [true] | 5 | Test.java:12:8:12:9 | 20 | +| Test.java:11:7:11:11 | After ... > ... [true] | 6 | Test.java:12:4:12:9 | ...=... | +| Test.java:11:7:11:11 | After ... > ... [true] | 7 | Test.java:12:4:12:9 | After ...=... | +| Test.java:11:7:11:11 | After ... > ... [true] | 8 | Test.java:12:4:12:10 | After ; | +| Test.java:11:7:11:11 | After ... > ... [true] | 9 | Test.java:13:4:13:10 | ; | +| Test.java:11:7:11:11 | After ... > ... [true] | 10 | Test.java:13:4:13:9 | Before ...=... | +| Test.java:11:7:11:11 | After ... > ... [true] | 11 | Test.java:13:4:13:4 | z | +| Test.java:11:7:11:11 | After ... > ... [true] | 12 | Test.java:13:8:13:9 | 10 | +| Test.java:11:7:11:11 | After ... > ... [true] | 13 | Test.java:13:4:13:9 | ...=... | +| Test.java:11:7:11:11 | After ... > ... [true] | 14 | Test.java:13:4:13:9 | After ...=... | +| Test.java:11:7:11:11 | After ... > ... [true] | 15 | Test.java:13:4:13:10 | After ; | +| Test.java:11:7:11:11 | After ... > ... [true] | 16 | Test.java:11:14:14:3 | After { ... } | +| Test.java:21:6:21:10 | After ... < ... [false] | 0 | Test.java:21:6:21:10 | After ... < ... [false] | +| Test.java:21:6:21:10 | After ... < ... [false] | 1 | Test.java:24:4:24:10 | Before return ... | +| Test.java:21:6:21:10 | After ... < ... [false] | 2 | Test.java:24:4:24:10 | return ... | +| Test.java:21:6:21:10 | After ... < ... [true] | 0 | Test.java:21:6:21:10 | After ... < ... [true] | +| Test.java:21:6:21:10 | After ... < ... [true] | 1 | Test.java:22:4:22:10 | ; | +| Test.java:21:6:21:10 | After ... < ... [true] | 2 | Test.java:22:4:22:9 | Before ...=... | +| Test.java:21:6:21:10 | After ... < ... [true] | 3 | Test.java:22:4:22:4 | y | +| Test.java:21:6:21:10 | After ... < ... [true] | 4 | Test.java:22:8:22:9 | 40 | +| Test.java:21:6:21:10 | After ... < ... [true] | 5 | Test.java:22:4:22:9 | ...=... | +| Test.java:21:6:21:10 | After ... < ... [true] | 6 | Test.java:22:4:22:9 | After ...=... | +| Test.java:21:6:21:10 | After ... < ... [true] | 7 | Test.java:22:4:22:10 | After ; | +| Test.java:21:6:21:10 | After ... < ... [true] | 8 | Test.java:21:3:21:11 | After if (...) | +| Test.java:21:6:21:10 | After ... < ... [true] | 9 | Test.java:27:3:27:9 | ; | +| Test.java:21:6:21:10 | After ... < ... [true] | 10 | Test.java:27:3:27:8 | Before ...=... | +| Test.java:21:6:21:10 | After ... < ... [true] | 11 | Test.java:27:3:27:3 | z | +| Test.java:21:6:21:10 | After ... < ... [true] | 12 | Test.java:27:7:27:8 | 10 | +| Test.java:21:6:21:10 | After ... < ... [true] | 13 | Test.java:27:3:27:8 | ...=... | +| Test.java:21:6:21:10 | After ... < ... [true] | 14 | Test.java:27:3:27:8 | After ...=... | +| Test.java:21:6:21:10 | After ... < ... [true] | 15 | Test.java:27:3:27:9 | After ; | +| Test.java:21:6:21:10 | After ... < ... [true] | 16 | Test.java:30:3:30:13 | if (...) | +| Test.java:21:6:21:10 | After ... < ... [true] | 17 | Test.java:30:7:30:12 | Before ... == ... | +| Test.java:21:6:21:10 | After ... < ... [true] | 18 | Test.java:30:7:30:7 | x | +| Test.java:21:6:21:10 | After ... < ... [true] | 19 | Test.java:30:12:30:12 | 0 | +| Test.java:21:6:21:10 | After ... < ... [true] | 20 | Test.java:30:7:30:12 | ... == ... | +| Test.java:30:3:30:13 | After if (...) | 0 | Test.java:30:3:30:13 | After if (...) | +| Test.java:30:3:30:13 | After if (...) | 1 | Test.java:35:3:35:9 | ; | +| Test.java:30:3:30:13 | After if (...) | 2 | Test.java:35:3:35:8 | Before ...=... | +| Test.java:30:3:30:13 | After if (...) | 3 | Test.java:35:3:35:3 | z | +| Test.java:30:3:30:13 | After if (...) | 4 | Test.java:35:7:35:8 | 20 | +| Test.java:30:3:30:13 | After if (...) | 5 | Test.java:35:3:35:8 | ...=... | +| Test.java:30:3:30:13 | After if (...) | 6 | Test.java:35:3:35:8 | After ...=... | +| Test.java:30:3:30:13 | After if (...) | 7 | Test.java:35:3:35:9 | After ; | +| Test.java:30:3:30:13 | After if (...) | 8 | Test.java:38:3:38:14 | while (...) | +| Test.java:30:7:30:12 | After ... == ... [false] | 0 | Test.java:30:7:30:12 | After ... == ... [false] | +| Test.java:30:7:30:12 | After ... == ... [true] | 0 | Test.java:30:7:30:12 | After ... == ... [true] | +| Test.java:30:7:30:12 | After ... == ... [true] | 1 | Test.java:30:15:33:3 | { ... } | +| Test.java:30:7:30:12 | After ... == ... [true] | 2 | Test.java:31:4:31:10 | ; | +| Test.java:30:7:30:12 | After ... == ... [true] | 3 | Test.java:31:4:31:9 | Before ...=... | +| Test.java:30:7:30:12 | After ... == ... [true] | 4 | Test.java:31:4:31:4 | y | +| Test.java:30:7:30:12 | After ... == ... [true] | 5 | Test.java:31:8:31:9 | 60 | +| Test.java:30:7:30:12 | After ... == ... [true] | 6 | Test.java:31:4:31:9 | ...=... | +| Test.java:30:7:30:12 | After ... == ... [true] | 7 | Test.java:31:4:31:9 | After ...=... | +| Test.java:30:7:30:12 | After ... == ... [true] | 8 | Test.java:31:4:31:10 | After ; | +| Test.java:30:7:30:12 | After ... == ... [true] | 9 | Test.java:32:4:32:10 | ; | +| Test.java:30:7:30:12 | After ... == ... [true] | 10 | Test.java:32:4:32:9 | Before ...=... | +| Test.java:30:7:30:12 | After ... == ... [true] | 11 | Test.java:32:4:32:4 | z | +| Test.java:30:7:30:12 | After ... == ... [true] | 12 | Test.java:32:8:32:9 | 10 | +| Test.java:30:7:30:12 | After ... == ... [true] | 13 | Test.java:32:4:32:9 | ...=... | +| Test.java:30:7:30:12 | After ... == ... [true] | 14 | Test.java:32:4:32:9 | After ...=... | +| Test.java:30:7:30:12 | After ... == ... [true] | 15 | Test.java:32:4:32:10 | After ; | +| Test.java:30:7:30:12 | After ... == ... [true] | 16 | Test.java:30:15:33:3 | After { ... } | +| Test.java:38:3:38:14 | [LoopHeader] while (...) | 0 | Test.java:38:3:38:14 | [LoopHeader] while (...) | +| Test.java:38:3:38:14 | [LoopHeader] while (...) | 1 | Test.java:38:9:38:13 | Before ... > ... | +| Test.java:38:3:38:14 | [LoopHeader] while (...) | 2 | Test.java:38:9:38:9 | x | +| Test.java:38:3:38:14 | [LoopHeader] while (...) | 3 | Test.java:38:13:38:13 | 0 | +| Test.java:38:3:38:14 | [LoopHeader] while (...) | 4 | Test.java:38:9:38:13 | ... > ... | +| Test.java:38:9:38:13 | After ... > ... [false] | 0 | Test.java:38:9:38:13 | After ... > ... [false] | +| Test.java:38:9:38:13 | After ... > ... [false] | 1 | Test.java:38:3:38:14 | After while (...) | +| Test.java:38:9:38:13 | After ... > ... [false] | 2 | Test.java:43:3:43:9 | ; | +| Test.java:38:9:38:13 | After ... > ... [false] | 3 | Test.java:43:3:43:8 | Before ...=... | +| Test.java:38:9:38:13 | After ... > ... [false] | 4 | Test.java:43:3:43:3 | z | +| Test.java:38:9:38:13 | After ... > ... [false] | 5 | Test.java:43:7:43:8 | 30 | +| Test.java:38:9:38:13 | After ... > ... [false] | 6 | Test.java:43:3:43:8 | ...=... | +| Test.java:38:9:38:13 | After ... > ... [false] | 7 | Test.java:43:3:43:8 | After ...=... | +| Test.java:38:9:38:13 | After ... > ... [false] | 8 | Test.java:43:3:43:9 | After ; | +| Test.java:38:9:38:13 | After ... > ... [false] | 9 | Test.java:46:3:46:29 | for (...;...;...) | +| Test.java:38:9:38:13 | After ... > ... [false] | 10 | Test.java:46:11:46:15 | Before j | +| Test.java:38:9:38:13 | After ... > ... [false] | 11 | Test.java:46:15:46:15 | 0 | +| Test.java:38:9:38:13 | After ... > ... [false] | 12 | Test.java:46:11:46:15 | j | +| Test.java:38:9:38:13 | After ... > ... [false] | 13 | Test.java:46:11:46:15 | After j | +| Test.java:38:9:38:13 | After ... > ... [true] | 0 | Test.java:38:9:38:13 | After ... > ... [true] | +| Test.java:38:9:38:13 | After ... > ... [true] | 1 | Test.java:38:16:41:3 | { ... } | +| Test.java:38:9:38:13 | After ... > ... [true] | 2 | Test.java:39:4:39:10 | ; | +| Test.java:38:9:38:13 | After ... > ... [true] | 3 | Test.java:39:4:39:9 | Before ...=... | +| Test.java:38:9:38:13 | After ... > ... [true] | 4 | Test.java:39:4:39:4 | y | +| Test.java:38:9:38:13 | After ... > ... [true] | 5 | Test.java:39:8:39:9 | 10 | +| Test.java:38:9:38:13 | After ... > ... [true] | 6 | Test.java:39:4:39:9 | ...=... | +| Test.java:38:9:38:13 | After ... > ... [true] | 7 | Test.java:39:4:39:9 | After ...=... | +| Test.java:38:9:38:13 | After ... > ... [true] | 8 | Test.java:39:4:39:10 | After ; | +| Test.java:38:9:38:13 | After ... > ... [true] | 9 | Test.java:40:4:40:7 | ; | +| Test.java:38:9:38:13 | After ... > ... [true] | 10 | Test.java:40:4:40:6 | Before ...-- | +| Test.java:38:9:38:13 | After ... > ... [true] | 11 | Test.java:40:4:40:4 | x | +| Test.java:38:9:38:13 | After ... > ... [true] | 12 | Test.java:40:4:40:6 | ...-- | +| Test.java:38:9:38:13 | After ... > ... [true] | 13 | Test.java:40:4:40:6 | After ...-- | +| Test.java:38:9:38:13 | After ... > ... [true] | 14 | Test.java:40:4:40:7 | After ; | +| Test.java:38:9:38:13 | After ... > ... [true] | 15 | Test.java:38:16:41:3 | After { ... } | +| Test.java:46:18:46:23 | After ... < ... [false] | 0 | Test.java:46:18:46:23 | After ... < ... [false] | +| Test.java:46:18:46:23 | After ... < ... [false] | 1 | Test.java:46:3:46:29 | After for (...;...;...) | +| Test.java:46:18:46:23 | After ... < ... [false] | 2 | Test.java:51:3:51:9 | ; | +| Test.java:46:18:46:23 | After ... < ... [false] | 3 | Test.java:51:3:51:8 | Before ...=... | +| Test.java:46:18:46:23 | After ... < ... [false] | 4 | Test.java:51:3:51:3 | z | +| Test.java:46:18:46:23 | After ... < ... [false] | 5 | Test.java:51:7:51:8 | 40 | +| Test.java:46:18:46:23 | After ... < ... [false] | 6 | Test.java:51:3:51:8 | ...=... | +| Test.java:46:18:46:23 | After ... < ... [false] | 7 | Test.java:51:3:51:8 | After ...=... | +| Test.java:46:18:46:23 | After ... < ... [false] | 8 | Test.java:51:3:51:9 | After ; | +| Test.java:46:18:46:23 | After ... < ... [false] | 9 | Test.java:54:3:54:29 | for (...;...;...) | +| Test.java:46:18:46:23 | After ... < ... [false] | 10 | Test.java:54:11:54:15 | Before j | +| Test.java:46:18:46:23 | After ... < ... [false] | 11 | Test.java:54:15:54:15 | 0 | +| Test.java:46:18:46:23 | After ... < ... [false] | 12 | Test.java:54:11:54:15 | j | +| Test.java:46:18:46:23 | After ... < ... [false] | 13 | Test.java:54:11:54:15 | After j | +| Test.java:46:18:46:23 | After ... < ... [true] | 0 | Test.java:46:18:46:23 | After ... < ... [true] | +| Test.java:46:18:46:23 | After ... < ... [true] | 1 | Test.java:46:31:49:3 | { ... } | +| Test.java:46:18:46:23 | After ... < ... [true] | 2 | Test.java:47:4:47:9 | ; | +| Test.java:46:18:46:23 | After ... < ... [true] | 3 | Test.java:47:4:47:8 | Before ...=... | +| Test.java:46:18:46:23 | After ... < ... [true] | 4 | Test.java:47:4:47:4 | y | +| Test.java:46:18:46:23 | After ... < ... [true] | 5 | Test.java:47:8:47:8 | 0 | +| Test.java:46:18:46:23 | After ... < ... [true] | 6 | Test.java:47:4:47:8 | ...=... | +| Test.java:46:18:46:23 | After ... < ... [true] | 7 | Test.java:47:4:47:8 | After ...=... | +| Test.java:46:18:46:23 | After ... < ... [true] | 8 | Test.java:47:4:47:9 | After ; | +| Test.java:46:18:46:23 | After ... < ... [true] | 9 | Test.java:48:4:48:10 | ; | +| Test.java:46:18:46:23 | After ... < ... [true] | 10 | Test.java:48:4:48:9 | Before ...=... | +| Test.java:46:18:46:23 | After ... < ... [true] | 11 | Test.java:48:4:48:4 | w | +| Test.java:46:18:46:23 | After ... < ... [true] | 12 | Test.java:48:8:48:9 | 10 | +| Test.java:46:18:46:23 | After ... < ... [true] | 13 | Test.java:48:4:48:9 | ...=... | +| Test.java:46:18:46:23 | After ... < ... [true] | 14 | Test.java:48:4:48:9 | After ...=... | +| Test.java:46:18:46:23 | After ... < ... [true] | 15 | Test.java:48:4:48:10 | After ; | +| Test.java:46:18:46:23 | After ... < ... [true] | 16 | Test.java:46:31:49:3 | After { ... } | +| Test.java:46:18:46:23 | After ... < ... [true] | 17 | Test.java:46:3:46:29 | [LoopHeader] for (...;...;...) | +| Test.java:46:18:46:23 | After ... < ... [true] | 18 | Test.java:46:26:46:28 | Before ...++ | +| Test.java:46:18:46:23 | After ... < ... [true] | 19 | Test.java:46:26:46:26 | j | +| Test.java:46:18:46:23 | After ... < ... [true] | 20 | Test.java:46:26:46:28 | ...++ | +| Test.java:46:18:46:23 | After ... < ... [true] | 21 | Test.java:46:26:46:28 | After ...++ | +| Test.java:46:18:46:23 | Before ... < ... | 0 | Test.java:46:18:46:23 | Before ... < ... | +| Test.java:46:18:46:23 | Before ... < ... | 1 | Test.java:46:18:46:18 | j | +| Test.java:46:18:46:23 | Before ... < ... | 2 | Test.java:46:22:46:23 | 10 | +| Test.java:46:18:46:23 | Before ... < ... | 3 | Test.java:46:18:46:23 | ... < ... | +| Test.java:54:3:54:29 | After for (...;...;...) | 0 | Test.java:54:3:54:29 | After for (...;...;...) | +| Test.java:54:3:54:29 | After for (...;...;...) | 1 | Test.java:70:3:70:9 | ; | +| Test.java:54:3:54:29 | After for (...;...;...) | 2 | Test.java:70:3:70:8 | Before ...=... | +| Test.java:54:3:54:29 | After for (...;...;...) | 3 | Test.java:70:3:70:3 | z | +| Test.java:54:3:54:29 | After for (...;...;...) | 4 | Test.java:70:7:70:8 | 50 | +| Test.java:54:3:54:29 | After for (...;...;...) | 5 | Test.java:70:3:70:8 | ...=... | +| Test.java:54:3:54:29 | After for (...;...;...) | 6 | Test.java:70:3:70:8 | After ...=... | +| Test.java:54:3:54:29 | After for (...;...;...) | 7 | Test.java:70:3:70:9 | After ; | +| Test.java:54:3:54:29 | After for (...;...;...) | 8 | Test.java:74:3:74:9 | ; | +| Test.java:54:3:54:29 | After for (...;...;...) | 9 | Test.java:74:3:74:8 | Before ...=... | +| Test.java:54:3:54:29 | After for (...;...;...) | 10 | Test.java:74:3:74:3 | w | +| Test.java:54:3:54:29 | After for (...;...;...) | 11 | Test.java:74:7:74:8 | 40 | +| Test.java:54:3:54:29 | After for (...;...;...) | 12 | Test.java:74:3:74:8 | ...=... | +| Test.java:54:3:54:29 | After for (...;...;...) | 13 | Test.java:74:3:74:8 | After ...=... | +| Test.java:54:3:54:29 | After for (...;...;...) | 14 | Test.java:74:3:74:9 | After ; | +| Test.java:54:3:54:29 | After for (...;...;...) | 15 | Test.java:75:3:75:9 | Before return ... | +| Test.java:54:3:54:29 | After for (...;...;...) | 16 | Test.java:75:3:75:9 | return ... | +| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 0 | Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | +| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 1 | Test.java:54:26:54:28 | Before ...++ | +| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 2 | Test.java:54:26:54:26 | j | +| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 3 | Test.java:54:26:54:28 | ...++ | +| Test.java:54:3:54:29 | [LoopHeader] for (...;...;...) | 4 | Test.java:54:26:54:28 | After ...++ | +| Test.java:54:18:54:23 | After ... < ... [false] | 0 | Test.java:54:18:54:23 | After ... < ... [false] | +| Test.java:54:18:54:23 | After ... < ... [true] | 0 | Test.java:54:18:54:23 | After ... < ... [true] | +| Test.java:54:18:54:23 | After ... < ... [true] | 1 | Test.java:54:31:68:3 | { ... } | +| Test.java:54:18:54:23 | After ... < ... [true] | 2 | Test.java:55:4:55:10 | ; | +| Test.java:54:18:54:23 | After ... < ... [true] | 3 | Test.java:55:4:55:9 | Before ...=... | +| Test.java:54:18:54:23 | After ... < ... [true] | 4 | Test.java:55:4:55:4 | y | +| Test.java:54:18:54:23 | After ... < ... [true] | 5 | Test.java:55:8:55:9 | 30 | +| Test.java:54:18:54:23 | After ... < ... [true] | 6 | Test.java:55:4:55:9 | ...=... | +| Test.java:54:18:54:23 | After ... < ... [true] | 7 | Test.java:55:4:55:9 | After ...=... | +| Test.java:54:18:54:23 | After ... < ... [true] | 8 | Test.java:55:4:55:10 | After ; | +| Test.java:54:18:54:23 | After ... < ... [true] | 9 | Test.java:56:4:56:12 | if (...) | +| Test.java:54:18:54:23 | After ... < ... [true] | 10 | Test.java:56:7:56:11 | Before ... > ... | +| Test.java:54:18:54:23 | After ... < ... [true] | 11 | Test.java:56:7:56:7 | z | +| Test.java:54:18:54:23 | After ... < ... [true] | 12 | Test.java:56:11:56:11 | 0 | +| Test.java:54:18:54:23 | After ... < ... [true] | 13 | Test.java:56:7:56:11 | ... > ... | +| Test.java:54:18:54:23 | Before ... < ... | 0 | Test.java:54:18:54:23 | Before ... < ... | +| Test.java:54:18:54:23 | Before ... < ... | 1 | Test.java:54:18:54:18 | j | +| Test.java:54:18:54:23 | Before ... < ... | 2 | Test.java:54:22:54:23 | 10 | +| Test.java:54:18:54:23 | Before ... < ... | 3 | Test.java:54:18:54:23 | ... < ... | +| Test.java:56:7:56:11 | After ... > ... [false] | 0 | Test.java:56:7:56:11 | After ... > ... [false] | +| Test.java:56:7:56:11 | After ... > ... [false] | 1 | Test.java:63:9:66:4 | { ... } | +| Test.java:56:7:56:11 | After ... > ... [false] | 2 | Test.java:64:5:64:11 | ; | +| Test.java:56:7:56:11 | After ... > ... [false] | 3 | Test.java:64:5:64:10 | Before ...=... | +| Test.java:56:7:56:11 | After ... > ... [false] | 4 | Test.java:64:5:64:5 | w | +| Test.java:56:7:56:11 | After ... > ... [false] | 5 | Test.java:64:9:64:10 | 10 | +| Test.java:56:7:56:11 | After ... > ... [false] | 6 | Test.java:64:5:64:10 | ...=... | +| Test.java:56:7:56:11 | After ... > ... [false] | 7 | Test.java:64:5:64:10 | After ...=... | +| Test.java:56:7:56:11 | After ... > ... [false] | 8 | Test.java:64:5:64:11 | After ; | +| Test.java:56:7:56:11 | After ... > ... [false] | 9 | Test.java:65:5:65:13 | Before continue | +| Test.java:56:7:56:11 | After ... > ... [false] | 10 | Test.java:65:5:65:13 | continue | +| Test.java:56:7:56:11 | After ... > ... [true] | 0 | Test.java:56:7:56:11 | After ... > ... [true] | +| Test.java:56:7:56:11 | After ... > ... [true] | 1 | Test.java:57:5:57:13 | if (...) | +| Test.java:56:7:56:11 | After ... > ... [true] | 2 | Test.java:57:8:57:12 | Before ... > ... | +| Test.java:56:7:56:11 | After ... > ... [true] | 3 | Test.java:57:8:57:8 | y | +| Test.java:56:7:56:11 | After ... > ... [true] | 4 | Test.java:57:12:57:12 | 0 | +| Test.java:56:7:56:11 | After ... > ... [true] | 5 | Test.java:57:8:57:12 | ... > ... | +| Test.java:57:8:57:12 | After ... > ... [false] | 0 | Test.java:57:8:57:12 | After ... > ... [false] | +| Test.java:57:8:57:12 | After ... > ... [false] | 1 | Test.java:60:12:62:5 | { ... } | +| Test.java:57:8:57:12 | After ... > ... [false] | 2 | Test.java:61:6:61:12 | ; | +| Test.java:57:8:57:12 | After ... > ... [false] | 3 | Test.java:61:6:61:11 | Before ...=... | +| Test.java:57:8:57:12 | After ... > ... [false] | 4 | Test.java:61:6:61:6 | w | +| Test.java:57:8:57:12 | After ... > ... [false] | 5 | Test.java:61:10:61:11 | 20 | +| Test.java:57:8:57:12 | After ... > ... [false] | 6 | Test.java:61:6:61:11 | ...=... | +| Test.java:57:8:57:12 | After ... > ... [false] | 7 | Test.java:61:6:61:11 | After ...=... | +| Test.java:57:8:57:12 | After ... > ... [false] | 8 | Test.java:61:6:61:12 | After ; | +| Test.java:57:8:57:12 | After ... > ... [false] | 9 | Test.java:60:12:62:5 | After { ... } | +| Test.java:57:8:57:12 | After ... > ... [false] | 10 | Test.java:57:5:57:13 | After if (...) | +| Test.java:57:8:57:12 | After ... > ... [false] | 11 | Test.java:56:4:56:12 | After if (...) | +| Test.java:57:8:57:12 | After ... > ... [false] | 12 | Test.java:67:4:67:9 | ; | +| Test.java:57:8:57:12 | After ... > ... [false] | 13 | Test.java:67:4:67:8 | Before ...=... | +| Test.java:57:8:57:12 | After ... > ... [false] | 14 | Test.java:67:4:67:4 | x | +| Test.java:57:8:57:12 | After ... > ... [false] | 15 | Test.java:67:8:67:8 | 0 | +| Test.java:57:8:57:12 | After ... > ... [false] | 16 | Test.java:67:4:67:8 | ...=... | +| Test.java:57:8:57:12 | After ... > ... [false] | 17 | Test.java:67:4:67:8 | After ...=... | +| Test.java:57:8:57:12 | After ... > ... [false] | 18 | Test.java:67:4:67:9 | After ; | +| Test.java:57:8:57:12 | After ... > ... [false] | 19 | Test.java:54:31:68:3 | After { ... } | +| Test.java:57:8:57:12 | After ... > ... [true] | 0 | Test.java:57:8:57:12 | After ... > ... [true] | +| Test.java:57:8:57:12 | After ... > ... [true] | 1 | Test.java:57:15:60:5 | { ... } | +| Test.java:57:8:57:12 | After ... > ... [true] | 2 | Test.java:58:6:58:11 | ; | +| Test.java:57:8:57:12 | After ... > ... [true] | 3 | Test.java:58:6:58:10 | Before ...=... | +| Test.java:57:8:57:12 | After ... > ... [true] | 4 | Test.java:58:6:58:6 | w | +| Test.java:57:8:57:12 | After ... > ... [true] | 5 | Test.java:58:10:58:10 | 0 | +| Test.java:57:8:57:12 | After ... > ... [true] | 6 | Test.java:58:6:58:10 | ...=... | +| Test.java:57:8:57:12 | After ... > ... [true] | 7 | Test.java:58:6:58:10 | After ...=... | +| Test.java:57:8:57:12 | After ... > ... [true] | 8 | Test.java:58:6:58:11 | After ; | +| Test.java:57:8:57:12 | After ... > ... [true] | 9 | Test.java:59:6:59:11 | Before break | +| Test.java:57:8:57:12 | After ... > ... [true] | 10 | Test.java:59:6:59:11 | break | From ccd28ff66a94aa1802c517dd7588ac85c86632b8 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 11 Feb 2026 10:31:17 +0100 Subject: [PATCH 176/243] Java: Fix instanceof-disjunction. --- .../semmle/code/java/dataflow/TypeFlow.qll | 47 ++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index 9aca7fad2f2a..2c04a6413eb7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -326,20 +326,45 @@ private module Input implements TypeFlowInput { ) } - /** - * Holds if `ioe` checks `v`, its true-successor is `bb`, and `bb` has multiple - * predecessors. - */ - private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, Base::SsaDefinition v) { + /** Holds if `ioe` checks `v` and its true-successor is `bb`. */ + private predicate instanceofTrueSuccessor(InstanceOfExpr ioe, BasicBlock bb, Base::SsaDefinition v) { ioe.getExpr() = v.getARead() and - strictcount(bb.getAPredecessor()) > 1 and exists(ConditionBlock cb | cb.getCondition() = ioe and cb.getTestSuccessor(true) = bb) } - /** Holds if `bb` is disjunctively guarded by multiple `instanceof` tests on `v`. */ - private predicate instanceofDisjunction(BasicBlock bb, Base::SsaDefinition v) { - strictcount(InstanceOfExpr ioe | instanceofDisjunct(ioe, bb, v)) = - strictcount(bb.getAPredecessor()) + /** + * Holds if `bb` is disjunctively guarded by one (`trivial = true`) or more + * (`trivial = false`) `instanceof` tests on `v`. + */ + private predicate instanceofDisjunction(BasicBlock bb, Base::SsaDefinition v, boolean trivial) { + exists(int preds | + strictcount(bb.getAPredecessor()) = preds and + strictcount(InstanceOfExpr ioe | instanceofTrueSuccessor(ioe, bb, v)) = preds and + if preds > 1 then trivial = false else trivial = true + ) + or + strictcount(bb.getAPredecessor()) = 2 and + exists(BasicBlock pred1, BasicBlock pred2 | + pred1 != pred2 and + pred1 = bb.getAPredecessor() and + pred2 = bb.getAPredecessor() and + instanceofDisjunction(pred1, v, _) and + instanceofDisjunction(pred2, v, _) and + trivial = false + ) + } + + /** + * Holds if `bb` is disjunctively guarded by one or more `instanceof` tests + * on `v`, and `ioe` is one of those tests. + */ + private predicate instanceofDisjunct(InstanceOfExpr ioe, BasicBlock bb, Base::SsaDefinition v) { + instanceofDisjunction(bb, v, _) and + ( + instanceofTrueSuccessor(ioe, bb, v) + or + exists(BasicBlock pred | pred = bb.getAPredecessor() and instanceofDisjunct(ioe, pred, v)) + ) } /** @@ -348,7 +373,7 @@ private module Input implements TypeFlowInput { */ predicate instanceofDisjunctionGuarded(TypeFlowNode n, RefType t) { exists(BasicBlock bb, InstanceOfExpr ioe, Base::SsaDefinition v, VarAccess va | - instanceofDisjunction(bb, v) and + instanceofDisjunction(bb, v, false) and bb.dominates(va.getBasicBlock()) and va = v.getARead() and instanceofDisjunct(ioe, bb, v) and From fc8b7c04cf5a2a146058c39ecace9c5315b1ba53 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 11 Feb 2026 13:27:17 +0100 Subject: [PATCH 177/243] Java: Exclude ExprStmt consistent with SwitchCase.getRuleExpression(). --- java/ql/lib/semmle/code/java/ControlFlowGraph.qll | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 30b86f559f01..b4180a485e09 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -26,18 +26,21 @@ module Ast implements AstSig { class AstNode = ExprParent; - private predicate skipControlFlow(Expr e) { - exists(ConstCase cc | e = cc.getValue(_)) or - e.getParent*() instanceof Annotation or + private predicate skipControlFlow(AstNode e) { + e.(Expr).getParent*() instanceof Annotation or e instanceof TypeAccess or e instanceof ArrayTypeAccess or e instanceof UnionTypeAccess or e instanceof IntersectionTypeAccess or - e instanceof WildcardTypeAccess + e instanceof WildcardTypeAccess or + // Switch cases of the form `case e1 -> e2;` skip the ExprStmt and treat + // the right-hand side as an expression. See `SwitchCase.getRuleExpression()`. + any(SwitchCase sc).getRuleExpression() = e.(J::ExprStmt).getExpr() } AstNode getChild(AstNode n, int index) { not skipControlFlow(result) and + not skipControlFlow(n) and result.(Expr).isNthChildOf(n, index) or result.(Stmt).isNthChildOf(n, index) @@ -60,7 +63,9 @@ module Ast implements AstSig { class BlockStmt = J::BlockStmt; - class ExprStmt = J::ExprStmt; + class ExprStmt extends J::ExprStmt { + ExprStmt() { not skipControlFlow(this) } + } class IfStmt = J::IfStmt; From 581679d27d27b2bffa2ecc3402189af13ff68787 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 10:02:31 +0100 Subject: [PATCH 178/243] Java: Fix reference to entry node. --- .../library-tests/controlflow/dominance/dominanceWrong.ql | 3 ++- .../library-tests/controlflow/dominance/dominanceWrong.ql | 3 ++- .../test/library-tests/controlflow/dominance/dominanceWrong.ql | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominanceWrong.ql b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominanceWrong.ql index 4eadcddc61a6..6deead2df73b 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominanceWrong.ql +++ b/java/ql/test-kotlin1/library-tests/controlflow/dominance/dominanceWrong.ql @@ -17,5 +17,6 @@ predicate dominanceCounterExample(ControlFlowNode entry, ControlFlowNode dom, Co from Callable c, ControlFlowNode dom, ControlFlowNode node where strictlyDominates(dom, node) and - dominanceCounterExample(c.getBody().getControlFlowNode(), dom, node) + dominanceCounterExample(any(ControlFlow::EntryNode entry | entry.getEnclosingCallable() = c), dom, + node) select c, dom, node diff --git a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominanceWrong.ql b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominanceWrong.ql index 4eadcddc61a6..6deead2df73b 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominanceWrong.ql +++ b/java/ql/test-kotlin2/library-tests/controlflow/dominance/dominanceWrong.ql @@ -17,5 +17,6 @@ predicate dominanceCounterExample(ControlFlowNode entry, ControlFlowNode dom, Co from Callable c, ControlFlowNode dom, ControlFlowNode node where strictlyDominates(dom, node) and - dominanceCounterExample(c.getBody().getControlFlowNode(), dom, node) + dominanceCounterExample(any(ControlFlow::EntryNode entry | entry.getEnclosingCallable() = c), dom, + node) select c, dom, node diff --git a/java/ql/test/library-tests/controlflow/dominance/dominanceWrong.ql b/java/ql/test/library-tests/controlflow/dominance/dominanceWrong.ql index 4eadcddc61a6..6deead2df73b 100644 --- a/java/ql/test/library-tests/controlflow/dominance/dominanceWrong.ql +++ b/java/ql/test/library-tests/controlflow/dominance/dominanceWrong.ql @@ -17,5 +17,6 @@ predicate dominanceCounterExample(ControlFlowNode entry, ControlFlowNode dom, Co from Callable c, ControlFlowNode dom, ControlFlowNode node where strictlyDominates(dom, node) and - dominanceCounterExample(c.getBody().getControlFlowNode(), dom, node) + dominanceCounterExample(any(ControlFlow::EntryNode entry | entry.getEnclosingCallable() = c), dom, + node) select c, dom, node From a6ee1df567931bbe3f0e4b965596fa232dfd1496 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 10:15:57 +0100 Subject: [PATCH 179/243] Java: Remove test. Flexible constructors need AST-based tests, which are already in place, not CFG tests. --- .../flexible-constructors/SuperPredecessor.expected | 7 ------- .../flexible-constructors/SuperPredecessor.ql | 11 ----------- 2 files changed, 18 deletions(-) delete mode 100644 java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected delete mode 100644 java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql diff --git a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected deleted file mode 100644 index dba8b4acf988..000000000000 --- a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.expected +++ /dev/null @@ -1,7 +0,0 @@ -| FlexibleConstructors.java:10:15:10:17 | msg | FlexibleConstructors.java:10:9:10:19 | super(...) | predecessor of explicit super() | -| FlexibleConstructors.java:18:13:18:17 | ... < ... | FlexibleConstructors.java:19:9:19:16 | super(...) | predecessor of explicit super() | -| FlexibleConstructors.java:38:17:38:48 | combined | FlexibleConstructors.java:39:13:39:20 | super(...) | predecessor of explicit super() | -| FlexibleConstructors.java:52:9:52:40 | ...=... | FlexibleConstructors.java:53:9:53:16 | super(...) | predecessor of explicit super() | -| FlexibleConstructors.java:65:15:65:18 | temp | FlexibleConstructors.java:65:9:65:20 | super(...) | predecessor of explicit super() | -| FlexibleConstructors.java:77:9:77:24 | ...=... | FlexibleConstructors.java:78:9:78:16 | super(...) | predecessor of explicit super() | -| FlexibleConstructors.java:91:13:91:41 | string | FlexibleConstructors.java:92:9:92:16 | super(...) | predecessor of explicit super() | diff --git a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql b/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql deleted file mode 100644 index 2a291c5e82a3..000000000000 --- a/java/ql/test/library-tests/flexible-constructors/SuperPredecessor.ql +++ /dev/null @@ -1,11 +0,0 @@ -import java - -from ControlFlowNode pred, ControlFlowNode supNode, SuperConstructorInvocationStmt sc -where - supNode.asStmt() = sc and - pred.getASuccessor() = supNode and - pred != supNode and - not pred.asStmt() instanceof BlockStmt and - exists(sc.getEnclosingCallable().getFile().getRelativePath()) and - sc.getLocation().getEndColumn() > sc.getLocation().getStartColumn() -select pred, sc, "predecessor of explicit super()" From 4d9c0e0c2620924fbc5df132ec9f3aa536961a0e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 10:29:59 +0100 Subject: [PATCH 180/243] Java: Accept new locations for SSA definitions. --- .../dataflow/capture/test.expected | 4 +- .../test/library-tests/ssa/captures.expected | 14 ++-- .../test/library-tests/ssa/firstUse.expected | 56 +++++++------- .../ql/test/library-tests/ssa/ssaDef.expected | 62 ++++++++-------- .../ql/test/library-tests/ssa/ssaPhi.expected | 44 +++++------ .../ql/test/library-tests/ssa/ssaUse.expected | 74 +++++++++---------- 6 files changed, 127 insertions(+), 127 deletions(-) diff --git a/java/ql/test/library-tests/dataflow/capture/test.expected b/java/ql/test/library-tests/dataflow/capture/test.expected index a744f468fbe9..16ec39314eb0 100644 --- a/java/ql/test/library-tests/dataflow/capture/test.expected +++ b/java/ql/test/library-tests/dataflow/capture/test.expected @@ -16,8 +16,8 @@ | A.java:21:11:21:13 | "B" : String | A.java:14:11:14:20 | f2(...) : new A(...) { ... } [String s] | | A.java:21:11:21:13 | "B" : String | A.java:15:16:15:16 | a : new A(...) { ... } [String s] | | A.java:21:11:21:13 | "B" : String | A.java:15:16:15:22 | get(...) : String | +| A.java:21:11:21:13 | "B" : String | A.java:20:5:20:15 | SSA phi(s) : String | | A.java:21:11:21:13 | "B" : String | A.java:21:7:21:13 | ...=... : String | -| A.java:21:11:21:13 | "B" : String | A.java:25:5:25:26 | SSA phi(s) : String | | A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | String s : String | | A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] | | A.java:21:11:21:13 | "B" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] | @@ -32,8 +32,8 @@ | A.java:23:11:23:13 | "C" : String | A.java:14:11:14:20 | f2(...) : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:15:16:15:16 | a : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:15:16:15:22 | get(...) : String | +| A.java:23:11:23:13 | "C" : String | A.java:20:5:20:15 | SSA phi(s) : String | | A.java:23:11:23:13 | "C" : String | A.java:23:7:23:13 | ...=... : String | -| A.java:23:11:23:13 | "C" : String | A.java:25:5:25:26 | SSA phi(s) : String | | A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | String s : String | | A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] | diff --git a/java/ql/test/library-tests/ssa/captures.expected b/java/ql/test/library-tests/ssa/captures.expected index 3d8b8e136024..e3ccd98ce162 100644 --- a/java/ql/test/library-tests/ssa/captures.expected +++ b/java/ql/test/library-tests/ssa/captures.expected @@ -1,9 +1,9 @@ -| Nested.java:8:29:8:57 | SSA capture def(next(..).p1) | Nested.java:4:34:10:3 | SSA param(p1) | -| Nested.java:8:29:8:57 | SSA capture def(next(..).x1) | Nested.java:5:9:5:14 | SSA def(x1) | +| Nested.java:8:22:8:25 | SSA capture def(next(..).p1) | Nested.java:4:21:4:24 | SSA param(p1) | +| Nested.java:8:22:8:25 | SSA capture def(next(..).x1) | Nested.java:5:9:5:14 | SSA def(x1) | | Nested.java:16:22:16:34 | SSA capture def(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) | -| Nested.java:19:27:22:7 | SSA capture def(getInt(..).hash) | Nested.java:16:15:16:34 | SSA def(hash) | -| Nested.java:19:27:22:7 | SSA capture def(getInt(..).x2) | Nested.java:17:9:17:15 | SSA def(x2) | +| Nested.java:19:18:19:23 | SSA capture def(getInt(..).hash) | Nested.java:16:15:16:34 | SSA def(hash) | +| Nested.java:19:18:19:23 | SSA capture def(getInt(..).x2) | Nested.java:17:9:17:15 | SSA def(x2) | | Nested.java:20:27:20:39 | SSA capture def(getInt(..).obj) | Nested.java:15:12:15:29 | SSA def(obj) | -| Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:30:5:30:37 | SSA phi(obj2) | -| Nested.java:37:20:37:25 | SSA capture def(getInt(..).x3) | Nested.java:36:7:36:12 | SSA def(x3) | -| Nested.java:40:20:40:25 | SSA capture def(getInt(..).x3) | Nested.java:39:7:39:12 | SSA def(x3) | +| Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:25:5:25:24 | SSA phi(obj2) | +| Nested.java:37:14:37:25 | SSA capture def(getInt(..).x3) | Nested.java:36:7:36:12 | SSA def(x3) | +| Nested.java:40:14:40:25 | SSA capture def(getInt(..).x3) | Nested.java:39:7:39:12 | SSA def(x3) | diff --git a/java/ql/test/library-tests/ssa/firstUse.expected b/java/ql/test/library-tests/ssa/firstUse.expected index 6494791be346..a92573377387 100644 --- a/java/ql/test/library-tests/ssa/firstUse.expected +++ b/java/ql/test/library-tests/ssa/firstUse.expected @@ -1,11 +1,11 @@ -| Fields.java:12:19:21:3 | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs | +| Fields.java:12:15:12:15 | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs | | Fields.java:14:5:14:9 | SSA call def(this.xs) | Fields.java:15:9:15:10 | xs | | Fields.java:15:5:15:10 | SSA def(x) | Fields.java:16:9:16:9 | x | +| Fields.java:16:5:16:17 | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs | | Fields.java:17:7:17:11 | SSA call def(this.xs) | Fields.java:18:9:18:15 | this.xs | -| Fields.java:18:5:18:16 | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs | | Fields.java:19:5:19:19 | SSA def(this.xs) | Fields.java:20:9:20:10 | xs | -| Fields.java:23:19:49:3 | SSA entry def(Fields.stat) | Fields.java:27:15:27:18 | stat | -| Fields.java:23:19:49:3 | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs | +| Fields.java:23:15:23:15 | SSA entry def(Fields.stat) | Fields.java:27:15:27:18 | stat | +| Fields.java:23:15:23:15 | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs | | Fields.java:24:12:24:27 | SSA def(f) | Fields.java:25:15:25:15 | f | | Fields.java:24:12:24:27 | SSA qualifier def(f.xs) | Fields.java:25:15:25:18 | f.xs | | Fields.java:24:16:24:27 | SSA call def(Fields.stat) | Fields.java:27:15:27:18 | stat | @@ -18,52 +18,52 @@ | Fields.java:36:5:36:19 | SSA def(this.xs) | Fields.java:38:9:38:10 | xs | | Fields.java:39:5:39:21 | SSA def(f.xs) | Fields.java:40:9:40:12 | f.xs | | Fields.java:41:5:41:10 | SSA def(z) | Fields.java:42:9:42:9 | z | +| Fields.java:42:5:42:17 | SSA phi(Fields.stat) | Fields.java:48:9:48:12 | stat | +| Fields.java:42:5:42:17 | SSA phi(f) | Fields.java:44:9:44:9 | f | +| Fields.java:42:5:42:17 | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs | | Fields.java:43:7:43:22 | SSA def(f) | Fields.java:44:9:44:9 | f | | Fields.java:43:7:43:22 | SSA qualifier def(f.xs) | Fields.java:44:9:44:12 | f.xs | | Fields.java:43:11:43:22 | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat | -| Fields.java:44:5:44:13 | SSA phi(Fields.stat) | Fields.java:48:9:48:12 | stat | -| Fields.java:44:5:44:13 | SSA phi(f) | Fields.java:44:9:44:9 | f | -| Fields.java:44:5:44:13 | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs | | Fields.java:45:5:45:16 | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat | -| Nested.java:8:29:8:57 | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 | -| Nested.java:8:29:8:57 | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 | +| Nested.java:8:22:8:25 | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 | +| Nested.java:8:22:8:25 | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 | | Nested.java:16:22:16:34 | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj | | Nested.java:18:15:23:5 | SSA def(h2) | Nested.java:25:9:25:10 | h2 | -| Nested.java:19:27:22:7 | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash | -| Nested.java:19:27:22:7 | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | +| Nested.java:19:18:19:23 | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash | +| Nested.java:19:18:19:23 | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | | Nested.java:20:19:20:39 | SSA def(hnest) | Nested.java:21:37:21:41 | hnest | | Nested.java:20:27:20:39 | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj | | Nested.java:30:23:30:36 | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 | -| Nested.java:33:29:42:3 | SSA param(p3) | Nested.java:35:9:35:10 | p3 | -| Nested.java:37:20:37:25 | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | -| Nested.java:40:20:40:25 | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | -| Test.java:4:19:32:2 | SSA param(param) | Test.java:9:7:9:11 | param | +| Nested.java:33:13:33:19 | SSA param(p3) | Nested.java:35:9:35:10 | p3 | +| Nested.java:37:14:37:25 | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | +| Nested.java:40:14:40:25 | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | +| Test.java:4:6:4:6 | SSA param(param) | Test.java:9:7:9:11 | param | | Test.java:6:7:6:11 | SSA def(x) | Test.java:10:4:10:4 | x | | Test.java:6:7:6:11 | SSA def(x) | Test.java:20:10:20:10 | x | +| Test.java:9:3:9:16 | SSA phi(x) | Test.java:20:10:20:10 | x | +| Test.java:9:3:9:16 | SSA phi(y) | Test.java:20:14:20:14 | y | | Test.java:10:4:10:6 | SSA def(x) | Test.java:11:10:11:10 | x | | Test.java:11:4:11:10 | SSA def(y) | Test.java:20:14:20:14 | y | | Test.java:11:8:11:10 | SSA def(x) | Test.java:20:10:20:10 | x | | Test.java:14:4:14:8 | SSA def(y) | Test.java:15:4:15:4 | y | | Test.java:15:4:15:9 | SSA def(y) | Test.java:20:14:20:14 | y | -| Test.java:19:3:19:3 | SSA phi(x) | Test.java:20:10:20:10 | x | -| Test.java:19:3:19:3 | SSA phi(y) | Test.java:20:14:20:14 | y | -| Test.java:20:10:20:10 | SSA phi(param) | Test.java:21:8:21:12 | param | -| Test.java:20:10:20:10 | SSA phi(y) | Test.java:20:14:20:14 | y | +| Test.java:20:3:20:15 | SSA phi(param) | Test.java:21:8:21:12 | param | +| Test.java:20:3:20:15 | SSA phi(y) | Test.java:20:14:20:14 | y | | Test.java:21:8:21:14 | SSA def(param) | Test.java:21:8:21:12 | param | | Test.java:24:4:24:9 | SSA def(y) | Test.java:20:14:20:14 | y | | Test.java:27:12:27:16 | SSA def(i) | Test.java:27:19:27:19 | i | -| Test.java:27:19:27:19 | SSA phi(i) | Test.java:27:19:27:19 | i | -| Test.java:27:19:27:19 | SSA phi(x) | Test.java:28:4:28:4 | x | -| Test.java:27:19:27:19 | SSA phi(x) | Test.java:31:10:31:10 | x | +| Test.java:27:19:27:22 | SSA phi(i) | Test.java:27:19:27:19 | i | +| Test.java:27:19:27:22 | SSA phi(x) | Test.java:28:4:28:4 | x | +| Test.java:27:19:27:22 | SSA phi(x) | Test.java:31:10:31:10 | x | | Test.java:27:25:27:27 | SSA def(i) | Test.java:27:19:27:19 | i | | Test.java:28:4:28:9 | SSA def(x) | Test.java:28:4:28:4 | x | | Test.java:28:4:28:9 | SSA def(x) | Test.java:31:10:31:10 | x | -| TestInstanceOfPattern.java:3:24:9:2 | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | +| TestInstanceOfPattern.java:3:7:3:10 | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | | TestInstanceOfPattern.java:4:29:4:29 | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s | -| TestInstanceOfPattern.java:10:25:16:2 | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | +| TestInstanceOfPattern.java:10:7:10:11 | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | | TestInstanceOfPattern.java:11:31:11:31 | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s | -| TestInstanceOfPattern.java:17:25:23:2 | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | +| TestInstanceOfPattern.java:17:7:17:11 | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | | TestInstanceOfPattern.java:18:29:18:29 | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s | -| TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | -| TestInstanceOfPattern.java:24:25:30:2 | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | -| TestInstanceOfPattern.java:24:25:30:2 | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | +| TestInstanceOfPattern.java:24:7:24:11 | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | +| TestInstanceOfPattern.java:24:7:24:11 | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | +| TestInstanceOfPattern.java:24:7:24:11 | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | diff --git a/java/ql/test/library-tests/ssa/ssaDef.expected b/java/ql/test/library-tests/ssa/ssaDef.expected index a10b9d327b27..2deba0dcebba 100644 --- a/java/ql/test/library-tests/ssa/ssaDef.expected +++ b/java/ql/test/library-tests/ssa/ssaDef.expected @@ -1,75 +1,75 @@ | Fields.java:13:5:13:17 | x | Fields.java:15:5:15:10 | ...=... | SSA def(x) | -| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA entry def(this.xs) | +| Fields.java:13:15:13:16 | this.xs | Fields.java:12:15:12:15 | Entry | SSA entry def(this.xs) | | Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA call def(this.xs) | +| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | SSA phi(this.xs) | | Fields.java:13:15:13:16 | this.xs | Fields.java:17:7:17:11 | upd(...) | SSA call def(this.xs) | -| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | ; | SSA phi(this.xs) | | Fields.java:13:15:13:16 | this.xs | Fields.java:19:5:19:19 | ...=... | SSA def(this.xs) | | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | +| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | SSA phi(f) | | Fields.java:24:5:24:28 | f | Fields.java:43:7:43:22 | ...=... | SSA def(f) | -| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | SSA phi(f) | | Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA qualifier def(f.xs) | | Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(f.xs) | | Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | | Fields.java:25:15:25:18 | f.xs | Fields.java:39:5:39:21 | ...=... | SSA def(f.xs) | +| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | SSA phi(f.xs) | | Fields.java:25:15:25:18 | f.xs | Fields.java:43:7:43:22 | ...=... | SSA qualifier def(f.xs) | -| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | SSA phi(f.xs) | | Fields.java:26:5:26:17 | z | Fields.java:41:5:41:10 | ...=... | SSA def(z) | -| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA entry def(this.xs) | +| Fields.java:26:15:26:16 | this.xs | Fields.java:23:15:23:15 | Entry | SSA entry def(this.xs) | | Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(this.xs) | | Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(this.xs) | | Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:23:19:49:3 | { ... } | SSA entry def(Fields.stat) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:23:15:23:15 | Entry | SSA entry def(Fields.stat) | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:24:16:24:27 | new Fields(...) | SSA call def(Fields.stat) | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA call def(Fields.stat) | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA call def(Fields.stat) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:42:5:42:17 | After if (...) | SSA phi(Fields.stat) | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:43:11:43:22 | new Fields(...) | SSA call def(Fields.stat) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:44:5:44:13 | ; | SSA phi(Fields.stat) | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA call def(Fields.stat) | -| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).p1) | -| Nested.java:4:26:4:31 | p1 | Nested.java:4:34:10:3 | { ... } | SSA param(p1) | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | +| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).p1) | +| Nested.java:4:26:4:31 | p1 | Nested.java:4:21:4:24 | Entry | SSA param(p1) | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) | | Nested.java:5:5:5:15 | x1 | Nested.java:5:9:5:14 | x1 | SSA def(x1) | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA capture def(getInt(..).obj) | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA capture def(getInt(..).obj) | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | Entry | SSA capture def(getInt(..).obj) | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | Entry | SSA capture def(getInt(..).obj) | | Nested.java:15:5:15:30 | obj | Nested.java:15:12:15:29 | obj | SSA def(obj) | -| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).hash) | +| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).hash) | | Nested.java:16:5:16:35 | hash | Nested.java:16:15:16:34 | hash | SSA def(hash) | -| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).x2) | +| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).x2) | | Nested.java:17:5:17:16 | x2 | Nested.java:17:9:17:15 | x2 | SSA def(x2) | | Nested.java:18:5:23:6 | h2 | Nested.java:18:15:23:5 | h2 | SSA def(h2) | | Nested.java:20:9:20:40 | hnest | Nested.java:20:19:20:39 | hnest | SSA def(hnest) | -| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA capture def(getInt(..).obj2) | +| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | Entry | SSA capture def(getInt(..).obj2) | +| Nested.java:24:5:24:31 | obj2 | Nested.java:25:5:25:24 | After if (...) | SSA phi(obj2) | | Nested.java:24:5:24:31 | obj2 | Nested.java:26:7:26:25 | ...=... | SSA def(obj2) | | Nested.java:24:5:24:31 | obj2 | Nested.java:28:7:28:25 | ...=... | SSA def(obj2) | -| Nested.java:24:5:24:31 | obj2 | Nested.java:30:5:30:37 | var ...; | SSA phi(obj2) | -| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA param(p3) | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA capture def(getInt(..).x3) | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA capture def(getInt(..).x3) | +| Nested.java:33:21:33:26 | p3 | Nested.java:33:13:33:19 | Entry | SSA param(p3) | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:14:37:25 | Entry | SSA capture def(getInt(..).x3) | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:14:40:25 | Entry | SSA capture def(getInt(..).x3) | | Nested.java:34:5:34:11 | x3 | Nested.java:36:7:36:12 | ...=... | SSA def(x3) | | Nested.java:34:5:34:11 | x3 | Nested.java:39:7:39:12 | ...=... | SSA def(x3) | -| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA param(param) | -| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | SSA phi(param) | +| Test.java:4:8:4:16 | param | Test.java:4:6:4:6 | Entry | SSA param(param) | +| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(param) | | Test.java:4:8:4:16 | param | Test.java:21:8:21:14 | ...++ | SSA def(param) | | Test.java:6:3:6:12 | x | Test.java:6:7:6:11 | x | SSA def(x) | +| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | SSA phi(x) | | Test.java:6:3:6:12 | x | Test.java:10:4:10:6 | ...++ | SSA def(x) | | Test.java:6:3:6:12 | x | Test.java:11:8:11:10 | ++... | SSA def(x) | -| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | SSA phi(x) | -| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | SSA phi(x) | +| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | SSA phi(x) | | Test.java:6:3:6:12 | x | Test.java:28:4:28:9 | ...+=... | SSA def(x) | +| Test.java:7:3:7:8 | y | Test.java:9:3:9:16 | After if (...) | SSA phi(y) | | Test.java:7:3:7:8 | y | Test.java:11:4:11:10 | ...=... | SSA def(y) | | Test.java:7:3:7:8 | y | Test.java:14:4:14:8 | ...=... | SSA def(y) | | Test.java:7:3:7:8 | y | Test.java:15:4:15:9 | ...+=... | SSA def(y) | -| Test.java:7:3:7:8 | y | Test.java:19:3:19:3 | ; | SSA phi(y) | -| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) | +| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) | | Test.java:7:3:7:8 | y | Test.java:24:4:24:9 | ...-=... | SSA def(y) | | Test.java:27:8:27:16 | i | Test.java:27:12:27:16 | i | SSA def(i) | -| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | +| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) | | Test.java:27:8:27:16 | i | Test.java:27:25:27:27 | ...++ | SSA def(i) | -| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) | +| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:7:3:10 | Entry | SSA param(obj) | | TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) | -| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) | +| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:7:10:11 | Entry | SSA param(obj) | | TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) | -| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) | +| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:7:17:11 | Entry | SSA param(obj) | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | -| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | +| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA param(obj) | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) | diff --git a/java/ql/test/library-tests/ssa/ssaPhi.expected b/java/ql/test/library-tests/ssa/ssaPhi.expected index b002ee81b3e3..afdf8bde2bdf 100644 --- a/java/ql/test/library-tests/ssa/ssaPhi.expected +++ b/java/ql/test/library-tests/ssa/ssaPhi.expected @@ -1,22 +1,22 @@ -| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | ; | Fields.java:14:5:14:9 | upd(...) | -| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | ; | Fields.java:17:7:17:11 | upd(...) | -| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | Fields.java:24:12:24:27 | f | -| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | Fields.java:43:7:43:22 | ...=... | -| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | Fields.java:39:5:39:21 | ...=... | -| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | Fields.java:43:7:43:22 | ...=... | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:44:5:44:13 | ; | Fields.java:32:5:32:9 | f(...) | -| Fields.java:27:15:27:18 | Fields.stat | Fields.java:44:5:44:13 | ; | Fields.java:43:11:43:22 | new Fields(...) | -| Nested.java:24:5:24:31 | obj2 | Nested.java:30:5:30:37 | var ...; | Nested.java:26:7:26:25 | ...=... | -| Nested.java:24:5:24:31 | obj2 | Nested.java:30:5:30:37 | var ...; | Nested.java:28:7:28:25 | ...=... | -| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | Test.java:4:19:32:2 | { ... } | -| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | Test.java:21:8:21:14 | ...++ | -| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | Test.java:6:7:6:11 | x | -| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | Test.java:11:8:11:10 | ++... | -| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | Test.java:19:3:19:3 | ; | -| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | Test.java:28:4:28:9 | ...+=... | -| Test.java:7:3:7:8 | y | Test.java:19:3:19:3 | ; | Test.java:11:4:11:10 | ...=... | -| Test.java:7:3:7:8 | y | Test.java:19:3:19:3 | ; | Test.java:15:4:15:9 | ...+=... | -| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | Test.java:19:3:19:3 | ; | -| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | Test.java:24:4:24:9 | ...-=... | -| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | Test.java:27:12:27:16 | i | -| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | Test.java:27:25:27:27 | ...++ | +| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | Fields.java:14:5:14:9 | upd(...) | +| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | Fields.java:17:7:17:11 | upd(...) | +| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | Fields.java:24:12:24:27 | f | +| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | Fields.java:43:7:43:22 | ...=... | +| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | Fields.java:39:5:39:21 | ...=... | +| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | Fields.java:43:7:43:22 | ...=... | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:42:5:42:17 | After if (...) | Fields.java:32:5:32:9 | f(...) | +| Fields.java:27:15:27:18 | Fields.stat | Fields.java:42:5:42:17 | After if (...) | Fields.java:43:11:43:22 | new Fields(...) | +| Nested.java:24:5:24:31 | obj2 | Nested.java:25:5:25:24 | After if (...) | Nested.java:26:7:26:25 | ...=... | +| Nested.java:24:5:24:31 | obj2 | Nested.java:25:5:25:24 | After if (...) | Nested.java:28:7:28:25 | ...=... | +| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:4:6:4:6 | Entry | +| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:21:8:21:14 | ...++ | +| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | Test.java:6:7:6:11 | x | +| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | Test.java:11:8:11:10 | ++... | +| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | Test.java:9:3:9:16 | After if (...) | +| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | Test.java:28:4:28:9 | ...+=... | +| Test.java:7:3:7:8 | y | Test.java:9:3:9:16 | After if (...) | Test.java:11:4:11:10 | ...=... | +| Test.java:7:3:7:8 | y | Test.java:9:3:9:16 | After if (...) | Test.java:15:4:15:9 | ...+=... | +| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:9:3:9:16 | After if (...) | +| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | Test.java:24:4:24:9 | ...-=... | +| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | Test.java:27:12:27:16 | i | +| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | Test.java:27:25:27:27 | ...++ | diff --git a/java/ql/test/library-tests/ssa/ssaUse.expected b/java/ql/test/library-tests/ssa/ssaUse.expected index 8525f62a883c..b1e309591e34 100644 --- a/java/ql/test/library-tests/ssa/ssaUse.expected +++ b/java/ql/test/library-tests/ssa/ssaUse.expected @@ -1,7 +1,7 @@ | Fields.java:13:5:13:17 | x | Fields.java:15:5:15:10 | ...=... | SSA def(x) | Fields.java:16:9:16:9 | x | -| Fields.java:13:15:13:16 | this.xs | Fields.java:12:19:21:3 | { ... } | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs | +| Fields.java:13:15:13:16 | this.xs | Fields.java:12:15:12:15 | Entry | SSA entry def(this.xs) | Fields.java:13:15:13:16 | xs | | Fields.java:13:15:13:16 | this.xs | Fields.java:14:5:14:9 | upd(...) | SSA call def(this.xs) | Fields.java:15:9:15:10 | xs | -| Fields.java:13:15:13:16 | this.xs | Fields.java:18:5:18:16 | ; | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs | +| Fields.java:13:15:13:16 | this.xs | Fields.java:16:5:16:17 | After if (...) | SSA phi(this.xs) | Fields.java:18:9:18:15 | this.xs | | Fields.java:13:15:13:16 | this.xs | Fields.java:19:5:19:19 | ...=... | SSA def(this.xs) | Fields.java:20:9:20:10 | xs | | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:25:15:25:15 | f | | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:29:9:29:9 | f | @@ -10,17 +10,17 @@ | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:37:9:37:9 | f | | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:39:5:39:5 | f | | Fields.java:24:5:24:28 | f | Fields.java:24:12:24:27 | f | SSA def(f) | Fields.java:40:9:40:9 | f | -| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | SSA phi(f) | Fields.java:44:9:44:9 | f | -| Fields.java:24:5:24:28 | f | Fields.java:44:5:44:13 | ; | SSA phi(f) | Fields.java:46:9:46:9 | f | +| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | SSA phi(f) | Fields.java:44:9:44:9 | f | +| Fields.java:24:5:24:28 | f | Fields.java:42:5:42:17 | After if (...) | SSA phi(f) | Fields.java:46:9:46:9 | f | | Fields.java:25:15:25:18 | f.xs | Fields.java:24:12:24:27 | f | SSA qualifier def(f.xs) | Fields.java:25:15:25:18 | f.xs | | Fields.java:25:15:25:18 | f.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(f.xs) | Fields.java:29:9:29:12 | f.xs | | Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | Fields.java:33:9:33:12 | f.xs | | Fields.java:25:15:25:18 | f.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(f.xs) | Fields.java:37:9:37:12 | f.xs | | Fields.java:25:15:25:18 | f.xs | Fields.java:39:5:39:21 | ...=... | SSA def(f.xs) | Fields.java:40:9:40:12 | f.xs | -| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs | -| Fields.java:25:15:25:18 | f.xs | Fields.java:44:5:44:13 | ; | SSA phi(f.xs) | Fields.java:46:9:46:12 | f.xs | +| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | SSA phi(f.xs) | Fields.java:44:9:44:12 | f.xs | +| Fields.java:25:15:25:18 | f.xs | Fields.java:42:5:42:17 | After if (...) | SSA phi(f.xs) | Fields.java:46:9:46:12 | f.xs | | Fields.java:26:5:26:17 | z | Fields.java:41:5:41:10 | ...=... | SSA def(z) | Fields.java:42:9:42:9 | z | -| Fields.java:26:15:26:16 | this.xs | Fields.java:23:19:49:3 | { ... } | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs | +| Fields.java:26:15:26:16 | this.xs | Fields.java:23:15:23:15 | Entry | SSA entry def(this.xs) | Fields.java:26:15:26:16 | xs | | Fields.java:26:15:26:16 | this.xs | Fields.java:28:5:28:12 | f(...) | SSA call def(this.xs) | Fields.java:30:9:30:10 | xs | | Fields.java:26:15:26:16 | this.xs | Fields.java:32:5:32:9 | f(...) | SSA call def(this.xs) | Fields.java:34:9:34:10 | xs | | Fields.java:26:15:26:16 | this.xs | Fields.java:36:5:36:19 | ...=... | SSA def(this.xs) | Fields.java:38:9:38:10 | xs | @@ -30,42 +30,42 @@ | Fields.java:27:15:27:18 | Fields.stat | Fields.java:28:5:28:12 | f(...) | SSA call def(Fields.stat) | Fields.java:31:9:31:12 | stat | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:32:5:32:9 | f(...) | SSA call def(Fields.stat) | Fields.java:35:9:35:12 | stat | | Fields.java:27:15:27:18 | Fields.stat | Fields.java:45:5:45:16 | new Fields(...) | SSA call def(Fields.stat) | Fields.java:48:9:48:12 | stat | -| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:48:8:49 | x1 | -| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:29:8:57 | { ... } | SSA capture def(next(..).x1) | Nested.java:8:53:8:54 | x1 | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | { ... } | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj | -| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | { ... } | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj | -| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash | -| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:27:22:7 | { ... } | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | +| Nested.java:4:26:4:31 | next(..).p1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).p1) | Nested.java:8:38:8:39 | p1 | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) | Nested.java:8:43:8:44 | x1 | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) | Nested.java:8:48:8:49 | x1 | +| Nested.java:5:5:5:15 | next(..).x1 | Nested.java:8:22:8:25 | Entry | SSA capture def(next(..).x1) | Nested.java:8:53:8:54 | x1 | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:16:22:16:34 | Entry | SSA capture def(getInt(..).obj) | Nested.java:16:22:16:24 | obj | +| Nested.java:15:5:15:30 | getInt(..).obj | Nested.java:20:27:20:39 | Entry | SSA capture def(getInt(..).obj) | Nested.java:20:27:20:29 | obj | +| Nested.java:16:5:16:35 | getInt(..).hash | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).hash) | Nested.java:21:21:21:24 | hash | +| Nested.java:17:5:17:16 | getInt(..).x2 | Nested.java:19:18:19:23 | Entry | SSA capture def(getInt(..).x2) | Nested.java:21:16:21:17 | x2 | | Nested.java:18:5:23:6 | h2 | Nested.java:18:15:23:5 | h2 | SSA def(h2) | Nested.java:25:9:25:10 | h2 | | Nested.java:20:9:20:40 | hnest | Nested.java:20:19:20:39 | hnest | SSA def(hnest) | Nested.java:21:37:21:41 | hnest | -| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | { ... } | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 | -| Nested.java:33:21:33:26 | p3 | Nested.java:33:29:42:3 | { ... } | SSA param(p3) | Nested.java:35:9:35:10 | p3 | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:20:37:25 | { ... } | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | -| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:20:40:25 | { ... } | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | -| Test.java:4:8:4:16 | param | Test.java:4:19:32:2 | { ... } | SSA param(param) | Test.java:9:7:9:11 | param | -| Test.java:4:8:4:16 | param | Test.java:20:10:20:10 | x | SSA phi(param) | Test.java:21:8:21:12 | param | +| Nested.java:24:5:24:31 | getInt(..).obj2 | Nested.java:30:23:30:36 | Entry | SSA capture def(getInt(..).obj2) | Nested.java:30:23:30:26 | obj2 | +| Nested.java:33:21:33:26 | p3 | Nested.java:33:13:33:19 | Entry | SSA param(p3) | Nested.java:35:9:35:10 | p3 | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:37:14:37:25 | Entry | SSA capture def(getInt(..).x3) | Nested.java:37:20:37:21 | x3 | +| Nested.java:34:5:34:11 | getInt(..).x3 | Nested.java:40:14:40:25 | Entry | SSA capture def(getInt(..).x3) | Nested.java:40:20:40:21 | x3 | +| Test.java:4:8:4:16 | param | Test.java:4:6:4:6 | Entry | SSA param(param) | Test.java:9:7:9:11 | param | +| Test.java:4:8:4:16 | param | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(param) | Test.java:21:8:21:12 | param | | Test.java:6:3:6:12 | x | Test.java:6:7:6:11 | x | SSA def(x) | Test.java:10:4:10:4 | x | +| Test.java:6:3:6:12 | x | Test.java:9:3:9:16 | After if (...) | SSA phi(x) | Test.java:20:10:20:10 | x | | Test.java:6:3:6:12 | x | Test.java:10:4:10:6 | ...++ | SSA def(x) | Test.java:11:10:11:10 | x | -| Test.java:6:3:6:12 | x | Test.java:19:3:19:3 | ; | SSA phi(x) | Test.java:20:10:20:10 | x | -| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | SSA phi(x) | Test.java:28:4:28:4 | x | -| Test.java:6:3:6:12 | x | Test.java:27:19:27:19 | i | SSA phi(x) | Test.java:31:10:31:10 | x | +| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | SSA phi(x) | Test.java:28:4:28:4 | x | +| Test.java:6:3:6:12 | x | Test.java:27:19:27:22 | Before ... < ... | SSA phi(x) | Test.java:31:10:31:10 | x | | Test.java:7:3:7:8 | y | Test.java:14:4:14:8 | ...=... | SSA def(y) | Test.java:15:4:15:4 | y | -| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) | Test.java:20:14:20:14 | y | -| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) | Test.java:24:4:24:4 | y | -| Test.java:7:3:7:8 | y | Test.java:20:10:20:10 | x | SSA phi(y) | Test.java:31:14:31:14 | y | -| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:27:19:27:19 | i | -| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:27:25:27:25 | i | -| Test.java:27:8:27:16 | i | Test.java:27:19:27:19 | i | SSA phi(i) | Test.java:28:9:28:9 | i | -| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:24:9:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | +| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) | Test.java:20:14:20:14 | y | +| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) | Test.java:24:4:24:4 | y | +| Test.java:7:3:7:8 | y | Test.java:20:3:20:15 | [LoopHeader] while (...) | SSA phi(y) | Test.java:31:14:31:14 | y | +| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) | Test.java:27:19:27:19 | i | +| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) | Test.java:27:25:27:25 | i | +| Test.java:27:8:27:16 | i | Test.java:27:19:27:22 | Before ... < ... | SSA phi(i) | Test.java:28:9:28:9 | i | +| TestInstanceOfPattern.java:3:12:3:21 | obj | TestInstanceOfPattern.java:3:7:3:10 | Entry | SSA param(obj) | TestInstanceOfPattern.java:4:7:4:9 | obj | | TestInstanceOfPattern.java:4:22:4:29 | s | TestInstanceOfPattern.java:4:29:4:29 | s | SSA def(s) | TestInstanceOfPattern.java:5:8:5:8 | s | -| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:25:16:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | +| TestInstanceOfPattern.java:10:13:10:22 | obj | TestInstanceOfPattern.java:10:7:10:11 | Entry | SSA param(obj) | TestInstanceOfPattern.java:11:9:11:11 | obj | | TestInstanceOfPattern.java:11:24:11:31 | s | TestInstanceOfPattern.java:11:31:11:31 | s | SSA def(s) | TestInstanceOfPattern.java:14:8:14:8 | s | -| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:25:23:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | +| TestInstanceOfPattern.java:17:13:17:22 | obj | TestInstanceOfPattern.java:17:7:17:11 | Entry | SSA param(obj) | TestInstanceOfPattern.java:18:7:18:9 | obj | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:18:34:18:34 | s | | TestInstanceOfPattern.java:18:22:18:29 | s | TestInstanceOfPattern.java:18:29:18:29 | s | SSA def(s) | TestInstanceOfPattern.java:19:8:19:8 | s | -| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | -| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:25:30:2 | { ... } | SSA entry def(this.s) | TestInstanceOfPattern.java:28:8:28:8 | s | +| TestInstanceOfPattern.java:24:13:24:22 | obj | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA param(obj) | TestInstanceOfPattern.java:25:7:25:9 | obj | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) | TestInstanceOfPattern.java:25:34:25:34 | s | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) | TestInstanceOfPattern.java:26:8:26:8 | s | +| TestInstanceOfPattern.java:25:34:25:34 | this.s | TestInstanceOfPattern.java:24:7:24:11 | Entry | SSA entry def(this.s) | TestInstanceOfPattern.java:28:8:28:8 | s | From a72cf56a05083d8a929a7c4e3ab384c139e0504a Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 10:33:58 +0100 Subject: [PATCH 181/243] Java: Accept dispatch precision improvement. --- .../switch-default-impossible-dispatch/Test.java | 4 ++-- .../switch-default-impossible-dispatch/test.expected | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java index 9e0a04431315..7c00a71021e6 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/Test.java @@ -25,7 +25,7 @@ public static void test(int unknown, int alsoUnknown) { switch(i) { case C1 c1 -> { } - case null, default -> i.take(source()); // Can't call C1.take (but we don't currently notice) + case null, default -> i.take(source()); // Can't call C1.take } switch(i) { @@ -55,7 +55,7 @@ case WrapperWrapper(Wrapper(String s)) -> { } switch(i) { case C1 c1: break; - case null: default: i.take(source()); // Can't call C1.take (but we don't currently notice) + case null: default: i.take(source()); // Can't call C1.take } switch(i) { diff --git a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected index 14329ea10899..f95dc4ee9466 100644 --- a/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected +++ b/java/ql/test/library-tests/switch-default-impossible-dispatch/test.expected @@ -5,7 +5,6 @@ | Test.java:23:25:23:32 | source(...) | Test.java:8:65:8:65 | x | | Test.java:23:25:23:32 | source(...) | Test.java:9:74:9:74 | x | | Test.java:23:25:23:32 | source(...) | Test.java:10:82:10:82 | x | -| Test.java:28:36:28:43 | source(...) | Test.java:7:65:7:65 | x | | Test.java:28:36:28:43 | source(...) | Test.java:8:65:8:65 | x | | Test.java:28:36:28:43 | source(...) | Test.java:9:74:9:74 | x | | Test.java:28:36:28:43 | source(...) | Test.java:10:82:10:82 | x | @@ -26,7 +25,6 @@ | Test.java:53:25:53:32 | source(...) | Test.java:8:65:8:65 | x | | Test.java:53:25:53:32 | source(...) | Test.java:9:74:9:74 | x | | Test.java:53:25:53:32 | source(...) | Test.java:10:82:10:82 | x | -| Test.java:58:34:58:41 | source(...) | Test.java:7:65:7:65 | x | | Test.java:58:34:58:41 | source(...) | Test.java:8:65:8:65 | x | | Test.java:58:34:58:41 | source(...) | Test.java:9:74:9:74 | x | | Test.java:58:34:58:41 | source(...) | Test.java:10:82:10:82 | x | From b798bc2c8f62e816383008447caac85edefccd09 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 11:32:36 +0100 Subject: [PATCH 182/243] Java: Fix enhancedForEarlyExit implementation. --- java/ql/lib/semmle/code/java/dataflow/Nullness.qll | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll index ac568be7b916..a9d969a83019 100644 --- a/java/ql/lib/semmle/code/java/dataflow/Nullness.qll +++ b/java/ql/lib/semmle/code/java/dataflow/Nullness.qll @@ -17,6 +17,7 @@ private import NullGuards private import semmle.code.java.Collections private import semmle.code.java.controlflow.internal.Preconditions private import semmle.code.java.controlflow.ControlFlowReachability +private import codeql.controlflow.SuccessorType /** Gets an expression that may be `null`. */ Expr nullExpr() { result = nullExpr(_) } @@ -230,14 +231,8 @@ private Expr nonEmptyExpr() { /** The control flow edge that exits an enhanced for loop if the `Iterable` is empty. */ private predicate enhancedForEarlyExit(EnhancedForStmt for, ControlFlowNode n1, ControlFlowNode n2) { - exists(Expr forExpr | - n1.getANormalSuccessor() = n2 and - for.getExpr() = forExpr and - forExpr.getAChildExpr*() = n1.asExpr() and - not forExpr.getAChildExpr*() = n2.asExpr() and - n1.getANormalSuccessor().asExpr() = for.getVariable() and - not n2.asExpr() = for.getVariable() - ) + n1.getASuccessor(any(EmptinessSuccessor t | t.isEmpty())) = n2 and + for.getExpr().getControlFlowNode() = n1 } /** A control flow edge that cannot be taken. */ From 8b0dd7b8667aecf767eb21f5938e61d5db082770 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 11:33:24 +0100 Subject: [PATCH 183/243] Java: Accept new TP in NullMaybe. --- java/ql/test/query-tests/Nullness/B.java | 2 +- java/ql/test/query-tests/Nullness/NullMaybe.expected | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/java/ql/test/query-tests/Nullness/B.java b/java/ql/test/query-tests/Nullness/B.java index 1234b53d59b0..d225c43ef7da 100644 --- a/java/ql/test/query-tests/Nullness/B.java +++ b/java/ql/test/query-tests/Nullness/B.java @@ -534,7 +534,7 @@ public void testFinally(int[] xs, int[] ys) { s1.hashCode(); // OK s2.hashCode(); // NPE } - s1.hashCode(); // NPE - false negative, Java CFG lacks proper edge label + s1.hashCode(); // NPE } public void lenCheck(int[] xs, int n, int t) { diff --git a/java/ql/test/query-tests/Nullness/NullMaybe.expected b/java/ql/test/query-tests/Nullness/NullMaybe.expected index 89209bd3a710..fdf7052ec083 100644 --- a/java/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/java/ql/test/query-tests/Nullness/NullMaybe.expected @@ -26,6 +26,7 @@ | B.java:487:9:487:9 | x | Variable $@ may be null at this access because of $@ assignment. | B.java:476:5:476:20 | Object x | x | B.java:476:12:476:19 | x | this | | B.java:516:5:516:5 | o | Variable $@ may be null at this access as suggested by $@ null guard. | B.java:511:25:511:32 | o | o | B.java:512:22:512:30 | ... == ... | this | | B.java:535:7:535:8 | s2 | Variable $@ may be null at this access because of $@ assignment. | B.java:523:5:523:21 | String s2 | s2 | B.java:523:12:523:20 | s2 | this | +| B.java:537:5:537:6 | s1 | Variable $@ may be null at this access because of $@ assignment. | B.java:522:5:522:21 | String s1 | s1 | B.java:522:12:522:20 | s1 | this | | C.java:9:44:9:45 | a2 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:6:5:6:23 | long[][] a2 | a2 | C.java:7:34:7:54 | ... != ... | this | | C.java:9:44:9:45 | a2 | Variable $@ may be null at this access because of $@ assignment. | C.java:6:5:6:23 | long[][] a2 | a2 | C.java:6:14:6:22 | a2 | this | | C.java:10:17:10:18 | a3 | Variable $@ may be null at this access as suggested by $@ null guard. | C.java:8:5:8:21 | long[] a3 | a3 | C.java:9:38:9:58 | ... != ... | this | From d84e0e262df36855a59c3eb17e714e6c1b14451c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 11:37:47 +0100 Subject: [PATCH 184/243] Java: Accept removal of spurious reason (the alert stays). --- .../UselessComparisonTest/UselessComparisonTest.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/test/query-tests/UselessComparisonTest/UselessComparisonTest.expected b/java/ql/test/query-tests/UselessComparisonTest/UselessComparisonTest.expected index 3737786aeb68..d0520384671c 100644 --- a/java/ql/test/query-tests/UselessComparisonTest/UselessComparisonTest.expected +++ b/java/ql/test/query-tests/UselessComparisonTest/UselessComparisonTest.expected @@ -10,7 +10,6 @@ | A.java:55:9:55:14 | ... <= ... | Test is always false, because of $@. | A.java:48:16:48:21 | ... > ... | this condition | | A.java:58:11:58:15 | ... < ... | Test is always false, because of $@. | A.java:57:12:57:20 | ... > ... | this condition | | A.java:60:9:60:15 | ... != ... | Test is always false, because of $@. | A.java:57:12:57:20 | ... > ... | this condition | -| A.java:60:9:60:15 | ... != ... | Test is always false, because of $@. | A.java:58:11:58:15 | ... < ... | this condition | | A.java:65:11:65:16 | ... != ... | Test is always false, because of $@. | A.java:64:19:64:23 | ... > ... | this condition | | A.java:76:11:76:16 | ... >= ... | Test is always false, because of $@. | A.java:74:13:74:18 | ... >= ... | this condition | | A.java:84:21:84:30 | ... < ... | Test is always false, because of $@. | A.java:80:12:80:21 | ... > ... | this condition | From 106a9d479ffc4b6fb0f3f1f4ef1977fef6c63d3c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 12 Feb 2026 16:19:30 +0100 Subject: [PATCH 185/243] Java: Accept reduced precision from no longer nesting completions in YieldCompletions. --- .../library-tests/controlflow/basic/strictDominance.expected | 1 - .../library-tests/controlflow/basic/strictDominance.expected | 1 - 2 files changed, 2 deletions(-) diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/strictDominance.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/strictDominance.expected index a85a0c120b3c..13d018efabd2 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/strictDominance.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/strictDominance.expected @@ -562,5 +562,4 @@ | Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | ... -> ... | | Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | ; | | Test.kt:121:4:121:9 | ... -> ... | Test.kt:123:8:123:10 | { ... } | -| Test.kt:121:9:121:9 | ; | Test.kt:123:8:123:10 | { ... } | | Test.kt:122:12:122:16 | ... -> ... | Test.kt:122:12:122:16 | ; | diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected index 4fb56510ed51..27595e7017b6 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/strictDominance.expected @@ -562,5 +562,4 @@ | Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | ... -> ... | | Test.kt:121:4:121:9 | ... -> ... | Test.kt:122:12:122:16 | ; | | Test.kt:121:4:121:9 | ... -> ... | Test.kt:123:8:123:10 | { ... } | -| Test.kt:121:9:121:9 | ; | Test.kt:123:8:123:10 | { ... } | | Test.kt:122:12:122:16 | ... -> ... | Test.kt:122:12:122:16 | ; | From eb37c413f2e04503d661029fab616e8dc807e6cb Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 13 Feb 2026 15:27:18 +0100 Subject: [PATCH 186/243] Java: Accept revised CFG. --- java/ql/lib/utils/test/AstCfg.qll | 28 ++++ .../controlflow/basic/getASuccessor.expected | 69 +++++---- .../controlflow/basic/getASuccessor.ql | 49 +----- .../controlflow/basic/getASuccessor.expected | 69 +++++---- .../controlflow/basic/getASuccessor.ql | 57 ++----- .../MultiCatch/MultiCatchControlFlow.expected | 12 +- .../java7/MultiCatch/MultiCatchControlFlow.ql | 3 +- .../pattern-instanceof/cfg.expected | 24 +-- .../library-tests/pattern-instanceof/cfg.ql | 3 +- .../pattern-switch/cfg/test.expected | 142 ++++++++++-------- .../library-tests/pattern-switch/cfg/test.ql | 3 +- .../CloseReaderTest/TestSucc.expected | 4 +- .../successors/CloseReaderTest/TestSucc.ql | 3 +- .../LoopVarReadTest/TestSucc.expected | 4 +- .../successors/LoopVarReadTest/TestSucc.ql | 3 +- .../successors/SaveFileTest/TestSucc.expected | 18 +-- .../successors/SaveFileTest/TestSucc.ql | 3 +- .../successors/SchackTest/TestSucc.expected | 12 +- .../successors/SchackTest/TestSucc.ql | 3 +- .../successors/TestBreak/TestSucc.expected | 92 +++++++----- .../successors/TestBreak/TestSucc.ql | 3 +- .../successors/TestContinue/TestSucc.expected | 22 ++- .../successors/TestContinue/TestSucc.ql | 3 +- .../TestDeclarations/TestSucc.expected | 25 +-- .../successors/TestDeclarations/TestSucc.ql | 3 +- .../successors/TestFinally/TestSucc.expected | 30 ++-- .../successors/TestFinally/TestSucc.ql | 3 +- .../TestSucc.expected | 42 +----- .../TestFinallyBreakContinue/TestSucc.ql | 3 +- .../TestLoopBranch/TestSucc.expected | 124 +++++++++------ .../successors/TestLoopBranch/TestSucc.ql | 3 +- .../successors/TestThrow/TestSucc.expected | 73 +++++---- .../successors/TestThrow/TestSucc.ql | 3 +- .../successors/TestThrow2/TestSucc.expected | 4 +- .../successors/TestThrow2/TestSucc.ql | 3 +- .../successors/TestTryCatch/TestSucc.expected | 28 ++-- .../successors/TestTryCatch/TestSucc.ql | 3 +- .../TestTryWithResources/TestSucc.expected | 7 +- .../TestTryWithResources/TestSucc.ql | 3 +- 39 files changed, 525 insertions(+), 461 deletions(-) create mode 100644 java/ql/lib/utils/test/AstCfg.qll diff --git a/java/ql/lib/utils/test/AstCfg.qll b/java/ql/lib/utils/test/AstCfg.qll new file mode 100644 index 000000000000..c44b14bee726 --- /dev/null +++ b/java/ql/lib/utils/test/AstCfg.qll @@ -0,0 +1,28 @@ +/** + * Provides utilities for getting an AST-based control flow graph in tests. + */ +overlay[local?] +module; + +import java + +private predicate isAstNode(ControlFlowNode n) { + n.injects(_) or + n instanceof ControlFlow::EntryNode or + n instanceof ControlFlow::AnnotatedExitNode or + n instanceof ControlFlow::ExitNode +} + +private predicate succToAst(ControlFlowNode n1, ControlFlowNode n2) { + n2 = n1.getASuccessor() and + isAstNode(n2) + or + exists(ControlFlowNode mid | + mid = n1.getASuccessor() and + not isAstNode(mid) and + succToAst(mid, n2) + ) +} + +/** Gets a control flow successor of `n` that skips over non-AST nodes. */ +ControlFlowNode getAnAstSuccessor(ControlFlowNode n) { isAstNode(n) and succToAst(n, result) } diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected index 1d07b13c9d75..8f9cce281606 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected @@ -1,12 +1,10 @@ #select | Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | Test.kt:3:8:80:1 | { ... } | BlockStmt | -| Test.kt:3:8:80:1 | Exceptional Exit | Constructor | Test.kt:3:8:80:1 | Exit | Constructor | -| Test.kt:3:8:80:1 | Exit | Constructor | file://:0:0:0:0 | | | +| Test.kt:3:8:80:1 | Entry | Constructor | Test.kt:3:8:80:1 | { ... } | BlockStmt | | Test.kt:3:8:80:1 | Normal Exit | Constructor | Test.kt:3:8:80:1 | Exit | Constructor | | Test.kt:3:8:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | | Test.kt:3:8:80:1 | { ... } | BlockStmt | Test.kt:3:8:80:1 | Normal Exit | Constructor | -| Test.kt:4:2:79:2 | Exceptional Exit | Method | Test.kt:4:2:79:2 | Exit | Method | -| Test.kt:4:2:79:2 | Exit | Method | file://:0:0:0:0 | | | +| Test.kt:4:2:79:2 | Entry | Method | Test.kt:4:13:79:2 | { ... } | BlockStmt | | Test.kt:4:2:79:2 | Normal Exit | Method | Test.kt:4:2:79:2 | Exit | Method | | Test.kt:4:13:79:2 | { ... } | BlockStmt | Test.kt:5:7:5:7 | var ...; | LocalVariableDeclStmt | | Test.kt:5:7:5:7 | var ...; | LocalVariableDeclStmt | Test.kt:5:16:5:16 | 0 | IntegerLiteral | @@ -31,17 +29,21 @@ | Test.kt:11:7:11:11 | ... > ... | GTExpr | Test.kt:11:14:14:3 | { ... } | BlockStmt | | Test.kt:11:11:11:11 | 0 | IntegerLiteral | Test.kt:11:7:11:11 | ... > ... | GTExpr | | Test.kt:11:14:14:3 | { ... } | BlockStmt | Test.kt:12:4:12:4 | ; | ExprStmt | -| Test.kt:12:4:12:4 | ; | ExprStmt | Test.kt:12:8:12:9 | 20 | LongLiteral | +| Test.kt:12:4:12:4 | ; | ExprStmt | Test.kt:12:4:12:4 | y | VarAccess | +| Test.kt:12:4:12:4 | y | VarAccess | Test.kt:12:8:12:9 | 20 | LongLiteral | | Test.kt:12:4:12:9 | ...=... | AssignExpr | Test.kt:13:4:13:4 | ; | ExprStmt | | Test.kt:12:8:12:9 | 20 | LongLiteral | Test.kt:12:4:12:9 | ...=... | AssignExpr | -| Test.kt:13:4:13:4 | ; | ExprStmt | Test.kt:13:8:13:9 | 10 | IntegerLiteral | +| Test.kt:13:4:13:4 | ; | ExprStmt | Test.kt:13:4:13:4 | z | VarAccess | +| Test.kt:13:4:13:4 | z | VarAccess | Test.kt:13:8:13:9 | 10 | IntegerLiteral | | Test.kt:13:4:13:9 | ...=... | AssignExpr | Test.kt:18:3:18:3 | ; | ExprStmt | | Test.kt:13:8:13:9 | 10 | IntegerLiteral | Test.kt:13:4:13:9 | ...=... | AssignExpr | | Test.kt:14:10:16:3 | { ... } | BlockStmt | Test.kt:15:4:15:4 | ; | ExprStmt | -| Test.kt:15:4:15:4 | ; | ExprStmt | Test.kt:15:8:15:9 | 30 | LongLiteral | +| Test.kt:15:4:15:4 | ; | ExprStmt | Test.kt:15:4:15:4 | y | VarAccess | +| Test.kt:15:4:15:4 | y | VarAccess | Test.kt:15:8:15:9 | 30 | LongLiteral | | Test.kt:15:4:15:9 | ...=... | AssignExpr | Test.kt:18:3:18:3 | ; | ExprStmt | | Test.kt:15:8:15:9 | 30 | LongLiteral | Test.kt:15:4:15:9 | ...=... | AssignExpr | -| Test.kt:18:3:18:3 | ; | ExprStmt | Test.kt:18:7:18:7 | 0 | IntegerLiteral | +| Test.kt:18:3:18:3 | ; | ExprStmt | Test.kt:18:3:18:3 | z | VarAccess | +| Test.kt:18:3:18:3 | z | VarAccess | Test.kt:18:7:18:7 | 0 | IntegerLiteral | | Test.kt:18:3:18:7 | ...=... | AssignExpr | Test.kt:21:3:24:9 | ; | ExprStmt | | Test.kt:18:7:18:7 | 0 | IntegerLiteral | Test.kt:18:3:18:7 | ...=... | AssignExpr | | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:3:24:9 | true | BooleanLiteral | @@ -53,12 +55,14 @@ | Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | | Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:22:4:22:4 | ; | ExprStmt | | Test.kt:21:10:21:10 | 0 | IntegerLiteral | Test.kt:21:6:21:10 | ... < ... | LTExpr | -| Test.kt:22:4:22:4 | ; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral | +| Test.kt:22:4:22:4 | ; | ExprStmt | Test.kt:22:4:22:4 | y | VarAccess | +| Test.kt:22:4:22:4 | y | VarAccess | Test.kt:22:8:22:9 | 40 | LongLiteral | | Test.kt:22:4:22:9 | ...=... | AssignExpr | Test.kt:27:3:27:3 | ; | ExprStmt | | Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:9 | ...=... | AssignExpr | | Test.kt:24:4:24:9 | INSTANCE | VarAccess | Test.kt:24:4:24:9 | return ... | ReturnStmt | | Test.kt:24:4:24:9 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method | -| Test.kt:27:3:27:3 | ; | ExprStmt | Test.kt:27:7:27:8 | 10 | IntegerLiteral | +| Test.kt:27:3:27:3 | ; | ExprStmt | Test.kt:27:3:27:3 | z | VarAccess | +| Test.kt:27:3:27:3 | z | VarAccess | Test.kt:27:7:27:8 | 10 | IntegerLiteral | | Test.kt:27:3:27:8 | ...=... | AssignExpr | Test.kt:30:3:33:3 | ; | ExprStmt | | Test.kt:27:7:27:8 | 10 | IntegerLiteral | Test.kt:27:3:27:8 | ...=... | AssignExpr | | Test.kt:30:3:33:3 | ... -> ... | WhenBranch | Test.kt:30:7:30:7 | x | VarAccess | @@ -69,13 +73,16 @@ | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr | Test.kt:35:3:35:3 | ; | ExprStmt | | Test.kt:30:12:30:12 | 0 | IntegerLiteral | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr | | Test.kt:30:15:33:3 | { ... } | BlockStmt | Test.kt:31:4:31:4 | ; | ExprStmt | -| Test.kt:31:4:31:4 | ; | ExprStmt | Test.kt:31:8:31:9 | 60 | LongLiteral | +| Test.kt:31:4:31:4 | ; | ExprStmt | Test.kt:31:4:31:4 | y | VarAccess | +| Test.kt:31:4:31:4 | y | VarAccess | Test.kt:31:8:31:9 | 60 | LongLiteral | | Test.kt:31:4:31:9 | ...=... | AssignExpr | Test.kt:32:4:32:4 | ; | ExprStmt | | Test.kt:31:8:31:9 | 60 | LongLiteral | Test.kt:31:4:31:9 | ...=... | AssignExpr | -| Test.kt:32:4:32:4 | ; | ExprStmt | Test.kt:32:8:32:9 | 10 | IntegerLiteral | +| Test.kt:32:4:32:4 | ; | ExprStmt | Test.kt:32:4:32:4 | z | VarAccess | +| Test.kt:32:4:32:4 | z | VarAccess | Test.kt:32:8:32:9 | 10 | IntegerLiteral | | Test.kt:32:4:32:9 | ...=... | AssignExpr | Test.kt:35:3:35:3 | ; | ExprStmt | | Test.kt:32:8:32:9 | 10 | IntegerLiteral | Test.kt:32:4:32:9 | ...=... | AssignExpr | -| Test.kt:35:3:35:3 | ; | ExprStmt | Test.kt:35:7:35:8 | 20 | IntegerLiteral | +| Test.kt:35:3:35:3 | ; | ExprStmt | Test.kt:35:3:35:3 | z | VarAccess | +| Test.kt:35:3:35:3 | z | VarAccess | Test.kt:35:7:35:8 | 20 | IntegerLiteral | | Test.kt:35:3:35:8 | ...=... | AssignExpr | Test.kt:38:3:41:3 | while (...) | WhileStmt | | Test.kt:35:7:35:8 | 20 | IntegerLiteral | Test.kt:35:3:35:8 | ...=... | AssignExpr | | Test.kt:38:3:41:3 | while (...) | WhileStmt | Test.kt:38:9:38:9 | x | VarAccess | @@ -84,35 +91,40 @@ | Test.kt:38:9:38:13 | ... > ... | GTExpr | Test.kt:43:3:43:3 | ; | ExprStmt | | Test.kt:38:13:38:13 | 0 | IntegerLiteral | Test.kt:38:9:38:13 | ... > ... | GTExpr | | Test.kt:38:16:41:3 | { ... } | BlockStmt | Test.kt:39:4:39:4 | ; | ExprStmt | -| Test.kt:39:4:39:4 | ; | ExprStmt | Test.kt:39:8:39:9 | 10 | LongLiteral | +| Test.kt:39:4:39:4 | ; | ExprStmt | Test.kt:39:4:39:4 | y | VarAccess | +| Test.kt:39:4:39:4 | y | VarAccess | Test.kt:39:8:39:9 | 10 | LongLiteral | | Test.kt:39:4:39:9 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | | Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:9 | ...=... | AssignExpr | -| Test.kt:40:4:40:4 | ; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess | +| Test.kt:40:4:40:4 | ; | ExprStmt | Test.kt:40:4:40:4 | x | VarAccess | | Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | tmp0 | LocalVariableDeclExpr | +| Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | tmp0 | VarAccess | | Test.kt:40:4:40:6 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | -| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | | StmtExpr | | Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess | -| Test.kt:40:4:40:6 | | StmtExpr | Test.kt:40:4:40:6 | { ... } | BlockStmt | +| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | { ... } | BlockStmt | +| Test.kt:40:4:40:6 | | StmtExpr | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | Test.kt:38:9:38:9 | x | VarAccess | | Test.kt:40:4:40:6 | dec(...) | MethodCall | Test.kt:40:4:40:6 | ...=... | AssignExpr | | Test.kt:40:4:40:6 | tmp0 | LocalVariableDeclExpr | Test.kt:40:4:40:4 | ; | ExprStmt | -| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | +| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | | StmtExpr | | Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodCall | | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | Test.kt:40:4:40:4 | x | VarAccess | | Test.kt:40:4:40:6 | { ... } | BlockStmt | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | -| Test.kt:43:3:43:3 | ; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral | +| Test.kt:43:3:43:3 | ; | ExprStmt | Test.kt:43:3:43:3 | z | VarAccess | +| Test.kt:43:3:43:3 | z | VarAccess | Test.kt:43:7:43:8 | 30 | IntegerLiteral | | Test.kt:43:3:43:8 | ...=... | AssignExpr | Test.kt:73:3:73:3 | ; | ExprStmt | | Test.kt:43:7:43:8 | 30 | IntegerLiteral | Test.kt:43:3:43:8 | ...=... | AssignExpr | -| Test.kt:73:3:73:3 | ; | ExprStmt | Test.kt:73:7:73:8 | 50 | IntegerLiteral | +| Test.kt:73:3:73:3 | ; | ExprStmt | Test.kt:73:3:73:3 | z | VarAccess | +| Test.kt:73:3:73:3 | z | VarAccess | Test.kt:73:7:73:8 | 50 | IntegerLiteral | | Test.kt:73:3:73:8 | ...=... | AssignExpr | Test.kt:77:3:77:3 | ; | ExprStmt | | Test.kt:73:7:73:8 | 50 | IntegerLiteral | Test.kt:73:3:73:8 | ...=... | AssignExpr | -| Test.kt:77:3:77:3 | ; | ExprStmt | Test.kt:77:7:77:8 | 40 | IntegerLiteral | +| Test.kt:77:3:77:3 | ; | ExprStmt | Test.kt:77:3:77:3 | w | VarAccess | +| Test.kt:77:3:77:3 | w | VarAccess | Test.kt:77:7:77:8 | 40 | IntegerLiteral | | Test.kt:77:3:77:8 | ...=... | AssignExpr | Test.kt:78:3:78:8 | INSTANCE | VarAccess | | Test.kt:77:7:77:8 | 40 | IntegerLiteral | Test.kt:77:3:77:8 | ...=... | AssignExpr | | Test.kt:78:3:78:8 | INSTANCE | VarAccess | Test.kt:78:3:78:8 | return ... | ReturnStmt | | Test.kt:78:3:78:8 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method | +| Test.kt:82:1:89:1 | Entry | Method | Test.kt:82:21:89:1 | { ... } | BlockStmt | | Test.kt:82:1:89:1 | Exceptional Exit | Method | Test.kt:82:1:89:1 | Exit | Method | -| Test.kt:82:1:89:1 | Exit | Method | file://:0:0:0:0 | | | | Test.kt:82:1:89:1 | Normal Exit | Method | Test.kt:82:1:89:1 | Exit | Method | | Test.kt:82:21:89:1 | { ... } | BlockStmt | Test.kt:83:2:88:2 | try ... | TryStmt | | Test.kt:83:2:88:2 | try ... | TryStmt | Test.kt:83:6:86:2 | { ... } | BlockStmt | @@ -124,13 +136,14 @@ | Test.kt:84:11:84:18 | (...)... | CastExpr | Test.kt:86:4:88:2 | catch (...) | CatchClause | | Test.kt:85:3:85:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method | | Test.kt:85:10:85:10 | 1 | IntegerLiteral | Test.kt:85:3:85:10 | return ... | ReturnStmt | +| Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:82:1:89:1 | Exceptional Exit | Method | | Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:86:11:86:31 | e | LocalVariableDeclExpr | | Test.kt:86:11:86:31 | e | LocalVariableDeclExpr | Test.kt:86:34:88:2 | { ... } | BlockStmt | | Test.kt:86:34:88:2 | { ... } | BlockStmt | Test.kt:87:10:87:10 | 2 | IntegerLiteral | | Test.kt:87:3:87:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method | | Test.kt:87:10:87:10 | 2 | IntegerLiteral | Test.kt:87:3:87:10 | return ... | ReturnStmt | +| Test.kt:91:1:98:1 | Entry | Method | Test.kt:91:22:98:1 | { ... } | BlockStmt | | Test.kt:91:1:98:1 | Exceptional Exit | Method | Test.kt:91:1:98:1 | Exit | Method | -| Test.kt:91:1:98:1 | Exit | Method | file://:0:0:0:0 | | | | Test.kt:91:1:98:1 | Normal Exit | Method | Test.kt:91:1:98:1 | Exit | Method | | Test.kt:91:22:98:1 | { ... } | BlockStmt | Test.kt:92:2:97:2 | try ... | TryStmt | | Test.kt:92:2:97:2 | try ... | TryStmt | Test.kt:92:6:95:2 | { ... } | BlockStmt | @@ -142,13 +155,14 @@ | Test.kt:93:12:93:13 | ...!! | NotNullExpr | Test.kt:95:4:97:2 | catch (...) | CatchClause | | Test.kt:94:3:94:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method | | Test.kt:94:10:94:10 | 1 | IntegerLiteral | Test.kt:94:3:94:10 | return ... | ReturnStmt | +| Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:91:1:98:1 | Exceptional Exit | Method | | Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:95:11:95:33 | e | LocalVariableDeclExpr | | Test.kt:95:11:95:33 | e | LocalVariableDeclExpr | Test.kt:95:36:97:2 | { ... } | BlockStmt | | Test.kt:95:36:97:2 | { ... } | BlockStmt | Test.kt:96:10:96:10 | 2 | IntegerLiteral | | Test.kt:96:3:96:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method | | Test.kt:96:10:96:10 | 2 | IntegerLiteral | Test.kt:96:3:96:10 | return ... | ReturnStmt | +| Test.kt:100:1:110:1 | Entry | Method | Test.kt:100:25:110:1 | { ... } | BlockStmt | | Test.kt:100:1:110:1 | Exceptional Exit | Method | Test.kt:100:1:110:1 | Exit | Method | -| Test.kt:100:1:110:1 | Exit | Method | file://:0:0:0:0 | | | | Test.kt:100:1:110:1 | Normal Exit | Method | Test.kt:100:1:110:1 | Exit | Method | | Test.kt:100:25:110:1 | { ... } | BlockStmt | Test.kt:101:5:103:5 | ; | ExprStmt | | Test.kt:101:5:103:5 | ... -> ... | WhenBranch | Test.kt:101:9:101:30 | ... && ... | AndLogicalExpr | @@ -186,8 +200,7 @@ | Test.kt:108:9:108:29 | ; | ExprStmt | Test.kt:108:17:108:28 | "y not null" | StringLiteral | | Test.kt:108:9:108:29 | println(...) | MethodCall | Test.kt:100:1:110:1 | Normal Exit | Method | | Test.kt:108:17:108:28 | "y not null" | StringLiteral | Test.kt:108:9:108:29 | println(...) | MethodCall | -| Test.kt:112:1:116:1 | Exceptional Exit | Method | Test.kt:112:1:116:1 | Exit | Method | -| Test.kt:112:1:116:1 | Exit | Method | file://:0:0:0:0 | | | +| Test.kt:112:1:116:1 | Entry | Method | Test.kt:112:32:116:1 | { ... } | BlockStmt | | Test.kt:112:1:116:1 | Normal Exit | Method | Test.kt:112:1:116:1 | Exit | Method | | Test.kt:112:32:116:1 | { ... } | BlockStmt | Test.kt:113:5:115:5 | ; | ExprStmt | | Test.kt:113:5:115:5 | ... -> ... | WhenBranch | Test.kt:113:9:113:14 | ... && ... | AndLogicalExpr | @@ -199,8 +212,7 @@ | Test.kt:113:14:113:14 | y | VarAccess | Test.kt:112:1:116:1 | Normal Exit | Method | | Test.kt:113:14:113:14 | y | VarAccess | Test.kt:113:17:115:5 | { ... } | BlockStmt | | Test.kt:113:17:115:5 | { ... } | BlockStmt | Test.kt:112:1:116:1 | Normal Exit | Method | -| Test.kt:118:1:124:1 | Exceptional Exit | Method | Test.kt:118:1:124:1 | Exit | Method | -| Test.kt:118:1:124:1 | Exit | Method | file://:0:0:0:0 | | | +| Test.kt:118:1:124:1 | Entry | Method | Test.kt:118:37:124:1 | { ... } | BlockStmt | | Test.kt:118:1:124:1 | Normal Exit | Method | Test.kt:118:1:124:1 | Exit | Method | | Test.kt:118:37:124:1 | { ... } | BlockStmt | Test.kt:119:2:123:12 | ; | ExprStmt | | Test.kt:119:2:123:12 | ; | ExprStmt | Test.kt:119:2:123:12 | when ... | WhenExpr | @@ -216,6 +228,7 @@ | Test.kt:122:12:122:16 | ... -> ... | WhenBranch | Test.kt:122:12:122:16 | true | BooleanLiteral | | Test.kt:122:12:122:16 | ; | ExprStmt | Test.kt:122:12:122:16 | false | BooleanLiteral | | Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:118:1:124:1 | Normal Exit | Method | +| Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:123:8:123:10 | { ... } | BlockStmt | | Test.kt:122:12:122:16 | true | BooleanLiteral | Test.kt:122:12:122:16 | ; | ExprStmt | | Test.kt:123:8:123:10 | { ... } | BlockStmt | Test.kt:118:1:124:1 | Normal Exit | Method | missingSuccessor diff --git a/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.ql b/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.ql index c097d7d5e936..9a334d18aae7 100644 --- a/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.ql +++ b/java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.ql @@ -1,53 +1,14 @@ import java +import utils.test.AstCfg -newtype TMaybeControlFlowNode = - TControlFlowNode(ControlFlowNode c) or - TNoControlFlowNode() - -class MaybeControlFlowNode extends TMaybeControlFlowNode { - abstract string toString(); - - abstract Location getLocation(); - - abstract string getPrimaryQlClasses(); -} - -class YesMaybeControlFlowNode extends MaybeControlFlowNode { - ControlFlowNode c; - - YesMaybeControlFlowNode() { this = TControlFlowNode(c) } - - override string toString() { result = c.toString() } - - override Location getLocation() { result = c.getLocation() } - - override string getPrimaryQlClasses() { result = c.getAstNode().getPrimaryQlClasses() } -} - -class NoMaybeControlFlowNode extends MaybeControlFlowNode { - NoMaybeControlFlowNode() { this = TNoControlFlowNode() } - - override string toString() { result = "" } - - override Location getLocation() { result.toString() = "file://:0:0:0:0" } - - override string getPrimaryQlClasses() { result = "" } -} - -MaybeControlFlowNode maybeSuccessor(ControlFlowNode n) { - if exists(n.getASuccessor()) - then result = TControlFlowNode(n.getASuccessor()) - else result = TNoControlFlowNode() -} - -from ControlFlowNode n, MaybeControlFlowNode m +from ControlFlowNode n, ControlFlowNode m where - m = maybeSuccessor(n) and + m = getAnAstSuccessor(n) and n.getLocation().getFile().(CompilationUnit).fromSource() -select n, n.getAstNode().getPrimaryQlClasses(), m, m.getPrimaryQlClasses() +select n, n.getAstNode().getPrimaryQlClasses(), m, m.getAstNode().getPrimaryQlClasses() query predicate missingSuccessor(Expr e) { - maybeSuccessor(e.getControlFlowNode()) instanceof NoMaybeControlFlowNode and + exists(ControlFlowNode n | n = e.getControlFlowNode() and not exists(n.getASuccessor())) and e.getFile().(CompilationUnit).fromSource() and not e instanceof TypeAccess and not e instanceof VarWrite diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected index c4be613c5e99..d5483586e0b8 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.expected @@ -1,12 +1,10 @@ #select -| Test.kt:3:1:80:1 | Exceptional Exit | Constructor | Test.kt:3:1:80:1 | Exit | Constructor | -| Test.kt:3:1:80:1 | Exit | Constructor | file://:0:0:0:0 | | | +| Test.kt:3:1:80:1 | Entry | Constructor | Test.kt:3:1:80:1 | { ... } | BlockStmt | | Test.kt:3:1:80:1 | Normal Exit | Constructor | Test.kt:3:1:80:1 | Exit | Constructor | | Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | Test.kt:3:1:80:1 | { ... } | BlockStmt | | Test.kt:3:1:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | Normal Exit | Constructor | | Test.kt:3:1:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | -| Test.kt:4:2:79:2 | Exceptional Exit | Method | Test.kt:4:2:79:2 | Exit | Method | -| Test.kt:4:2:79:2 | Exit | Method | file://:0:0:0:0 | | | +| Test.kt:4:2:79:2 | Entry | Method | Test.kt:4:13:79:2 | { ... } | BlockStmt | | Test.kt:4:2:79:2 | Normal Exit | Method | Test.kt:4:2:79:2 | Exit | Method | | Test.kt:4:13:79:2 | { ... } | BlockStmt | Test.kt:5:3:5:16 | var ...; | LocalVariableDeclStmt | | Test.kt:5:3:5:16 | var ...; | LocalVariableDeclStmt | Test.kt:5:16:5:16 | 0 | IntegerLiteral | @@ -30,19 +28,23 @@ | Test.kt:11:11:11:11 | 0 | IntegerLiteral | Test.kt:11:7:11:11 | ... > ... | GTExpr | | Test.kt:11:14:14:3 | { ... } | BlockStmt | Test.kt:12:4:12:9 | ; | ExprStmt | | Test.kt:12:4:12:9 | ...=... | AssignExpr | Test.kt:13:4:13:9 | ; | ExprStmt | -| Test.kt:12:4:12:9 | ; | ExprStmt | Test.kt:12:8:12:9 | 20 | LongLiteral | +| Test.kt:12:4:12:9 | ; | ExprStmt | Test.kt:12:4:12:9 | y | VarAccess | +| Test.kt:12:4:12:9 | y | VarAccess | Test.kt:12:8:12:9 | 20 | LongLiteral | | Test.kt:12:8:12:9 | 20 | LongLiteral | Test.kt:12:4:12:9 | ...=... | AssignExpr | | Test.kt:13:4:13:9 | ...=... | AssignExpr | Test.kt:18:3:18:7 | ; | ExprStmt | -| Test.kt:13:4:13:9 | ; | ExprStmt | Test.kt:13:8:13:9 | 10 | IntegerLiteral | +| Test.kt:13:4:13:9 | ; | ExprStmt | Test.kt:13:4:13:9 | z | VarAccess | +| Test.kt:13:4:13:9 | z | VarAccess | Test.kt:13:8:13:9 | 10 | IntegerLiteral | | Test.kt:13:8:13:9 | 10 | IntegerLiteral | Test.kt:13:4:13:9 | ...=... | AssignExpr | | Test.kt:14:10:16:3 | ... -> ... | WhenBranch | Test.kt:14:10:16:3 | true | BooleanLiteral | | Test.kt:14:10:16:3 | true | BooleanLiteral | Test.kt:14:10:16:3 | { ... } | BlockStmt | | Test.kt:14:10:16:3 | { ... } | BlockStmt | Test.kt:15:4:15:9 | ; | ExprStmt | | Test.kt:15:4:15:9 | ...=... | AssignExpr | Test.kt:18:3:18:7 | ; | ExprStmt | -| Test.kt:15:4:15:9 | ; | ExprStmt | Test.kt:15:8:15:9 | 30 | LongLiteral | +| Test.kt:15:4:15:9 | ; | ExprStmt | Test.kt:15:4:15:9 | y | VarAccess | +| Test.kt:15:4:15:9 | y | VarAccess | Test.kt:15:8:15:9 | 30 | LongLiteral | | Test.kt:15:8:15:9 | 30 | LongLiteral | Test.kt:15:4:15:9 | ...=... | AssignExpr | | Test.kt:18:3:18:7 | ...=... | AssignExpr | Test.kt:21:3:24:9 | ; | ExprStmt | -| Test.kt:18:3:18:7 | ; | ExprStmt | Test.kt:18:7:18:7 | 0 | IntegerLiteral | +| Test.kt:18:3:18:7 | ; | ExprStmt | Test.kt:18:3:18:7 | z | VarAccess | +| Test.kt:18:3:18:7 | z | VarAccess | Test.kt:18:7:18:7 | 0 | IntegerLiteral | | Test.kt:18:7:18:7 | 0 | IntegerLiteral | Test.kt:18:3:18:7 | ...=... | AssignExpr | | Test.kt:21:3:24:9 | ; | ExprStmt | Test.kt:21:3:24:9 | when ... | WhenExpr | | Test.kt:21:3:24:9 | when ... | WhenExpr | Test.kt:21:6:22:9 | ... -> ... | WhenBranch | @@ -52,14 +54,16 @@ | Test.kt:21:6:22:9 | ... -> ... | WhenBranch | Test.kt:21:6:21:6 | x | VarAccess | | Test.kt:21:10:21:10 | 0 | IntegerLiteral | Test.kt:21:6:21:10 | ... < ... | LTExpr | | Test.kt:22:4:22:9 | ...=... | AssignExpr | Test.kt:27:3:27:8 | ; | ExprStmt | -| Test.kt:22:4:22:9 | ; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral | +| Test.kt:22:4:22:9 | ; | ExprStmt | Test.kt:22:4:22:9 | y | VarAccess | +| Test.kt:22:4:22:9 | y | VarAccess | Test.kt:22:8:22:9 | 40 | LongLiteral | | Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:9 | ...=... | AssignExpr | | Test.kt:24:4:24:9 | ... -> ... | WhenBranch | Test.kt:24:4:24:9 | true | BooleanLiteral | | Test.kt:24:4:24:9 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method | | Test.kt:24:4:24:9 | true | BooleanLiteral | Test.kt:24:10:24:10 | INSTANCE | VarAccess | | Test.kt:24:10:24:10 | INSTANCE | VarAccess | Test.kt:24:4:24:9 | return ... | ReturnStmt | | Test.kt:27:3:27:8 | ...=... | AssignExpr | Test.kt:30:3:33:3 | ; | ExprStmt | -| Test.kt:27:3:27:8 | ; | ExprStmt | Test.kt:27:7:27:8 | 10 | IntegerLiteral | +| Test.kt:27:3:27:8 | ; | ExprStmt | Test.kt:27:3:27:8 | z | VarAccess | +| Test.kt:27:3:27:8 | z | VarAccess | Test.kt:27:7:27:8 | 10 | IntegerLiteral | | Test.kt:27:7:27:8 | 10 | IntegerLiteral | Test.kt:27:3:27:8 | ...=... | AssignExpr | | Test.kt:30:3:33:3 | ; | ExprStmt | Test.kt:30:3:33:3 | when ... | WhenExpr | | Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:30:7:33:3 | ... -> ... | WhenBranch | @@ -70,13 +74,16 @@ | Test.kt:30:12:30:12 | 0 | IntegerLiteral | Test.kt:30:7:30:12 | ... (value equals) ... | ValueEQExpr | | Test.kt:30:15:33:3 | { ... } | BlockStmt | Test.kt:31:4:31:9 | ; | ExprStmt | | Test.kt:31:4:31:9 | ...=... | AssignExpr | Test.kt:32:4:32:9 | ; | ExprStmt | -| Test.kt:31:4:31:9 | ; | ExprStmt | Test.kt:31:8:31:9 | 60 | LongLiteral | +| Test.kt:31:4:31:9 | ; | ExprStmt | Test.kt:31:4:31:9 | y | VarAccess | +| Test.kt:31:4:31:9 | y | VarAccess | Test.kt:31:8:31:9 | 60 | LongLiteral | | Test.kt:31:8:31:9 | 60 | LongLiteral | Test.kt:31:4:31:9 | ...=... | AssignExpr | | Test.kt:32:4:32:9 | ...=... | AssignExpr | Test.kt:35:3:35:8 | ; | ExprStmt | -| Test.kt:32:4:32:9 | ; | ExprStmt | Test.kt:32:8:32:9 | 10 | IntegerLiteral | +| Test.kt:32:4:32:9 | ; | ExprStmt | Test.kt:32:4:32:9 | z | VarAccess | +| Test.kt:32:4:32:9 | z | VarAccess | Test.kt:32:8:32:9 | 10 | IntegerLiteral | | Test.kt:32:8:32:9 | 10 | IntegerLiteral | Test.kt:32:4:32:9 | ...=... | AssignExpr | | Test.kt:35:3:35:8 | ...=... | AssignExpr | Test.kt:38:3:41:3 | while (...) | WhileStmt | -| Test.kt:35:3:35:8 | ; | ExprStmt | Test.kt:35:7:35:8 | 20 | IntegerLiteral | +| Test.kt:35:3:35:8 | ; | ExprStmt | Test.kt:35:3:35:8 | z | VarAccess | +| Test.kt:35:3:35:8 | z | VarAccess | Test.kt:35:7:35:8 | 20 | IntegerLiteral | | Test.kt:35:7:35:8 | 20 | IntegerLiteral | Test.kt:35:3:35:8 | ...=... | AssignExpr | | Test.kt:38:3:41:3 | while (...) | WhileStmt | Test.kt:38:9:38:9 | x | VarAccess | | Test.kt:38:9:38:9 | x | VarAccess | Test.kt:38:13:38:13 | 0 | IntegerLiteral | @@ -85,34 +92,39 @@ | Test.kt:38:13:38:13 | 0 | IntegerLiteral | Test.kt:38:9:38:13 | ... > ... | GTExpr | | Test.kt:38:16:41:3 | { ... } | BlockStmt | Test.kt:39:4:39:9 | ; | ExprStmt | | Test.kt:39:4:39:9 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | -| Test.kt:39:4:39:9 | ; | ExprStmt | Test.kt:39:8:39:9 | 10 | LongLiteral | +| Test.kt:39:4:39:9 | ; | ExprStmt | Test.kt:39:4:39:9 | y | VarAccess | +| Test.kt:39:4:39:9 | y | VarAccess | Test.kt:39:8:39:9 | 10 | LongLiteral | | Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:9 | ...=... | AssignExpr | | Test.kt:40:4:40:4 | x | VarAccess | Test.kt:40:4:40:6 | | LocalVariableDeclExpr | | Test.kt:40:4:40:6 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | -| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | | StmtExpr | | Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | | VarAccess | -| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | | VarAccess | -| Test.kt:40:4:40:6 | | StmtExpr | Test.kt:40:4:40:6 | { ... } | BlockStmt | +| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | x | VarAccess | +| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | { ... } | BlockStmt | +| Test.kt:40:4:40:6 | | StmtExpr | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | Test.kt:38:9:38:9 | x | VarAccess | | Test.kt:40:4:40:6 | | LocalVariableDeclExpr | Test.kt:40:4:40:6 | ; | ExprStmt | -| Test.kt:40:4:40:6 | | VarAccess | Test.kt:40:4:40:6 | | ImplicitCoercionToUnitExpr | +| Test.kt:40:4:40:6 | | VarAccess | Test.kt:40:4:40:6 | | StmtExpr | | Test.kt:40:4:40:6 | | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodCall | | Test.kt:40:4:40:6 | dec(...) | MethodCall | Test.kt:40:4:40:6 | ...=... | AssignExpr | | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | Test.kt:40:4:40:4 | x | VarAccess | +| Test.kt:40:4:40:6 | x | VarAccess | Test.kt:40:4:40:6 | | VarAccess | | Test.kt:40:4:40:6 | { ... } | BlockStmt | Test.kt:40:4:40:6 | var ...; | LocalVariableDeclStmt | | Test.kt:43:3:43:8 | ...=... | AssignExpr | Test.kt:73:3:73:8 | ; | ExprStmt | -| Test.kt:43:3:43:8 | ; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral | +| Test.kt:43:3:43:8 | ; | ExprStmt | Test.kt:43:3:43:8 | z | VarAccess | +| Test.kt:43:3:43:8 | z | VarAccess | Test.kt:43:7:43:8 | 30 | IntegerLiteral | | Test.kt:43:7:43:8 | 30 | IntegerLiteral | Test.kt:43:3:43:8 | ...=... | AssignExpr | | Test.kt:73:3:73:8 | ...=... | AssignExpr | Test.kt:77:3:77:8 | ; | ExprStmt | -| Test.kt:73:3:73:8 | ; | ExprStmt | Test.kt:73:7:73:8 | 50 | IntegerLiteral | +| Test.kt:73:3:73:8 | ; | ExprStmt | Test.kt:73:3:73:8 | z | VarAccess | +| Test.kt:73:3:73:8 | z | VarAccess | Test.kt:73:7:73:8 | 50 | IntegerLiteral | | Test.kt:73:7:73:8 | 50 | IntegerLiteral | Test.kt:73:3:73:8 | ...=... | AssignExpr | | Test.kt:77:3:77:8 | ...=... | AssignExpr | Test.kt:78:9:78:9 | INSTANCE | VarAccess | -| Test.kt:77:3:77:8 | ; | ExprStmt | Test.kt:77:7:77:8 | 40 | IntegerLiteral | +| Test.kt:77:3:77:8 | ; | ExprStmt | Test.kt:77:3:77:8 | w | VarAccess | +| Test.kt:77:3:77:8 | w | VarAccess | Test.kt:77:7:77:8 | 40 | IntegerLiteral | | Test.kt:77:7:77:8 | 40 | IntegerLiteral | Test.kt:77:3:77:8 | ...=... | AssignExpr | | Test.kt:78:3:78:8 | return ... | ReturnStmt | Test.kt:4:2:79:2 | Normal Exit | Method | | Test.kt:78:9:78:9 | INSTANCE | VarAccess | Test.kt:78:3:78:8 | return ... | ReturnStmt | +| Test.kt:82:1:89:1 | Entry | Method | Test.kt:82:21:89:1 | { ... } | BlockStmt | | Test.kt:82:1:89:1 | Exceptional Exit | Method | Test.kt:82:1:89:1 | Exit | Method | -| Test.kt:82:1:89:1 | Exit | Method | file://:0:0:0:0 | | | | Test.kt:82:1:89:1 | Normal Exit | Method | Test.kt:82:1:89:1 | Exit | Method | | Test.kt:82:21:89:1 | { ... } | BlockStmt | Test.kt:83:2:88:2 | try ... | TryStmt | | Test.kt:83:2:88:2 | try ... | TryStmt | Test.kt:83:6:86:2 | { ... } | BlockStmt | @@ -124,13 +136,14 @@ | Test.kt:84:11:84:18 | (...)... | CastExpr | Test.kt:86:4:88:2 | catch (...) | CatchClause | | Test.kt:85:3:85:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method | | Test.kt:85:10:85:10 | 1 | IntegerLiteral | Test.kt:85:3:85:10 | return ... | ReturnStmt | +| Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:82:1:89:1 | Exceptional Exit | Method | | Test.kt:86:4:88:2 | catch (...) | CatchClause | Test.kt:86:11:86:31 | e | LocalVariableDeclExpr | | Test.kt:86:11:86:31 | e | LocalVariableDeclExpr | Test.kt:86:34:88:2 | { ... } | BlockStmt | | Test.kt:86:34:88:2 | { ... } | BlockStmt | Test.kt:87:10:87:10 | 2 | IntegerLiteral | | Test.kt:87:3:87:10 | return ... | ReturnStmt | Test.kt:82:1:89:1 | Normal Exit | Method | | Test.kt:87:10:87:10 | 2 | IntegerLiteral | Test.kt:87:3:87:10 | return ... | ReturnStmt | +| Test.kt:91:1:98:1 | Entry | Method | Test.kt:91:22:98:1 | { ... } | BlockStmt | | Test.kt:91:1:98:1 | Exceptional Exit | Method | Test.kt:91:1:98:1 | Exit | Method | -| Test.kt:91:1:98:1 | Exit | Method | file://:0:0:0:0 | | | | Test.kt:91:1:98:1 | Normal Exit | Method | Test.kt:91:1:98:1 | Exit | Method | | Test.kt:91:22:98:1 | { ... } | BlockStmt | Test.kt:92:2:97:2 | try ... | TryStmt | | Test.kt:92:2:97:2 | try ... | TryStmt | Test.kt:92:6:95:2 | { ... } | BlockStmt | @@ -142,13 +155,14 @@ | Test.kt:93:11:93:13 | ...!! | NotNullExpr | Test.kt:95:4:97:2 | catch (...) | CatchClause | | Test.kt:94:3:94:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method | | Test.kt:94:10:94:10 | 1 | IntegerLiteral | Test.kt:94:3:94:10 | return ... | ReturnStmt | +| Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:91:1:98:1 | Exceptional Exit | Method | | Test.kt:95:4:97:2 | catch (...) | CatchClause | Test.kt:95:11:95:33 | e | LocalVariableDeclExpr | | Test.kt:95:11:95:33 | e | LocalVariableDeclExpr | Test.kt:95:36:97:2 | { ... } | BlockStmt | | Test.kt:95:36:97:2 | { ... } | BlockStmt | Test.kt:96:10:96:10 | 2 | IntegerLiteral | | Test.kt:96:3:96:10 | return ... | ReturnStmt | Test.kt:91:1:98:1 | Normal Exit | Method | | Test.kt:96:10:96:10 | 2 | IntegerLiteral | Test.kt:96:3:96:10 | return ... | ReturnStmt | +| Test.kt:100:1:110:1 | Entry | Method | Test.kt:100:25:110:1 | { ... } | BlockStmt | | Test.kt:100:1:110:1 | Exceptional Exit | Method | Test.kt:100:1:110:1 | Exit | Method | -| Test.kt:100:1:110:1 | Exit | Method | file://:0:0:0:0 | | | | Test.kt:100:1:110:1 | Normal Exit | Method | Test.kt:100:1:110:1 | Exit | Method | | Test.kt:100:25:110:1 | { ... } | BlockStmt | Test.kt:101:5:103:5 | ; | ExprStmt | | Test.kt:101:5:103:5 | ; | ExprStmt | Test.kt:101:5:103:5 | when ... | WhenExpr | @@ -186,8 +200,7 @@ | Test.kt:108:9:108:29 | ; | ExprStmt | Test.kt:108:17:108:28 | "y not null" | StringLiteral | | Test.kt:108:9:108:29 | println(...) | MethodCall | Test.kt:100:1:110:1 | Normal Exit | Method | | Test.kt:108:17:108:28 | "y not null" | StringLiteral | Test.kt:108:9:108:29 | println(...) | MethodCall | -| Test.kt:112:1:116:1 | Exceptional Exit | Method | Test.kt:112:1:116:1 | Exit | Method | -| Test.kt:112:1:116:1 | Exit | Method | file://:0:0:0:0 | | | +| Test.kt:112:1:116:1 | Entry | Method | Test.kt:112:32:116:1 | { ... } | BlockStmt | | Test.kt:112:1:116:1 | Normal Exit | Method | Test.kt:112:1:116:1 | Exit | Method | | Test.kt:112:32:116:1 | { ... } | BlockStmt | Test.kt:113:5:115:5 | ; | ExprStmt | | Test.kt:113:5:115:5 | ; | ExprStmt | Test.kt:113:5:115:5 | when ... | WhenExpr | @@ -199,8 +212,7 @@ | Test.kt:113:14:113:14 | y | VarAccess | Test.kt:112:1:116:1 | Normal Exit | Method | | Test.kt:113:14:113:14 | y | VarAccess | Test.kt:113:17:115:5 | { ... } | BlockStmt | | Test.kt:113:17:115:5 | { ... } | BlockStmt | Test.kt:112:1:116:1 | Normal Exit | Method | -| Test.kt:118:1:124:1 | Exceptional Exit | Method | Test.kt:118:1:124:1 | Exit | Method | -| Test.kt:118:1:124:1 | Exit | Method | file://:0:0:0:0 | | | +| Test.kt:118:1:124:1 | Entry | Method | Test.kt:118:37:124:1 | { ... } | BlockStmt | | Test.kt:118:1:124:1 | Normal Exit | Method | Test.kt:118:1:124:1 | Exit | Method | | Test.kt:118:37:124:1 | { ... } | BlockStmt | Test.kt:119:2:123:12 | ; | ExprStmt | | Test.kt:119:2:123:12 | ; | ExprStmt | Test.kt:119:2:123:12 | when ... | WhenExpr | @@ -216,6 +228,7 @@ | Test.kt:122:12:122:16 | ... -> ... | WhenBranch | Test.kt:122:12:122:16 | true | BooleanLiteral | | Test.kt:122:12:122:16 | ; | ExprStmt | Test.kt:122:12:122:16 | false | BooleanLiteral | | Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:118:1:124:1 | Normal Exit | Method | +| Test.kt:122:12:122:16 | false | BooleanLiteral | Test.kt:123:8:123:10 | { ... } | BlockStmt | | Test.kt:122:12:122:16 | true | BooleanLiteral | Test.kt:122:12:122:16 | ; | ExprStmt | | Test.kt:123:8:123:10 | { ... } | BlockStmt | Test.kt:118:1:124:1 | Normal Exit | Method | missingSuccessor diff --git a/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.ql b/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.ql index 10a2568b0607..9a334d18aae7 100644 --- a/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.ql +++ b/java/ql/test-kotlin2/library-tests/controlflow/basic/getASuccessor.ql @@ -1,54 +1,15 @@ import java +import utils.test.AstCfg -newtype TMaybeControlFlowNode = - TControlFlowNode(ControlFlowNode c) or - TNoControlFlowNode() - -class MaybeControlFlowNode extends TMaybeControlFlowNode { - abstract string toString(); - - abstract Location getLocation(); - - abstract string getPrimaryQlClasses(); -} - -class YesMaybeControlFlowNode extends MaybeControlFlowNode { - ControlFlowNode c; - - YesMaybeControlFlowNode() { this = TControlFlowNode(c) } - - override string toString() { result = c.toString() } - - override Location getLocation() { result = c.getLocation() } - - override string getPrimaryQlClasses() { result = c.getAstNode().getPrimaryQlClasses() } -} - -class NoMaybeControlFlowNode extends MaybeControlFlowNode { - NoMaybeControlFlowNode() { this = TNoControlFlowNode() } - - override string toString() { result = "" } - - override Location getLocation() { result.toString() = "file://:0:0:0:0" } - - override string getPrimaryQlClasses() { result = "" } -} - -MaybeControlFlowNode maybeSuccessor(ControlFlowNode n) { - if exists(n.getASuccessor()) - then result = TControlFlowNode(n.getASuccessor()) - else result = TNoControlFlowNode() -} - -from ControlFlowNode n, MaybeControlFlowNode m +from ControlFlowNode n, ControlFlowNode m where - m = maybeSuccessor(n) and + m = getAnAstSuccessor(n) and n.getLocation().getFile().(CompilationUnit).fromSource() -select n, n.getAstNode().getPrimaryQlClasses(), m, m.getPrimaryQlClasses() +select n, n.getAstNode().getPrimaryQlClasses(), m, m.getAstNode().getPrimaryQlClasses() -query predicate missingSuccessor(Expr n) { - maybeSuccessor(n.getControlFlowNode()) instanceof NoMaybeControlFlowNode and - n.getFile().(CompilationUnit).fromSource() and - not n instanceof TypeAccess and - not n instanceof VarWrite +query predicate missingSuccessor(Expr e) { + exists(ControlFlowNode n | n = e.getControlFlowNode() and not exists(n.getASuccessor())) and + e.getFile().(CompilationUnit).fromSource() and + not e instanceof TypeAccess and + not e instanceof VarWrite } diff --git a/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.expected b/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.expected index d389eb658f5e..54bd6b9388f2 100644 --- a/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.expected +++ b/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.expected @@ -1,5 +1,9 @@ +| MultiCatch.java:6:14:6:23 | Entry | MultiCatch.java:6:14:6:23 | { ... } | +| MultiCatch.java:6:14:6:23 | Normal Exit | MultiCatch.java:6:14:6:23 | Exit | | MultiCatch.java:6:14:6:23 | super(...) | MultiCatch.java:6:14:6:23 | Normal Exit | | MultiCatch.java:6:14:6:23 | { ... } | MultiCatch.java:6:14:6:23 | super(...) | +| MultiCatch.java:7:14:7:23 | Entry | MultiCatch.java:8:2:20:2 | { ... } | +| MultiCatch.java:7:14:7:23 | Exceptional Exit | MultiCatch.java:7:14:7:23 | Exit | | MultiCatch.java:8:2:20:2 | { ... } | MultiCatch.java:9:3:19:3 | try ... | | MultiCatch.java:9:3:19:3 | try ... | MultiCatch.java:10:3:15:3 | { ... } | | MultiCatch.java:10:3:15:3 | { ... } | MultiCatch.java:11:4:11:8 | if (...) | @@ -10,6 +14,7 @@ | MultiCatch.java:12:11:12:27 | new IOException(...) | MultiCatch.java:12:5:12:28 | throw ... | | MultiCatch.java:14:5:14:29 | throw ... | MultiCatch.java:15:5:15:37 | catch (...) | | MultiCatch.java:14:11:14:28 | new SQLException(...) | MultiCatch.java:14:5:14:29 | throw ... | +| MultiCatch.java:15:5:15:37 | catch (...) | MultiCatch.java:7:14:7:23 | Exceptional Exit | | MultiCatch.java:15:5:15:37 | catch (...) | MultiCatch.java:15:36:15:36 | e | | MultiCatch.java:15:36:15:36 | e | MultiCatch.java:16:3:19:3 | { ... } | | MultiCatch.java:16:3:19:3 | { ... } | MultiCatch.java:17:4:17:23 | ; | @@ -18,6 +23,9 @@ | MultiCatch.java:17:4:17:23 | ; | MultiCatch.java:17:4:17:4 | e | | MultiCatch.java:18:4:18:11 | throw ... | MultiCatch.java:7:14:7:23 | Exceptional Exit | | MultiCatch.java:18:10:18:10 | e | MultiCatch.java:18:4:18:11 | throw ... | +| MultiCatch.java:22:14:22:24 | Entry | MultiCatch.java:23:2:33:2 | { ... } | +| MultiCatch.java:22:14:22:24 | Exceptional Exit | MultiCatch.java:22:14:22:24 | Exit | +| MultiCatch.java:22:14:22:24 | Normal Exit | MultiCatch.java:22:14:22:24 | Exit | | MultiCatch.java:23:2:33:2 | { ... } | MultiCatch.java:24:3:32:4 | try ... | | MultiCatch.java:24:3:32:4 | try ... | MultiCatch.java:25:3:31:3 | { ... } | | MultiCatch.java:25:3:31:3 | { ... } | MultiCatch.java:26:4:26:8 | if (...) | @@ -31,12 +39,14 @@ | MultiCatch.java:28:12:28:12 | c | MultiCatch.java:30:10:30:24 | new Exception(...) | | MultiCatch.java:29:5:29:29 | throw ... | MultiCatch.java:31:5:31:37 | catch (...) | | MultiCatch.java:29:11:29:28 | new SQLException(...) | MultiCatch.java:29:5:29:29 | throw ... | -| MultiCatch.java:30:4:30:25 | throw ... | MultiCatch.java:22:14:22:24 | Exceptional Exit | | MultiCatch.java:30:4:30:25 | throw ... | MultiCatch.java:31:5:31:37 | catch (...) | | MultiCatch.java:30:10:30:24 | new Exception(...) | MultiCatch.java:30:4:30:25 | throw ... | +| MultiCatch.java:31:5:31:37 | catch (...) | MultiCatch.java:22:14:22:24 | Exceptional Exit | | MultiCatch.java:31:5:31:37 | catch (...) | MultiCatch.java:31:36:31:36 | e | | MultiCatch.java:31:36:31:36 | e | MultiCatch.java:32:3:32:4 | { ... } | | MultiCatch.java:32:3:32:4 | { ... } | MultiCatch.java:22:14:22:24 | Normal Exit | +| MultiCatch.java:35:14:35:26 | Entry | MultiCatch.java:36:2:42:2 | { ... } | +| MultiCatch.java:35:14:35:26 | Normal Exit | MultiCatch.java:35:14:35:26 | Exit | | MultiCatch.java:36:2:42:2 | { ... } | MultiCatch.java:37:3:41:4 | try ... | | MultiCatch.java:37:3:41:4 | try ... | MultiCatch.java:38:3:40:3 | { ... } | | MultiCatch.java:38:3:40:3 | { ... } | MultiCatch.java:39:10:39:26 | new IOException(...) | diff --git a/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.ql b/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.ql index bbc7f8a21347..1f589cc46083 100644 --- a/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.ql +++ b/java/ql/test/library-tests/java7/MultiCatch/MultiCatchControlFlow.ql @@ -1,5 +1,6 @@ import default +import utils.test.AstCfg from ControlFlowNode n where n.getEnclosingCallable().getCompilationUnit().fromSource() -select n, n.getASuccessor() +select n, getAnAstSuccessor(n) diff --git a/java/ql/test/library-tests/pattern-instanceof/cfg.expected b/java/ql/test/library-tests/pattern-instanceof/cfg.expected index 5ef73c8ac78d..92f64965223d 100644 --- a/java/ql/test/library-tests/pattern-instanceof/cfg.expected +++ b/java/ql/test/library-tests/pattern-instanceof/cfg.expected @@ -1,8 +1,8 @@ -| Test.java:1:14:1:17 | Exceptional Exit | Test.java:1:14:1:17 | Exit | +| Test.java:1:14:1:17 | Entry | Test.java:1:14:1:17 | { ... } | | Test.java:1:14:1:17 | Normal Exit | Test.java:1:14:1:17 | Exit | | Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Normal Exit | | Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) | -| Test.java:3:22:3:25 | Exceptional Exit | Test.java:3:22:3:25 | Exit | +| Test.java:3:22:3:25 | Entry | Test.java:3:40:20:3 | { ... } | | Test.java:3:22:3:25 | Normal Exit | Test.java:3:22:3:25 | Exit | | Test.java:3:40:20:3 | { ... } | Test.java:5:5:5:34 | var ...; | | Test.java:5:5:5:34 | var ...; | Test.java:5:26:5:33 | source(...) | @@ -50,35 +50,39 @@ | Test.java:17:7:17:26 | sink(...) | Test.java:3:22:3:25 | Normal Exit | | Test.java:17:7:17:27 | ; | Test.java:17:12:17:25 | alsoNotTainted | | Test.java:17:12:17:25 | alsoNotTainted | Test.java:17:7:17:26 | sink(...) | -| Test.java:22:24:22:29 | Exceptional Exit | Test.java:22:24:22:29 | Exit | +| Test.java:22:24:22:29 | Entry | Test.java:22:33:22:53 | { ... } | | Test.java:22:24:22:29 | Normal Exit | Test.java:22:24:22:29 | Exit | | Test.java:22:33:22:53 | { ... } | Test.java:22:42:22:50 | "tainted" | | Test.java:22:35:22:51 | return ... | Test.java:22:24:22:29 | Normal Exit | | Test.java:22:42:22:50 | "tainted" | Test.java:22:35:22:51 | return ... | -| Test.java:23:22:23:25 | Exceptional Exit | Test.java:23:22:23:25 | Exit | +| Test.java:23:22:23:25 | Entry | Test.java:23:40:23:42 | { ... } | | Test.java:23:22:23:25 | Normal Exit | Test.java:23:22:23:25 | Exit | | Test.java:23:40:23:42 | { ... } | Test.java:23:22:23:25 | Normal Exit | | Test.java:27:8:27:12 | ...=... | Test.java:27:8:27:12 | ; | | Test.java:27:8:27:12 | ...=... | Test.java:27:8:27:12 | Normal Exit | | Test.java:27:8:27:12 | ; | Test.java:27:8:27:12 | this | | Test.java:27:8:27:12 | ; | Test.java:27:8:27:12 | this | -| Test.java:27:8:27:12 | Exceptional Exit | Test.java:27:8:27:12 | Exit | +| Test.java:27:8:27:12 | Entry | Test.java:27:8:27:12 | { ... } | | Test.java:27:8:27:12 | Normal Exit | Test.java:27:8:27:12 | Exit | | Test.java:27:8:27:12 | i | Test.java:27:8:27:12 | ...=... | | Test.java:27:8:27:12 | otherField | Test.java:27:8:27:12 | ...=... | | Test.java:27:8:27:12 | super(...) | Test.java:27:8:27:12 | ; | -| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | i | -| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | otherField | +| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | this.i | +| Test.java:27:8:27:12 | this | Test.java:27:8:27:12 | this.otherField | +| Test.java:27:8:27:12 | this.i | Test.java:27:8:27:12 | i | +| Test.java:27:8:27:12 | this.otherField | Test.java:27:8:27:12 | otherField | | Test.java:27:8:27:12 | { ... } | Test.java:27:8:27:12 | super(...) | | Test.java:28:8:28:12 | ...=... | Test.java:28:8:28:12 | ; | | Test.java:28:8:28:12 | ...=... | Test.java:28:8:28:12 | Normal Exit | | Test.java:28:8:28:12 | ; | Test.java:28:8:28:12 | this | | Test.java:28:8:28:12 | ; | Test.java:28:8:28:12 | this | -| Test.java:28:8:28:12 | Exceptional Exit | Test.java:28:8:28:12 | Exit | +| Test.java:28:8:28:12 | Entry | Test.java:28:8:28:12 | { ... } | | Test.java:28:8:28:12 | Normal Exit | Test.java:28:8:28:12 | Exit | | Test.java:28:8:28:12 | nonTaintedField | Test.java:28:8:28:12 | ...=... | | Test.java:28:8:28:12 | super(...) | Test.java:28:8:28:12 | ; | | Test.java:28:8:28:12 | taintedField | Test.java:28:8:28:12 | ...=... | -| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | nonTaintedField | -| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | taintedField | +| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | this.nonTaintedField | +| Test.java:28:8:28:12 | this | Test.java:28:8:28:12 | this.taintedField | +| Test.java:28:8:28:12 | this.nonTaintedField | Test.java:28:8:28:12 | nonTaintedField | +| Test.java:28:8:28:12 | this.taintedField | Test.java:28:8:28:12 | taintedField | | Test.java:28:8:28:12 | { ... } | Test.java:28:8:28:12 | super(...) | diff --git a/java/ql/test/library-tests/pattern-instanceof/cfg.ql b/java/ql/test/library-tests/pattern-instanceof/cfg.ql index db2cc49bc0b6..7f87f2d61f5c 100644 --- a/java/ql/test/library-tests/pattern-instanceof/cfg.ql +++ b/java/ql/test/library-tests/pattern-instanceof/cfg.ql @@ -1,5 +1,6 @@ import java +import utils.test.AstCfg from ControlFlowNode cn where cn.getLocation().getFile().getBaseName() = "Test.java" -select cn, cn.getASuccessor() +select cn, getAnAstSuccessor(cn) diff --git a/java/ql/test/library-tests/pattern-switch/cfg/test.expected b/java/ql/test/library-tests/pattern-switch/cfg/test.expected index f9058bd8f4c2..d398c5f6ecd3 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/test.expected +++ b/java/ql/test/library-tests/pattern-switch/cfg/test.expected @@ -1,32 +1,35 @@ -| Exhaustive.java:1:14:1:23 | Exceptional Exit | Exhaustive.java:1:14:1:23 | Exit | +| Exhaustive.java:1:14:1:23 | Entry | Exhaustive.java:1:14:1:23 | { ... } | | Exhaustive.java:1:14:1:23 | Normal Exit | Exhaustive.java:1:14:1:23 | Exit | | Exhaustive.java:1:14:1:23 | super(...) | Exhaustive.java:1:14:1:23 | Normal Exit | | Exhaustive.java:1:14:1:23 | { ... } | Exhaustive.java:1:14:1:23 | super(...) | -| Exhaustive.java:3:8:3:8 | Exceptional Exit | Exhaustive.java:3:8:3:8 | Exit | -| Exhaustive.java:3:8:3:8 | Exceptional Exit | Exhaustive.java:3:8:3:8 | Exit | +| Exhaustive.java:3:8:3:8 | Entry | Exhaustive.java:3:8:3:8 | { ... } | +| Exhaustive.java:3:8:3:8 | Entry | Exhaustive.java:3:8:3:8 | { ... } | | Exhaustive.java:3:8:3:8 | Normal Exit | Exhaustive.java:3:8:3:8 | Exit | | Exhaustive.java:3:8:3:8 | Normal Exit | Exhaustive.java:3:8:3:8 | Exit | | Exhaustive.java:3:8:3:8 | super(...) | Exhaustive.java:3:8:3:8 | Normal Exit | | Exhaustive.java:3:8:3:8 | { ... } | Exhaustive.java:3:8:3:8 | super(...) | | Exhaustive.java:3:8:3:8 | { ... } | Exhaustive.java:3:12:3:12 | ; | | Exhaustive.java:3:12:3:12 | ...=... | Exhaustive.java:3:15:3:15 | ; | -| Exhaustive.java:3:12:3:12 | ; | Exhaustive.java:3:12:3:12 | new E(...) | +| Exhaustive.java:3:12:3:12 | ; | Exhaustive.java:3:12:3:12 | A | +| Exhaustive.java:3:12:3:12 | A | Exhaustive.java:3:12:3:12 | new E(...) | | Exhaustive.java:3:12:3:12 | new E(...) | Exhaustive.java:3:12:3:12 | ...=... | | Exhaustive.java:3:15:3:15 | ...=... | Exhaustive.java:3:18:3:18 | ; | -| Exhaustive.java:3:15:3:15 | ; | Exhaustive.java:3:15:3:15 | new E(...) | +| Exhaustive.java:3:15:3:15 | ; | Exhaustive.java:3:15:3:15 | B | +| Exhaustive.java:3:15:3:15 | B | Exhaustive.java:3:15:3:15 | new E(...) | | Exhaustive.java:3:15:3:15 | new E(...) | Exhaustive.java:3:15:3:15 | ...=... | | Exhaustive.java:3:18:3:18 | ...=... | Exhaustive.java:3:8:3:8 | Normal Exit | -| Exhaustive.java:3:18:3:18 | ; | Exhaustive.java:3:18:3:18 | new E(...) | +| Exhaustive.java:3:18:3:18 | ; | Exhaustive.java:3:18:3:18 | C | +| Exhaustive.java:3:18:3:18 | C | Exhaustive.java:3:18:3:18 | new E(...) | | Exhaustive.java:3:18:3:18 | new E(...) | Exhaustive.java:3:18:3:18 | ...=... | -| Exhaustive.java:5:15:5:15 | Exceptional Exit | Exhaustive.java:5:15:5:15 | Exit | +| Exhaustive.java:5:15:5:15 | Entry | Exhaustive.java:5:15:5:15 | { ... } | | Exhaustive.java:5:15:5:15 | Normal Exit | Exhaustive.java:5:15:5:15 | Exit | | Exhaustive.java:5:15:5:15 | super(...) | Exhaustive.java:5:15:5:15 | Normal Exit | | Exhaustive.java:5:15:5:15 | { ... } | Exhaustive.java:5:15:5:15 | super(...) | -| Exhaustive.java:6:15:6:15 | Exceptional Exit | Exhaustive.java:6:15:6:15 | Exit | +| Exhaustive.java:6:15:6:15 | Entry | Exhaustive.java:6:15:6:15 | { ... } | | Exhaustive.java:6:15:6:15 | Normal Exit | Exhaustive.java:6:15:6:15 | Exit | | Exhaustive.java:6:15:6:15 | super(...) | Exhaustive.java:6:15:6:15 | Normal Exit | | Exhaustive.java:6:15:6:15 | { ... } | Exhaustive.java:6:15:6:15 | super(...) | -| Exhaustive.java:8:22:8:25 | Exceptional Exit | Exhaustive.java:8:22:8:25 | Exit | +| Exhaustive.java:8:22:8:25 | Entry | Exhaustive.java:8:47:35:3 | { ... } | | Exhaustive.java:8:22:8:25 | Normal Exit | Exhaustive.java:8:22:8:25 | Exit | | Exhaustive.java:8:47:35:3 | { ... } | Exhaustive.java:11:5:11:14 | switch (...) | | Exhaustive.java:11:5:11:14 | switch (...) | Exhaustive.java:11:13:11:13 | o | @@ -40,14 +43,17 @@ | Exhaustive.java:13:25:13:27 | { ... } | Exhaustive.java:18:5:18:14 | switch (...) | | Exhaustive.java:18:5:18:14 | switch (...) | Exhaustive.java:18:13:18:13 | e | | Exhaustive.java:18:13:18:13 | e | Exhaustive.java:19:7:19:15 | case ... | -| Exhaustive.java:18:13:18:13 | e | Exhaustive.java:20:7:20:15 | case ... | -| Exhaustive.java:18:13:18:13 | e | Exhaustive.java:21:7:21:15 | case ... | -| Exhaustive.java:18:13:18:13 | e | Exhaustive.java:24:5:24:14 | switch (...) | -| Exhaustive.java:19:7:19:15 | case ... | Exhaustive.java:19:17:19:19 | { ... } | +| Exhaustive.java:19:7:19:15 | case ... | Exhaustive.java:19:12:19:12 | A | +| Exhaustive.java:19:7:19:15 | case ... | Exhaustive.java:20:7:20:15 | case ... | +| Exhaustive.java:19:12:19:12 | A | Exhaustive.java:19:17:19:19 | { ... } | | Exhaustive.java:19:17:19:19 | { ... } | Exhaustive.java:24:5:24:14 | switch (...) | -| Exhaustive.java:20:7:20:15 | case ... | Exhaustive.java:20:17:20:19 | { ... } | +| Exhaustive.java:20:7:20:15 | case ... | Exhaustive.java:20:12:20:12 | B | +| Exhaustive.java:20:7:20:15 | case ... | Exhaustive.java:21:7:21:15 | case ... | +| Exhaustive.java:20:12:20:12 | B | Exhaustive.java:20:17:20:19 | { ... } | | Exhaustive.java:20:17:20:19 | { ... } | Exhaustive.java:24:5:24:14 | switch (...) | -| Exhaustive.java:21:7:21:15 | case ... | Exhaustive.java:21:17:21:19 | { ... } | +| Exhaustive.java:21:7:21:15 | case ... | Exhaustive.java:21:12:21:12 | C | +| Exhaustive.java:21:7:21:15 | case ... | Exhaustive.java:24:5:24:14 | switch (...) | +| Exhaustive.java:21:12:21:12 | C | Exhaustive.java:21:17:21:19 | { ... } | | Exhaustive.java:21:17:21:19 | { ... } | Exhaustive.java:24:5:24:14 | switch (...) | | Exhaustive.java:24:5:24:14 | switch (...) | Exhaustive.java:24:13:24:13 | i | | Exhaustive.java:24:13:24:13 | i | Exhaustive.java:25:7:25:17 | case | @@ -65,11 +71,11 @@ | Exhaustive.java:31:14:31:14 | | Exhaustive.java:8:22:8:25 | Normal Exit | | Exhaustive.java:32:7:32:15 | case | Exhaustive.java:32:14:32:14 | | | Exhaustive.java:32:14:32:14 | | Exhaustive.java:8:22:8:25 | Normal Exit | -| Test.java:1:14:1:17 | Exceptional Exit | Test.java:1:14:1:17 | Exit | +| Test.java:1:14:1:17 | Entry | Test.java:1:14:1:17 | { ... } | | Test.java:1:14:1:17 | Normal Exit | Test.java:1:14:1:17 | Exit | | Test.java:1:14:1:17 | super(...) | Test.java:1:14:1:17 | Normal Exit | | Test.java:1:14:1:17 | { ... } | Test.java:1:14:1:17 | super(...) | -| Test.java:3:22:3:25 | Exceptional Exit | Test.java:3:22:3:25 | Exit | +| Test.java:3:22:3:25 | Entry | Test.java:3:41:134:3 | { ... } | | Test.java:3:22:3:25 | Normal Exit | Test.java:3:22:3:25 | Exit | | Test.java:3:41:134:3 | { ... } | Test.java:5:6:5:19 | switch (...) | | Test.java:5:6:5:19 | switch (...) | Test.java:5:14:5:18 | thing | @@ -79,14 +85,12 @@ | Test.java:6:20:6:20 | s | Test.java:6:25:6:34 | System.out | | Test.java:6:25:6:34 | System.out | Test.java:6:44:6:44 | s | | Test.java:6:25:6:45 | println(...) | Test.java:11:6:11:19 | switch (...) | -| Test.java:6:25:6:46 | ; | Test.java:6:25:6:34 | System.out | | Test.java:6:44:6:44 | s | Test.java:6:25:6:45 | println(...) | | Test.java:7:8:7:24 | case | Test.java:7:21:7:21 | i | | Test.java:7:8:7:24 | case | Test.java:8:8:8:17 | default | | Test.java:7:21:7:21 | i | Test.java:7:26:7:35 | System.out | | Test.java:7:26:7:35 | System.out | Test.java:7:45:7:58 | "An integer: " | | Test.java:7:26:7:63 | println(...) | Test.java:11:6:11:19 | switch (...) | -| Test.java:7:26:7:64 | ; | Test.java:7:26:7:35 | System.out | | Test.java:7:45:7:58 | "An integer: " | Test.java:7:62:7:62 | i | | Test.java:7:45:7:62 | ... + ... | Test.java:7:26:7:63 | println(...) | | Test.java:7:62:7:62 | i | Test.java:7:45:7:62 | ... + ... | @@ -136,19 +140,19 @@ | Test.java:28:34:28:38 | thing | Test.java:29:8:29:21 | case | | Test.java:29:8:29:21 | case | Test.java:29:20:29:20 | s | | Test.java:29:8:29:21 | case | Test.java:31:8:31:22 | case | -| Test.java:29:20:29:20 | s | Test.java:30:10:30:17 | yield ... | -| Test.java:30:10:30:17 | yield ... | Test.java:30:16:30:16 | s | -| Test.java:30:16:30:16 | s | Test.java:28:10:28:39 | thingAsString2 | +| Test.java:29:20:29:20 | s | Test.java:30:16:30:16 | s | +| Test.java:30:10:30:17 | yield ... | Test.java:28:10:28:39 | thingAsString2 | +| Test.java:30:16:30:16 | s | Test.java:30:10:30:17 | yield ... | | Test.java:31:8:31:22 | case | Test.java:31:21:31:21 | i | | Test.java:31:8:31:22 | case | Test.java:33:8:33:15 | default | -| Test.java:31:21:31:21 | i | Test.java:32:10:32:34 | yield ... | -| Test.java:32:10:32:34 | yield ... | Test.java:32:16:32:29 | "An integer: " | +| Test.java:31:21:31:21 | i | Test.java:32:16:32:29 | "An integer: " | +| Test.java:32:10:32:34 | yield ... | Test.java:28:10:28:39 | thingAsString2 | | Test.java:32:16:32:29 | "An integer: " | Test.java:32:33:32:33 | i | -| Test.java:32:16:32:33 | ... + ... | Test.java:28:10:28:39 | thingAsString2 | +| Test.java:32:16:32:33 | ... + ... | Test.java:32:10:32:34 | yield ... | | Test.java:32:33:32:33 | i | Test.java:32:16:32:33 | ... + ... | -| Test.java:33:8:33:15 | default | Test.java:34:10:34:32 | yield ... | -| Test.java:34:10:34:32 | yield ... | Test.java:34:16:34:31 | "Something else" | -| Test.java:34:16:34:31 | "Something else" | Test.java:28:10:28:39 | thingAsString2 | +| Test.java:33:8:33:15 | default | Test.java:34:16:34:31 | "Something else" | +| Test.java:34:10:34:32 | yield ... | Test.java:28:10:28:39 | thingAsString2 | +| Test.java:34:16:34:31 | "Something else" | Test.java:34:10:34:32 | yield ... | | Test.java:37:6:37:18 | switch (...) | Test.java:37:13:37:17 | thing | | Test.java:37:13:37:17 | thing | Test.java:38:8:38:42 | case | | Test.java:38:8:38:42 | case | Test.java:38:20:38:20 | s | @@ -195,7 +199,6 @@ | Test.java:50:41:50:41 | 3 | Test.java:50:27:50:41 | ... == ... | | Test.java:50:46:50:55 | System.out | Test.java:50:65:50:74 | "Length 3" | | Test.java:50:46:50:75 | println(...) | Test.java:55:6:55:26 | switch (...) | -| Test.java:50:46:50:76 | ; | Test.java:50:46:50:55 | System.out | | Test.java:50:65:50:74 | "Length 3" | Test.java:50:46:50:75 | println(...) | | Test.java:51:8:51:44 | case | Test.java:51:20:51:20 | s | | Test.java:51:8:51:44 | case | Test.java:52:8:52:17 | default | @@ -207,22 +210,22 @@ | Test.java:51:41:51:41 | 5 | Test.java:51:27:51:41 | ... == ... | | Test.java:51:46:51:55 | System.out | Test.java:51:65:51:74 | "Length 5" | | Test.java:51:46:51:75 | println(...) | Test.java:55:6:55:26 | switch (...) | -| Test.java:51:46:51:76 | ; | Test.java:51:46:51:55 | System.out | | Test.java:51:65:51:74 | "Length 5" | Test.java:51:46:51:75 | println(...) | | Test.java:52:8:52:17 | default | Test.java:52:19:52:21 | { ... } | | Test.java:52:19:52:21 | { ... } | Test.java:55:6:55:26 | switch (...) | | Test.java:55:6:55:26 | switch (...) | Test.java:55:21:55:25 | thing | | Test.java:55:13:55:25 | (...)... | Test.java:56:8:56:21 | case ... | -| Test.java:55:13:55:25 | (...)... | Test.java:58:8:58:21 | case ... | -| Test.java:55:13:55:25 | (...)... | Test.java:61:8:61:42 | case | -| Test.java:55:13:55:25 | (...)... | Test.java:69:8:69:26 | case null, default | | Test.java:55:21:55:25 | thing | Test.java:55:13:55:25 | (...)... | -| Test.java:56:8:56:21 | case ... | Test.java:57:10:57:44 | ; | +| Test.java:56:8:56:21 | case ... | Test.java:56:13:56:20 | "Const1" | +| Test.java:56:8:56:21 | case ... | Test.java:58:8:58:21 | case ... | +| Test.java:56:13:56:20 | "Const1" | Test.java:57:10:57:44 | ; | | Test.java:57:10:57:19 | System.out | Test.java:57:29:57:42 | "It's Const1!" | -| Test.java:57:10:57:43 | println(...) | Test.java:58:8:58:21 | case ... | +| Test.java:57:10:57:43 | println(...) | Test.java:59:10:59:54 | ; | | Test.java:57:10:57:44 | ; | Test.java:57:10:57:19 | System.out | | Test.java:57:29:57:42 | "It's Const1!" | Test.java:57:10:57:43 | println(...) | -| Test.java:58:8:58:21 | case ... | Test.java:59:10:59:54 | ; | +| Test.java:58:8:58:21 | case ... | Test.java:58:13:58:20 | "Const2" | +| Test.java:58:8:58:21 | case ... | Test.java:61:8:61:42 | case | +| Test.java:58:13:58:20 | "Const2" | Test.java:59:10:59:54 | ; | | Test.java:59:10:59:19 | System.out | Test.java:59:29:59:52 | "It's Const1 or Const2!" | | Test.java:59:10:59:53 | println(...) | Test.java:60:10:60:15 | break | | Test.java:59:10:59:54 | ; | Test.java:59:10:59:19 | System.out | @@ -230,27 +233,27 @@ | Test.java:60:10:60:15 | break | Test.java:73:6:73:18 | switch (...) | | Test.java:61:8:61:42 | case | Test.java:61:20:61:20 | s | | Test.java:61:8:61:42 | case | Test.java:63:8:63:21 | case ... | -| Test.java:61:8:61:42 | case | Test.java:66:8:66:22 | case ... | -| Test.java:61:8:61:42 | case | Test.java:69:8:69:26 | case null, default | | Test.java:61:20:61:20 | s | Test.java:61:27:61:27 | s | | Test.java:61:27:61:27 | s | Test.java:61:27:61:36 | length(...) | | Test.java:61:27:61:36 | length(...) | Test.java:61:41:61:41 | 6 | | Test.java:61:27:61:41 | ... <= ... | Test.java:62:10:62:83 | ; | | Test.java:61:27:61:41 | ... <= ... | Test.java:63:8:63:21 | case ... | -| Test.java:61:27:61:41 | ... <= ... | Test.java:66:8:66:22 | case ... | -| Test.java:61:27:61:41 | ... <= ... | Test.java:69:8:69:26 | case null, default | | Test.java:61:41:61:41 | 6 | Test.java:61:27:61:41 | ... <= ... | | Test.java:62:10:62:19 | System.out | Test.java:62:29:62:81 | "It's <= 6 chars long, and neither Const1 nor Const2" | -| Test.java:62:10:62:82 | println(...) | Test.java:63:8:63:21 | case ... | +| Test.java:62:10:62:82 | println(...) | Test.java:64:10:64:96 | ; | | Test.java:62:10:62:83 | ; | Test.java:62:10:62:19 | System.out | | Test.java:62:29:62:81 | "It's <= 6 chars long, and neither Const1 nor Const2" | Test.java:62:10:62:82 | println(...) | -| Test.java:63:8:63:21 | case ... | Test.java:64:10:64:96 | ; | +| Test.java:63:8:63:21 | case ... | Test.java:63:13:63:20 | "Const3" | +| Test.java:63:8:63:21 | case ... | Test.java:66:8:66:22 | case ... | +| Test.java:63:13:63:20 | "Const3" | Test.java:64:10:64:96 | ; | | Test.java:64:10:64:19 | System.out | Test.java:64:29:64:94 | "It's (<= 6 chars long, and neither Const1 nor Const2), or Const3" | | Test.java:64:10:64:95 | println(...) | Test.java:65:10:65:15 | break | | Test.java:64:10:64:96 | ; | Test.java:64:10:64:19 | System.out | | Test.java:64:29:64:94 | "It's (<= 6 chars long, and neither Const1 nor Const2), or Const3" | Test.java:64:10:64:95 | println(...) | | Test.java:65:10:65:15 | break | Test.java:73:6:73:18 | switch (...) | -| Test.java:66:8:66:22 | case ... | Test.java:67:10:67:44 | ; | +| Test.java:66:8:66:22 | case ... | Test.java:66:13:66:21 | "Const30" | +| Test.java:66:8:66:22 | case ... | Test.java:69:8:69:26 | case null, default | +| Test.java:66:13:66:21 | "Const30" | Test.java:67:10:67:44 | ; | | Test.java:67:10:67:19 | System.out | Test.java:67:29:67:42 | "It's Const30" | | Test.java:67:10:67:43 | println(...) | Test.java:68:10:68:15 | break | | Test.java:67:10:67:44 | ; | Test.java:67:10:67:19 | System.out | @@ -263,16 +266,17 @@ | Test.java:70:29:70:58 | "It's null, or something else" | Test.java:70:10:70:59 | println(...) | | Test.java:73:6:73:18 | switch (...) | Test.java:73:13:73:17 | thing | | Test.java:73:13:73:17 | thing | Test.java:74:8:74:21 | case | -| Test.java:73:13:73:17 | thing | Test.java:77:8:77:17 | case ... | | Test.java:74:8:74:21 | case | Test.java:74:20:74:20 | s | -| Test.java:74:8:74:21 | case | Test.java:80:8:80:22 | case | +| Test.java:74:8:74:21 | case | Test.java:77:8:77:17 | case ... | | Test.java:74:20:74:20 | s | Test.java:75:10:75:31 | ; | | Test.java:75:10:75:19 | System.out | Test.java:75:29:75:29 | s | | Test.java:75:10:75:30 | println(...) | Test.java:76:10:76:15 | break | | Test.java:75:10:75:31 | ; | Test.java:75:10:75:19 | System.out | | Test.java:75:29:75:29 | s | Test.java:75:10:75:30 | println(...) | | Test.java:76:10:76:15 | break | Test.java:87:6:87:18 | switch (...) | -| Test.java:77:8:77:17 | case ... | Test.java:78:10:78:41 | ; | +| Test.java:77:8:77:17 | case ... | Test.java:77:13:77:16 | null | +| Test.java:77:8:77:17 | case ... | Test.java:80:8:80:22 | case | +| Test.java:77:13:77:16 | null | Test.java:78:10:78:41 | ; | | Test.java:78:10:78:19 | System.out | Test.java:78:29:78:39 | "It's null" | | Test.java:78:10:78:40 | println(...) | Test.java:79:10:79:15 | break | | Test.java:78:10:78:41 | ; | Test.java:78:10:78:19 | System.out | @@ -347,7 +351,7 @@ | Test.java:110:26:110:30 | thing | Test.java:111:8:111:20 | case | | Test.java:111:8:111:20 | case | Test.java:111:15:111:15 | | | Test.java:111:8:111:20 | case | Test.java:112:8:112:77 | case | -| Test.java:111:13:111:19 | B(...) | Test.java:114:10:114:17 | yield ... | +| Test.java:111:13:111:19 | B(...) | Test.java:114:16:114:16 | 1 | | Test.java:111:15:111:15 | | Test.java:111:18:111:18 | | | Test.java:111:18:111:18 | | Test.java:111:13:111:19 | B(...) | | Test.java:112:8:112:77 | case | Test.java:112:21:112:21 | | @@ -362,32 +366,34 @@ | Test.java:112:47:112:51 | thing | Test.java:112:47:112:62 | toString(...) | | Test.java:112:47:112:62 | toString(...) | Test.java:112:71:112:75 | "abc" | | Test.java:112:47:112:76 | equals(...) | Test.java:113:8:113:20 | case | -| Test.java:112:47:112:76 | equals(...) | Test.java:114:10:114:17 | yield ... | +| Test.java:112:47:112:76 | equals(...) | Test.java:114:16:114:16 | 1 | | Test.java:112:71:112:75 | "abc" | Test.java:112:47:112:76 | equals(...) | | Test.java:113:8:113:20 | case | Test.java:113:19:113:19 | | | Test.java:113:8:113:20 | case | Test.java:115:8:115:15 | default | -| Test.java:113:19:113:19 | | Test.java:114:10:114:17 | yield ... | -| Test.java:114:10:114:17 | yield ... | Test.java:114:16:114:16 | 1 | -| Test.java:114:16:114:16 | 1 | Test.java:110:10:110:31 | result | -| Test.java:115:8:115:15 | default | Test.java:116:10:116:17 | yield ... | -| Test.java:116:10:116:17 | yield ... | Test.java:116:16:116:16 | 2 | -| Test.java:116:16:116:16 | 2 | Test.java:110:10:110:31 | result | +| Test.java:113:19:113:19 | | Test.java:114:16:114:16 | 1 | +| Test.java:114:10:114:17 | yield ... | Test.java:110:10:110:31 | result | +| Test.java:114:16:114:16 | 1 | Test.java:114:10:114:17 | yield ... | +| Test.java:115:8:115:15 | default | Test.java:116:16:116:16 | 2 | +| Test.java:116:10:116:17 | yield ... | Test.java:110:10:110:31 | result | +| Test.java:116:16:116:16 | 2 | Test.java:116:10:116:17 | yield ... | | Test.java:119:6:119:27 | switch (...) | Test.java:119:22:119:26 | thing | | Test.java:119:14:119:26 | (...)... | Test.java:120:8:120:16 | case ... | -| Test.java:119:14:119:26 | (...)... | Test.java:121:8:121:56 | case | | Test.java:119:22:119:26 | thing | Test.java:119:14:119:26 | (...)... | -| Test.java:120:8:120:16 | case ... | Test.java:122:8:122:16 | case ... | +| Test.java:120:8:120:16 | case ... | Test.java:120:13:120:15 | "a" | +| Test.java:120:8:120:16 | case ... | Test.java:121:8:121:56 | case | +| Test.java:120:13:120:15 | "a" | Test.java:123:10:123:15 | break | | Test.java:121:8:121:56 | case | Test.java:121:20:121:20 | | | Test.java:121:8:121:56 | case | Test.java:122:8:122:16 | case ... | -| Test.java:121:8:121:56 | case | Test.java:124:8:124:15 | default | | Test.java:121:20:121:20 | | Test.java:121:36:121:40 | thing | | Test.java:121:27:121:50 | length(...) | Test.java:121:55:121:55 | 5 | | Test.java:121:27:121:55 | ... == ... | Test.java:122:8:122:16 | case ... | -| Test.java:121:27:121:55 | ... == ... | Test.java:124:8:124:15 | default | +| Test.java:121:27:121:55 | ... == ... | Test.java:123:10:123:15 | break | | Test.java:121:28:121:40 | (...)... | Test.java:121:27:121:50 | length(...) | | Test.java:121:36:121:40 | thing | Test.java:121:28:121:40 | (...)... | | Test.java:121:55:121:55 | 5 | Test.java:121:27:121:55 | ... == ... | -| Test.java:122:8:122:16 | case ... | Test.java:123:10:123:15 | break | +| Test.java:122:8:122:16 | case ... | Test.java:122:13:122:15 | "b" | +| Test.java:122:8:122:16 | case ... | Test.java:124:8:124:15 | default | +| Test.java:122:13:122:15 | "b" | Test.java:123:10:123:15 | break | | Test.java:123:10:123:15 | break | Test.java:129:6:129:18 | switch (...) | | Test.java:124:8:124:15 | default | Test.java:125:10:125:15 | break | | Test.java:125:10:125:15 | break | Test.java:129:6:129:18 | switch (...) | @@ -395,29 +401,33 @@ | Test.java:129:13:129:17 | thing | Test.java:130:8:130:21 | case | | Test.java:130:8:130:21 | case | Test.java:130:20:130:20 | | | Test.java:130:8:130:21 | case | Test.java:131:8:131:15 | default | -| Test.java:130:20:130:20 | | Test.java:131:8:131:15 | default | +| Test.java:130:20:130:20 | | Test.java:3:22:3:25 | Normal Exit | | Test.java:131:8:131:15 | default | Test.java:3:22:3:25 | Normal Exit | | Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | ; | | Test.java:138:8:138:8 | ...=... | Test.java:138:8:138:8 | Normal Exit | | Test.java:138:8:138:8 | ; | Test.java:138:8:138:8 | this | | Test.java:138:8:138:8 | ; | Test.java:138:8:138:8 | this | -| Test.java:138:8:138:8 | Exceptional Exit | Test.java:138:8:138:8 | Exit | +| Test.java:138:8:138:8 | Entry | Test.java:138:8:138:8 | { ... } | | Test.java:138:8:138:8 | Normal Exit | Test.java:138:8:138:8 | Exit | | Test.java:138:8:138:8 | b | Test.java:138:8:138:8 | ...=... | | Test.java:138:8:138:8 | field3 | Test.java:138:8:138:8 | ...=... | | Test.java:138:8:138:8 | super(...) | Test.java:138:8:138:8 | ; | -| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | b | -| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | field3 | +| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | this.b | +| Test.java:138:8:138:8 | this | Test.java:138:8:138:8 | this.field3 | +| Test.java:138:8:138:8 | this.b | Test.java:138:8:138:8 | b | +| Test.java:138:8:138:8 | this.field3 | Test.java:138:8:138:8 | field3 | | Test.java:138:8:138:8 | { ... } | Test.java:138:8:138:8 | super(...) | | Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | ; | | Test.java:139:8:139:8 | ...=... | Test.java:139:8:139:8 | Normal Exit | | Test.java:139:8:139:8 | ; | Test.java:139:8:139:8 | this | | Test.java:139:8:139:8 | ; | Test.java:139:8:139:8 | this | -| Test.java:139:8:139:8 | Exceptional Exit | Test.java:139:8:139:8 | Exit | +| Test.java:139:8:139:8 | Entry | Test.java:139:8:139:8 | { ... } | | Test.java:139:8:139:8 | Normal Exit | Test.java:139:8:139:8 | Exit | | Test.java:139:8:139:8 | field1 | Test.java:139:8:139:8 | ...=... | | Test.java:139:8:139:8 | field2 | Test.java:139:8:139:8 | ...=... | | Test.java:139:8:139:8 | super(...) | Test.java:139:8:139:8 | ; | -| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field1 | -| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | field2 | +| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | this.field1 | +| Test.java:139:8:139:8 | this | Test.java:139:8:139:8 | this.field2 | +| Test.java:139:8:139:8 | this.field1 | Test.java:139:8:139:8 | field1 | +| Test.java:139:8:139:8 | this.field2 | Test.java:139:8:139:8 | field2 | | Test.java:139:8:139:8 | { ... } | Test.java:139:8:139:8 | super(...) | diff --git a/java/ql/test/library-tests/pattern-switch/cfg/test.ql b/java/ql/test/library-tests/pattern-switch/cfg/test.ql index 7e0a85af822a..f858ec60eeb7 100644 --- a/java/ql/test/library-tests/pattern-switch/cfg/test.ql +++ b/java/ql/test/library-tests/pattern-switch/cfg/test.ql @@ -1,5 +1,6 @@ import java +import utils.test.AstCfg from ControlFlowNode cn where cn.getLocation().getFile().getBaseName() = ["Test.java", "Exhaustive.java"] -select cn, cn.getASuccessor() +select cn, getAnAstSuccessor(cn) diff --git a/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.expected b/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.expected index fc529feba134..6889eb8da32d 100644 --- a/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.expected +++ b/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.expected @@ -1,7 +1,8 @@ -| CloseReaderTest.java:8:14:8:28 | Exceptional Exit | CloseReaderTest.java:8:14:8:28 | Exit | +| CloseReaderTest.java:8:14:8:28 | Entry | CloseReaderTest.java:8:14:8:28 | { ... } | | CloseReaderTest.java:8:14:8:28 | Normal Exit | CloseReaderTest.java:8:14:8:28 | Exit | | CloseReaderTest.java:8:14:8:28 | super(...) | CloseReaderTest.java:8:14:8:28 | Normal Exit | | CloseReaderTest.java:8:14:8:28 | { ... } | CloseReaderTest.java:8:14:8:28 | super(...) | +| CloseReaderTest.java:9:23:9:34 | Entry | CloseReaderTest.java:10:2:24:2 | { ... } | | CloseReaderTest.java:9:23:9:34 | Exceptional Exit | CloseReaderTest.java:9:23:9:34 | Exit | | CloseReaderTest.java:9:23:9:34 | Normal Exit | CloseReaderTest.java:9:23:9:34 | Exit | | CloseReaderTest.java:10:2:24:2 | { ... } | CloseReaderTest.java:12:3:13:42 | ; | @@ -27,6 +28,7 @@ | CloseReaderTest.java:19:11:19:15 | stdin | CloseReaderTest.java:19:11:19:26 | readLine(...) | | CloseReaderTest.java:19:11:19:26 | readLine(...) | CloseReaderTest.java:19:4:19:27 | return ... | | CloseReaderTest.java:19:11:19:26 | readLine(...) | CloseReaderTest.java:20:5:20:26 | catch (...) | +| CloseReaderTest.java:20:5:20:26 | catch (...) | CloseReaderTest.java:9:23:9:34 | Exceptional Exit | | CloseReaderTest.java:20:5:20:26 | catch (...) | CloseReaderTest.java:20:24:20:25 | ex | | CloseReaderTest.java:20:24:20:25 | ex | CloseReaderTest.java:21:3:23:3 | { ... } | | CloseReaderTest.java:21:3:23:3 | { ... } | CloseReaderTest.java:22:11:22:14 | null | diff --git a/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.ql b/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.ql index 6fca436fbfdb..68c50a85c58a 100644 --- a/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.ql +++ b/java/ql/test/library-tests/successors/CloseReaderTest/TestSucc.ql @@ -1,8 +1,9 @@ import java +import utils.test.AstCfg from ControlFlowNode n, ControlFlowNode succ where - succ = n.getASuccessor() and + succ = getAnAstSuccessor(n) and n.getLocation().getFile().getExtension() = "java" and not n.getLocation().getFile().getStem() = "PopulateRuntimeException" select n, succ diff --git a/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.expected b/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.expected index 3566cc8753f2..61b12a6f5d7e 100644 --- a/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.expected +++ b/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.expected @@ -1,8 +1,8 @@ -| LoopVarReadTest.java:3:14:3:28 | Exceptional Exit | LoopVarReadTest.java:3:14:3:28 | Exit | +| LoopVarReadTest.java:3:14:3:28 | Entry | LoopVarReadTest.java:3:14:3:28 | { ... } | | LoopVarReadTest.java:3:14:3:28 | Normal Exit | LoopVarReadTest.java:3:14:3:28 | Exit | | LoopVarReadTest.java:3:14:3:28 | super(...) | LoopVarReadTest.java:3:14:3:28 | Normal Exit | | LoopVarReadTest.java:3:14:3:28 | { ... } | LoopVarReadTest.java:3:14:3:28 | super(...) | -| LoopVarReadTest.java:4:21:4:28 | Exceptional Exit | LoopVarReadTest.java:4:21:4:28 | Exit | +| LoopVarReadTest.java:4:21:4:28 | Entry | LoopVarReadTest.java:5:2:15:2 | { ... } | | LoopVarReadTest.java:4:21:4:28 | Normal Exit | LoopVarReadTest.java:4:21:4:28 | Exit | | LoopVarReadTest.java:5:2:15:2 | { ... } | LoopVarReadTest.java:6:3:6:12 | var ...; | | LoopVarReadTest.java:6:3:6:12 | var ...; | LoopVarReadTest.java:6:11:6:11 | 2 | diff --git a/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.ql b/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.ql index 6fca436fbfdb..68c50a85c58a 100644 --- a/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.ql +++ b/java/ql/test/library-tests/successors/LoopVarReadTest/TestSucc.ql @@ -1,8 +1,9 @@ import java +import utils.test.AstCfg from ControlFlowNode n, ControlFlowNode succ where - succ = n.getASuccessor() and + succ = getAnAstSuccessor(n) and n.getLocation().getFile().getExtension() = "java" and not n.getLocation().getFile().getStem() = "PopulateRuntimeException" select n, succ diff --git a/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.expected b/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.expected index 640e731147f9..19943a7ab1a1 100644 --- a/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.expected +++ b/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.expected @@ -1,7 +1,8 @@ -| SaveFileTest.java:11:14:11:25 | Exceptional Exit | SaveFileTest.java:11:14:11:25 | Exit | +| SaveFileTest.java:11:14:11:25 | Entry | SaveFileTest.java:11:14:11:25 | { ... } | | SaveFileTest.java:11:14:11:25 | Normal Exit | SaveFileTest.java:11:14:11:25 | Exit | | SaveFileTest.java:11:14:11:25 | super(...) | SaveFileTest.java:11:14:11:25 | Normal Exit | | SaveFileTest.java:11:14:11:25 | { ... } | SaveFileTest.java:11:14:11:25 | super(...) | +| SaveFileTest.java:12:14:12:21 | Entry | SaveFileTest.java:15:2:55:2 | { ... } | | SaveFileTest.java:12:14:12:21 | Exceptional Exit | SaveFileTest.java:12:14:12:21 | Exit | | SaveFileTest.java:12:14:12:21 | Normal Exit | SaveFileTest.java:12:14:12:21 | Exit | | SaveFileTest.java:15:2:55:2 | { ... } | SaveFileTest.java:17:3:17:25 | var ...; | @@ -14,8 +15,9 @@ | SaveFileTest.java:18:7:18:26 | startsWith(...) | SaveFileTest.java:24:3:24:33 | var ...; | | SaveFileTest.java:18:23:18:25 | "/" | SaveFileTest.java:18:7:18:26 | startsWith(...) | | SaveFileTest.java:19:3:21:3 | { ... } | SaveFileTest.java:20:4:20:32 | ; | +| SaveFileTest.java:20:4:20:11 | savePath | SaveFileTest.java:20:15:20:18 | path | | SaveFileTest.java:20:4:20:31 | ...=... | SaveFileTest.java:24:3:24:33 | var ...; | -| SaveFileTest.java:20:4:20:32 | ; | SaveFileTest.java:20:15:20:18 | path | +| SaveFileTest.java:20:4:20:32 | ; | SaveFileTest.java:20:4:20:11 | savePath | | SaveFileTest.java:20:15:20:18 | path | SaveFileTest.java:20:30:20:30 | 1 | | SaveFileTest.java:20:15:20:31 | substring(...) | SaveFileTest.java:20:4:20:31 | ...=... | | SaveFileTest.java:20:30:20:30 | 1 | SaveFileTest.java:20:15:20:31 | substring(...) | @@ -44,20 +46,20 @@ | SaveFileTest.java:30:22:30:25 | null | SaveFileTest.java:30:16:30:25 | bos | | SaveFileTest.java:31:3:53:3 | try ... | SaveFileTest.java:32:3:41:3 | { ... } | | SaveFileTest.java:32:3:41:3 | { ... } | SaveFileTest.java:33:4:33:40 | ; | +| SaveFileTest.java:33:4:33:6 | bos | SaveFileTest.java:33:31:33:38 | saveFile | | SaveFileTest.java:33:4:33:39 | ...=... | SaveFileTest.java:34:4:34:55 | while (...) | -| SaveFileTest.java:33:4:33:40 | ; | SaveFileTest.java:33:31:33:38 | saveFile | +| SaveFileTest.java:33:4:33:40 | ; | SaveFileTest.java:33:4:33:6 | bos | | SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) | SaveFileTest.java:33:4:33:39 | ...=... | | SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) | SaveFileTest.java:41:5:41:23 | catch (...) | -| SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) | SaveFileTest.java:45:3:53:3 | { ... } | | SaveFileTest.java:33:31:33:38 | saveFile | SaveFileTest.java:33:10:33:39 | new FileOutputStream(...) | -| SaveFileTest.java:34:4:34:55 | while (...) | SaveFileTest.java:34:24:34:25 | is | +| SaveFileTest.java:34:4:34:55 | while (...) | SaveFileTest.java:34:12:34:20 | bytesRead | | SaveFileTest.java:34:11:34:54 | ... != ... | SaveFileTest.java:35:4:37:4 | { ... } | | SaveFileTest.java:34:11:34:54 | ... != ... | SaveFileTest.java:39:4:40:41 | ; | +| SaveFileTest.java:34:12:34:20 | bytesRead | SaveFileTest.java:34:24:34:25 | is | | SaveFileTest.java:34:12:34:47 | ...=... | SaveFileTest.java:34:54:34:54 | 1 | | SaveFileTest.java:34:24:34:25 | is | SaveFileTest.java:34:32:34:37 | buffer | | SaveFileTest.java:34:24:34:47 | read(...) | SaveFileTest.java:34:12:34:47 | ...=... | | SaveFileTest.java:34:24:34:47 | read(...) | SaveFileTest.java:41:5:41:23 | catch (...) | -| SaveFileTest.java:34:24:34:47 | read(...) | SaveFileTest.java:45:3:53:3 | { ... } | | SaveFileTest.java:34:32:34:37 | buffer | SaveFileTest.java:34:40:34:40 | 0 | | SaveFileTest.java:34:40:34:40 | 0 | SaveFileTest.java:34:43:34:46 | 8192 | | SaveFileTest.java:34:43:34:46 | 8192 | SaveFileTest.java:34:24:34:47 | read(...) | @@ -65,9 +67,8 @@ | SaveFileTest.java:34:54:34:54 | 1 | SaveFileTest.java:34:53:34:54 | -... | | SaveFileTest.java:35:4:37:4 | { ... } | SaveFileTest.java:36:5:36:36 | ; | | SaveFileTest.java:36:5:36:7 | bos | SaveFileTest.java:36:15:36:20 | buffer | -| SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:34:24:34:25 | is | +| SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:34:12:34:20 | bytesRead | | SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:41:5:41:23 | catch (...) | -| SaveFileTest.java:36:5:36:35 | write(...) | SaveFileTest.java:45:3:53:3 | { ... } | | SaveFileTest.java:36:5:36:36 | ; | SaveFileTest.java:36:5:36:7 | bos | | SaveFileTest.java:36:15:36:20 | buffer | SaveFileTest.java:36:23:36:23 | 0 | | SaveFileTest.java:36:23:36:23 | 0 | SaveFileTest.java:36:26:36:34 | bytesRead | @@ -82,7 +83,6 @@ | SaveFileTest.java:40:8:40:15 | saveFile | SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) | | SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) | SaveFileTest.java:39:23:40:33 | ... + ... | | SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) | SaveFileTest.java:41:5:41:23 | catch (...) | -| SaveFileTest.java:40:8:40:33 | getAbsolutePath(...) | SaveFileTest.java:45:3:53:3 | { ... } | | SaveFileTest.java:40:37:40:39 | "]" | SaveFileTest.java:39:23:40:39 | ... + ... | | SaveFileTest.java:41:5:41:23 | catch (...) | SaveFileTest.java:41:22:41:22 | e | | SaveFileTest.java:41:22:41:22 | e | SaveFileTest.java:42:3:44:3 | { ... } | diff --git a/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.ql b/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.ql index 6fca436fbfdb..68c50a85c58a 100644 --- a/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.ql +++ b/java/ql/test/library-tests/successors/SaveFileTest/TestSucc.ql @@ -1,8 +1,9 @@ import java +import utils.test.AstCfg from ControlFlowNode n, ControlFlowNode succ where - succ = n.getASuccessor() and + succ = getAnAstSuccessor(n) and n.getLocation().getFile().getExtension() = "java" and not n.getLocation().getFile().getStem() = "PopulateRuntimeException" select n, succ diff --git a/java/ql/test/library-tests/successors/SchackTest/TestSucc.expected b/java/ql/test/library-tests/successors/SchackTest/TestSucc.expected index a23f6a2bc54e..19fef193edba 100644 --- a/java/ql/test/library-tests/successors/SchackTest/TestSucc.expected +++ b/java/ql/test/library-tests/successors/SchackTest/TestSucc.expected @@ -1,15 +1,16 @@ -| SchackTest.java:1:14:1:23 | Exceptional Exit | SchackTest.java:1:14:1:23 | Exit | +| SchackTest.java:1:14:1:23 | Entry | SchackTest.java:1:14:1:23 | { ... } | | SchackTest.java:1:14:1:23 | Normal Exit | SchackTest.java:1:14:1:23 | Exit | | SchackTest.java:1:14:1:23 | super(...) | SchackTest.java:1:14:1:23 | Normal Exit | | SchackTest.java:1:14:1:23 | { ... } | SchackTest.java:1:14:1:23 | super(...) | -| SchackTest.java:2:8:2:10 | Exceptional Exit | SchackTest.java:2:8:2:10 | Exit | +| SchackTest.java:2:8:2:10 | Entry | SchackTest.java:2:8:2:10 | { ... } | | SchackTest.java:2:8:2:10 | Normal Exit | SchackTest.java:2:8:2:10 | Exit | | SchackTest.java:2:8:2:10 | super(...) | SchackTest.java:2:8:2:10 | Normal Exit | | SchackTest.java:2:8:2:10 | { ... } | SchackTest.java:2:8:2:10 | super(...) | -| SchackTest.java:3:8:3:10 | Exceptional Exit | SchackTest.java:3:8:3:10 | Exit | +| SchackTest.java:3:8:3:10 | Entry | SchackTest.java:3:8:3:10 | { ... } | | SchackTest.java:3:8:3:10 | Normal Exit | SchackTest.java:3:8:3:10 | Exit | | SchackTest.java:3:8:3:10 | super(...) | SchackTest.java:3:8:3:10 | Normal Exit | | SchackTest.java:3:8:3:10 | { ... } | SchackTest.java:3:8:3:10 | super(...) | +| SchackTest.java:5:7:5:9 | Entry | SchackTest.java:5:18:24:2 | { ... } | | SchackTest.java:5:7:5:9 | Exceptional Exit | SchackTest.java:5:7:5:9 | Exit | | SchackTest.java:5:7:5:9 | Normal Exit | SchackTest.java:5:7:5:9 | Exit | | SchackTest.java:5:18:24:2 | { ... } | SchackTest.java:6:3:23:3 | try ... | @@ -36,7 +37,6 @@ | SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:14:6:14:42 | ; | | SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:16:4:16:41 | ; | | SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:17:5:17:17 | catch (...) | -| SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:19:5:19:17 | catch (...) | | SchackTest.java:13:9:13:13 | bar(...) | SchackTest.java:21:13:23:3 | { ... } | | SchackTest.java:14:6:14:15 | System.out | SchackTest.java:14:25:14:40 | "true successor" | | SchackTest.java:14:6:14:41 | println(...) | SchackTest.java:16:4:16:41 | ; | @@ -45,10 +45,12 @@ | SchackTest.java:14:6:14:42 | ; | SchackTest.java:14:6:14:15 | System.out | | SchackTest.java:14:25:14:40 | "true successor" | SchackTest.java:14:6:14:41 | println(...) | | SchackTest.java:16:4:16:13 | System.out | SchackTest.java:16:23:16:39 | "false successor" | +| SchackTest.java:16:4:16:40 | println(...) | SchackTest.java:17:5:17:17 | catch (...) | | SchackTest.java:16:4:16:40 | println(...) | SchackTest.java:21:13:23:3 | { ... } | | SchackTest.java:16:4:16:41 | ; | SchackTest.java:16:4:16:13 | System.out | | SchackTest.java:16:23:16:39 | "false successor" | SchackTest.java:16:4:16:40 | println(...) | | SchackTest.java:17:5:17:17 | catch (...) | SchackTest.java:17:16:17:16 | e | +| SchackTest.java:17:5:17:17 | catch (...) | SchackTest.java:19:5:19:17 | catch (...) | | SchackTest.java:17:16:17:16 | e | SchackTest.java:17:19:19:3 | { ... } | | SchackTest.java:17:19:19:3 | { ... } | SchackTest.java:18:4:18:41 | ; | | SchackTest.java:18:4:18:13 | System.out | SchackTest.java:18:23:18:39 | "false successor" | @@ -56,6 +58,7 @@ | SchackTest.java:18:4:18:41 | ; | SchackTest.java:18:4:18:13 | System.out | | SchackTest.java:18:23:18:39 | "false successor" | SchackTest.java:18:4:18:40 | println(...) | | SchackTest.java:19:5:19:17 | catch (...) | SchackTest.java:19:16:19:16 | e | +| SchackTest.java:19:5:19:17 | catch (...) | SchackTest.java:21:13:23:3 | { ... } | | SchackTest.java:19:16:19:16 | e | SchackTest.java:19:19:21:3 | { ... } | | SchackTest.java:19:19:21:3 | { ... } | SchackTest.java:20:4:20:74 | ; | | SchackTest.java:20:4:20:13 | System.out | SchackTest.java:20:23:20:72 | "successor (but neither true nor false successor)" | @@ -68,6 +71,7 @@ | SchackTest.java:22:4:22:40 | println(...) | SchackTest.java:5:7:5:9 | Normal Exit | | SchackTest.java:22:4:22:41 | ; | SchackTest.java:22:4:22:13 | System.out | | SchackTest.java:22:23:22:39 | "false successor" | SchackTest.java:22:4:22:40 | println(...) | +| SchackTest.java:26:18:26:20 | Entry | SchackTest.java:26:35:30:2 | { ... } | | SchackTest.java:26:18:26:20 | Exceptional Exit | SchackTest.java:26:18:26:20 | Exit | | SchackTest.java:26:18:26:20 | Normal Exit | SchackTest.java:26:18:26:20 | Exit | | SchackTest.java:26:35:30:2 | { ... } | SchackTest.java:27:3:27:25 | if (...) | diff --git a/java/ql/test/library-tests/successors/SchackTest/TestSucc.ql b/java/ql/test/library-tests/successors/SchackTest/TestSucc.ql index 6fca436fbfdb..68c50a85c58a 100644 --- a/java/ql/test/library-tests/successors/SchackTest/TestSucc.ql +++ b/java/ql/test/library-tests/successors/SchackTest/TestSucc.ql @@ -1,8 +1,9 @@ import java +import utils.test.AstCfg from ControlFlowNode n, ControlFlowNode succ where - succ = n.getASuccessor() and + succ = getAnAstSuccessor(n) and n.getLocation().getFile().getExtension() = "java" and not n.getLocation().getFile().getStem() = "PopulateRuntimeException" select n, succ diff --git a/java/ql/test/library-tests/successors/TestBreak/TestSucc.expected b/java/ql/test/library-tests/successors/TestBreak/TestSucc.expected index 3fc266a0928c..ad033101fd6f 100644 --- a/java/ql/test/library-tests/successors/TestBreak/TestSucc.expected +++ b/java/ql/test/library-tests/successors/TestBreak/TestSucc.expected @@ -1,8 +1,8 @@ -| TestBreak.java:3:14:3:22 | Exceptional Exit | TestBreak.java:3:14:3:22 | Exit | +| TestBreak.java:3:14:3:22 | Entry | TestBreak.java:3:14:3:22 | { ... } | | TestBreak.java:3:14:3:22 | Normal Exit | TestBreak.java:3:14:3:22 | Exit | | TestBreak.java:3:14:3:22 | super(...) | TestBreak.java:3:14:3:22 | Normal Exit | | TestBreak.java:3:14:3:22 | { ... } | TestBreak.java:3:14:3:22 | super(...) | -| TestBreak.java:4:14:4:14 | Exceptional Exit | TestBreak.java:4:14:4:14 | Exit | +| TestBreak.java:4:14:4:14 | Entry | TestBreak.java:5:2:85:2 | { ... } | | TestBreak.java:4:14:4:14 | Normal Exit | TestBreak.java:4:14:4:14 | Exit | | TestBreak.java:5:2:85:2 | { ... } | TestBreak.java:7:3:8:11 |