Skip to content

Commit

Permalink
[clang][driver] adds -print-diagnostics
Browse files Browse the repository at this point in the history
Prints a list of all the warnings that Clang offers.

Differential Revision: https://reviews.llvm.org/D126796
  • Loading branch information
cjdb committed Jun 8, 2022
1 parent ab34ab2 commit 288c1bf
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 1 deletion.
2 changes: 2 additions & 0 deletions clang/include/clang/Driver/Options.td
Original file line number Diff line number Diff line change
Expand Up @@ -4005,6 +4005,8 @@ def print_rocm_search_dirs : Flag<["-", "--"], "print-rocm-search-dirs">,
HelpText<"Print the paths used for finding ROCm installation">;
def print_runtime_dir : Flag<["-", "--"], "print-runtime-dir">,
HelpText<"Print the directory pathname containing clangs runtime libraries">;
def print_diagnostic_options : Flag<["-", "--"], "print-diagnostic-options">,
HelpText<"Print all of Clang's warning options">;
def private__bundle : Flag<["-"], "private_bundle">;
def pthreads : Flag<["-"], "pthreads">;
defm pthread : BoolOption<"", "pthread",
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Basic/DiagnosticIDs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ StringRef DiagnosticIDs::getWarningOptionForDiag(unsigned DiagID) {
}

std::vector<std::string> DiagnosticIDs::getDiagnosticFlags() {
std::vector<std::string> Res;
std::vector<std::string> Res{"-W", "-Wno-"};
for (size_t I = 1; DiagGroupNames[I] != '\0';) {
std::string Diag(DiagGroupNames + I + 1, DiagGroupNames[I]);
I += DiagGroupNames[I] + 1;
Expand Down
7 changes: 7 additions & 0 deletions clang/lib/Driver/Driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2010,6 +2010,13 @@ bool Driver::HandleImmediateArgs(const Compilation &C) {
return false;
}

if (C.getArgs().hasArg(options::OPT_print_diagnostic_options)) {
std::vector<std::string> Flags = DiagnosticIDs::getDiagnosticFlags();
for (std::size_t I = 0; I != Flags.size(); I += 2)
llvm::outs() << " " << Flags[I] << "\n " << Flags[I + 1] << "\n\n";
return false;
}

// FIXME: The following handlers should use a callback mechanism, we don't
// know what the client would like to do.
if (Arg *A = C.getArgs().getLastArg(options::OPT_print_file_name_EQ)) {
Expand Down
13 changes: 13 additions & 0 deletions clang/test/Driver/print-diagnostic-options.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Test that -print-diagnostic-options prints warning groups and disablers

// RUN: %clang -print-diagnostic-options | FileCheck %s

// CHECK: -W
// CHECK: -Wno-
// CHECK: -W#pragma-messages
// CHECK: -Wno-#pragma-messages
// CHECK: -W#warnings
// CHECK: -Wabi
// CHECK: -Wno-abi
// CHECK: -Wall
// CHECK: -Wno-all

0 comments on commit 288c1bf

Please sign in to comment.