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