diff options
Diffstat (limited to 'lib/CodeGen/ControlFlowGen.cc')
| -rw-r--r-- | lib/CodeGen/ControlFlowGen.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/CodeGen/ControlFlowGen.cc b/lib/CodeGen/ControlFlowGen.cc index 17f43f2..0cf0c34 100644 --- a/lib/CodeGen/ControlFlowGen.cc +++ b/lib/CodeGen/ControlFlowGen.cc @@ -204,6 +204,14 @@ void CodeGen::emitCaseStmt(CaseStmtAST *Stmt) { return nullptr; } Value *LabelValue = emitExpr(Label); + auto Overload = resolveOperator(Op, SelectorType, LabelType); + if (Overload.Signature && !Overload.Ambiguous) { + const TypeInfo *Result = resolveType(Overload.Signature->ReturnTypeName); + if (!Result || Result->Kind != TypeKind::Boolean) { + reportError("CASE comparison must return BOOLEAN"); + return nullptr; + } + } return emitBinaryOp(Op, Selected, SelectorType, LabelValue, LabelType, Branch.Line); }; if (!Branch.Lower) { |
