From 7cd502256dde2fc32a1dd77462a69b6f8e84c288 Mon Sep 17 00:00:00 2001 From: Julius Ikkala Date: Sun, 11 May 2025 08:14:44 +0300 Subject: Fix local constants in switch cases (#7053) * Fix using local constants in switch cases * Add test * format code * Always lower switch cases with exprVal * Fix formatting --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> Co-authored-by: Yong He --- source/slang/slang-lower-to-ir.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'source') diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp index c58eed1c1..90780882d 100644 --- a/source/slang/slang-lower-to-ir.cpp +++ b/source/slang/slang-lower-to-ir.cpp @@ -6813,7 +6813,13 @@ struct StmtLoweringVisitor : StmtVisitor IRBuilder subBuilder = *getBuilder(); subBuilder.setInsertInto(info->initialBlock); subContext.irBuilder = &subBuilder; - auto caseVal = getSimpleVal(context, lowerRValueExpr(&subContext, caseStmt->expr)); + + auto constVal = as(caseStmt->exprVal); + SLANG_ASSERT(constVal); + auto caseType = lowerType(context, constVal->getType()); + auto caseValInfo = + LoweredValInfo::simple(getBuilder()->getIntValue(caseType, constVal->getValue())); + auto caseVal = getSimpleVal(context, caseValInfo); // Figure out where we are branching to. auto label = getLabelForCase(info); -- cgit v1.2.3