C++: add support for GNU StmtExpr in IR

This commit is contained in:
Robert Marsh
2019-02-25 11:27:39 -08:00
parent 2ba122373a
commit f2fbdac31b
4 changed files with 968 additions and 904 deletions

View File

@@ -8,6 +8,8 @@ private import TranslatedDeclarationEntry
private import TranslatedElement
private import TranslatedFunction
private import TranslatedInitialization
private import TranslatedFunction
private import TranslatedStmt
import TranslatedCall
/**
@@ -2727,3 +2729,36 @@ class TranslatedLambdaExpr extends TranslatedNonConstantExpr, InitializationCont
result = getTranslatedInitialization(expr.getChild(0).getFullyConverted())
}
}
class TranslatedStmtExpr extends TranslatedNonConstantExpr {
override StmtExpr expr;
override final Instruction getFirstInstruction() {
result = getStmt().getFirstInstruction()
}
override final TranslatedElement getChild(int id) {
id = 0 and result = getStmt()
}
override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) {
none()
}
override Instruction getChildSuccessor(TranslatedElement child) {
result = getParent().getChildSuccessor(this)
}
override predicate hasInstruction(Opcode opcode, InstructionTag tag, Type resultType,
boolean isGLValue) {
none()
}
override Instruction getResult() {
result = getTranslatedExpr(expr.getResultExpr()).getResult()
}
TranslatedStmt getStmt() {
result = getTranslatedStmt(expr.getStmt())
}
}