Move the warning options from Warnings.cpp to clang-cc.cpp.

llvm-svn: 72089
This commit is contained in:
Eli Friedman 2009-05-19 01:17:04 +00:00
parent 6359122668
commit 42279c0f07
3 changed files with 29 additions and 18 deletions

View File

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

View File

@ -1496,6 +1496,20 @@ static llvm::cl::opt<bool>
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.

View File

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