diff options
-rw-r--r-- | tools/clang-cc/Warnings.cpp | 25 | ||||
-rw-r--r-- | tools/clang-cc/clang-cc.cpp | 17 | ||||
-rw-r--r-- | tools/clang-cc/clang-cc.h | 5 |
3 files changed, 29 insertions, 18 deletions
diff --git a/tools/clang-cc/Warnings.cpp b/tools/clang-cc/Warnings.cpp index c3a6b2132a..b3e21e1052 100644 --- a/tools/clang-cc/Warnings.cpp +++ b/tools/clang-cc/Warnings.cpp @@ -30,34 +30,27 @@ #include <algorithm> using namespace clang; -// This gets all -W options, including -Werror, -W[no-]system-headers, etc. The -// driver has stripped off -Wa,foo etc. The driver has also translated -W to -// -Wextra, so we don't need to worry about it. -static llvm::cl::list<std::string> -OptWarnings("W", llvm::cl::Prefix, llvm::cl::ValueOptional); - -static llvm::cl::opt<bool> OptPedantic("pedantic"); -static llvm::cl::opt<bool> OptPedanticErrors("pedantic-errors"); -static llvm::cl::opt<bool> OptNoWarnings("w"); - -bool clang::ProcessWarningOptions(Diagnostic &Diags) { +bool clang::ProcessWarningOptions(Diagnostic &Diags, + std::vector<std::string> &Warnings, + bool Pedantic, bool PedanticErrors, + bool NoWarnings) { Diags.setSuppressSystemWarnings(true); // Default to -Wno-system-headers - Diags.setIgnoreAllWarnings(OptNoWarnings); + Diags.setIgnoreAllWarnings(NoWarnings); // If -pedantic or -pedantic-errors was specified, then we want to map all // extension diagnostics onto WARNING or ERROR unless the user has futz'd // around with them explicitly. - if (OptPedanticErrors) + if (PedanticErrors) Diags.setExtensionHandlingBehavior(Diagnostic::Ext_Error); - else if (OptPedantic) + else if (Pedantic) Diags.setExtensionHandlingBehavior(Diagnostic::Ext_Warn); else Diags.setExtensionHandlingBehavior(Diagnostic::Ext_Ignore); // FIXME: -Wfatal-errors / -Wfatal-errors=foo - for (unsigned i = 0, e = OptWarnings.size(); i != e; ++i) { - const std::string &Opt = OptWarnings[i]; + for (unsigned i = 0, e = Warnings.size(); i != e; ++i) { + const std::string &Opt = Warnings[i]; const char *OptStart = &Opt[0]; const char *OptEnd = OptStart+Opt.size(); assert(*OptEnd == 0 && "Expect null termination for lower-bound search"); diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 4bf92577fd..81a819e38d 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -1497,6 +1497,20 @@ SilenceRewriteMacroWarning("Wno-rewrite-macros", llvm::cl::init(false), llvm::cl::desc("Silence ObjC rewriting warnings")); //===----------------------------------------------------------------------===// +// Warning Options +//===----------------------------------------------------------------------===// + +// This gets all -W options, including -Werror, -W[no-]system-headers, etc. The +// driver has stripped off -Wa,foo etc. The driver has also translated -W to +// -Wextra, so we don't need to worry about it. +static llvm::cl::list<std::string> +OptWarnings("W", llvm::cl::Prefix, llvm::cl::ValueOptional); + +static llvm::cl::opt<bool> OptPedantic("pedantic"); +static llvm::cl::opt<bool> OptPedanticErrors("pedantic-errors"); +static llvm::cl::opt<bool> OptNoWarnings("w"); + +//===----------------------------------------------------------------------===// // -dump-build-information Stuff //===----------------------------------------------------------------------===// @@ -2028,7 +2042,8 @@ int main(int argc, char **argv) { // Configure our handling of diagnostics. Diagnostic Diags(DiagClient.get()); - if (ProcessWarningOptions(Diags)) + if (ProcessWarningOptions(Diags, OptWarnings, OptPedantic, OptPedanticErrors, + OptNoWarnings)) return 1; // -I- is a deprecated GCC feature, scan for it and reject it. diff --git a/tools/clang-cc/clang-cc.h b/tools/clang-cc/clang-cc.h index bdd79cdc98..b08345c188 100644 --- a/tools/clang-cc/clang-cc.h +++ b/tools/clang-cc/clang-cc.h @@ -35,7 +35,10 @@ class LangOptions; /// ProcessWarningOptions - Initialize the diagnostic client and process the /// warning options specified on the command line. -bool ProcessWarningOptions(Diagnostic &Diags); +bool ProcessWarningOptions(Diagnostic &Diags, + std::vector<std::string> &Warnings, + bool Pedantic, bool PedanticErrors, + bool NoWarnings); /// DoPrintPreprocessedInput - Implement -E mode. void DoPrintPreprocessedInput(Preprocessor &PP, llvm::raw_ostream* OS); |