Author: Melanie Blower Date: 2020-05-06T13:18:59-07:00 New Revision: e5578013b199e142864cbf374b4a143e5d0c184a
URL: https://github.com/llvm/llvm-project/commit/e5578013b199e142864cbf374b4a143e5d0c184a DIFF: https://github.com/llvm/llvm-project/commit/e5578013b199e142864cbf374b4a143e5d0c184a.diff LOG: When pragma FENV_ACCESS is ignored do not modify Sema.CurFPFeatures Bug reported by @uabelho against reviews.llvm.org/D72841 Reviewers: rjmccall Differential Revision: https://reviews.llvm.org/D79510 Added: Modified: clang/lib/Parse/ParsePragma.cpp clang/test/CodeGen/fp-floatcontrol-pragma.cpp clang/test/Parser/fp-floatcontrol-syntax.cpp Removed: ################################################################################ diff --git a/clang/lib/Parse/ParsePragma.cpp b/clang/lib/Parse/ParsePragma.cpp index 8adf978a8e13..828d429e6969 100644 --- a/clang/lib/Parse/ParsePragma.cpp +++ b/clang/lib/Parse/ParsePragma.cpp @@ -108,6 +108,7 @@ struct PragmaSTDC_FENV_ACCESSHandler : public PragmaHandler { return; if (OOS == tok::OOS_ON) { PP.Diag(Tok, diag::warn_stdc_fenv_access_not_supported); + return; } MutableArrayRef<Token> Toks(PP.getPreprocessorAllocator().Allocate<Token>(1), diff --git a/clang/test/CodeGen/fp-floatcontrol-pragma.cpp b/clang/test/CodeGen/fp-floatcontrol-pragma.cpp index caaab3ca4f84..773cfcdd2829 100644 --- a/clang/test/CodeGen/fp-floatcontrol-pragma.cpp +++ b/clang/test/CodeGen/fp-floatcontrol-pragma.cpp @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -verify -DFENV_ON=1 -triple x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s float fff(float x, float y) { // CHECK-LABEL: define float @_Z3fffff{{.*}} @@ -38,6 +39,7 @@ float check_precise(float x, float y) { } return z; } + float fma_test1(float a, float b, float c) { // CHECK-LABEL define float @_Z9fma_test1fff{{.*}} #pragma float_control(precise, on) @@ -45,3 +47,15 @@ float fma_test1(float a, float b, float c) { //CHECK: fmuladd return x; } + +#if FENV_ON +// expected-warning@+1{{pragma STDC FENV_ACCESS ON is not supported, ignoring pragma}} +#pragma STDC FENV_ACCESS ON +#endif +// CHECK-LABEL: define {{.*}}callt{{.*}} + +void callt() { + volatile float z; + z = z * z; +//CHECK: = fmul float +} diff --git a/clang/test/Parser/fp-floatcontrol-syntax.cpp b/clang/test/Parser/fp-floatcontrol-syntax.cpp index a7303720e6c4..4bdc34dd5ee0 100644 --- a/clang/test/Parser/fp-floatcontrol-syntax.cpp +++ b/clang/test/Parser/fp-floatcontrol-syntax.cpp @@ -30,14 +30,15 @@ double b = 1.0; // document the warning #ifdef FAST // expected-warning@+1{{pragma STDC FENV_ACCESS ON is not supported, ignoring pragma}} -#pragma STDC FENV_ACCESS ON // expected-error{{'#pragma STDC FENV_ACCESS ON' is illegal when precise is disabled}} +#pragma STDC FENV_ACCESS ON #else #pragma STDC FENV_ACCESS ON // expected-warning{{pragma STDC FENV_ACCESS ON is not supported, ignoring pragma}} #endif #ifdef STRICT #pragma float_control(precise, off) // expected-error {{'#pragma float_control(precise, off)' is illegal when except is enabled}} #else -#pragma float_control(precise, off) // expected-error {{'#pragma float_control(precise, off)' is illegal when fenv_access is enabled}} +// Currently FENV_ACCESS cannot be enabled by pragma, skip error check +#pragma float_control(precise, off) // not-expected-error {{'#pragma float_control(precise, off)' is illegal when fenv_access is enabled}} #endif #pragma float_control(precise, on) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits