Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ba9741f

Browse files
author
Robert Marsh
committed
C++: compute overlap on irvars with vvar indexes
1 parent 4830e43 commit ba9741f

1 file changed

Lines changed: 13 additions & 25 deletions

File tree

  • cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/internal

cpp/ql/src/semmle/code/cpp/ir/implementation/aliased_ssa/internal/AliasedSSA.qll

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -402,49 +402,37 @@ private predicate isRelatableMemoryLocation(VariableMemoryLocation vml) {
402402
}
403403

404404
private predicate isCoveredOffset(
405-
VirtualVariable vv, IRVariable var, int offsetRank, VariableMemoryLocation vml
405+
IRVariable var, int offsetRank, VariableMemoryLocation vml
406406
) {
407-
exists(int startRank, int endRank |
408-
vml.getStartBitOffset() = rank[startRank](IntValue offset_ | isRelevantOffset(vv, offset_)) and
409-
vml.getEndBitOffset() = rank[endRank](IntValue offset_ | isRelevantOffset(vv, offset_)) and
410-
hasVariableAndVirtualVariable(vv, var, vml) and
407+
exists(int startRank, int endRank, VirtualVariable vvar |
408+
vml.getStartBitOffset() = rank[startRank](IntValue offset_ | isRelevantOffset(vvar, offset_)) and
409+
vml.getEndBitOffset() = rank[endRank](IntValue offset_ | isRelevantOffset(vvar, offset_)) and
410+
var = vml.getVariable() and
411+
vvar = vml.getVirtualVariable() and
411412
isRelatableMemoryLocation(vml) and
412413
offsetRank in [startRank .. endRank]
413414
)
414415
}
415416

416-
private predicate hasUnknownOffset(VirtualVariable vv, IRVariable var, VariableMemoryLocation vml) {
417-
hasVariableAndVirtualVariable(vv, var, vml) and
417+
private predicate hasUnknownOffset(IRVariable var, VariableMemoryLocation vml) {
418+
vml.getVariable() = var and
418419
(
419420
vml.getStartBitOffset() = Ints::unknown() or
420421
vml.getEndBitOffset() = Ints::unknown()
421422
)
422423
}
423424

424-
private predicate hasVariableAndVirtualVariable(
425-
VirtualVariable vv, IRVariable var, VariableMemoryLocation vml
426-
) {
427-
var = vml.getVariable() and
428-
vv = vml.getVirtualVariable()
429-
}
430-
431425
private predicate overlappingIRVariableMemoryLocations(
432426
VariableMemoryLocation def, VariableMemoryLocation use
433427
) {
434-
exists(VirtualVariable vv, IRVariable var, int offsetRank |
435-
isCoveredOffset(vv, var, offsetRank, def) and
436-
isCoveredOffset(vv, var, offsetRank, use)
428+
exists(IRVariable var, int offsetRank |
429+
isCoveredOffset(var, offsetRank, def) and
430+
isCoveredOffset(var, offsetRank, use)
437431
)
438432
or
439-
exists(VirtualVariable vv, IRVariable var |
440-
hasUnknownOffset(vv, var, def) and
441-
hasVariableAndVirtualVariable(vv, var, use)
442-
)
433+
hasUnknownOffset(use.getVariable(), def)
443434
or
444-
exists(VirtualVariable vv, IRVariable var |
445-
hasUnknownOffset(vv, var, use) and
446-
hasVariableAndVirtualVariable(vv, var, def)
447-
)
435+
hasUnknownOffset(def.getVariable(), use)
448436
}
449437

450438
private Overlap getVariableMemoryLocationOverlap(

0 commit comments

Comments
 (0)