diff options
-rw-r--r-- | Driver/clang.cpp | 12 | ||||
-rw-r--r-- | include/clang/Basic/TargetInfo.h | 6 | ||||
-rw-r--r-- | lib/Basic/Targets.cpp | 29 |
3 files changed, 36 insertions, 11 deletions
diff --git a/Driver/clang.cpp b/Driver/clang.cpp index 2870c3dec0..bb838ed846 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -497,6 +497,8 @@ Ansi("ansi", llvm::cl::desc("Equivalent to specifying -std=c89.")); // -fpascal-strings static void InitializeLanguageStandard(LangOptions &Options, LangKind LK, TargetInfo *Target) { + // Allow the target to set the default the langauge options as it sees fit. + Target->getDefaultLangOptions(Options); if (Ansi) // "The -ansi option is equivalent to -std=c89." LangStd = lang_c89; @@ -574,13 +576,11 @@ static void InitializeLanguageStandard(LangOptions &Options, LangKind LK, Options.LaxVectorConversions = LaxVectorConversions; Options.Exceptions = Exceptions; - if (NeXTRuntime) { + // Override the default runtime if the user requested it. + if (NeXTRuntime) Options.NeXTRuntime = 1; - } else if (GNURuntime) { + else if (GNURuntime) Options.NeXTRuntime = 0; - } else { - Options.NeXTRuntime = Target->useNeXTRuntimeAsDefault(); - } } static llvm::cl::opt<bool> @@ -1524,8 +1524,8 @@ int main(int argc, char **argv) { InitializeBaseLanguage(); LangKind LK = GetLanguage(InFile); bool PCH = InitializeLangOptions(LangInfo, LK); - InitializeLanguageStandard(LangInfo, LK, Target.get()); InitializeGCMode(LangInfo); + InitializeLanguageStandard(LangInfo, LK, Target.get()); // Process the -I options and set them in the HeaderInfo. HeaderSearch HeaderInfo(FileMgr); diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index 32c87434d9..a9a71367bc 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -24,6 +24,7 @@ namespace clang { class Diagnostic; class SourceManager; +class LangOptions; namespace Builtin { struct Info; } @@ -228,7 +229,10 @@ public: virtual bool useGlobalsForAutomaticVariables() const { return false; } - virtual bool useNeXTRuntimeAsDefault() const { return false; } + /// getDefaultLangOptions - Allow the target to specify default settings for + /// various language options. These may be overridden by command line + /// options. + virtual void getDefaultLangOptions(LangOptions &Opts) {} protected: virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 71321f19cc..6f563a55c3 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -15,6 +15,7 @@ #include "clang/AST/Builtins.h" #include "clang/AST/TargetBuiltins.h" #include "clang/Basic/TargetInfo.h" +#include "clang/Basic/LangOptions.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/APFloat.h" using namespace clang; @@ -366,7 +367,12 @@ public: getDarwinDefines(Defines, getTargetTriple()); } - virtual bool useNeXTRuntimeAsDefault() const { return true; } + /// getDefaultLangOptions - Allow the target to specify default settings for + /// various language options. These may be overridden by command line + /// options. + virtual void getDefaultLangOptions(LangOptions &Opts) { + Opts.NeXTRuntime = true; + } }; } // end anonymous namespace. @@ -379,7 +385,12 @@ public: getDarwinDefines(Defines, getTargetTriple()); } - virtual bool useNeXTRuntimeAsDefault() const { return true; } + /// getDefaultLangOptions - Allow the target to specify default settings for + /// various language options. These may be overridden by command line + /// options. + virtual void getDefaultLangOptions(LangOptions &Opts) { + Opts.NeXTRuntime = true; + } }; } // end anonymous namespace. @@ -526,7 +537,12 @@ public: X86_32TargetInfo::getTargetDefines(Defines); getDarwinDefines(Defines, getTargetTriple()); } - virtual bool useNeXTRuntimeAsDefault() const { return true; } + /// getDefaultLangOptions - Allow the target to specify default settings for + /// various language options. These may be overridden by command line + /// options. + virtual void getDefaultLangOptions(LangOptions &Opts) { + Opts.NeXTRuntime = true; + } }; } // end anonymous namespace @@ -670,7 +686,12 @@ public: getDarwinDefines(Defines, getTargetTriple()); } - virtual bool useNeXTRuntimeAsDefault() const { return true; } + /// getDefaultLangOptions - Allow the target to specify default settings for + /// various language options. These may be overridden by command line + /// options. + virtual void getDefaultLangOptions(LangOptions &Opts) { + Opts.NeXTRuntime = true; + } }; } // end anonymous namespace. |