[clang] [clang] Remove separate evaluation step for static class member init. (PR #142713)
Shafik Yaghmour via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 6 14:22:38 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}}
----------------
shafik wrote:
So if this is constant evaluated we have UB (divide by zero) so then it can't be constant evaluated and therefore `__builtin_is_constant_evaluated()` must be zero and therefore no divide by zero.
Which is the same logic used in the example in *[expr.const]p28.5*
https://github.com/llvm/llvm-project/pull/142713
More information about the cfe-commits
mailing list