From: Benjamin Kramer Date: Wed, 2 May 2012 14:55:48 +0000 (+0000) Subject: Driver: Turn the default value for -fmath-errno into a proper target hook and disable... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=769aa2d46fa5dc0bee5285c95a80ad8749cb79cf;p=clang Driver: Turn the default value for -fmath-errno into a proper target hook and disable it by default on more platforms. For now -fno-math-errno is the default on BSD-derived platforms (Darwin, DragonFlyBSD, FreeBSD, NetBSD, OpenBSD). If the default is not right for your platform, please yell. I only verified the result with the default compilers on Darwin and FreeBSD. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155990 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/ToolChain.h b/include/clang/Driver/ToolChain.h index c35cf673de..ff85407a45 100644 --- a/include/clang/Driver/ToolChain.h +++ b/include/clang/Driver/ToolChain.h @@ -137,6 +137,9 @@ public: /// default. virtual bool IsStrictAliasingDefault() const { return true; } + /// IsMathErrnoDefault - Does this tool chain use -fmath-errno by default. + virtual bool IsMathErrnoDefault() const { return true; } + /// IsObjCDefaultSynthPropertiesDefault - Does this tool chain enable /// -fobjc-default-synthesize-properties by default. virtual bool IsObjCDefaultSynthPropertiesDefault() const { return false; } diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h index eaa6be1b0d..a76a773a64 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h @@ -333,7 +333,11 @@ public: return ToolChain::IsStrictAliasingDefault(); #endif } - + + virtual bool IsMathErrnoDefault() const { + return false; + } + virtual bool IsObjCDefaultSynthPropertiesDefault() const { return true; } @@ -459,6 +463,7 @@ class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF { public: OpenBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args); + virtual bool IsMathErrnoDefault() const { return false; } virtual bool IsObjCNonFragileABIDefault() const { return true; } virtual bool IsObjCLegacyDispatchDefault() const { llvm::Triple::ArchType Arch = getTriple().getArch(); @@ -477,6 +482,7 @@ class LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic_ELF { public: FreeBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args); + virtual bool IsMathErrnoDefault() const { return false; } virtual bool IsObjCNonFragileABIDefault() const { return true; } virtual bool IsObjCLegacyDispatchDefault() const { llvm::Triple::ArchType Arch = getTriple().getArch(); @@ -495,6 +501,7 @@ class LLVM_LIBRARY_VISIBILITY NetBSD : public Generic_ELF { public: NetBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args); + virtual bool IsMathErrnoDefault() const { return false; } virtual bool IsObjCNonFragileABIDefault() const { return true; } virtual bool IsObjCLegacyDispatchDefault() const { llvm::Triple::ArchType Arch = getTriple().getArch(); @@ -521,6 +528,8 @@ class LLVM_LIBRARY_VISIBILITY DragonFly : public Generic_ELF { public: DragonFly(const Driver &D, const llvm::Triple& Triple, const ArgList &Args); + virtual bool IsMathErrnoDefault() const { return false; } + virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, const ActionList &Inputs) const; }; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 2cf0c6747c..6b3effb4d0 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -1617,9 +1617,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, A->getOption().getID() != options::OPT_fhonor_nans) CmdArgs.push_back("-menable-no-nans"); - // -fno-math-errno is default on Darwin. Other platforms, -fmath-errno is the - // default. - bool MathErrno = !getToolChain().getTriple().isOSDarwin(); + // -fmath-errno is the default on some platforms, e.g. BSD-derived OSes. + bool MathErrno = getToolChain().IsMathErrnoDefault(); if (Arg *A = Args.getLastArg(options::OPT_ffast_math, options::OPT_fmath_errno, options::OPT_fno_math_errno)) diff --git a/test/Driver/fast-math.c b/test/Driver/fast-math.c index 09d249d6c2..8426f0950a 100644 --- a/test/Driver/fast-math.c +++ b/test/Driver/fast-math.c @@ -26,6 +26,14 @@ // RUN: | FileCheck --check-prefix=CHECK-NO-MATH-ERRNO %s // RUN: %clang -### -target i686-apple-darwin -c %s 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-NO-MATH-ERRNO %s +// RUN: %clang -### -target x86_64-unknown-freebsd -c %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NO-MATH-ERRNO %s +// RUN: %clang -### -target x86_64-unknown-netbsd -c %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NO-MATH-ERRNO %s +// RUN: %clang -### -target x86_64-unknown-openbsd -c %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NO-MATH-ERRNO %s +// RUN: %clang -### -target x86_64-unknown-dragonfly -c %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NO-MATH-ERRNO %s // CHECK-NO-MATH-ERRNO: "-cc1" // CHECK-NO-MATH-ERRNO-NOT: "-fmath-errno" //