aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-11-17 06:37:03 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-11-17 06:37:03 +0000
commit1f95e6567faab67f4363d650f73121359c4bdbab (patch)
treef0ef424cec2ae73bc83a8365741b411382bccf86
parent48cebf2bb14ab9ca561adf30e9f7a949a08dde0e (diff)
Move char-is-signed defaulting to driver, instead of using
getDefaultLangOptions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89053 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Basic/Targets.cpp13
-rw-r--r--lib/Driver/Tools.cpp31
-rw-r--r--test/Preprocessor/init.c6
3 files changed, 25 insertions, 25 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index 91ecf475e6..07c9e37d1c 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -160,9 +160,6 @@ static void GetDarwinLanguageOptions(LangOptions &Opts,
const llvm::Triple &Triple) {
Opts.NeXTRuntime = true;
- if (Triple.getOS() != llvm::Triple::Darwin)
- return;
-
unsigned MajorVersion = Triple.getDarwinMajorNumber();
// Blocks and stack protectors default to on for 10.6 (darwin10) and beyond.
@@ -192,7 +189,6 @@ protected:
/// various language options. These may be overridden by command line
/// options.
virtual void getDefaultLangOptions(LangOptions &Opts) {
- TargetInfo::getDefaultLangOptions(Opts);
GetDarwinLanguageOptions(Opts, TargetInfo::getTriple());
}
public:
@@ -436,10 +432,6 @@ public:
return true;
}
}
- virtual void getDefaultLangOptions(LangOptions &Opts) {
- TargetInfo::getDefaultLangOptions(Opts);
- Opts.CharIsSigned = false;
- }
virtual const char *getClobbers() const {
return "";
}
@@ -1676,11 +1668,6 @@ namespace {
NumRecords = 0;
}
- virtual void getDefaultLangOptions(LangOptions &Opts) {
- TargetInfo::getDefaultLangOptions(Opts);
- Opts.CharIsSigned = false;
- }
-
virtual void getGCCRegNames(const char * const *&Names,
unsigned &NumNames) const;
virtual void getGCCRegAliases(const GCCRegAlias *&Aliases,
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 657ebee924..d5088fe7b3 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -321,6 +321,23 @@ static std::string getLLVMTriple(const ToolChain &TC, const ArgList &Args) {
}
}
+// FIXME: Move to target hook.
+static bool isSignedCharDefault(const llvm::Triple &Triple) {
+ switch (Triple.getArch()) {
+ default:
+ return true;
+
+ case llvm::Triple::ppc:
+ case llvm::Triple::ppc64:
+ if (Triple.getOS() == llvm::Triple::Darwin)
+ return true;
+ return false;
+
+ case llvm::Triple::systemz:
+ return false;
+ }
+}
+
void Clang::AddARMTargetArgs(const ArgList &Args,
ArgStringList &CmdArgs) const {
const Driver &D = getToolChain().getHost().getDriver();
@@ -927,15 +944,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
if (!Args.hasFlag(options::OPT_frtti, options::OPT_fno_rtti))
CmdArgs.push_back("-frtti=0");
- // -fsigned-char/-funsigned-char default varies depending on platform; only
- // pass if specified.
- if (Arg *A = Args.getLastArg(options::OPT_fsigned_char,
- options::OPT_funsigned_char)) {
- if (A->getOption().matches(options::OPT_fsigned_char))
- CmdArgs.push_back("-fsigned-char");
- else
- CmdArgs.push_back("-fsigned-char=0");
- }
+ // -fsigned-char is default.
+ if (!Args.hasFlag(options::OPT_fsigned_char,
+ options::OPT_funsigned_char,
+ isSignedCharDefault(getToolChain().getTriple())))
+ CmdArgs.push_back("-fsigned-char=0");
// -fshort-wchar default varies depending on platform; only
// pass if specified.
diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c
index 100e27461c..6ba64e4896 100644
--- a/test/Preprocessor/init.c
+++ b/test/Preprocessor/init.c
@@ -493,7 +493,7 @@
// PIC16:#define ram __attribute__((address_space(0)))
// PIC16:#define rom __attribute__((address_space(1)))
//
-// RUN: clang-cc -E -dM -ffreestanding -triple=powerpc64-none-none < /dev/null | FileCheck -check-prefix PPC64 %s
+// RUN: clang-cc -E -dM -ffreestanding -triple=powerpc64-none-none -fsigned-char=0 < /dev/null | FileCheck -check-prefix PPC64 %s
//
// PPC64:#define _ARCH_PPC 1
// PPC64:#define _ARCH_PPC64 1
@@ -574,7 +574,7 @@
// PPC64:#define __ppc64__ 1
// PPC64:#define __ppc__ 1
//
-// RUN: clang-cc -E -dM -ffreestanding -triple=powerpc-none-none < /dev/null | FileCheck -check-prefix PPC %s
+// RUN: clang-cc -E -dM -ffreestanding -triple=powerpc-none-none -fsigned-char=0 < /dev/null | FileCheck -check-prefix PPC %s
//
// PPC:#define _ARCH_PPC 1
// PPC:#define _BIG_ENDIAN 1
@@ -651,7 +651,7 @@
// PPC:#define __WINT_TYPE__ int
// PPC:#define __ppc__ 1
//
-// RUN: clang-cc -E -dM -ffreestanding -triple=s390x-none-none < /dev/null | FileCheck -check-prefix S390X %s
+// RUN: clang-cc -E -dM -ffreestanding -triple=s390x-none-none -fsigned-char=0 < /dev/null | FileCheck -check-prefix S390X %s
//
// S390X:#define __CHAR_BIT__ 8
// S390X:#define __CHAR_UNSIGNED__ 1