Skip to content

Commit 8bb17a7

Browse files
committed
C++: Add an 'EdgeKind' column to 'getInitializationSuccessor'.
1 parent 4fb20e1 commit 8bb17a7

File tree

5 files changed

+16
-16
lines changed

5 files changed

+16
-16
lines changed

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ abstract class TranslatedLocalVariableDeclaration extends TranslatedVariableInit
6767
getTranslatedInitialization(this.getVariable().getInitializer().getExpr().getFullyConverted())
6868
}
6969

70-
final override Instruction getInitializationSuccessor() {
71-
result = this.getParent().getChildSuccessor(this, any(GotoEdge edge))
70+
final override Instruction getInitializationSuccessor(EdgeKind kind) {
71+
result = this.getParent().getChildSuccessor(this, kind)
7272
}
7373

7474
final override IRVariable getIRVariable() {

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedExpr.qll

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2544,8 +2544,8 @@ class TranslatedTemporaryObjectExpr extends TranslatedNonConstantExpr,
25442544
result = getIRTempVariable(expr, TempObjectTempVar())
25452545
}
25462546

2547-
final override Instruction getInitializationSuccessor() {
2548-
result = this.getParent().getChildSuccessor(this, any(GotoEdge edge))
2547+
final override Instruction getInitializationSuccessor(EdgeKind kind) {
2548+
result = this.getParent().getChildSuccessor(this, kind)
25492549
}
25502550

25512551
final override Instruction getResult() { result = this.getTargetAddress() }
@@ -2593,8 +2593,9 @@ class TranslatedThrowValueExpr extends TranslatedThrowExpr, TranslatedVariableIn
25932593
result = TranslatedVariableInitialization.super.getInstructionSuccessor(tag, kind)
25942594
}
25952595

2596-
final override Instruction getInitializationSuccessor() {
2597-
result = this.getInstruction(ThrowTag())
2596+
final override Instruction getInitializationSuccessor(EdgeKind kind) {
2597+
result = this.getInstruction(ThrowTag()) and
2598+
kind instanceof GotoEdge
25982599
}
25992600

26002601
final override predicate hasTempVariable(TempVariableTag tag, CppType type) {

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedFunction.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@ class TranslatedDestructorDestructionList extends TranslatedElement,
674674
override Instruction getFirstInstruction(EdgeKind kind) {
675675
if exists(this.getChild(0))
676676
then result = this.getChild(0).getFirstInstruction(kind)
677-
else result = this.getParent().getChildSuccessor(this, any(GotoEdge edge))
677+
else result = this.getParent().getChildSuccessor(this, kind)
678678
}
679679

680680
override predicate hasInstruction(Opcode opcode, InstructionTag tag, CppType resultType) {

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,14 @@ abstract class TranslatedVariableInitialization extends TranslatedElement, Initi
6666
(
6767
result = this.getInitialization().getFirstInstruction(kind)
6868
or
69-
kind instanceof GotoEdge and
7069
not exists(this.getInitialization()) and
71-
result = this.getInitializationSuccessor()
70+
result = this.getInitializationSuccessor(kind)
7271
)
7372
}
7473

7574
final override Instruction getChildSuccessor(TranslatedElement child, EdgeKind kind) {
7675
child = this.getInitialization() and
77-
result = this.getInitializationSuccessor() and
78-
kind instanceof GotoEdge
76+
result = this.getInitializationSuccessor(kind)
7977
}
8078

8179
override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
@@ -110,8 +108,9 @@ abstract class TranslatedVariableInitialization extends TranslatedElement, Initi
110108

111109
/**
112110
* Gets the `Instruction` to be executed immediately after the initialization.
111+
* The successor edge kind is specified by `kind`.
113112
*/
114-
abstract Instruction getInitializationSuccessor();
113+
abstract Instruction getInitializationSuccessor(EdgeKind kind);
115114

116115
/**
117116
* Holds if this initialization requires an `Uninitialized` instruction to be emitted before

cpp/ql/lib/semmle/code/cpp/ir/implementation/raw/internal/TranslatedStmt.qll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,8 @@ abstract class TranslatedReturnStmt extends TranslatedStmt {
367367
class TranslatedReturnValueStmt extends TranslatedReturnStmt, TranslatedVariableInitialization {
368368
TranslatedReturnValueStmt() { stmt.hasExpr() and hasReturnValue(stmt.getEnclosingFunction()) }
369369

370-
final override Instruction getInitializationSuccessor() {
371-
result = this.getEnclosingFunction().getReturnSuccessorInstruction(any(GotoEdge edge))
370+
final override Instruction getInitializationSuccessor(EdgeKind kind) {
371+
result = this.getEnclosingFunction().getReturnSuccessorInstruction(kind)
372372
}
373373

374374
final override Type getTargetType() { result = this.getEnclosingFunction().getReturnType() }
@@ -460,8 +460,8 @@ class TranslatedNoValueReturnStmt extends TranslatedReturnStmt, TranslatedVariab
460460
not stmt.hasExpr() and hasReturnValue(stmt.getEnclosingFunction())
461461
}
462462

463-
final override Instruction getInitializationSuccessor() {
464-
result = this.getEnclosingFunction().getReturnSuccessorInstruction(any(GotoEdge edge))
463+
final override Instruction getInitializationSuccessor(EdgeKind kind) {
464+
result = this.getEnclosingFunction().getReturnSuccessorInstruction(kind)
465465
}
466466

467467
final override Type getTargetType() { result = this.getEnclosingFunction().getReturnType() }

0 commit comments

Comments
 (0)