summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Frontend/InitPreprocessor.h12
-rw-r--r--clang/lib/Frontend/InitPreprocessor.cpp5
-rw-r--r--clang/tools/clang-cc/clang-cc.cpp12
3 files changed, 18 insertions, 11 deletions
diff --git a/clang/include/clang/Frontend/InitPreprocessor.h b/clang/include/clang/Frontend/InitPreprocessor.h
index b29ee2728a8..bf27b19aa3d 100644
--- a/clang/include/clang/Frontend/InitPreprocessor.h
+++ b/clang/include/clang/Frontend/InitPreprocessor.h
@@ -29,7 +29,16 @@ class PreprocessorInitOptions {
std::vector<std::pair<std::string, bool/*isPTH*/> > Includes;
std::vector<std::string> MacroIncludes;
+ unsigned UsePredefines : 1; /// Initialize the preprocessor with the compiler
+ /// and target specific predefines.
+
public:
+ PreprocessorInitOptions() : UsePredefines(true) {}
+
+ bool getUsePredefines() const { return UsePredefines; }
+ void setUsePredefines(bool Value) {
+ UsePredefines = Value;
+ }
void addMacroDef(const std::string &Name) {
Macros.push_back(std::make_pair(Name, false));
@@ -63,8 +72,7 @@ public:
/// environment ready to process a single file. This returns true on error.
///
bool InitializePreprocessor(Preprocessor &PP,
- const PreprocessorInitOptions& InitOptions,
- bool undef_macros);
+ const PreprocessorInitOptions& InitOptions);
} // end namespace clang
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index ec5c1061bb9..3a54d1dca78 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -443,8 +443,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
/// environment ready to process a single file. This returns true on error.
///
bool clang::InitializePreprocessor(Preprocessor &PP,
- const PreprocessorInitOptions &InitOpts,
- bool undef_macros) {
+ const PreprocessorInitOptions &InitOpts) {
std::vector<char> PredefineBuffer;
const char *LineDirective = "# 1 \"<built-in>\" 3\n";
@@ -452,7 +451,7 @@ bool clang::InitializePreprocessor(Preprocessor &PP,
LineDirective, LineDirective+strlen(LineDirective));
// Install things like __POWERPC__, __GNUC__, etc into the macro table.
- if (!undef_macros)
+ if (InitOpts.getUsePredefines())
InitializePredefinedMacros(PP.getTargetInfo(), PP.getLangOptions(),
PredefineBuffer);
diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp
index 671fc35d182..66aa19a5d31 100644
--- a/clang/tools/clang-cc/clang-cc.cpp
+++ b/clang/tools/clang-cc/clang-cc.cpp
@@ -933,12 +933,9 @@ static bool InitializeSourceManager(Preprocessor &PP,
// Preprocessor Initialization
//===----------------------------------------------------------------------===//
-// FIXME: Preprocessor builtins to support.
-// -A... - Play with #assertions
-// -undef - Undefine all predefined macros
-
static llvm::cl::opt<bool>
-undef_macros("undef", llvm::cl::value_desc("macro"), llvm::cl::desc("undef all system defines"));
+UndefMacros("undef", llvm::cl::value_desc("macro"),
+ llvm::cl::desc("undef all system defines"));
static llvm::cl::list<std::string>
D_macros("D", llvm::cl::value_desc("macro"), llvm::cl::Prefix,
@@ -1137,6 +1134,9 @@ void InitializeIncludePaths(const char *Argv0, HeaderSearch &Headers,
}
void InitializePreprocessorInitOptions(PreprocessorInitOptions &InitOpts) {
+ // Use predefines?
+ InitOpts.setUsePredefines(!UndefMacros);
+
// Add macros from the command line.
unsigned d = 0, D = D_macros.size();
unsigned u = 0, U = U_macros.size();
@@ -1251,7 +1251,7 @@ public:
PreprocessorInitOptions InitOpts;
InitializePreprocessorInitOptions(InitOpts);
- if (InitializePreprocessor(*PP, InitOpts, undef_macros))
+ if (InitializePreprocessor(*PP, InitOpts))
return 0;
return PP.take();
OpenPOWER on IntegriCloud