Skip to content

Commit f2fbdac

Browse files
author
Robert Marsh
committed
C++: add support for GNU StmtExpr in IR
1 parent 2ba1223 commit f2fbdac

File tree

4 files changed

+973
-909
lines changed

4 files changed

+973
-909
lines changed

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ private import TranslatedDeclarationEntry
88
private import TranslatedElement
99
private import TranslatedFunction
1010
private import TranslatedInitialization
11+
private import TranslatedFunction
12+
private import TranslatedStmt
1113
import TranslatedCall
1214

1315
/**
@@ -2727,3 +2729,36 @@ class TranslatedLambdaExpr extends TranslatedNonConstantExpr, InitializationCont
27272729
result = getTranslatedInitialization(expr.getChild(0).getFullyConverted())
27282730
}
27292731
}
2732+
2733+
class TranslatedStmtExpr extends TranslatedNonConstantExpr {
2734+
override StmtExpr expr;
2735+
2736+
override final Instruction getFirstInstruction() {
2737+
result = getStmt().getFirstInstruction()
2738+
}
2739+
2740+
override final TranslatedElement getChild(int id) {
2741+
id = 0 and result = getStmt()
2742+
}
2743+
2744+
override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) {
2745+
none()
2746+
}
2747+
2748+
override Instruction getChildSuccessor(TranslatedElement child) {
2749+
result = getParent().getChildSuccessor(this)
2750+
}
2751+
2752+
override predicate hasInstruction(Opcode opcode, InstructionTag tag, Type resultType,
2753+
boolean isGLValue) {
2754+
none()
2755+
}
2756+
2757+
override Instruction getResult() {
2758+
result = getTranslatedExpr(expr.getResultExpr()).getResult()
2759+
}
2760+
2761+
TranslatedStmt getStmt() {
2762+
result = getTranslatedStmt(expr.getStmt())
2763+
}
2764+
}

0 commit comments

Comments
 (0)