clangir icon indicating copy to clipboard operation
clangir copied to clipboard

Assertion failure on switch statement with non-block substatement

Open dkolsen-pgi opened this issue 11 months ago • 1 comments

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.

dkolsen-pgi avatar Mar 24 '24 17:03 dkolsen-pgi

I'd like to work on this, it looks like I only need to add some logic to handle CaseStmt and DefaultStmt.

wenpen avatar Apr 01 '24 12:04 wenpen