forked from OSchip/llvm-project
Define __FINITE_MATH_ONLY__ based on -ffast-math and -ffinite-math-only.
This macro was being unconditionally set to zero, preceded by a FIXME comment. This fixes <rdar://problem/11845441>. Patch by Michael Gottesman! llvm-svn: 160491
This commit is contained in:
parent
24a1047c8c
commit
6a039161d7
|
@ -99,6 +99,7 @@ LANGOPT(GNUInline , 1, 0, "GNU inline semantics")
|
|||
LANGOPT(NoInlineDefine , 1, 0, "__NO_INLINE__ predefined macro")
|
||||
LANGOPT(Deprecated , 1, 0, "__DEPRECATED predefined macro")
|
||||
LANGOPT(FastMath , 1, 0, "__FAST_MATH__ predefined macro")
|
||||
LANGOPT(FiniteMathOnly , 1, 0, "__FINITE_MATH_ONLY__ predefined macro")
|
||||
|
||||
BENIGN_LANGOPT(ObjCGCBitmapPrint , 1, 0, "printing of GC's bitmap layout for __weak/__strong ivars")
|
||||
|
||||
|
|
|
@ -400,7 +400,7 @@ def fassociative_math : Flag<"-fassociative-math">, Group<f_Group>;
|
|||
def fno_associative_math : Flag<"-fno-associative-math">, Group<f_Group>;
|
||||
def freciprocal_math : Flag<"-freciprocal-math">, Group<f_Group>;
|
||||
def fno_reciprocal_math : Flag<"-fno-reciprocal-math">, Group<f_Group>;
|
||||
def ffinite_math_only : Flag<"-ffinite-math-only">, Group<f_Group>;
|
||||
def ffinite_math_only : Flag<"-ffinite-math-only">, Group<f_Group>, Flags<[CC1Option]>;
|
||||
def fno_finite_math_only : Flag<"-fno-finite-math-only">, Group<f_Group>;
|
||||
def fsigned_zeros : Flag<"-fsigned-zeros">, Group<f_Group>;
|
||||
def fno_signed_zeros : Flag<"-fno-signed-zeros">, Group<f_Group>;
|
||||
|
|
|
@ -1823,12 +1823,15 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
}
|
||||
}
|
||||
|
||||
// We separately look for the '-ffast-math' flag, and if we find it, tell the
|
||||
// frontend to provide the appropriate preprocessor macros. This is distinct
|
||||
// from enabling any optimizations as it induces a language change which must
|
||||
// survive serialization and deserialization, etc.
|
||||
// We separately look for the '-ffast-math' and '-ffinite-math-only' flags,
|
||||
// and if we find them, tell the frontend to provide the appropriate
|
||||
// preprocessor macros. This is distinct from enabling any optimizations as
|
||||
// these options induce language changes which must survive serialization
|
||||
// and deserialization, etc.
|
||||
if (Args.hasArg(options::OPT_ffast_math))
|
||||
CmdArgs.push_back("-ffast-math");
|
||||
if (Args.hasArg(options::OPT_ffinite_math_only))
|
||||
CmdArgs.push_back("-ffinite-math-only");
|
||||
|
||||
// Decide whether to use verbose asm. Verbose assembly is the default on
|
||||
// toolchains which have the integrated assembler on by default.
|
||||
|
|
|
@ -2100,6 +2100,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
|||
Opts.NoInlineDefine = !Opt || Args.hasArg(OPT_fno_inline);
|
||||
|
||||
Opts.FastMath = Args.hasArg(OPT_ffast_math);
|
||||
Opts.FiniteMathOnly = Args.hasArg(OPT_ffinite_math_only);
|
||||
|
||||
unsigned SSP = Args.getLastArgIntValue(OPT_stack_protector, 0, Diags);
|
||||
switch (SSP) {
|
||||
|
|
|
@ -527,9 +527,10 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
|
|||
if (const char *Prefix = TI.getUserLabelPrefix())
|
||||
Builder.defineMacro("__USER_LABEL_PREFIX__", Prefix);
|
||||
|
||||
// Build configuration options. FIXME: these should be controlled by
|
||||
// command line options or something.
|
||||
Builder.defineMacro("__FINITE_MATH_ONLY__", "0");
|
||||
if (LangOpts.FastMath || LangOpts.FiniteMathOnly)
|
||||
Builder.defineMacro("__FINITE_MATH_ONLY__", "1");
|
||||
else
|
||||
Builder.defineMacro("__FINITE_MATH_ONLY__", "0");
|
||||
|
||||
if (LangOpts.GNUInline)
|
||||
Builder.defineMacro("__GNUC_GNU_INLINE__");
|
||||
|
|
|
@ -13,3 +13,16 @@
|
|||
// RUN: %clang_cc1 %s -E -dM -ffast-math -o - \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-FAST-MATH
|
||||
// CHECK-FAST-MATH: #define __FAST_MATH__
|
||||
// CHECK-FAST-MATH: #define __FINITE_MATH_ONLY__ 1
|
||||
//
|
||||
// RUN: %clang_cc1 %s -E -dM -ffinite-math-only -o - \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-FINITE-MATH-ONLY
|
||||
// CHECK-FINITE-MATH-ONLY: #define __FINITE_MATH_ONLY__ 1
|
||||
//
|
||||
// RUN: %clang %s -E -dM -fno-finite-math-only -o - \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-NO-FINITE-MATH-ONLY
|
||||
// CHECK-NO-FINITE-MATH-ONLY: #define __FINITE_MATH_ONLY__ 0
|
||||
//
|
||||
// RUN: %clang_cc1 %s -E -dM -o - \
|
||||
// RUN: | FileCheck %s --check-prefix=CHECK-FINITE-MATH-FLAG-UNDEFINED
|
||||
// CHECK-FINITE-MATH-FLAG-UNDEFINED: #define __FINITE_MATH_ONLY__ 0
|
||||
|
|
Loading…
Reference in New Issue