From 1ef9769e3825d74962e771cc01ec0b824d97994d Mon Sep 17 00:00:00 2001 From: Dave Bartolomeo Date: Thu, 17 Oct 2024 12:14:44 -0400 Subject: [PATCH] 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 7fea4218e9e..314bc0bc81b 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 a48ba2b319f..3a9abfc7f78 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 |