From 7430fde8c63ca988c9e646545538d6a69d1d35c6 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 14 Aug 2024 10:53:25 +0100 Subject: [PATCH 1/8] C++: Avoid outputting a cartesian product in AliasedSSA's getOverlap. --- .../ir/implementation/aliased_ssa/internal/AliasedSSA.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index 4db00eee6084..e36442575610 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -688,6 +688,11 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { ( // EntireAllocationMemoryLocation exactly overlaps itself. use instanceof EntireAllocationMemoryLocation and + ( + def.getAnAllocation() = use.getAnAllocation() or + not exists(def.getAnAllocation()) or + not exists(def.getAnAllocation()) + ) and result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and From 0e766aa99b41e065096864a5b8259ee87bd24ceb Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 16 Aug 2024 15:17:45 +0100 Subject: [PATCH 2/8] C++: Remove redundant lines. --- .../ir/implementation/aliased_ssa/internal/AliasedSSA.qll | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index e36442575610..fa5eab19c2d5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -688,11 +688,7 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { ( // EntireAllocationMemoryLocation exactly overlaps itself. use instanceof EntireAllocationMemoryLocation and - ( - def.getAnAllocation() = use.getAnAllocation() or - not exists(def.getAnAllocation()) or - not exists(def.getAnAllocation()) - ) and + def.getAnAllocation() = use.getAnAllocation() and result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and From 5bd58f044e01ad12d22cd82341bc8183f0db70ac Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:40:30 +0100 Subject: [PATCH 3/8] C++: Add a direct test of getOverlap and a test case for it. --- .../aliased_ssa/internal/AliasedSSA.qll | 2 +- .../ir/ssa/aliased_ssa_ir.expected | 62 ++ .../ir/ssa/aliased_ssa_ir_unsound.expected | 62 ++ .../ir/ssa/aliased_ssa_overlap.expected | 542 ++++++++++++++++++ .../ir/ssa/aliased_ssa_overlap.ql | 6 + cpp/ql/test/library-tests/ir/ssa/ssa.cpp | 14 +- .../ir/ssa/unaliased_ssa_ir.expected | 54 ++ .../ir/ssa/unaliased_ssa_ir_unsound.expected | 54 ++ 8 files changed, 793 insertions(+), 3 deletions(-) create mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected create mode 100644 cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index fa5eab19c2d5..1ee0bfbac8c5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -688,7 +688,7 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { ( // EntireAllocationMemoryLocation exactly overlaps itself. use instanceof EntireAllocationMemoryLocation and - def.getAnAllocation() = use.getAnAllocation() and + // def.getAnAllocation() = use.getAnAllocation() and result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected index aad6b670188d..4a7e70ae106c 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir.expected @@ -2200,3 +2200,65 @@ ssa.cpp: # 439| r439_15(glval) = VariableAddress[#temp439:13] : # 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14 #-----| Goto -> Block 1 + +# 442| void NonEscapingParams(void*, void*) +# 442| Block 0 +# 442| v442_1(void) = EnterFunction : +# 442| m442_2(unknown) = AliasedDefinition : +# 442| m442_3(unknown) = InitializeNonLocal : +# 442| m442_4(unknown) = Chi : total:m442_2, partial:m442_3 +# 442| r442_5(glval) = VariableAddress[a] : +# 442| m442_6(void *) = InitializeParameter[a] : &:r442_5 +# 442| r442_7(void *) = Load[a] : &:r442_5, m442_6 +# 442| m442_8(unknown) = InitializeIndirection[a] : &:r442_7 +# 442| r442_9(glval) = VariableAddress[b] : +# 442| m442_10(void *) = InitializeParameter[b] : &:r442_9 +# 442| r442_11(void *) = Load[b] : &:r442_9, m442_10 +# 442| m442_12(unknown) = InitializeIndirection[b] : &:r442_11 +# 444| v444_1(void) = NoOp : +# 442| v442_13(void) = ReturnIndirection[a] : &:r442_7, m442_8 +# 442| v442_14(void) = ReturnIndirection[b] : &:r442_11, m442_12 +# 442| v442_15(void) = ReturnVoid : +# 442| v442_16(void) = AliasedUse : m442_3 +# 442| v442_17(void) = ExitFunction : + +# 446| void EscapingParams(void*, void*) +# 446| Block 0 +# 446| v446_1(void) = EnterFunction : +# 446| m446_2(unknown) = AliasedDefinition : +# 446| m446_3(unknown) = InitializeNonLocal : +# 446| m446_4(unknown) = Chi : total:m446_2, partial:m446_3 +# 446| r446_5(glval) = VariableAddress[a] : +# 446| m446_6(void *) = InitializeParameter[a] : &:r446_5 +# 446| r446_7(void *) = Load[a] : &:r446_5, m446_6 +# 446| m446_8(unknown) = InitializeIndirection[a] : &:r446_7 +# 446| m446_9(unknown) = Chi : total:m446_4, partial:m446_8 +# 446| r446_10(glval) = VariableAddress[b] : +# 446| m446_11(void *) = InitializeParameter[b] : &:r446_10 +# 446| r446_12(void *) = Load[b] : &:r446_10, m446_11 +# 446| m446_13(unknown) = InitializeIndirection[b] : &:r446_12 +# 446| m446_14(unknown) = Chi : total:m446_9, partial:m446_13 +# 448| r448_1(glval) = FunctionAddress[Escape] : +# 448| r448_2(glval) = VariableAddress[a] : +# 448| r448_3(void *) = Load[a] : &:r448_2, m446_6 +# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3 +# 448| m448_5(unknown) = ^CallSideEffect : ~m446_14 +# 448| m448_6(unknown) = Chi : total:m446_14, partial:m448_5 +# 448| v448_7(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m448_6 +# 448| m448_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3 +# 448| m448_9(unknown) = Chi : total:m448_6, partial:m448_8 +# 449| r449_1(glval) = FunctionAddress[Escape] : +# 449| r449_2(glval) = VariableAddress[b] : +# 449| r449_3(void *) = Load[b] : &:r449_2, m446_11 +# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3 +# 449| m449_5(unknown) = ^CallSideEffect : ~m448_9 +# 449| m449_6(unknown) = Chi : total:m448_9, partial:m449_5 +# 449| v449_7(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m449_6 +# 449| m449_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3 +# 449| m449_9(unknown) = Chi : total:m449_6, partial:m449_8 +# 450| v450_1(void) = NoOp : +# 446| v446_15(void) = ReturnIndirection[a] : &:r446_7, ~m449_9 +# 446| v446_16(void) = ReturnIndirection[b] : &:r446_12, ~m449_9 +# 446| v446_17(void) = ReturnVoid : +# 446| v446_18(void) = AliasedUse : ~m449_9 +# 446| v446_19(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected index aad6b670188d..4a7e70ae106c 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_ir_unsound.expected @@ -2200,3 +2200,65 @@ ssa.cpp: # 439| r439_15(glval) = VariableAddress[#temp439:13] : # 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14 #-----| Goto -> Block 1 + +# 442| void NonEscapingParams(void*, void*) +# 442| Block 0 +# 442| v442_1(void) = EnterFunction : +# 442| m442_2(unknown) = AliasedDefinition : +# 442| m442_3(unknown) = InitializeNonLocal : +# 442| m442_4(unknown) = Chi : total:m442_2, partial:m442_3 +# 442| r442_5(glval) = VariableAddress[a] : +# 442| m442_6(void *) = InitializeParameter[a] : &:r442_5 +# 442| r442_7(void *) = Load[a] : &:r442_5, m442_6 +# 442| m442_8(unknown) = InitializeIndirection[a] : &:r442_7 +# 442| r442_9(glval) = VariableAddress[b] : +# 442| m442_10(void *) = InitializeParameter[b] : &:r442_9 +# 442| r442_11(void *) = Load[b] : &:r442_9, m442_10 +# 442| m442_12(unknown) = InitializeIndirection[b] : &:r442_11 +# 444| v444_1(void) = NoOp : +# 442| v442_13(void) = ReturnIndirection[a] : &:r442_7, m442_8 +# 442| v442_14(void) = ReturnIndirection[b] : &:r442_11, m442_12 +# 442| v442_15(void) = ReturnVoid : +# 442| v442_16(void) = AliasedUse : m442_3 +# 442| v442_17(void) = ExitFunction : + +# 446| void EscapingParams(void*, void*) +# 446| Block 0 +# 446| v446_1(void) = EnterFunction : +# 446| m446_2(unknown) = AliasedDefinition : +# 446| m446_3(unknown) = InitializeNonLocal : +# 446| m446_4(unknown) = Chi : total:m446_2, partial:m446_3 +# 446| r446_5(glval) = VariableAddress[a] : +# 446| m446_6(void *) = InitializeParameter[a] : &:r446_5 +# 446| r446_7(void *) = Load[a] : &:r446_5, m446_6 +# 446| m446_8(unknown) = InitializeIndirection[a] : &:r446_7 +# 446| m446_9(unknown) = Chi : total:m446_4, partial:m446_8 +# 446| r446_10(glval) = VariableAddress[b] : +# 446| m446_11(void *) = InitializeParameter[b] : &:r446_10 +# 446| r446_12(void *) = Load[b] : &:r446_10, m446_11 +# 446| m446_13(unknown) = InitializeIndirection[b] : &:r446_12 +# 446| m446_14(unknown) = Chi : total:m446_9, partial:m446_13 +# 448| r448_1(glval) = FunctionAddress[Escape] : +# 448| r448_2(glval) = VariableAddress[a] : +# 448| r448_3(void *) = Load[a] : &:r448_2, m446_6 +# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3 +# 448| m448_5(unknown) = ^CallSideEffect : ~m446_14 +# 448| m448_6(unknown) = Chi : total:m446_14, partial:m448_5 +# 448| v448_7(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m448_6 +# 448| m448_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3 +# 448| m448_9(unknown) = Chi : total:m448_6, partial:m448_8 +# 449| r449_1(glval) = FunctionAddress[Escape] : +# 449| r449_2(glval) = VariableAddress[b] : +# 449| r449_3(void *) = Load[b] : &:r449_2, m446_11 +# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3 +# 449| m449_5(unknown) = ^CallSideEffect : ~m448_9 +# 449| m449_6(unknown) = Chi : total:m448_9, partial:m449_5 +# 449| v449_7(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m449_6 +# 449| m449_8(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3 +# 449| m449_9(unknown) = Chi : total:m449_6, partial:m449_8 +# 450| v450_1(void) = NoOp : +# 446| v446_15(void) = ReturnIndirection[a] : &:r446_7, ~m449_9 +# 446| v446_16(void) = ReturnIndirection[b] : &:r446_12, ~m449_9 +# 446| v446_17(void) = ReturnVoid : +# 446| v446_18(void) = AliasedUse : ~m449_9 +# 446| v446_19(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected new file mode 100644 index 000000000000..638ae916adcf --- /dev/null +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected @@ -0,0 +1,542 @@ +| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo | MustExactlyOverlap | +| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo[0..4) | MustTotallyOverlap | +| ssa.c:3:14:3:16 | foo | ssa.c:3:14:3:16 | foo[4..8) | MustTotallyOverlap | +| ssa.c:3:14:3:16 | foo[0..4) | ssa.c:3:14:3:16 | foo | MayPartiallyOverlap | +| ssa.c:3:14:3:16 | foo[0..4) | ssa.c:3:14:3:16 | foo[0..4) | MustExactlyOverlap | +| ssa.c:3:14:3:16 | foo[4..8) | ssa.c:3:14:3:16 | foo | MayPartiallyOverlap | +| ssa.c:3:14:3:16 | foo[4..8) | ssa.c:3:14:3:16 | foo[4..8) | MustExactlyOverlap | +| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustExactlyOverlap | +| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustTotallyOverlap | +| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustTotallyOverlap | +| ssa.c:7:7:7:7 | x | ssa.c:7:7:7:7 | x | MustExactlyOverlap | +| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo | MustExactlyOverlap | +| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo[0..4) | MustTotallyOverlap | +| ssa.c:12:15:12:17 | foo | ssa.c:12:15:12:17 | foo[4..8) | MustTotallyOverlap | +| ssa.c:12:15:12:17 | foo[0..4) | ssa.c:12:15:12:17 | foo | MayPartiallyOverlap | +| ssa.c:12:15:12:17 | foo[0..4) | ssa.c:12:15:12:17 | foo[0..4) | MustExactlyOverlap | +| ssa.c:12:15:12:17 | foo[4..8) | ssa.c:12:15:12:17 | foo | MayPartiallyOverlap | +| ssa.c:12:15:12:17 | foo[4..8) | ssa.c:12:15:12:17 | foo[4..8) | MustExactlyOverlap | +| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped | MustExactlyOverlap | +| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped[0..4) | MustTotallyOverlap | +| ssa.c:14:15:14:25 | foo_swapped | ssa.c:14:15:14:25 | foo_swapped[4..8) | MustTotallyOverlap | +| ssa.c:14:15:14:25 | foo_swapped[0..4) | ssa.c:14:15:14:25 | foo_swapped | MayPartiallyOverlap | +| ssa.c:14:15:14:25 | foo_swapped[0..4) | ssa.c:14:15:14:25 | foo_swapped[0..4) | MustExactlyOverlap | +| ssa.c:14:15:14:25 | foo_swapped[4..8) | ssa.c:14:15:14:25 | foo_swapped | MayPartiallyOverlap | +| ssa.c:14:15:14:25 | foo_swapped[4..8) | ssa.c:14:15:14:25 | foo_swapped[4..8) | MustExactlyOverlap | +| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x | MustExactlyOverlap | +| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x[0..4) | MustTotallyOverlap | +| ssa.c:18:7:18:7 | x | ssa.c:18:7:18:7 | x[4..8) | MustTotallyOverlap | +| ssa.c:18:7:18:7 | x[0..4) | ssa.c:18:7:18:7 | x | MayPartiallyOverlap | +| ssa.c:18:7:18:7 | x[0..4) | ssa.c:18:7:18:7 | x[0..4) | MustExactlyOverlap | +| ssa.c:18:7:18:7 | x[4..8) | ssa.c:18:7:18:7 | x | MayPartiallyOverlap | +| ssa.c:18:7:18:7 | x[4..8) | ssa.c:18:7:18:7 | x[4..8) | MustExactlyOverlap | +| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y | MustExactlyOverlap | +| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y[0..4) | MustTotallyOverlap | +| ssa.c:20:7:20:7 | y | ssa.c:20:7:20:7 | y[4..8) | MustTotallyOverlap | +| ssa.c:20:7:20:7 | y[0..4) | ssa.c:20:7:20:7 | y | MayPartiallyOverlap | +| ssa.c:20:7:20:7 | y[0..4) | ssa.c:20:7:20:7 | y[0..4) | MustExactlyOverlap | +| ssa.c:20:7:20:7 | y[4..8) | ssa.c:20:7:20:7 | y | MayPartiallyOverlap | +| ssa.c:20:7:20:7 | y[4..8) | ssa.c:20:7:20:7 | y[4..8) | MustExactlyOverlap | +| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f | MustExactlyOverlap | +| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[0..4) | MustTotallyOverlap | +| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[4..8) | MustTotallyOverlap | +| ssa.c:29:28:29:28 | f | ssa.c:29:28:29:28 | f[8..12) | MustTotallyOverlap | +| ssa.c:29:28:29:28 | f[0..4) | ssa.c:29:28:29:28 | f | MayPartiallyOverlap | +| ssa.c:29:28:29:28 | f[0..4) | ssa.c:29:28:29:28 | f[0..4) | MustExactlyOverlap | +| ssa.c:29:28:29:28 | f[4..8) | ssa.c:29:28:29:28 | f | MayPartiallyOverlap | +| ssa.c:29:28:29:28 | f[4..8) | ssa.c:29:28:29:28 | f[4..8) | MustExactlyOverlap | +| ssa.c:29:28:29:28 | f[8..12) | ssa.c:29:28:29:28 | f | MayPartiallyOverlap | +| ssa.c:29:28:29:28 | f[8..12) | ssa.c:29:28:29:28 | f[8..12) | MustExactlyOverlap | +| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p | MustExactlyOverlap | +| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[0..4) | MustTotallyOverlap | +| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[4..8) | MustTotallyOverlap | +| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | ?*p | MustTotallyOverlap | +| ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p[0..4) | MustExactlyOverlap | +| ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p[4..8) | MustExactlyOverlap | +| ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[0..4) | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[4..8) | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | +| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p | MustExactlyOverlap | +| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p[?..?) | MustTotallyOverlap | +| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | ?*p | MustTotallyOverlap | +| ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | +| ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | +| ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | +| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | +| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | +| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | +| ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | a | MayPartiallyOverlap | +| ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | ?a[0..?) | MustTotallyOverlap | +| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | a | MustExactlyOverlap | +| ssa.cpp:95:38:95:38 | a | ssa.cpp:95:38:95:38 | a[0..?) | MustTotallyOverlap | +| ssa.cpp:95:38:95:38 | a[0..?) | ssa.cpp:95:38:95:38 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:95:38:95:38 | a[0..?) | ssa.cpp:95:38:95:38 | a | MayPartiallyOverlap | +| ssa.cpp:95:38:95:38 | a[0..?) | ssa.cpp:95:38:95:38 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a | MustExactlyOverlap | +| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:100:31:100:31 | a | ssa.cpp:100:31:100:31 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:100:31:100:31 | a[0..4) | ssa.cpp:100:31:100:31 | a | MayPartiallyOverlap | +| ssa.cpp:100:31:100:31 | a[0..4) | ssa.cpp:100:31:100:31 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:100:31:100:31 | a[4..8) | ssa.cpp:100:31:100:31 | a | MayPartiallyOverlap | +| ssa.cpp:100:31:100:31 | a[4..8) | ssa.cpp:100:31:100:31 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a[0..4) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | ?a[0..?) | ssa.cpp:105:38:105:38 | a[4..8) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | ?a[0..?) | MustTotallyOverlap | +| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a | MustExactlyOverlap | +| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[0..?) | MustTotallyOverlap | +| ssa.cpp:105:38:105:38 | a | ssa.cpp:105:38:105:38 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:105:38:105:38 | a[0..4) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a[0..4) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[0..?) | ssa.cpp:105:38:105:38 | a[4..8) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | a | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:105:38:105:38 | a[4..8) | ssa.cpp:105:38:105:38 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a | MustExactlyOverlap | +| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:112:9:112:9 | a | ssa.cpp:112:9:112:9 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:112:9:112:9 | a[0..4) | ssa.cpp:112:9:112:9 | a | MayPartiallyOverlap | +| ssa.cpp:112:9:112:9 | a[0..4) | ssa.cpp:112:9:112:9 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:112:9:112:9 | a[4..8) | ssa.cpp:112:9:112:9 | a | MayPartiallyOverlap | +| ssa.cpp:112:9:112:9 | a[4..8) | ssa.cpp:112:9:112:9 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a[0..4) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | ?a[0..?) | ssa.cpp:117:9:117:9 | a[4..8) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | ?a[0..?) | MustTotallyOverlap | +| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a | MustExactlyOverlap | +| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[0..?) | MustTotallyOverlap | +| ssa.cpp:117:9:117:9 | a | ssa.cpp:117:9:117:9 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:117:9:117:9 | a[0..4) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a[0..4) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[0..?) | ssa.cpp:117:9:117:9 | a[4..8) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | ?a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | a | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | a[0..?) | MayPartiallyOverlap | +| ssa.cpp:117:9:117:9 | a[4..8) | ssa.cpp:117:9:117:9 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a | MustExactlyOverlap | +| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:123:9:123:9 | a | ssa.cpp:123:9:123:9 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:123:9:123:9 | a[0..4) | ssa.cpp:123:9:123:9 | a | MayPartiallyOverlap | +| ssa.cpp:123:9:123:9 | a[0..4) | ssa.cpp:123:9:123:9 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:123:9:123:9 | a[4..8) | ssa.cpp:123:9:123:9 | a | MayPartiallyOverlap | +| ssa.cpp:123:9:123:9 | a[4..8) | ssa.cpp:123:9:123:9 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a | MustExactlyOverlap | +| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:135:9:135:9 | a | ssa.cpp:135:9:135:9 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:135:9:135:9 | a[0..4) | ssa.cpp:135:9:135:9 | a | MayPartiallyOverlap | +| ssa.cpp:135:9:135:9 | a[0..4) | ssa.cpp:135:9:135:9 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:135:9:135:9 | a[4..8) | ssa.cpp:135:9:135:9 | a | MayPartiallyOverlap | +| ssa.cpp:135:9:135:9 | a[4..8) | ssa.cpp:135:9:135:9 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a | MustExactlyOverlap | +| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:146:9:146:9 | a | ssa.cpp:146:9:146:9 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:146:9:146:9 | a[0..4) | ssa.cpp:146:9:146:9 | a | MayPartiallyOverlap | +| ssa.cpp:146:9:146:9 | a[0..4) | ssa.cpp:146:9:146:9 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:146:9:146:9 | a[4..8) | ssa.cpp:146:9:146:9 | a | MayPartiallyOverlap | +| ssa.cpp:146:9:146:9 | a[4..8) | ssa.cpp:146:9:146:9 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a | MustExactlyOverlap | +| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[0..8) | MustTotallyOverlap | +| ssa.cpp:157:8:157:8 | a | ssa.cpp:157:8:157:8 | a[8..16) | MustTotallyOverlap | +| ssa.cpp:157:8:157:8 | a[0..4) | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap | +| ssa.cpp:157:8:157:8 | a[0..4) | ssa.cpp:157:8:157:8 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:157:8:157:8 | a[0..4) | ssa.cpp:157:8:157:8 | a[0..8) | MayPartiallyOverlap | +| ssa.cpp:157:8:157:8 | a[0..8) | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap | +| ssa.cpp:157:8:157:8 | a[0..8) | ssa.cpp:157:8:157:8 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:157:8:157:8 | a[0..8) | ssa.cpp:157:8:157:8 | a[0..8) | MustExactlyOverlap | +| ssa.cpp:157:8:157:8 | a[8..16) | ssa.cpp:157:8:157:8 | a | MayPartiallyOverlap | +| ssa.cpp:157:8:157:8 | a[8..16) | ssa.cpp:157:8:157:8 | a[8..16) | MustExactlyOverlap | +| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustExactlyOverlap | +| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustTotallyOverlap | +| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustTotallyOverlap | +| ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustExactlyOverlap | +| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p | MustExactlyOverlap | +| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p[0..4) | MustTotallyOverlap | +| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | ?*p | MustTotallyOverlap | +| ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | +| ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p[0..4) | MustExactlyOverlap | +| ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | +| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | +| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p[0..4) | MayPartiallyOverlap | +| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | +| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | +| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | +| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | +| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | +| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | +| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | +| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | +| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | +| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | +| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | +| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | +| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | +| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | +| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | +| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | +| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | +| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c | MustExactlyOverlap | +| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c[0..4) | MustTotallyOverlap | +| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | ?*c | MustTotallyOverlap | +| ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | +| ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c[0..4) | MustExactlyOverlap | +| ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | +| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | +| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c[0..4) | MayPartiallyOverlap | +| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | +| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d | MustExactlyOverlap | +| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d[0..4) | MustTotallyOverlap | +| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | ?*d | MustTotallyOverlap | +| ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | +| ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d[0..4) | MustExactlyOverlap | +| ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | +| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | +| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d[0..4) | MayPartiallyOverlap | +| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | +| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1 | MustExactlyOverlap | +| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MustTotallyOverlap | +| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | ?*str1 | MustTotallyOverlap | +| ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | +| ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | +| ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | +| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | +| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | +| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | +| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2 | MustExactlyOverlap | +| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MustTotallyOverlap | +| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | ?*str2 | MustTotallyOverlap | +| ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | +| ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | +| ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | +| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | +| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | +| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | +| ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x | MustExactlyOverlap | +| ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x[0..?) | MustTotallyOverlap | +| ssa.cpp:207:27:207:27 | x[0..?) | ssa.cpp:207:27:207:27 | x | MayPartiallyOverlap | +| ssa.cpp:207:27:207:27 | x[0..?) | ssa.cpp:207:27:207:27 | x[0..?) | MayPartiallyOverlap | +| ssa.cpp:208:7:208:7 | y | ssa.cpp:208:7:208:7 | y | MustExactlyOverlap | +| ssa.cpp:208:7:208:7 | y | ssa.cpp:208:7:208:7 | y[0..?) | MustTotallyOverlap | +| ssa.cpp:208:7:208:7 | y[0..?) | ssa.cpp:208:7:208:7 | y | MayPartiallyOverlap | +| ssa.cpp:208:7:208:7 | y[0..?) | ssa.cpp:208:7:208:7 | y[0..?) | MayPartiallyOverlap | +| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustExactlyOverlap | +| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustTotallyOverlap | +| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustTotallyOverlap | +| ssa.cpp:218:10:218:10 | c | ssa.cpp:218:10:218:10 | c | MustExactlyOverlap | +| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d | MustExactlyOverlap | +| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d[0..1) | MustTotallyOverlap | +| ssa.cpp:219:10:219:10 | d | ssa.cpp:219:10:219:10 | d[1..2) | MustTotallyOverlap | +| ssa.cpp:219:10:219:10 | d[0..1) | ssa.cpp:219:10:219:10 | d | MayPartiallyOverlap | +| ssa.cpp:219:10:219:10 | d[0..1) | ssa.cpp:219:10:219:10 | d[0..1) | MustExactlyOverlap | +| ssa.cpp:219:10:219:10 | d[1..2) | ssa.cpp:219:10:219:10 | d | MayPartiallyOverlap | +| ssa.cpp:219:10:219:10 | d[1..2) | ssa.cpp:219:10:219:10 | d[1..2) | MustExactlyOverlap | +| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e | MustExactlyOverlap | +| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e[0..1) | MustTotallyOverlap | +| ssa.cpp:220:10:220:10 | e | ssa.cpp:220:10:220:10 | e[1..2) | MustTotallyOverlap | +| ssa.cpp:220:10:220:10 | e[0..1) | ssa.cpp:220:10:220:10 | e | MayPartiallyOverlap | +| ssa.cpp:220:10:220:10 | e[0..1) | ssa.cpp:220:10:220:10 | e[0..1) | MustExactlyOverlap | +| ssa.cpp:220:10:220:10 | e[1..2) | ssa.cpp:220:10:220:10 | e | MayPartiallyOverlap | +| ssa.cpp:220:10:220:10 | e[1..2) | ssa.cpp:220:10:220:10 | e[1..2) | MustExactlyOverlap | +| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f | MustExactlyOverlap | +| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f[0..1) | MustTotallyOverlap | +| ssa.cpp:221:10:221:10 | f | ssa.cpp:221:10:221:10 | f[1..3) | MustTotallyOverlap | +| ssa.cpp:221:10:221:10 | f[0..1) | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap | +| ssa.cpp:221:10:221:10 | f[0..1) | ssa.cpp:221:10:221:10 | f[0..1) | MustExactlyOverlap | +| ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap | +| ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f[1..3) | MustExactlyOverlap | +| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | *#this | MustExactlyOverlap | +| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | ?*#this | MustTotallyOverlap | +| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | *#this | MayPartiallyOverlap | +| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | *#this | MustExactlyOverlap | +| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | ?*#this | MustTotallyOverlap | +| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | *#this | MayPartiallyOverlap | +| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | ?c | MayPartiallyOverlap | +| ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | c | MayPartiallyOverlap | +| ssa.cpp:240:17:240:17 | c | ssa.cpp:240:17:240:17 | ?c | MustTotallyOverlap | +| ssa.cpp:240:17:240:17 | c | ssa.cpp:240:17:240:17 | c | MustExactlyOverlap | +| ssa.cpp:243:17:243:18 | ?c2 | ssa.cpp:243:17:243:18 | ?c2 | MayPartiallyOverlap | +| ssa.cpp:243:17:243:18 | ?c2 | ssa.cpp:243:17:243:18 | c2 | MayPartiallyOverlap | +| ssa.cpp:243:17:243:18 | c2 | ssa.cpp:243:17:243:18 | ?c2 | MustTotallyOverlap | +| ssa.cpp:243:17:243:18 | c2 | ssa.cpp:243:17:243:18 | c2 | MustExactlyOverlap | +| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src | MustExactlyOverlap | +| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..1) | MustTotallyOverlap | +| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..?) | MustTotallyOverlap | +| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | ?*src | MustTotallyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..1) | MustExactlyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MustTotallyOverlap | +| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MustExactlyOverlap | +| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MustTotallyOverlap | +| ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | +| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s | MustExactlyOverlap | +| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s[0..?) | MustTotallyOverlap | +| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | ?*s | MustTotallyOverlap | +| ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | +| ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | +| ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | +| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | +| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | +| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MustTotallyOverlap | +| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MustExactlyOverlap | +| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MustTotallyOverlap | +| ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MayPartiallyOverlap | +| ssa.cpp:274:8:274:9 | pp | ssa.cpp:274:8:274:9 | pp | MustExactlyOverlap | +| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a | MustExactlyOverlap | +| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a[0..4) | MustTotallyOverlap | +| ssa.cpp:276:9:276:9 | a | ssa.cpp:276:9:276:9 | a[4..8) | MustTotallyOverlap | +| ssa.cpp:276:9:276:9 | a[0..4) | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap | +| ssa.cpp:276:9:276:9 | a[0..4) | ssa.cpp:276:9:276:9 | a[0..4) | MustExactlyOverlap | +| ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap | +| ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a[4..8) | MustExactlyOverlap | +| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | *#this | MustExactlyOverlap | +| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | ?*#this | MustTotallyOverlap | +| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | *#this | MayPartiallyOverlap | +| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | *#this | MustExactlyOverlap | +| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | ?*#this | MustTotallyOverlap | +| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | *#this | MayPartiallyOverlap | +| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MustExactlyOverlap | +| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MustTotallyOverlap | +| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MayPartiallyOverlap | +| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MayPartiallyOverlap | +| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | *#this | MustExactlyOverlap | +| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | ?*#this | MustTotallyOverlap | +| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | *#this | MayPartiallyOverlap | +| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MustTotallyOverlap | +| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MustExactlyOverlap | +| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MayPartiallyOverlap | +| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MayPartiallyOverlap | +| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MustTotallyOverlap | +| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MustExactlyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MustTotallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MustTotallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MustExactlyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MustTotallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MustTotallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MustExactlyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MustTotallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MustTotallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MustTotallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MustExactlyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MustTotallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MustTotallyOverlap | +| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MustTotallyOverlap | +| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MustExactlyOverlap | +| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv | MustExactlyOverlap | +| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MustTotallyOverlap | +| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MustTotallyOverlap | +| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv | MustTotallyOverlap | +| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MustTotallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv[0..8) | MustExactlyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this | MustExactlyOverlap | +| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MustTotallyOverlap | +| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | ?*#this | MustTotallyOverlap | +| ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | +| ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this[0..4) | MustExactlyOverlap | +| ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | +| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MayPartiallyOverlap | +| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s | MustExactlyOverlap | +| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s[0..?) | MustTotallyOverlap | +| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | ?*s | MustTotallyOverlap | +| ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | +| ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | +| ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | +| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | +| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | +| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | +| ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MayPartiallyOverlap | +| ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | buffer | MayPartiallyOverlap | +| ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | buffer[0..?) | MayPartiallyOverlap | +| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MustTotallyOverlap | +| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | buffer | MustExactlyOverlap | +| ssa.cpp:321:7:321:12 | buffer | ssa.cpp:321:7:321:12 | buffer[0..?) | MustTotallyOverlap | +| ssa.cpp:321:7:321:12 | buffer[0..?) | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MayPartiallyOverlap | +| ssa.cpp:321:7:321:12 | buffer[0..?) | ssa.cpp:321:7:321:12 | buffer | MayPartiallyOverlap | +| ssa.cpp:321:7:321:12 | buffer[0..?) | ssa.cpp:321:7:321:12 | buffer[0..?) | MayPartiallyOverlap | +| ssa.cpp:322:8:322:11 | ?ptr1[0..?) | ssa.cpp:322:8:322:11 | ?ptr1[0..?) | MayPartiallyOverlap | +| ssa.cpp:322:8:322:11 | ?ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1 | MayPartiallyOverlap | +| ssa.cpp:322:8:322:11 | ?ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1[0..?) | MayPartiallyOverlap | +| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ?ptr1[0..?) | MustTotallyOverlap | +| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ptr1 | MustExactlyOverlap | +| ssa.cpp:322:8:322:11 | ptr1 | ssa.cpp:322:8:322:11 | ptr1[0..?) | MustTotallyOverlap | +| ssa.cpp:322:8:322:11 | ptr1[0..?) | ssa.cpp:322:8:322:11 | ?ptr1[0..?) | MayPartiallyOverlap | +| ssa.cpp:322:8:322:11 | ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1 | MayPartiallyOverlap | +| ssa.cpp:322:8:322:11 | ptr1[0..?) | ssa.cpp:322:8:322:11 | ptr1[0..?) | MayPartiallyOverlap | +| ssa.cpp:402:7:402:7 | b | ssa.cpp:402:7:402:7 | b | MustExactlyOverlap | +| ssa.cpp:402:7:402:7 | b | ssa.cpp:402:7:402:7 | b[0..4) | MustTotallyOverlap | +| ssa.cpp:402:7:402:7 | b[0..4) | ssa.cpp:402:7:402:7 | b | MayPartiallyOverlap | +| ssa.cpp:402:7:402:7 | b[0..4) | ssa.cpp:402:7:402:7 | b[0..4) | MustExactlyOverlap | +| ssa.cpp:403:7:403:7 | c | ssa.cpp:403:7:403:7 | c | MustExactlyOverlap | +| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x | MustExactlyOverlap | +| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x[0..4) | MustTotallyOverlap | +| ssa.cpp:418:7:418:7 | x | ssa.cpp:418:7:418:7 | x[4..8) | MustTotallyOverlap | +| ssa.cpp:418:7:418:7 | x[0..4) | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap | +| ssa.cpp:418:7:418:7 | x[0..4) | ssa.cpp:418:7:418:7 | x[0..4) | MustExactlyOverlap | +| ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap | +| ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x[4..8) | MustExactlyOverlap | +| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | *a | MustExactlyOverlap | +| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | ?*a | MustTotallyOverlap | +| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | *a | MayPartiallyOverlap | +| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | ?*a | MayPartiallyOverlap | +| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | *b | MustExactlyOverlap | +| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | ?*b | MustTotallyOverlap | +| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | *b | MayPartiallyOverlap | +| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a[0..?) | MustTotallyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MustTotallyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | +| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b[0..?) | MustTotallyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MustTotallyOverlap | +| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql new file mode 100644 index 000000000000..110fd330930d --- /dev/null +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql @@ -0,0 +1,6 @@ +import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasedSSA + +from AllocationMemoryLocation def, AllocationMemoryLocation use, Overlap ovr +where + ovr = getOverlap(def, use) +select def, use, ovr diff --git a/cpp/ql/test/library-tests/ir/ssa/ssa.cpp b/cpp/ql/test/library-tests/ir/ssa/ssa.cpp index 56caf9de3b6b..c5fedcab7161 100644 --- a/cpp/ql/test/library-tests/ir/ssa/ssa.cpp +++ b/cpp/ql/test/library-tests/ir/ssa/ssa.cpp @@ -211,7 +211,7 @@ int ModeledCallTarget(int x) { } void InitArray() { - char a_pad[32] = ""; + char a_pad[32] = ""; char a_nopad[4] = "foo"; char a_infer[] = "blah"; char b[2]; @@ -306,7 +306,7 @@ int main(int argc, char **argv) { class ThisAliasTest { int x, y; - + void setX(int arg) { this->x = arg; } @@ -438,3 +438,13 @@ int noreturnTest2(int x) { void Conditional(bool a, int x, int y) { int z = a ? x : y; } + +static void NonEscapingParams(void *a, void *b) +{ +} + +static void EscapingParams(void *a, void *b) +{ + Escape(a); + Escape(b); +} diff --git a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected index 96b35a76c3bf..dc3129df784f 100644 --- a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected +++ b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir.expected @@ -2044,3 +2044,57 @@ ssa.cpp: # 439| r439_15(glval) = VariableAddress[#temp439:13] : # 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14 #-----| Goto -> Block 1 + +# 442| void NonEscapingParams(void*, void*) +# 442| Block 0 +# 442| v442_1(void) = EnterFunction : +# 442| mu442_2(unknown) = AliasedDefinition : +# 442| mu442_3(unknown) = InitializeNonLocal : +# 442| r442_4(glval) = VariableAddress[a] : +# 442| m442_5(void *) = InitializeParameter[a] : &:r442_4 +# 442| r442_6(void *) = Load[a] : &:r442_4, m442_5 +# 442| mu442_7(unknown) = InitializeIndirection[a] : &:r442_6 +# 442| r442_8(glval) = VariableAddress[b] : +# 442| m442_9(void *) = InitializeParameter[b] : &:r442_8 +# 442| r442_10(void *) = Load[b] : &:r442_8, m442_9 +# 442| mu442_11(unknown) = InitializeIndirection[b] : &:r442_10 +# 444| v444_1(void) = NoOp : +# 442| v442_12(void) = ReturnIndirection[a] : &:r442_6, ~m? +# 442| v442_13(void) = ReturnIndirection[b] : &:r442_10, ~m? +# 442| v442_14(void) = ReturnVoid : +# 442| v442_15(void) = AliasedUse : ~m? +# 442| v442_16(void) = ExitFunction : + +# 446| void EscapingParams(void*, void*) +# 446| Block 0 +# 446| v446_1(void) = EnterFunction : +# 446| mu446_2(unknown) = AliasedDefinition : +# 446| mu446_3(unknown) = InitializeNonLocal : +# 446| r446_4(glval) = VariableAddress[a] : +# 446| m446_5(void *) = InitializeParameter[a] : &:r446_4 +# 446| r446_6(void *) = Load[a] : &:r446_4, m446_5 +# 446| mu446_7(unknown) = InitializeIndirection[a] : &:r446_6 +# 446| r446_8(glval) = VariableAddress[b] : +# 446| m446_9(void *) = InitializeParameter[b] : &:r446_8 +# 446| r446_10(void *) = Load[b] : &:r446_8, m446_9 +# 446| mu446_11(unknown) = InitializeIndirection[b] : &:r446_10 +# 448| r448_1(glval) = FunctionAddress[Escape] : +# 448| r448_2(glval) = VariableAddress[a] : +# 448| r448_3(void *) = Load[a] : &:r448_2, m446_5 +# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3 +# 448| mu448_5(unknown) = ^CallSideEffect : ~m? +# 448| v448_6(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m? +# 448| mu448_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3 +# 449| r449_1(glval) = FunctionAddress[Escape] : +# 449| r449_2(glval) = VariableAddress[b] : +# 449| r449_3(void *) = Load[b] : &:r449_2, m446_9 +# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3 +# 449| mu449_5(unknown) = ^CallSideEffect : ~m? +# 449| v449_6(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m? +# 449| mu449_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3 +# 450| v450_1(void) = NoOp : +# 446| v446_12(void) = ReturnIndirection[a] : &:r446_6, ~m? +# 446| v446_13(void) = ReturnIndirection[b] : &:r446_10, ~m? +# 446| v446_14(void) = ReturnVoid : +# 446| v446_15(void) = AliasedUse : ~m? +# 446| v446_16(void) = ExitFunction : diff --git a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected index 96b35a76c3bf..dc3129df784f 100644 --- a/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected +++ b/cpp/ql/test/library-tests/ir/ssa/unaliased_ssa_ir_unsound.expected @@ -2044,3 +2044,57 @@ ssa.cpp: # 439| r439_15(glval) = VariableAddress[#temp439:13] : # 439| m439_16(int) = Store[#temp439:13] : &:r439_15, r439_14 #-----| Goto -> Block 1 + +# 442| void NonEscapingParams(void*, void*) +# 442| Block 0 +# 442| v442_1(void) = EnterFunction : +# 442| mu442_2(unknown) = AliasedDefinition : +# 442| mu442_3(unknown) = InitializeNonLocal : +# 442| r442_4(glval) = VariableAddress[a] : +# 442| m442_5(void *) = InitializeParameter[a] : &:r442_4 +# 442| r442_6(void *) = Load[a] : &:r442_4, m442_5 +# 442| mu442_7(unknown) = InitializeIndirection[a] : &:r442_6 +# 442| r442_8(glval) = VariableAddress[b] : +# 442| m442_9(void *) = InitializeParameter[b] : &:r442_8 +# 442| r442_10(void *) = Load[b] : &:r442_8, m442_9 +# 442| mu442_11(unknown) = InitializeIndirection[b] : &:r442_10 +# 444| v444_1(void) = NoOp : +# 442| v442_12(void) = ReturnIndirection[a] : &:r442_6, ~m? +# 442| v442_13(void) = ReturnIndirection[b] : &:r442_10, ~m? +# 442| v442_14(void) = ReturnVoid : +# 442| v442_15(void) = AliasedUse : ~m? +# 442| v442_16(void) = ExitFunction : + +# 446| void EscapingParams(void*, void*) +# 446| Block 0 +# 446| v446_1(void) = EnterFunction : +# 446| mu446_2(unknown) = AliasedDefinition : +# 446| mu446_3(unknown) = InitializeNonLocal : +# 446| r446_4(glval) = VariableAddress[a] : +# 446| m446_5(void *) = InitializeParameter[a] : &:r446_4 +# 446| r446_6(void *) = Load[a] : &:r446_4, m446_5 +# 446| mu446_7(unknown) = InitializeIndirection[a] : &:r446_6 +# 446| r446_8(glval) = VariableAddress[b] : +# 446| m446_9(void *) = InitializeParameter[b] : &:r446_8 +# 446| r446_10(void *) = Load[b] : &:r446_8, m446_9 +# 446| mu446_11(unknown) = InitializeIndirection[b] : &:r446_10 +# 448| r448_1(glval) = FunctionAddress[Escape] : +# 448| r448_2(glval) = VariableAddress[a] : +# 448| r448_3(void *) = Load[a] : &:r448_2, m446_5 +# 448| v448_4(void) = Call[Escape] : func:r448_1, 0:r448_3 +# 448| mu448_5(unknown) = ^CallSideEffect : ~m? +# 448| v448_6(void) = ^BufferReadSideEffect[0] : &:r448_3, ~m? +# 448| mu448_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r448_3 +# 449| r449_1(glval) = FunctionAddress[Escape] : +# 449| r449_2(glval) = VariableAddress[b] : +# 449| r449_3(void *) = Load[b] : &:r449_2, m446_9 +# 449| v449_4(void) = Call[Escape] : func:r449_1, 0:r449_3 +# 449| mu449_5(unknown) = ^CallSideEffect : ~m? +# 449| v449_6(void) = ^BufferReadSideEffect[0] : &:r449_3, ~m? +# 449| mu449_7(unknown) = ^BufferMayWriteSideEffect[0] : &:r449_3 +# 450| v450_1(void) = NoOp : +# 446| v446_12(void) = ReturnIndirection[a] : &:r446_6, ~m? +# 446| v446_13(void) = ReturnIndirection[b] : &:r446_10, ~m? +# 446| v446_14(void) = ReturnVoid : +# 446| v446_15(void) = AliasedUse : ~m? +# 446| v446_16(void) = ExitFunction : From 1ff6c4c09053665ed9f2cfb139488dd6bc3266c9 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:55:06 +0100 Subject: [PATCH 4/8] C++: Restore change and see effect on test. --- .../aliased_ssa/internal/AliasedSSA.qll | 2 +- .../ir/ssa/aliased_ssa_overlap.expected | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index 1ee0bfbac8c5..fa5eab19c2d5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -688,7 +688,7 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { ( // EntireAllocationMemoryLocation exactly overlaps itself. use instanceof EntireAllocationMemoryLocation and - // def.getAnAllocation() = use.getAnAllocation() and + def.getAnAllocation() = use.getAnAllocation() and result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected index 638ae916adcf..3a9abfc7f782 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected @@ -187,18 +187,10 @@ | ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | | ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | -| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | -| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | | ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | -| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | -| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | -| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | -| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | | ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | | ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | -| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | -| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | | ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | | ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c | MustExactlyOverlap | @@ -496,8 +488,6 @@ | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a[0..?) | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MustTotallyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | @@ -508,16 +498,12 @@ | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b[0..?) | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | @@ -528,8 +514,6 @@ | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | From f9fa52fe77162e251e8922b7a765e3d878581e5c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 8 Oct 2024 14:43:56 +0100 Subject: [PATCH 5/8] C++: Disabled the change again. --- .../aliased_ssa/internal/AliasedSSA.qll | 2 +- .../ir/ssa/aliased_ssa_overlap.expected | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index fa5eab19c2d5..60c4efbb1c97 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -688,7 +688,7 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { ( // EntireAllocationMemoryLocation exactly overlaps itself. use instanceof EntireAllocationMemoryLocation and - def.getAnAllocation() = use.getAnAllocation() and + //def.getAnAllocation() = use.getAnAllocation() and result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected index 3a9abfc7f782..638ae916adcf 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected @@ -187,10 +187,18 @@ | ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | | ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | +| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | +| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | | ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | +| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | +| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | +| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | +| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | | ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | | ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | +| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | +| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | | ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | | ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c | MustExactlyOverlap | @@ -488,6 +496,8 @@ | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a[0..?) | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MustTotallyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | @@ -498,12 +508,16 @@ | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b[0..?) | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | @@ -514,6 +528,8 @@ | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | From 4a131dd8f133424b5c7521ae5d76a32c3cfdf60c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 8 Oct 2024 14:44:45 +0100 Subject: [PATCH 6/8] C++: Implement dbartol's suggestion. --- .../aliased_ssa/internal/AliasedSSA.qll | 3 +- .../ir/ssa/aliased_ssa_overlap.expected | 78 ------------------- 2 files changed, 1 insertion(+), 80 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index 60c4efbb1c97..cfd4c8581b01 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -687,8 +687,7 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { def instanceof EntireAllocationMemoryLocation and ( // EntireAllocationMemoryLocation exactly overlaps itself. - use instanceof EntireAllocationMemoryLocation and - //def.getAnAllocation() = use.getAnAllocation() and + use = def and result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected index 638ae916adcf..a48ba2b319f8 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected @@ -50,24 +50,20 @@ | ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p | MustExactlyOverlap | | ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[0..4) | MustTotallyOverlap | | ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[4..8) | MustTotallyOverlap | -| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | ?*p | MustTotallyOverlap | | ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p[0..4) | MustExactlyOverlap | | ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p[4..8) | MustExactlyOverlap | | ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | -| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[0..4) | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[4..8) | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p | MustExactlyOverlap | | ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p[?..?) | MustTotallyOverlap | -| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | ?*p | MustTotallyOverlap | | ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | -| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | | ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | ?a[0..?) | MayPartiallyOverlap | @@ -178,63 +174,41 @@ | ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustExactlyOverlap | | ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p | MustExactlyOverlap | | ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p[0..4) | MustTotallyOverlap | -| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | ?*p | MustTotallyOverlap | | ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | | ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p[0..4) | MustExactlyOverlap | | ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | -| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | | ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p[0..4) | MayPartiallyOverlap | | ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | -| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | -| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | -| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | -| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | -| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | -| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | -| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | -| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | | ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | -| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | -| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | -| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | -| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | | ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c | MustExactlyOverlap | | ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c[0..4) | MustTotallyOverlap | -| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | ?*c | MustTotallyOverlap | | ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c[0..4) | MustExactlyOverlap | | ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | -| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c[0..4) | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d | MustExactlyOverlap | | ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d[0..4) | MustTotallyOverlap | -| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | ?*d | MustTotallyOverlap | | ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d[0..4) | MustExactlyOverlap | | ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | -| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d[0..4) | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1 | MustExactlyOverlap | | ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MustTotallyOverlap | -| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | ?*str1 | MustTotallyOverlap | | ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | -| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2 | MustExactlyOverlap | | ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MustTotallyOverlap | -| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | ?*str2 | MustTotallyOverlap | | ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | -| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | | ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x | MustExactlyOverlap | @@ -271,12 +245,8 @@ | ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap | | ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f[1..3) | MustExactlyOverlap | | ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | *#this | MustExactlyOverlap | -| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | ?*#this | MustTotallyOverlap | -| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | *#this | MayPartiallyOverlap | | ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | ?*#this | MayPartiallyOverlap | | ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | *#this | MustExactlyOverlap | -| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | ?*#this | MustTotallyOverlap | -| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | *#this | MayPartiallyOverlap | | ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | ?*#this | MayPartiallyOverlap | | ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | ?c | MayPartiallyOverlap | | ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | c | MayPartiallyOverlap | @@ -289,7 +259,6 @@ | ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src | MustExactlyOverlap | | ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..1) | MustTotallyOverlap | | ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..?) | MustTotallyOverlap | -| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | ?*src | MustTotallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..1) | MustExactlyOverlap | | ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | @@ -298,14 +267,11 @@ | ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | -| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | | ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap | | ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | -| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MustTotallyOverlap | | ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MustExactlyOverlap | | ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MustTotallyOverlap | | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | @@ -313,17 +279,13 @@ | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s | MustExactlyOverlap | | ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s[0..?) | MustTotallyOverlap | -| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | ?*s | MustTotallyOverlap | | ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | -| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | | ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap | | ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MayPartiallyOverlap | -| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MustTotallyOverlap | | ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MustExactlyOverlap | | ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MustTotallyOverlap | | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | @@ -338,38 +300,24 @@ | ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap | | ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a[4..8) | MustExactlyOverlap | | ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | *#this | MustExactlyOverlap | -| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | ?*#this | MustTotallyOverlap | -| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | *#this | MayPartiallyOverlap | | ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | ?*#this | MayPartiallyOverlap | | ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | *#this | MustExactlyOverlap | -| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | ?*#this | MustTotallyOverlap | -| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | *#this | MayPartiallyOverlap | | ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | ?*#this | MayPartiallyOverlap | | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MustExactlyOverlap | -| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MustTotallyOverlap | -| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MayPartiallyOverlap | | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MayPartiallyOverlap | | ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | *#this | MustExactlyOverlap | -| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | ?*#this | MustTotallyOverlap | -| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | *#this | MayPartiallyOverlap | | ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | ?*#this | MayPartiallyOverlap | | ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MayPartiallyOverlap | -| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MustTotallyOverlap | | ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MustExactlyOverlap | | ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MayPartiallyOverlap | -| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MayPartiallyOverlap | -| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MustTotallyOverlap | | ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MustExactlyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | -| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MustTotallyOverlap | | ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MustTotallyOverlap | | ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MustExactlyOverlap | | ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MustTotallyOverlap | @@ -380,7 +328,6 @@ | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | @@ -392,7 +339,6 @@ | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | -| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MustTotallyOverlap | | ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MustTotallyOverlap | | ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MustTotallyOverlap | | ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MustExactlyOverlap | @@ -404,17 +350,14 @@ | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | -| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MustTotallyOverlap | | ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MustTotallyOverlap | | ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MustExactlyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv | MustExactlyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MustTotallyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MustTotallyOverlap | -| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv | MustTotallyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MustTotallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv[0..8) | MustExactlyOverlap | @@ -426,7 +369,6 @@ | ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | -| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | @@ -438,20 +380,16 @@ | ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this | MustExactlyOverlap | | ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MustTotallyOverlap | -| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | ?*#this | MustTotallyOverlap | | ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this[0..4) | MustExactlyOverlap | | ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | -| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s | MustExactlyOverlap | | ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s[0..?) | MustTotallyOverlap | -| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | ?*s | MustTotallyOverlap | | ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | -| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | | ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MayPartiallyOverlap | @@ -485,42 +423,29 @@ | ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap | | ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x[4..8) | MustExactlyOverlap | | ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | *a | MustExactlyOverlap | -| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | ?*a | MustTotallyOverlap | -| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | *a | MayPartiallyOverlap | | ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | ?*a | MayPartiallyOverlap | | ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | *b | MustExactlyOverlap | -| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | ?*b | MustTotallyOverlap | -| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | *b | MayPartiallyOverlap | | ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a[0..?) | MustTotallyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MustTotallyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | -| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | -| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b[0..?) | MustTotallyOverlap | -| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | @@ -528,9 +453,6 @@ | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | -| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | From b692b1b282ba73a9fc0cc3dd7591362fa2ab40b0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 10 Oct 2024 17:26:38 +0100 Subject: [PATCH 7/8] C++: Autoformat. --- cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql index 110fd330930d..2616b21f3203 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.ql @@ -1,6 +1,5 @@ import semmle.code.cpp.ir.implementation.aliased_ssa.internal.AliasedSSA from AllocationMemoryLocation def, AllocationMemoryLocation use, Overlap ovr -where - ovr = getOverlap(def, use) +where ovr = getOverlap(def, use) select def, use, ovr From 639864e94ddc5e95d5c3e5a69b158a15983fad43 Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Thu, 17 Oct 2024 12:14:44 -0400 Subject: [PATCH 8/8] Handle `may` vs. `must` for `EntireAllocationMemoryLocation` --- .../aliased_ssa/internal/AliasedSSA.qll | 9 ++- .../ir/ssa/aliased_ssa_overlap.expected | 62 +++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll index 7fea4218e9e8..314bc0bc81b9 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll @@ -683,8 +683,13 @@ private Overlap getExtentOverlap(MemoryLocation0 def, MemoryLocation0 use) { def.getVirtualVariable() = use.getVirtualVariable() and def instanceof EntireAllocationMemoryLocation and ( - // EntireAllocationMemoryLocation exactly overlaps itself. - use = def and + // EntireAllocationMemoryLocation exactly overlaps any EntireAllocationMemoryLocation for the + // same allocation. Checking the allocation, rather than the memory location itself, ensures + // that we get the right relationship between the "must" and "may" memory locations for that + // allocation. + // Note that if one of the locations is a "may" access, the overlap will be downgraded to + // `MustTotallyOverlap` or `MayPartialOverlap` in `getOverlap()`. + use.(EntireAllocationMemoryLocation).getAnAllocation() = def.getAnAllocation() and result instanceof MustExactlyOverlap or not use instanceof EntireAllocationMemoryLocation and diff --git a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected index a48ba2b319f8..3a9abfc7f782 100644 --- a/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected +++ b/cpp/ql/test/library-tests/ir/ssa/aliased_ssa_overlap.expected @@ -50,20 +50,24 @@ | ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p | MustExactlyOverlap | | ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[0..4) | MustTotallyOverlap | | ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | *p[4..8) | MustTotallyOverlap | +| ssa.cpp:13:23:13:23 | *p | ssa.cpp:13:23:13:23 | ?*p | MustTotallyOverlap | | ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | *p[0..4) | MustExactlyOverlap | | ssa.cpp:13:23:13:23 | *p[0..4) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | *p[4..8) | MustExactlyOverlap | | ssa.cpp:13:23:13:23 | *p[4..8) | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | +| ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[0..4) | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | *p[4..8) | MayPartiallyOverlap | | ssa.cpp:13:23:13:23 | ?*p | ssa.cpp:13:23:13:23 | ?*p | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p | MustExactlyOverlap | | ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | *p[?..?) | MustTotallyOverlap | +| ssa.cpp:68:38:68:38 | *p | ssa.cpp:68:38:68:38 | ?*p | MustTotallyOverlap | | ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | *p[?..?) | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | +| ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | *p[?..?) | MayPartiallyOverlap | | ssa.cpp:68:38:68:38 | ?*p | ssa.cpp:68:38:68:38 | ?*p | MayPartiallyOverlap | | ssa.cpp:95:38:95:38 | ?a[0..?) | ssa.cpp:95:38:95:38 | ?a[0..?) | MayPartiallyOverlap | @@ -174,41 +178,55 @@ | ssa.cpp:171:28:171:28 | w | ssa.cpp:171:28:171:28 | w | MustExactlyOverlap | | ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p | MustExactlyOverlap | | ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | *p[0..4) | MustTotallyOverlap | +| ssa.cpp:179:18:179:18 | *p | ssa.cpp:179:18:179:18 | ?*p | MustTotallyOverlap | | ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | | ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | *p[0..4) | MustExactlyOverlap | | ssa.cpp:179:18:179:18 | *p[0..4) | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | +| ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p | MayPartiallyOverlap | | ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | *p[0..4) | MayPartiallyOverlap | | ssa.cpp:179:18:179:18 | ?*p | ssa.cpp:179:18:179:18 | ?*p | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | *a | MustExactlyOverlap | +| ssa.cpp:184:46:184:46 | *a | ssa.cpp:184:46:184:46 | ?*a | MustTotallyOverlap | +| ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | *a | MayPartiallyOverlap | | ssa.cpp:184:46:184:46 | ?*a | ssa.cpp:184:46:184:46 | ?*a | MayPartiallyOverlap | | ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | *b | MustExactlyOverlap | +| ssa.cpp:184:63:184:63 | *b | ssa.cpp:184:63:184:63 | ?*b | MustTotallyOverlap | +| ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | *b | MayPartiallyOverlap | | ssa.cpp:184:63:184:63 | ?*b | ssa.cpp:184:63:184:63 | ?*b | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c | MustExactlyOverlap | | ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | *c[0..4) | MustTotallyOverlap | +| ssa.cpp:184:80:184:80 | *c | ssa.cpp:184:80:184:80 | ?*c | MustTotallyOverlap | | ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | *c[0..4) | MustExactlyOverlap | | ssa.cpp:184:80:184:80 | *c[0..4) | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | +| ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | *c[0..4) | MayPartiallyOverlap | | ssa.cpp:184:80:184:80 | ?*c | ssa.cpp:184:80:184:80 | ?*c | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d | MustExactlyOverlap | | ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | *d[0..4) | MustTotallyOverlap | +| ssa.cpp:184:97:184:97 | *d | ssa.cpp:184:97:184:97 | ?*d | MustTotallyOverlap | | ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | *d[0..4) | MustExactlyOverlap | | ssa.cpp:184:97:184:97 | *d[0..4) | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | +| ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | *d[0..4) | MayPartiallyOverlap | | ssa.cpp:184:97:184:97 | ?*d | ssa.cpp:184:97:184:97 | ?*d | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1 | MustExactlyOverlap | | ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MustTotallyOverlap | +| ssa.cpp:198:25:198:28 | *str1 | ssa.cpp:198:25:198:28 | ?*str1 | MustTotallyOverlap | | ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | *str1[0..?) | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | +| ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1 | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | *str1[0..?) | MayPartiallyOverlap | | ssa.cpp:198:25:198:28 | ?*str1 | ssa.cpp:198:25:198:28 | ?*str1 | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2 | MustExactlyOverlap | | ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MustTotallyOverlap | +| ssa.cpp:198:37:198:40 | *str2 | ssa.cpp:198:37:198:40 | ?*str2 | MustTotallyOverlap | | ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | *str2[0..?) | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | +| ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2 | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | *str2[0..?) | MayPartiallyOverlap | | ssa.cpp:198:37:198:40 | ?*str2 | ssa.cpp:198:37:198:40 | ?*str2 | MayPartiallyOverlap | | ssa.cpp:207:27:207:27 | x | ssa.cpp:207:27:207:27 | x | MustExactlyOverlap | @@ -245,8 +263,12 @@ | ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f | MayPartiallyOverlap | | ssa.cpp:221:10:221:10 | f[1..3) | ssa.cpp:221:10:221:10 | f[1..3) | MustExactlyOverlap | | ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | *#this | MustExactlyOverlap | +| ssa.cpp:235:5:235:17 | *#this | ssa.cpp:235:5:235:17 | ?*#this | MustTotallyOverlap | +| ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | *#this | MayPartiallyOverlap | | ssa.cpp:235:5:235:17 | ?*#this | ssa.cpp:235:5:235:17 | ?*#this | MayPartiallyOverlap | | ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | *#this | MustExactlyOverlap | +| ssa.cpp:236:10:236:10 | *#this | ssa.cpp:236:10:236:10 | ?*#this | MustTotallyOverlap | +| ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | *#this | MayPartiallyOverlap | | ssa.cpp:236:10:236:10 | ?*#this | ssa.cpp:236:10:236:10 | ?*#this | MayPartiallyOverlap | | ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | ?c | MayPartiallyOverlap | | ssa.cpp:240:17:240:17 | ?c | ssa.cpp:240:17:240:17 | c | MayPartiallyOverlap | @@ -259,6 +281,7 @@ | ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src | MustExactlyOverlap | | ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..1) | MustTotallyOverlap | | ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | *src[0..?) | MustTotallyOverlap | +| ssa.cpp:247:40:247:42 | *src | ssa.cpp:247:40:247:42 | ?*src | MustTotallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..1) | MustExactlyOverlap | | ssa.cpp:247:40:247:42 | *src[0..1) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | @@ -267,11 +290,14 @@ | ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | *src[0..?) | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | +| ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..1) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | *src[0..?) | MayPartiallyOverlap | | ssa.cpp:247:40:247:42 | ?*src | ssa.cpp:247:40:247:42 | ?*src | MayPartiallyOverlap | | ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MayPartiallyOverlap | | ssa.cpp:248:15:248:28 | ?dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | +| ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | ?dynamic{1} | MustTotallyOverlap | | ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1} | MustExactlyOverlap | | ssa.cpp:248:15:248:28 | dynamic{1} | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MustTotallyOverlap | | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | ?dynamic{1} | MayPartiallyOverlap | @@ -279,13 +305,17 @@ | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | ssa.cpp:248:15:248:28 | dynamic{1}[0..?) | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s | MustExactlyOverlap | | ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | *s[0..?) | MustTotallyOverlap | +| ssa.cpp:268:28:268:28 | *s | ssa.cpp:268:28:268:28 | ?*s | MustTotallyOverlap | | ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | *s[0..?) | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | +| ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:268:28:268:28 | ?*s | ssa.cpp:268:28:268:28 | ?*s | MayPartiallyOverlap | | ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MayPartiallyOverlap | | ssa.cpp:269:15:269:20 | ?dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MayPartiallyOverlap | +| ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | ?dynamic{1} | MustTotallyOverlap | | ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1} | MustExactlyOverlap | | ssa.cpp:269:15:269:20 | dynamic{1} | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | MustTotallyOverlap | | ssa.cpp:269:15:269:20 | dynamic{1}[0..?) | ssa.cpp:269:15:269:20 | ?dynamic{1} | MayPartiallyOverlap | @@ -300,24 +330,38 @@ | ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a | MayPartiallyOverlap | | ssa.cpp:276:9:276:9 | a[4..8) | ssa.cpp:276:9:276:9 | a[4..8) | MustExactlyOverlap | | ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | *#this | MustExactlyOverlap | +| ssa.cpp:286:3:286:3 | *#this | ssa.cpp:286:3:286:3 | ?*#this | MustTotallyOverlap | +| ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | *#this | MayPartiallyOverlap | | ssa.cpp:286:3:286:3 | ?*#this | ssa.cpp:286:3:286:3 | ?*#this | MayPartiallyOverlap | | ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | *#this | MustExactlyOverlap | +| ssa.cpp:287:3:287:3 | *#this | ssa.cpp:287:3:287:3 | ?*#this | MustTotallyOverlap | +| ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | *#this | MayPartiallyOverlap | | ssa.cpp:287:3:287:3 | ?*#this | ssa.cpp:287:3:287:3 | ?*#this | MayPartiallyOverlap | | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MustExactlyOverlap | +| ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MustTotallyOverlap | +| ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | *(unnamed parameter 0) | MayPartiallyOverlap | | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | ssa.cpp:287:5:287:5 | ?*(unnamed parameter 0) | MayPartiallyOverlap | | ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | *#this | MustExactlyOverlap | +| ssa.cpp:288:3:288:3 | *#this | ssa.cpp:288:3:288:3 | ?*#this | MustTotallyOverlap | +| ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | *#this | MayPartiallyOverlap | | ssa.cpp:288:3:288:3 | ?*#this | ssa.cpp:288:3:288:3 | ?*#this | MayPartiallyOverlap | | ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:292:14:292:22 | ?dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MayPartiallyOverlap | +| ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | ?dynamic{1} | MustTotallyOverlap | | ssa.cpp:292:14:292:22 | dynamic{1} | ssa.cpp:292:14:292:22 | dynamic{1} | MustExactlyOverlap | | ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MayPartiallyOverlap | +| ssa.cpp:293:14:293:22 | ?dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MayPartiallyOverlap | +| ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | ?dynamic{2} | MustTotallyOverlap | | ssa.cpp:293:14:293:22 | dynamic{2} | ssa.cpp:293:14:293:22 | dynamic{2} | MustExactlyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MayPartiallyOverlap | +| ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3} | MustTotallyOverlap | | ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | ?dynamic{3}[0..4) | MustTotallyOverlap | | ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3} | MustExactlyOverlap | | ssa.cpp:294:12:294:26 | dynamic{3} | ssa.cpp:294:12:294:26 | dynamic{3}[0..4) | MustTotallyOverlap | @@ -328,6 +372,7 @@ | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MayPartiallyOverlap | @@ -339,6 +384,7 @@ | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3} | MayPartiallyOverlap | | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | +| ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3} | MustTotallyOverlap | | ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..4) | MustTotallyOverlap | | ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | ?dynamic{3}[0..?) | MustTotallyOverlap | | ssa.cpp:294:18:294:25 | dynamic{3} | ssa.cpp:294:18:294:25 | dynamic{3} | MustExactlyOverlap | @@ -350,14 +396,17 @@ | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | ssa.cpp:294:18:294:25 | dynamic{3}[0..?) | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | ?dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5} | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MayPartiallyOverlap | | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | ssa.cpp:295:10:295:14 | dynamic{5} | MayPartiallyOverlap | +| ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5} | MustTotallyOverlap | | ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | ?dynamic{5}[0..4) | MustTotallyOverlap | | ssa.cpp:295:10:295:14 | dynamic{5} | ssa.cpp:295:10:295:14 | dynamic{5} | MustExactlyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv | MustExactlyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MustTotallyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MustTotallyOverlap | +| ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv | MustTotallyOverlap | | ssa.cpp:301:27:301:30 | *argv | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MustTotallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..8) | ssa.cpp:301:27:301:30 | *argv[0..8) | MustExactlyOverlap | @@ -369,6 +418,7 @@ | ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | *argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | +| ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..8) | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | *argv[0..?) | MayPartiallyOverlap | | ssa.cpp:301:27:301:30 | ?*argv | ssa.cpp:301:27:301:30 | ?*argv | MayPartiallyOverlap | @@ -380,16 +430,20 @@ | ssa.cpp:301:27:301:30 | ?*argv[0..?) | ssa.cpp:301:27:301:30 | ?*argv[0..?) | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this | MustExactlyOverlap | | ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MustTotallyOverlap | +| ssa.cpp:310:8:310:11 | *#this | ssa.cpp:310:8:310:11 | ?*#this | MustTotallyOverlap | | ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | *#this[0..4) | MustExactlyOverlap | | ssa.cpp:310:8:310:11 | *#this[0..4) | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | +| ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | *#this[0..4) | MayPartiallyOverlap | | ssa.cpp:310:8:310:11 | ?*#this | ssa.cpp:310:8:310:11 | ?*#this | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s | MustExactlyOverlap | | ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | *s[0..?) | MustTotallyOverlap | +| ssa.cpp:319:37:319:37 | *s | ssa.cpp:319:37:319:37 | ?*s | MustTotallyOverlap | | ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | *s[0..?) | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | +| ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | *s[0..?) | MayPartiallyOverlap | | ssa.cpp:319:37:319:37 | ?*s | ssa.cpp:319:37:319:37 | ?*s | MayPartiallyOverlap | | ssa.cpp:321:7:321:12 | ?buffer[0..?) | ssa.cpp:321:7:321:12 | ?buffer[0..?) | MayPartiallyOverlap | @@ -423,11 +477,16 @@ | ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x | MayPartiallyOverlap | | ssa.cpp:418:7:418:7 | x[4..8) | ssa.cpp:418:7:418:7 | x[4..8) | MustExactlyOverlap | | ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | *a | MustExactlyOverlap | +| ssa.cpp:442:37:442:37 | *a | ssa.cpp:442:37:442:37 | ?*a | MustTotallyOverlap | +| ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | *a | MayPartiallyOverlap | | ssa.cpp:442:37:442:37 | ?*a | ssa.cpp:442:37:442:37 | ?*a | MayPartiallyOverlap | | ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | *b | MustExactlyOverlap | +| ssa.cpp:442:46:442:46 | *b | ssa.cpp:442:46:442:46 | ?*b | MustTotallyOverlap | +| ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | *b | MayPartiallyOverlap | | ssa.cpp:442:46:442:46 | ?*b | ssa.cpp:442:46:442:46 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a | MustExactlyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | *a[0..?) | MustTotallyOverlap | +| ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MustTotallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | @@ -435,6 +494,7 @@ | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | *a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | +| ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | *a[0..?) | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | | ssa.cpp:446:34:446:34 | ?*a | ssa.cpp:446:34:446:34 | ?*a[0..?) | MayPartiallyOverlap | @@ -446,6 +506,7 @@ | ssa.cpp:446:34:446:34 | ?*a[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b | MustExactlyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | *b[0..?) | MustTotallyOverlap | +| ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MustTotallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | *a | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:34:446:34 | ?*a | MayPartiallyOverlap | @@ -453,6 +514,7 @@ | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | *b[0..?) | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap | +| ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | *b[0..?) | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b | MayPartiallyOverlap | | ssa.cpp:446:43:446:43 | ?*b | ssa.cpp:446:43:446:43 | ?*b[0..?) | MayPartiallyOverlap |