diff --git a/toolchain/check/cpp/constant.cpp b/toolchain/check/cpp/constant.cpp index 3faebd138525..10e6b8df0c9b 100644 --- a/toolchain/check/cpp/constant.cpp +++ b/toolchain/check/cpp/constant.cpp @@ -30,6 +30,10 @@ auto MapAPValueToConstant(Context& context, SemIR::LocId loc_id, return TryEvalInst(context, SemIR::IntValue{.type_id = type_id, .int_id = int_id}); } + } else if (ap_value.isFloat()) { + FloatId float_id = context.floats().Add(ap_value.getFloat()); + return TryEvalInst( + context, SemIR::FloatValue{.type_id = type_id, .float_id = float_id}); } else { // TODO: support other types. return SemIR::ConstantId::NotConstant; diff --git a/toolchain/check/testdata/interop/cpp/constexpr.carbon b/toolchain/check/testdata/interop/cpp/constexpr.carbon index 1ad49245a592..ce1b2dcbde29 100644 --- a/toolchain/check/testdata/interop/cpp/constexpr.carbon +++ b/toolchain/check/testdata/interop/cpp/constexpr.carbon @@ -33,3 +33,15 @@ constexpr int i = 123; class C(I:! i32) {} fn F() -> C(Cpp.i); let x: C(123) = F(); + +// --- float.carbon + +library "[[@TEST_NAME]]"; + +import Cpp inline ''' +constexpr float flt = 123.5; +'''; + +class C(V:! f32) {} +fn F() -> C(Cpp.flt); +let x: C(123.5) = F();