replace useNeXTRuntimeAsDefault with a generic hook that allows targets

to specify their default language options.

llvm-svn: 60561
This commit is contained in:
Chris Lattner 2008-12-04 22:54:33 +00:00
parent 123a35a81c
commit c7c6dd4d97
3 changed files with 36 additions and 11 deletions

View File

@ -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);

View File

@ -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 {

View File

@ -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.