================
@@ -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
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to