rjmccall added a comment.

Richard, what do you think the right rule is for when to use the special 
constant-evaluation rules for this feature in C++?  The C standard says that 
constant expressions should use the default rules rather than considering the 
dynamic environment, but C can get away with that because constant expressions 
are restricted to a narrow set of syntactic situations.  In C++, [cfenv.syn]p1 
says:

  If the pragma is used to enable control over the floating-point environment, 
this document does not specify the effect on floating-point evaluation in 
constant expressions.

i.e. the standard punts to the implementation.  So I think we need to actually 
formulate a policy for when something counts as a "constant expression" for the 
purposes of ignoring this pragma.  Allow me to suggest:

- initializers for objects of static storage duration if they would be constant 
initializers if they weren't covered by the pragma; this should roughly align C 
and C++ semantics for things like `static const` within a function
- any `constexpr` / `constinit` context, and it should be ill-formed to use the 
pragma in such a context; that is, it's ignored from outside and prohibited 
(directly) inside


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D87528/new/

https://reviews.llvm.org/D87528

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to