[clang] [clang] Remove hasValue() check in `RecordExprEvaluator::VisitCXXConstructExpr()` (PR #154610)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 20 23:53:54 PDT 2025
https://github.com/tbaederr updated https://github.com/llvm/llvm-project/pull/154610
>From 50ef42d9f70323c91463bc27e7b14c9a3e126ede Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Wed, 20 Aug 2025 22:40:17 +0200
Subject: [PATCH] Test
---
clang/lib/AST/ExprConstant.cpp | 4 ----
clang/test/SemaCXX/constant-expression-cxx11.cpp | 16 ++++++++++++++++
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 40c56501b0c14..8cec7d75347b0 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -11045,10 +11045,6 @@ bool RecordExprEvaluator::VisitCXXConstructExpr(const CXXConstructExpr *E,
bool ZeroInit = E->requiresZeroInitialization();
if (CheckTrivialDefaultConstructor(Info, E->getExprLoc(), FD, ZeroInit)) {
- // If we've already performed zero-initialization, we're already done.
- if (Result.hasValue())
- return true;
-
if (ZeroInit)
return ZeroInitialization(E, T);
diff --git a/clang/test/SemaCXX/constant-expression-cxx11.cpp b/clang/test/SemaCXX/constant-expression-cxx11.cpp
index 2423a77e6e7d2..91c4ff1cb520d 100644
--- a/clang/test/SemaCXX/constant-expression-cxx11.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx11.cpp
@@ -2645,3 +2645,19 @@ namespace GH150709 {
static_assert((e2[0].*mp)() == 1, ""); // expected-error {{constant expression}}
static_assert((g.*mp)() == 1, ""); // expected-error {{constant expression}}
}
+
+namespace GH154567 {
+ struct T {
+ int i;
+ };
+
+ struct S {
+ struct { // expected-warning {{GNU extension}}
+ T val;
+ };
+ constexpr S() : val() {}
+ };
+
+ constexpr S s{};
+ static_assert(s.val.i == 0, "");
+}
More information about the cfe-commits
mailing list