summaryrefslogtreecommitdiff
path: root/clang/lib/Lex/PPMacroExpansion.cpp
diff options
context:
space:
mode:
authorZahira Ammarguellat <zahira.ammarguellat@intel.com>2023-03-09 09:24:01 -0500
committerTom Stellard <tstellar@redhat.com>2023-03-10 22:55:02 -0800
commitfce3e75e01babe38576b1519dab5f752955525f9 (patch)
treeca0bc3c7480a707694919ec5d677aa0eda7d1bdb /clang/lib/Lex/PPMacroExpansion.cpp
parenta9e129ed8806cc313fcda5017f25206cf73c42ea (diff)
downloadllvmorg-16.0.0-rc4.tar.gz
Revert "Currently the control of the eval-method is mixed with fast-math."llvmorg-16.0.0-rc4
Setting __FLT_EVAL_METHOD__ to -1 with fast-math will set __GLIBC_FLT_EVAL_METHOD to 2 and long double ends up being used for float_t and double_t. This creates some ABI breakage with various C libraries. See details here: https://github.com/llvm/llvm-project/issues/60781 This reverts commit bbf0d1932a3c1be970ed8a580e51edf571b80fd5. (cherry picked from commit 2f1264260b37e9bd79737181e459ae20e10c5fea)
Diffstat (limited to 'clang/lib/Lex/PPMacroExpansion.cpp')
-rw-r--r--clang/lib/Lex/PPMacroExpansion.cpp37
1 files changed, 8 insertions, 29 deletions
diff --git a/clang/lib/Lex/PPMacroExpansion.cpp b/clang/lib/Lex/PPMacroExpansion.cpp
index bbc271e5611e..76d0d53ed31d 100644
--- a/clang/lib/Lex/PPMacroExpansion.cpp
+++ b/clang/lib/Lex/PPMacroExpansion.cpp
@@ -1637,35 +1637,14 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
Tok.setKind(tok::string_literal);
} else if (II == Ident__FLT_EVAL_METHOD__) {
// __FLT_EVAL_METHOD__ is set to the default value.
- if (getTUFPEvalMethod() ==
- LangOptions::FPEvalMethodKind::FEM_Indeterminable) {
- // This is possible if `AllowFPReassoc` or `AllowReciprocal` is enabled.
- // These modes can be triggered via the command line option `-ffast-math`
- // or via a `pragam float_control`.
- // __FLT_EVAL_METHOD__ expands to -1.
- // The `minus` operator is the next token we read from the stream.
- auto Toks = std::make_unique<Token[]>(1);
- OS << "-";
- Tok.setKind(tok::minus);
- // Push the token `1` to the stream.
- Token NumberToken;
- NumberToken.startToken();
- NumberToken.setKind(tok::numeric_constant);
- NumberToken.setLiteralData("1");
- NumberToken.setLength(1);
- Toks[0] = NumberToken;
- EnterTokenStream(std::move(Toks), 1, /*DisableMacroExpansion*/ false,
- /*IsReinject*/ false);
- } else {
- OS << getTUFPEvalMethod();
- // __FLT_EVAL_METHOD__ expands to a simple numeric value.
- Tok.setKind(tok::numeric_constant);
- if (getLastFPEvalPragmaLocation().isValid()) {
- // The program is ill-formed. The value of __FLT_EVAL_METHOD__ is
- // altered by the pragma.
- Diag(Tok, diag::err_illegal_use_of_flt_eval_macro);
- Diag(getLastFPEvalPragmaLocation(), diag::note_pragma_entered_here);
- }
+ OS << getTUFPEvalMethod();
+ // __FLT_EVAL_METHOD__ expands to a simple numeric value.
+ Tok.setKind(tok::numeric_constant);
+ if (getLastFPEvalPragmaLocation().isValid()) {
+ // The program is ill-formed. The value of __FLT_EVAL_METHOD__ is altered
+ // by the pragma.
+ Diag(Tok, diag::err_illegal_use_of_flt_eval_macro);
+ Diag(getLastFPEvalPragmaLocation(), diag::note_pragma_entered_here);
}
} else if (II == Ident__COUNTER__) {
// __COUNTER__ expands to a simple numeric value.