diff options
author | Paul Kirth <paulkirth@google.com> | 2022-03-18 00:04:22 +0000 |
---|---|---|
committer | Paul Kirth <paulkirth@google.com> | 2022-03-18 00:04:22 +0000 |
commit | 6cf560d69a222bff4af4e1d092437fd77f0f981c (patch) | |
tree | 1294c0be71860eb829e4f5ad9d5a3bcbbbcf6edd /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 10866a1df4a82cdc54187330c509a2d46235455d (diff) | |
download | llvm-6cf560d69a222bff4af4e1d092437fd77f0f981c.zip llvm-6cf560d69a222bff4af4e1d092437fd77f0f981c.tar.gz llvm-6cf560d69a222bff4af4e1d092437fd77f0f981c.tar.bz2 |
Revert "Revert "[misexpect] Re-implement MisExpect Diagnostics""
I mistakenly reverted my commit, so I'm relanding it.
This reverts commit 10866a1df4a82cdc54187330c509a2d46235455d.
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index cac443d..7577029 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -107,6 +107,20 @@ using namespace options; using namespace llvm::opt; //===----------------------------------------------------------------------===// +// Helpers. +//===----------------------------------------------------------------------===// + +// Parse misexpect tolerance argument value. +// Valid option values are integers in the range [0, 100) +inline Expected<Optional<uint64_t>> parseToleranceOption(StringRef Arg) { + int64_t Val; + if (Arg.getAsInteger(10, Val)) + return llvm::createStringError(llvm::inconvertibleErrorCode(), + "Not an integer: %s", Arg.data()); + return Val; +} + +//===----------------------------------------------------------------------===// // Initialization. //===----------------------------------------------------------------------===// @@ -1952,6 +1966,21 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, } } + if (auto *arg = + Args.getLastArg(options::OPT_fdiagnostics_misexpect_tolerance_EQ)) { + auto ResultOrErr = parseToleranceOption(arg->getValue()); + + if (!ResultOrErr) { + Diags.Report(diag::err_drv_invalid_diagnotics_misexpect_tolerance) + << "-fdiagnostics-misexpect-tolerance="; + } else { + Opts.DiagnosticsMisExpectTolerance = *ResultOrErr; + if (!UsingProfile) + Diags.Report(diag::warn_drv_diagnostics_misexpect_requires_pgo) + << "-fdiagnostics-misexpect-tolerance="; + } + } + // If the user requested to use a sample profile for PGO, then the // backend will need to track source location information so the profile // can be incorporated into the IR. @@ -4497,6 +4526,13 @@ bool CompilerInvocation::CreateFromArgsImpl( if (Res.getFrontendOpts().ProgramAction == frontend::RewriteObjC) LangOpts.ObjCExceptions = 1; + for (auto Warning : Res.getDiagnosticOpts().Warnings) { + if (Warning == "misexpect" && + !Diags.isIgnored(diag::warn_profile_data_misexpect, SourceLocation())) { + Res.getCodeGenOpts().MisExpect = true; + } + } + if (LangOpts.CUDA) { // During CUDA device-side compilation, the aux triple is the // triple used for host compilation. |