clangir
clangir copied to clipboard
Assertion failure on switch statement with non-block substatement
ClangIR hits an assertion failure when a switch statement has a non-block statement as its substatement.
int f(int x) {
switch (x)
case 1:
return -1;
return x;
}
clang++: .../clang/lib/CIR/CodeGen/CIRGenStmt.cpp:964:
cir::CIRGenFunction::buildSwitchStmt(const clang::SwitchStmt&)::<lambda()>::<lambda(mlir::OpBuilder&, mlir::Location, mlir::OperationState&)>:
Assertion `cs && "expected compound stmt"' failed.
While code like this should never appear in production and will only ever be found in test suites that try to break the compiler, it is legal code in both C and C++ and should not trigger an internal compiler error.
I'd like to work on this, it looks like I only need to add some logic to handle CaseStmt and DefaultStmt.