[flang-commits] [flang] 3b20a83 - [flang][Semantics] Add LangOptions to SemanticsContext (#110013)
via flang-commits
flang-commits at lists.llvm.org
Thu Sep 26 06:56:26 PDT 2024
Author: Krzysztof Parzyszek
Date: 2024-09-26T08:56:22-05:00
New Revision: 3b20a833cb4d701ff9d61aca2120d125b618950f
URL: https://github.com/llvm/llvm-project/commit/3b20a833cb4d701ff9d61aca2120d125b618950f
DIFF: https://github.com/llvm/llvm-project/commit/3b20a833cb4d701ff9d61aca2120d125b618950f.diff
LOG: [flang][Semantics] Add LangOptions to SemanticsContext (#110013)
The motivation for this is to make OpenMP settings visible in the
semantic checks (OpenMP version in particular).
Added:
Modified:
flang/include/flang/Semantics/semantics.h
flang/lib/Frontend/CompilerInvocation.cpp
flang/lib/Semantics/semantics.cpp
flang/tools/bbc/bbc.cpp
Removed:
################################################################################
diff --git a/flang/include/flang/Semantics/semantics.h b/flang/include/flang/Semantics/semantics.h
index e73f9d2e85d589..2a326074b3dc64 100644
--- a/flang/include/flang/Semantics/semantics.h
+++ b/flang/include/flang/Semantics/semantics.h
@@ -12,6 +12,7 @@
#include "scope.h"
#include "symbol.h"
#include "flang/Common/Fortran-features.h"
+#include "flang/Common/LangOptions.h"
#include "flang/Evaluate/common.h"
#include "flang/Evaluate/intrinsics.h"
#include "flang/Evaluate/target.h"
@@ -65,7 +66,8 @@ using ConstructStack = std::vector<ConstructNode>;
class SemanticsContext {
public:
SemanticsContext(const common::IntrinsicTypeDefaultKinds &,
- const common::LanguageFeatureControl &, parser::AllCookedSources &);
+ const common::LanguageFeatureControl &, const common::LangOptions &,
+ parser::AllCookedSources &);
~SemanticsContext();
const common::IntrinsicTypeDefaultKinds &defaultKinds() const {
@@ -73,7 +75,8 @@ class SemanticsContext {
}
const common::LanguageFeatureControl &languageFeatures() const {
return languageFeatures_;
- };
+ }
+ const common::LangOptions &langOptions() const { return langOpts_; }
int GetDefaultKind(TypeCategory) const;
int doublePrecisionKind() const {
return defaultKinds_.doublePrecisionKind();
@@ -273,6 +276,7 @@ class SemanticsContext {
const common::IntrinsicTypeDefaultKinds &defaultKinds_;
const common::LanguageFeatureControl &languageFeatures_;
+ const common::LangOptions &langOpts_;
parser::AllCookedSources &allCookedSources_;
std::optional<parser::CharBlock> location_;
std::vector<std::string> searchDirectories_;
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 52ca9f61c56f74..05b03ba9ebdf30 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -1531,7 +1531,8 @@ CompilerInvocation::getSemanticsCtx(
auto &fortranOptions = getFortranOpts();
auto semanticsContext = std::make_unique<semantics::SemanticsContext>(
- getDefaultKinds(), fortranOptions.features, allCookedSources);
+ getDefaultKinds(), fortranOptions.features, getLangOpts(),
+ allCookedSources);
semanticsContext->set_moduleDirectory(getModuleDir())
.set_searchDirectories(fortranOptions.searchDirectories)
diff --git a/flang/lib/Semantics/semantics.cpp b/flang/lib/Semantics/semantics.cpp
index 8592d1e5d6217e..1f2980b07b3e0e 100644
--- a/flang/lib/Semantics/semantics.cpp
+++ b/flang/lib/Semantics/semantics.cpp
@@ -348,9 +348,10 @@ class CommonBlockMap {
SemanticsContext::SemanticsContext(
const common::IntrinsicTypeDefaultKinds &defaultKinds,
const common::LanguageFeatureControl &languageFeatures,
+ const common::LangOptions &langOpts,
parser::AllCookedSources &allCookedSources)
: defaultKinds_{defaultKinds}, languageFeatures_{languageFeatures},
- allCookedSources_{allCookedSources},
+ langOpts_{langOpts}, allCookedSources_{allCookedSources},
intrinsics_{evaluate::IntrinsicProcTable::Configure(defaultKinds_)},
globalScope_{*this}, intrinsicModulesScope_{globalScope_.MakeScope(
Scope::Kind::IntrinsicModules, nullptr)},
diff --git a/flang/tools/bbc/bbc.cpp b/flang/tools/bbc/bbc.cpp
index ac3de35319106f..0a008d577cc255 100644
--- a/flang/tools/bbc/bbc.cpp
+++ b/flang/tools/bbc/bbc.cpp
@@ -15,6 +15,7 @@
//===----------------------------------------------------------------------===//
#include "flang/Common/Fortran-features.h"
+#include "flang/Common/LangOptions.h"
#include "flang/Common/OpenMP-features.h"
#include "flang/Common/Version.h"
#include "flang/Common/default-kinds.h"
@@ -508,6 +509,21 @@ int main(int argc, char **argv) {
options.predefinitions.emplace_back(
"__flang_patchlevel__"s, std::string{FLANG_VERSION_PATCHLEVEL_STRING});
+ Fortran::common::LangOptions langOpts;
+ langOpts.NoGPULib = setNoGPULib;
+ langOpts.OpenMPVersion = setOpenMPVersion;
+ langOpts.OpenMPIsTargetDevice = enableOpenMPDevice;
+ langOpts.OpenMPIsGPU = enableOpenMPGPU;
+ langOpts.OpenMPForceUSM = enableOpenMPForceUSM;
+ langOpts.OpenMPTargetDebug = setOpenMPTargetDebug;
+ langOpts.OpenMPThreadSubscription = setOpenMPThreadSubscription;
+ langOpts.OpenMPTeamSubscription = setOpenMPTeamSubscription;
+ langOpts.OpenMPNoThreadState = setOpenMPNoThreadState;
+ langOpts.OpenMPNoNestedParallelism = setOpenMPNoNestedParallelism;
+ std::transform(targetTriplesOpenMP.begin(), targetTriplesOpenMP.end(),
+ std::back_inserter(langOpts.OMPTargetTriples),
+ [](const std::string &str) { return llvm::Triple(str); });
+
// enable parsing of OpenMP
if (enableOpenMP) {
options.features.Enable(Fortran::common::LanguageFeature::OpenMP);
@@ -539,7 +555,7 @@ int main(int argc, char **argv) {
Fortran::parser::AllSources allSources;
Fortran::parser::AllCookedSources allCookedSources(allSources);
Fortran::semantics::SemanticsContext semanticsContext{
- defaultKinds, options.features, allCookedSources};
+ defaultKinds, options.features, langOpts, allCookedSources};
semanticsContext.set_moduleDirectory(moduleDir)
.set_moduleFileSuffix(moduleSuffix)
.set_searchDirectories(includeDirs)
More information about the flang-commits
mailing list