mibintc marked 2 inline comments as done.
mibintc added inline comments.

================
Comment at: clang/lib/AST/ExprConstant.cpp:2683
   }
+  if (const BinaryOperator *BE = dyn_cast<BinaryOperator>(E)) {
+    if (BE->getFPFeaturesInEffect(Info.Ctx.getLangOpts()).isFPConstrained()) {
----------------
rsmith wrote:
> `E` here is only intended for use in determining diagnostic locations, and 
> isn't intended to necessarily be the expression being evaluated. Instead of 
> assuming that this is the right expression to inspect, please either query 
> the FP features in the caller and pass them into here or change this function 
> to take a `const BinaryOperator*`.
OK I changed it to use BinaryOperator


================
Comment at: clang/lib/AST/ExprConstant.cpp:2685
+    if (BE->getFPFeaturesInEffect(Info.Ctx.getLangOpts()).isFPConstrained()) {
+      Info.CCEDiag(E, diag::note_constexpr_float_arithmetic_strict);
+      return false;
----------------
rsmith wrote:
> This should be an `FFDiag` not a `CCEDiag` because we want to suppress all 
> constant folding, not only treating the value as a core constant expression. 
> Also we should check this before checking for a NaN result, because if both 
> happen at once, this is the diagnostic we want to produce.
OK I made this change


================
Comment at: clang/lib/AST/ExprConstant.cpp:13283-13286
+    if (E->getFPFeaturesInEffect(Info.Ctx.getLangOpts()).isFPConstrained()) {
+      Info.CCEDiag(E, diag::note_constexpr_float_arithmetic_strict);
+      return false;
+    }
----------------
rsmith wrote:
> Hm, does `fabs` depend on the floating-point environment? Is the concern the 
> interaction with signaling NaNs?
You're right, "fabs(x) raises no floating-point exceptions, even if x is a 
signaling NaN. The returned value is independent of the current rounding 
direction mode.".  Thanks a lot for the careful reading, I really appreciate it


================
Comment at: clang/lib/AST/ExprConstant.cpp:13372-13376
+  if (E->getFPFeaturesInEffect(Info.Ctx.getLangOpts()).isFPConstrained()) {
+    // In C lang ref, footnote, cast may raise inexact exception.
+    Info.CCEDiag(E, diag::note_constexpr_float_arithmetic_strict);
+    return false;
+  }
----------------
rsmith wrote:
> Is it feasible to only reject cases that would actually be inexact, rather 
> than disallowing all conversions to floating-point types? It would seem 
> preferable to allow at least widening FP conversions and complex -> real, 
> since they never depend on the FP environment (right?).
I changed it like you suggested, do the binary APFloat calculation and check 
the operation status to see if the result is inexact. I also added logic to 
check "is widening".  Is that OK (builtin kind <) or maybe I should rather 
check the precision bitwidth? 


================
Comment at: clang/test/CodeGen/pragma-fenv_access.c:1
+// xxx: %clang_cc1 -ffp-exception-behavior=strict -frounding-math -triple 
%itanium_abi_triple -emit-llvm %s -o - | FileCheck %s
+// RUN: %clang_cc1 -ffp-exception-behavior=strict -triple %itanium_abi_triple 
-emit-llvm %s -o - | FileCheck %s
----------------
rsmith wrote:
> Is this RUN line intentionally disabled?
Oops thank you. I was working with an old revision of the patch and the test 
cause no longer worked because rounding setting was different. i just got rid 
of the run line that includes frounding-math


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