diff options
author | Andre Kuhlenschmidt <andre.kuhlenschmidt@gmail.com> | 2025-06-18 11:21:35 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-18 11:21:35 -0700 |
commit | 17f5b8b52a3552de1143efb42af6a94d47d8c7fd (patch) | |
tree | 11cda53ab950e3c18a11698434b8cc43cd2d510b /flang/lib | |
parent | 3f3526f36d23eac8d099e8e887a924c94000bbfa (diff) | |
download | llvm-17f5b8b52a3552de1143efb42af6a94d47d8c7fd.zip llvm-17f5b8b52a3552de1143efb42af6a94d47d8c7fd.tar.gz llvm-17f5b8b52a3552de1143efb42af6a94d47d8c7fd.tar.bz2 |
[flang][driver] add ability to look up feature flags without setting them (#144559)
This just adds some convenience methods to feature control and rewrites
old code in terms of those methods. Also cleans up some names that I
just realize were overloads of another method.
Diffstat (limited to 'flang/lib')
-rw-r--r-- | flang/lib/Frontend/CompilerInvocation.cpp | 2 | ||||
-rw-r--r-- | flang/lib/Support/Fortran-features.cpp | 23 |
2 files changed, 13 insertions, 12 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp index 147849b..2603a3f 100644 --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -1011,7 +1011,7 @@ static bool parseDiagArgs(CompilerInvocation &res, llvm::opt::ArgList &args, if (wArg == "error") { res.setWarnAsErr(true); // -W(no-)<feature> - } else if (!features.ApplyCliOption(wArg)) { + } else if (!features.EnableWarning(wArg)) { const unsigned diagID = diags.getCustomDiagID( clang::DiagnosticsEngine::Error, "Unknown diagnostic option: -W%0"); diags.Report(diagID) << wArg; diff --git a/flang/lib/Support/Fortran-features.cpp b/flang/lib/Support/Fortran-features.cpp index 08ded17..17b5f83 100644 --- a/flang/lib/Support/Fortran-features.cpp +++ b/flang/lib/Support/Fortran-features.cpp @@ -151,22 +151,23 @@ LanguageFeatureControl::LanguageFeatureControl() { warnLanguage_.set(LanguageFeature::NullActualForAllocatable); } -// Take a string from the Cli and apply it to the LanguageFeatureControl. -bool LanguageFeatureControl::ApplyCliOption(std::string input) { +std::optional<LanguageControlFlag> LanguageFeatureControl::FindWarning( + std::string_view input) { bool negated{false}; if (input.size() > 3 && input.substr(0, 3) == "no-") { negated = true; input = input.substr(3); } - if (auto it{cliOptions_.find(input)}; it != cliOptions_.end()) { - if (std::holds_alternative<LanguageFeature>(it->second)) { - EnableWarning(std::get<LanguageFeature>(it->second), !negated); - return true; - } - if (std::holds_alternative<UsageWarning>(it->second)) { - EnableWarning(std::get<UsageWarning>(it->second), !negated); - return true; - } + if (auto it{cliOptions_.find(std::string{input})}; it != cliOptions_.end()) { + return std::make_pair(it->second, !negated); + } + return std::nullopt; +} + +bool LanguageFeatureControl::EnableWarning(std::string_view input) { + if (auto warningAndEnabled{FindWarning(input)}) { + EnableWarning(warningAndEnabled->first, warningAndEnabled->second); + return true; } return false; } |