aboutsummaryrefslogtreecommitdiff
path: root/flang/lib
diff options
context:
space:
mode:
authorAndre Kuhlenschmidt <andre.kuhlenschmidt@gmail.com>2025-06-18 11:21:35 -0700
committerGitHub <noreply@github.com>2025-06-18 11:21:35 -0700
commit17f5b8b52a3552de1143efb42af6a94d47d8c7fd (patch)
tree11cda53ab950e3c18a11698434b8cc43cd2d510b /flang/lib
parent3f3526f36d23eac8d099e8e887a924c94000bbfa (diff)
downloadllvm-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.cpp2
-rw-r--r--flang/lib/Support/Fortran-features.cpp23
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;
}