[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