[clang] [clang] Remove separate evaluation step for static class member init. (PR #142713)

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 6 15:02:59 PDT 2025


================
@@ -143,3 +143,8 @@ namespace fold_initializer {
   const float A::f = __builtin_is_constant_evaluated();
   static_assert(fold(A::f == 1.0f));
 }
+
+struct GH99680 {
+  static const int x = 1/(1-__builtin_is_constant_evaluated()); // expected-error {{in-class initializer for static data member is not a constant expression}} \
+    // expected-note {{division by zero}}
----------------
zygoloid wrote:

I also think this outcome is pretty surprising: https://godbolt.org/z/cobb3Px5Y
The new behavior seems like what we ought to be doing, even if the old behavior is the one the rules appear to require. All other implementations seem to be checking whether the variable is constant-initialized, not whether its initializer is a constant expression.

https://github.com/llvm/llvm-project/pull/142713


More information about the cfe-commits mailing list