https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/69868
None >From 537c917cab1fe8bd8dc7dfd849bff9cd5be5efc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbae...@redhat.com> Date: Sun, 22 Oct 2023 06:56:46 +0200 Subject: [PATCH] [clang][Interp] Fix scalar inits of void type --- clang/lib/AST/Interp/ByteCodeExprGen.cpp | 8 ++++++-- clang/test/AST/Interp/literals.cpp | 9 +++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index ed971fe0f650f22..d7c370cb3efa45c 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -1571,8 +1571,12 @@ bool ByteCodeExprGen<Emitter>::VisitOffsetOfExpr(const OffsetOfExpr *E) { template <class Emitter> bool ByteCodeExprGen<Emitter>::VisitCXXScalarValueInitExpr( const CXXScalarValueInitExpr *E) { - return this->visitZeroInitializer(classifyPrim(E->getType()), E->getType(), - E); + QualType Ty = E->getType(); + + if (Ty->isVoidType()) + return true; + + return this->visitZeroInitializer(classifyPrim(Ty), Ty, E); } template <class Emitter> bool ByteCodeExprGen<Emitter>::discard(const Expr *E) { diff --git a/clang/test/AST/Interp/literals.cpp b/clang/test/AST/Interp/literals.cpp index a83dcd234111587..fd0123e2ef55115 100644 --- a/clang/test/AST/Interp/literals.cpp +++ b/clang/test/AST/Interp/literals.cpp @@ -56,6 +56,15 @@ namespace ScalarTypes { }; static_assert(getScalar<E>() == First, ""); /// FIXME: Member pointers. + +#if __cplusplus >= 201402L + constexpr void Void(int n) { + void(n + 1); + void(); + } + constexpr int void_test = (Void(0), 1); + static_assert(void_test == 1, ""); +#endif } namespace IntegralCasts { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits