diff --git a/lib/IRGen/GenConstant.cpp b/lib/IRGen/GenConstant.cpp index 4dc9c9190af56..7271525557751 100644 --- a/lib/IRGen/GenConstant.cpp +++ b/lib/IRGen/GenConstant.cpp @@ -269,6 +269,13 @@ Explosion irgen::emitConstantValue(IRGenModule &IGM, SILValue operand, strategy.emitValueInjection(IGM, builder, ei->getElement(), data, out); return replaceUnalignedIntegerValues(IGM, std::move(out)); } else if (auto *ILI = dyn_cast(operand)) { + if (ILI->getType().is()) { + auto pair = emitConstantIntegerLiteral(IGM, ILI); + Explosion e; + e.add(pair.Data); + e.add(pair.Flags); + return e; + } return emitConstantInt(IGM, ILI); } else if (auto *FLI = dyn_cast(operand)) { return emitConstantFP(IGM, FLI); diff --git a/test/SILOptimizer/static_bigint_enums.swift b/test/SILOptimizer/static_bigint_enums.swift new file mode 100644 index 0000000000000..dae529e24cbb8 --- /dev/null +++ b/test/SILOptimizer/static_bigint_enums.swift @@ -0,0 +1,28 @@ +// RUN: %target-build-swift -parse-as-library -O %s -module-name=test -emit-sil | %FileCheck %s + +// RUN: %empty-directory(%t) +// RUN: %target-build-swift -parse-as-library -O -module-name=test %s -o %t/a.out +// RUN: %target-run %t/a.out | %FileCheck %s -check-prefix=CHECK-OUTPUT + +// REQUIRES: executable_test,swift_stdlib_no_asserts,optimized_stdlib +// UNSUPPORTED: use_os_stdlib + + +@available(SwiftStdlib 5.8, *) +public enum StaticIntStringEnum { + case s(StaticString) + case i(StaticBigInt) + + // CHECK-LABEL: sil_global hidden @$s4test19StaticIntStringEnumO1xACvpZ : $StaticIntStringEnum = { + static var x = Self.i(27) +} + +@available(SwiftStdlib 5.8, *) +@main +struct Main { + static func main() { + // CHECK-OUTPUT: StaticIntStringEnum: i(+0x1B) + print("StaticIntStringEnum:", StaticIntStringEnum.x) + } +} +