[clang] 9860e68 - Don't leave the FPOptions in a UnaryOperator uninitialized.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Sun Aug 16 15:27:11 PDT 2020


Author: Richard Smith
Date: 2020-08-16T15:16:12-07:00
New Revision: 9860e68450cd04ec2c53fe2dbcfab64a86c76673

URL: https://github.com/llvm/llvm-project/commit/9860e68450cd04ec2c53fe2dbcfab64a86c76673
DIFF: https://github.com/llvm/llvm-project/commit/9860e68450cd04ec2c53fe2dbcfab64a86c76673.diff

LOG: Don't leave the FPOptions in a UnaryOperator uninitialized.

We don't appear to use these FPOptions for anything right now, but
they shouldn't be uninitialized because that makes our AST file output
nondeterministic.

Added: 
    clang/test/PCH/determinism.cpp

Modified: 
    clang/lib/AST/Expr.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 29f96674e174..f5aecfb7fdae 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -4569,6 +4569,8 @@ UnaryOperator::UnaryOperator(const ASTContext &Ctx, Expr *input, Opcode opc,
   UnaryOperatorBits.CanOverflow = CanOverflow;
   UnaryOperatorBits.Loc = l;
   UnaryOperatorBits.HasFPFeatures = FPFeatures.requiresTrailingStorage();
+  if (hasStoredFPFeatures())
+    setStoredFPFeatures(FPFeatures);
   setDependence(computeDependence(this));
 }
 

diff  --git a/clang/test/PCH/determinism.cpp b/clang/test/PCH/determinism.cpp
new file mode 100644
index 000000000000..540088e2c91b
--- /dev/null
+++ b/clang/test/PCH/determinism.cpp
@@ -0,0 +1,18 @@
+// RUN: rm -rf %t
+// RUN: mkdir %t
+
+// RUN: %clang_cc1 -x c++-header %s -emit-pch -o %t/a.pch
+// RUN: %clang_cc1 -x c++-header %s -emit-pch -o %t/b.pch
+// RUN: cmp %t/a.pch %t/b.pch
+
+#pragma float_control(push)
+double fp_control_1(double x) {
+#pragma float_control(precise, on)
+  return -x + x;
+}
+
+double fp_control_2(double x) {
+#pragma float_control(precise, off)
+  return -x + x;
+}
+#pragma float_control(pop)


        


More information about the cfe-commits mailing list