diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3996,6 +3996,8 @@ 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_diagnostics : Flag<["-", "--"], "print-diagnostics">, + HelpText<"Print all of Clang's diagnostics">; def private__bundle : Flag<["-"], "private_bundle">; def pthreads : Flag<["-"], "pthreads">; defm pthread : BoolOption<"", "pthread", diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -2006,6 +2006,16 @@ return false; } + if (C.getArgs().hasArg(options::OPT_print_diagnostics)) { + std::vector DiagnosticFlags = + DiagnosticIDs::getDiagnosticFlags(); + llvm::erase_if(DiagnosticFlags, + [](StringRef Flag) { return Flag.startswith("-Wno"); }); + for (StringRef Flag : DiagnosticFlags) + llvm::outs() << " " << Flag << '\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)) {