Index: clang/lib/AST/Interp/ByteCodeExprGen.cpp =================================================================== --- clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -1073,8 +1073,12 @@ return this->emitNullPtr(E); case PT_FnPtr: return this->emitNullFnPtr(E); - case PT_Float: - assert(false); + case PT_Float: { + const auto &Sem = Ctx.getASTContext().getFloatTypeSemantics(E->getType()); + + APFloat Val(Sem); + return this->emitConstFloat(Val, E); + } } llvm_unreachable("unknown primitive type"); } Index: clang/test/AST/Interp/floats.cpp =================================================================== --- clang/test/AST/Interp/floats.cpp +++ clang/test/AST/Interp/floats.cpp @@ -78,3 +78,17 @@ } static_assert(f2() == __FLT_MAX__, ""); } + +namespace ZeroInit { + template + struct A { + int a; + FloatT f; + }; + + constexpr A a{12}; + static_assert(a.f == 0.0f); + + constexpr A b{12}; + static_assert(a.f == 0.0); +};